* apps/bot: add feature add contact * apps/bot: check role 'master' before add contact * apps/bot: rename createCustomer -> createUser * remove ';' * app/bot: add contact define name & phone * apps/bot: check user already exists w/o telegramId (invited) * Чтобы добавить контакт, сначала поделитесь своим номером телефона. * apps/bot: create or update functions * apps/bot: remove api.ts -> move getCustomer to packages/graphql/api * packages/graphql: add api/customer tests * tests for createOrUpdateClient * fix(apps/web): user is undefined * fix(apps/web): actions getCustomer * feat(apps/web): update user photo on app launch * rename page 'masters' -> 'contacts' * feat(apps/web): add basic /contacts page * fix app layout * refactor customer queries * add action getProfile * get customer contacts * use zustand for contacts * add loading spinner * rename filteredContacts -> contacts * replace zustand with @tanstack/react-query * profile: use react-query * refactor updateRole function * move updateRole closer to profile-card * beautify actions * add page 'profile/[telegramId]' * profile: add button "message to telegram" * profile: add call feature * app/bot: normalize phone before register * do not open keyboard on page load * contacts: loading spinner * telegram login: customer.active=true * update name on telegram first login
31 lines
901 B
TypeScript
31 lines
901 B
TypeScript
import { AuthProvider } from '@/providers/auth';
|
|
import { QueryProvider } from '@/providers/query';
|
|
import { ThemeProvider } from '@/providers/theme-provider';
|
|
import { I18nProvider } from '@/utils/i18n/provider';
|
|
import '@repo/ui/globals.css';
|
|
import { type Metadata } from 'next';
|
|
import { getLocale } from 'next-intl/server';
|
|
import { type PropsWithChildren } from 'react';
|
|
|
|
export const metadata: Metadata = {
|
|
title: 'Запишись.онлайн',
|
|
};
|
|
|
|
export default async function RootLayout({ children }: Readonly<PropsWithChildren>) {
|
|
const locale = await getLocale();
|
|
|
|
return (
|
|
<html lang={locale}>
|
|
<body className="bg-secondary">
|
|
<I18nProvider>
|
|
<ThemeProvider>
|
|
<AuthProvider>
|
|
<QueryProvider>{children}</QueryProvider>
|
|
</AuthProvider>
|
|
</ThemeProvider>
|
|
</I18nProvider>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|