- Converted several async components to synchronous functions, including `Layout`, `AddOrdersPage`, `ProfilePage`, `SlotPage`, and `ServicePage`, enhancing rendering efficiency. - Removed unnecessary prefetching logic and hydration boundaries, simplifying component structure and improving maintainability. - Updated the `TelegramProvider` to return null during the initial mount instead of a loading message, streamlining the loading state handling. - Enhanced loading state management in order-related components by adding loading spinners and data not found alerts, improving user experience during data fetching.
37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
'use client';
|
||
import { DataNotFound } from '../shared/alert';
|
||
import { ContactRow } from '../shared/contact-row';
|
||
import { type OrderComponentProps } from './types';
|
||
import { useOrderQuery } from '@/hooks/api/orders';
|
||
import { LoadingSpinner } from '@repo/ui/components/ui/spinner';
|
||
|
||
export function OrderContacts({ documentId }: Readonly<OrderComponentProps>) {
|
||
const { data: { order } = {}, isLoading } = useOrderQuery({ documentId });
|
||
|
||
const noContacts = !order?.slot?.master && !order?.client;
|
||
|
||
return (
|
||
<div className="flex flex-col space-y-2">
|
||
<h1 className="font-bold">Участники</h1>
|
||
<div className="space-y-2">
|
||
{isLoading && <LoadingSpinner />}
|
||
{!isLoading && noContacts ? <DataNotFound title="Пользователи не найдены" /> : null}
|
||
{order?.slot?.master && (
|
||
<ContactRow
|
||
className="rounded-2xl bg-background p-2 px-4 dark:bg-primary/5"
|
||
description="Мастер"
|
||
{...order.slot?.master}
|
||
/>
|
||
)}
|
||
{order?.client && (
|
||
<ContactRow
|
||
className="rounded-2xl bg-background p-2 px-4 dark:bg-primary/5"
|
||
description="Клиент"
|
||
{...order.client}
|
||
/>
|
||
)}
|
||
</div>
|
||
</div>
|
||
);
|
||
}
|