import { useQuery } from '@tanstack/react-query'; import { Center, Icon, Spinner } from '@barev/ui'; import { I18nProvider, match, navigate, pickLocale, telegramLanguage, useI18n, useLocation, useTelegramBack, useTRPC } from '@barev/web'; import { useEffect, type ReactNode } from 'react'; import { Company } from './screens/Company.tsx'; import { History } from './screens/History.tsx'; import { Job } from './screens/Job.tsx'; import { Partner } from './screens/Partner.tsx'; import { Today } from './screens/Today.tsx'; const ROOTS = ['/', '/history', '/company', '/partner']; export function App({ hasInitData }: { hasInitData: boolean }) { const trpc = useTRPC(); const me = useQuery({ ...trpc.pro.me.queryOptions(), enabled: hasInitData }); const locale = pickLocale(me.data?.locale, telegramLanguage(), navigator.language); const status = me.error?.data?.httpStatus; return ( {!hasInitData || status === 401 ? ( ) : status === 403 ? ( ) : me.isPending ? (
) : me.error ? ( ) : ( )}
); } function Routes({ isProvider, companies, partners }: { isProvider: boolean; companies: { id: string; name: string }[]; partners: { id: string; name: string; role: 'OWNER' | 'STAFF' }[] }) { const { path } = useLocation(); useTelegramBack(path, ROOTS); // не исполнитель — сразу на экран компании или кабинет партнёра useEffect(() => { if (!isProvider && path === '/') navigate(companies.length ? '/company' : '/partner', { replace: true }); }, [isProvider, path, companies.length]); let screen: ReactNode; let m: Record | null; if (path === '/' && isProvider) screen = ; else if ((m = match('/orders/:id', path)) && isProvider) screen = ; else if (path === '/history' && isProvider) screen = ; else if (path === '/company' && companies.length) screen = ; else if (path === '/partner' && partners.length) screen = ; else screen = isProvider ? : companies.length ? : ; // вкладки: Сегодня и История у исполнителя, Компания у диспетчера, Партнёр у собственника и сотрудников партнёра const tabs = (isProvider ? 2 : 0) + (companies.length ? 1 : 0) + (partners.length ? 1 : 0); const showNav = ROOTS.includes(path) && tabs > 1; return ( <> {screen} {showNav &&