import * as React from 'react'; import styles from './DashboardScreen.module.scss'; import { ApprovalRouteApi } from '../../services/api'; import { RequestTypeListSeries } from '../../models'; import { ScreenKey } from '../app/types'; import { texts } from '../../texts'; import { useRequestTypes } from '../../hooks/useRequestTypes'; import { useRequestTypeListsAll } from '../../hooks/useRequestTypeListsAll'; import { useTemplateRoutes } from '../../hooks/useTemplateRoutes'; import { AsyncList } from '../../hooks/useAsyncList'; import { CardGrid, NavCard, StatCard, StatRow } from '../ui'; export interface IDashboardScreenProps { api: ApprovalRouteApi; onNavigate: (key: ScreenKey) => void; } // Пока список грузится или запрос упал — показываем прочерк, а не «0», // чтобы не соврать пользователю про реальное количество записей. function statValue(list: AsyncList): React.ReactNode { if (list.isLoading || list.error) return texts.common.empty; return list.items.length; } // Партиций много на серию (архив + текущая) — считаем суммарно по всем типам // заявок, а не количество самих серий (это и так есть в requestTypesStat). function partitionsCount(list: AsyncList): React.ReactNode { if (list.isLoading || list.error) return texts.common.empty; return list.items.reduce((sum, series) => sum + series.partitions.length, 0); } export const DashboardScreen: React.FC = ({ api, onNavigate }) => { const requestTypes = useRequestTypes(api); const routes = useTemplateRoutes(api); const listPartitions = useRequestTypeListsAll(api); return (
{texts.dashboard.sections}

onNavigate('requestTypes')} /> onNavigate('routes')} /> onNavigate('resolve')} /> onNavigate('manageRequests')} /> onNavigate('manageByUser')} />
); };