diff --git a/apps/web/components/orders/components/contacts-grid/components/contacts-grid-base.tsx b/apps/web/components/orders/components/contacts-grid.tsx similarity index 65% rename from apps/web/components/orders/components/contacts-grid/components/contacts-grid-base.tsx rename to apps/web/components/orders/components/contacts-grid.tsx index 70a1309..1fd4838 100644 --- a/apps/web/components/orders/components/contacts-grid/components/contacts-grid-base.tsx +++ b/apps/web/components/orders/components/contacts-grid.tsx @@ -1,11 +1,19 @@ +'use client'; + +import { LoadingSpinner } from '@/components/common/spinner'; import { CardSectionHeader } from '@/components/ui'; +import { ContactsFilterProvider } from '@/context/contacts-filter'; +import { useCustomerContacts } from '@/hooks/api/contacts'; // eslint-disable-next-line import/extensions import AvatarPlaceholder from '@/public/avatar/avatar_placeholder.png'; +import { useOrderStore } from '@/stores/order'; +import { withContext } from '@/utils/context'; import { type CustomerFieldsFragment } from '@repo/graphql/types'; import { Card } from '@repo/ui/components/ui/card'; import { Label } from '@repo/ui/components/ui/label'; import { cn } from '@repo/ui/lib/utils'; import Image from 'next/image'; +import { useEffect } from 'react'; type ContactsGridProps = { readonly contacts: CustomerFieldsFragment[]; @@ -77,3 +85,45 @@ export function ContactsGridBase({ contacts, onSelect, selected, title }: Contac ); } + +export const MastersGrid = withContext(ContactsFilterProvider)(function () { + const { contacts, isLoading, setFilter } = useCustomerContacts(); + const masterId = useOrderStore((store) => store.masterId); + const setMasterId = useOrderStore((store) => store.setMasterId); + + useEffect(() => { + setFilter('masters'); + }, [setFilter]); + + if (isLoading) return ; + + return ( + setMasterId(contactId)} + selected={masterId} + title="Мастера" + /> + ); +}); + +export const ClientsGrid = withContext(ContactsFilterProvider)(function () { + const { contacts, isLoading, setFilter } = useCustomerContacts(); + const clientId = useOrderStore((store) => store.clientId); + const setClientId = useOrderStore((store) => store.setClientId); + + useEffect(() => { + setFilter('clients'); + }, [setFilter]); + + if (isLoading) return ; + + return ( + setClientId(contactId)} + selected={clientId} + title="Клиенты" + /> + ); +}); diff --git a/apps/web/components/orders/components/contacts-grid/components/index.ts b/apps/web/components/orders/components/contacts-grid/components/index.ts deleted file mode 100644 index cc11b25..0000000 --- a/apps/web/components/orders/components/contacts-grid/components/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './contacts-grid-base'; diff --git a/apps/web/components/orders/components/contacts-grid/index.tsx b/apps/web/components/orders/components/contacts-grid/index.tsx deleted file mode 100644 index 9b2a13b..0000000 --- a/apps/web/components/orders/components/contacts-grid/index.tsx +++ /dev/null @@ -1,51 +0,0 @@ -'use client'; - -import { ContactsGridBase } from './components'; -import { LoadingSpinner } from '@/components/common/spinner'; -import { ContactsFilterProvider } from '@/context/contacts-filter'; -import { useCustomerContacts } from '@/hooks/api/contacts'; -import { useOrderStore } from '@/stores/order'; -import { withContext } from '@/utils/context'; -import { useEffect } from 'react'; - -export const MastersGrid = withContext(ContactsFilterProvider)(function () { - const { contacts, isLoading, setFilter } = useCustomerContacts(); - const masterId = useOrderStore((store) => store.masterId); - const setMasterId = useOrderStore((store) => store.setMasterId); - - useEffect(() => { - setFilter('masters'); - }, [setFilter]); - - if (isLoading) return ; - - return ( - setMasterId(contactId)} - selected={masterId} - title="Мастера" - /> - ); -}); - -export const ClientsGrid = withContext(ContactsFilterProvider)(function () { - const { contacts, isLoading, setFilter } = useCustomerContacts(); - const clientId = useOrderStore((store) => store.clientId); - const setClientId = useOrderStore((store) => store.setClientId); - - useEffect(() => { - setFilter('clients'); - }, [setFilter]); - - if (isLoading) return ; - - return ( - setClientId(contactId)} - selected={clientId} - title="Клиенты" - /> - ); -}); diff --git a/apps/web/components/orders/components/datetime-select/components/time-select.tsx b/apps/web/components/orders/components/datetime-select.tsx similarity index 72% rename from apps/web/components/orders/components/datetime-select/components/time-select.tsx rename to apps/web/components/orders/components/datetime-select.tsx index fe6a39b..8e2befb 100644 --- a/apps/web/components/orders/components/datetime-select/components/time-select.tsx +++ b/apps/web/components/orders/components/datetime-select.tsx @@ -3,6 +3,40 @@ import { useAvailableTimeSlotsQuery } from '@/hooks/api/slots'; import { useOrderStore } from '@/stores/order'; import { Button } from '@repo/ui/components/ui/button'; +import { Calendar } from '@repo/ui/components/ui/calendar'; +import dayjs from 'dayjs'; + +export function DateSelect() { + const selectedDate = useOrderStore((store) => store.date); + const setDate = useOrderStore((store) => store.setDate); + const setTime = useOrderStore((store) => store.setTime); + const setSlot = useOrderStore((store) => store.setSlotId); + + return ( + { + return dayjs().isAfter(dayjs(date), 'day'); + }} + mode="single" + onSelect={(date) => { + if (date) setDate(date); + setTime(null); + setSlot(null); + }} + selected={selectedDate} + /> + ); +} + +export function DateTimeSelect() { + return ( +
+ + +
+ ); +} export function TimeSelect() { const masterId = useOrderStore((store) => store.masterId); diff --git a/apps/web/components/orders/components/datetime-select/components/date-select.tsx b/apps/web/components/orders/components/datetime-select/components/date-select.tsx deleted file mode 100644 index eff3db7..0000000 --- a/apps/web/components/orders/components/datetime-select/components/date-select.tsx +++ /dev/null @@ -1,28 +0,0 @@ -'use client'; - -import { useOrderStore } from '@/stores/order'; -import { Calendar } from '@repo/ui/components/ui/calendar'; -import dayjs from 'dayjs'; - -export function DateSelect() { - const selectedDate = useOrderStore((store) => store.date); - const setDate = useOrderStore((store) => store.setDate); - const setTime = useOrderStore((store) => store.setTime); - const setSlot = useOrderStore((store) => store.setSlotId); - - return ( - { - return dayjs().isAfter(dayjs(date), 'day'); - }} - mode="single" - onSelect={(date) => { - if (date) setDate(date); - setTime(null); - setSlot(null); - }} - selected={selectedDate} - /> - ); -} diff --git a/apps/web/components/orders/components/datetime-select/index.tsx b/apps/web/components/orders/components/datetime-select/index.tsx deleted file mode 100644 index b14110a..0000000 --- a/apps/web/components/orders/components/datetime-select/index.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { DateSelect } from './components/date-select'; -import { TimeSelect } from './components/time-select'; - -export function DateTimeSelect() { - return ( -
- - -
- ); -} diff --git a/apps/web/components/orders/components/index.ts b/apps/web/components/orders/components/index.ts index 6767da0..fb40a54 100644 --- a/apps/web/components/orders/components/index.ts +++ b/apps/web/components/orders/components/index.ts @@ -5,3 +5,4 @@ export * from './next-button'; export * from './order-card'; export * from './result'; export * from './service-select'; +export * from './submit-button';