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 &&