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';