diff --git a/apps/web/components/orders/orders-list/date-select.tsx b/apps/web/components/orders/orders-list/date-select.tsx index 39abf0a..dbfa7c9 100644 --- a/apps/web/components/orders/orders-list/date-select.tsx +++ b/apps/web/components/orders/orders-list/date-select.tsx @@ -3,7 +3,7 @@ import { useCustomerQuery, useIsMaster } from '@/hooks/api/customers'; import { useOrdersQuery } from '@/hooks/api/orders'; import { useDateTimeStore } from '@/stores/datetime'; -import { HorizontalCalendar } from '@repo/ui/components/ui/horizontal-calendar'; +import { Calendar } from '@repo/ui/components/ui/calendar'; import dayjs from 'dayjs'; import { sift } from 'radashi'; import { useMemo, useState } from 'react'; @@ -15,26 +15,32 @@ export function DateSelect() { const [currentMonthDate, setCurrentMonthDate] = useState(new Date()); - const { data: { orders } = { orders: [] } } = useOrdersQuery({ - filters: { - client: { - documentId: { - eq: isMaster ? undefined : customer?.documentId, - }, - }, - slot: { - datetime_start: { - gte: dayjs(currentMonthDate).startOf('month').toISOString(), - lte: dayjs(currentMonthDate).endOf('month').toISOString(), - }, - master: { + const clientId = isMaster ? undefined : customer?.documentId; + const masterId = isMaster ? customer?.documentId : undefined; + + const { data: { orders } = { orders: [] } } = useOrdersQuery( + { + filters: { + client: { documentId: { - eq: isMaster ? customer?.documentId : undefined, + eq: clientId, + }, + }, + slot: { + datetime_start: { + gte: dayjs(currentMonthDate).startOf('month').toISOString(), + lte: dayjs(currentMonthDate).endOf('month').toISOString(), + }, + master: { + documentId: { + eq: masterId, + }, }, }, }, }, - }); + Boolean(clientId) || Boolean(masterId), + ); const daysWithOrders = useMemo(() => { return sift( @@ -50,11 +56,19 @@ export function DateSelect() { const selectedDate = useDateTimeStore((store) => store.date); return ( - setCurrentMonthDate(date)} - selectedDate={selectedDate} + { + return !daysWithOrders?.some((day) => dayjs(day).isSame(date, 'day')); + }} + mode="single" + onMonthChange={(month) => { + if (month) setCurrentMonthDate(month); + }} + onSelect={(date) => { + if (date) setSelectedDate(date); + }} + selected={selectedDate} /> ); } diff --git a/apps/web/components/orders/orders-list/index.tsx b/apps/web/components/orders/orders-list/index.tsx index 3838966..d53916a 100644 --- a/apps/web/components/orders/orders-list/index.tsx +++ b/apps/web/components/orders/orders-list/index.tsx @@ -18,10 +18,12 @@ export function ClientsOrdersList() { { filters: { slot: { - datetime_start: { - gte: startOfDay, - lt: endOfDay, - }, + datetime_start: selectedDate + ? { + gte: startOfDay, + lt: endOfDay, + } + : undefined, master: { documentId: { eq: isMaster ? customer?.documentId : undefined, @@ -29,8 +31,11 @@ export function ClientsOrdersList() { }, }, }, + pagination: { + limit: selectedDate ? undefined : 10, + }, }, - Boolean(customer?.documentId) && Boolean(selectedDate) && isMaster, + Boolean(customer?.documentId) && isMaster, ); if (!orders?.length || isLoading || !isMaster) return null; @@ -38,7 +43,7 @@ export function ClientsOrdersList() { return (

Записи клиентов

- {orders?.map((order) => order && )} + {orders?.map((order) => order && )}
); } @@ -58,14 +63,19 @@ export function OrdersList() { }, }, slot: { - datetime_start: { - gte: startOfDay, - lt: endOfDay, - }, + datetime_start: selectedDate + ? { + gte: startOfDay, + lt: endOfDay, + } + : undefined, }, }, + pagination: { + limit: selectedDate ? undefined : 10, + }, }, - Boolean(customer?.documentId) && Boolean(selectedDate), + Boolean(customer?.documentId), ); if (!orders?.length || isLoading) return null; @@ -74,7 +84,8 @@ export function OrdersList() {

Ваши записи

{orders?.map( - (order) => order && , + (order) => + order && , )}
); diff --git a/apps/web/components/schedule/day-slots-list/day-slot-add-form.tsx b/apps/web/components/schedule/day-slots-list/day-slot-add-form.tsx index d9c9a3e..6d42aa3 100644 --- a/apps/web/components/schedule/day-slots-list/day-slot-add-form.tsx +++ b/apps/web/components/schedule/day-slots-list/day-slot-add-form.tsx @@ -22,7 +22,7 @@ export const DaySlotAddForm = withContext(ScheduleStoreProvider)(function () { const handleSubmit = (event: FormEvent) => { event.preventDefault(); - if (startTime && endTime) { + if (selectedDate && startTime && endTime) { const datetimeStart = combineDateAndTimeToUTC(selectedDate, startTime); const datetimeEnd = combineDateAndTimeToUTC(selectedDate, endTime); addSlot({ diff --git a/apps/web/stores/lib/slices/datetime-slice.ts b/apps/web/stores/lib/slices/datetime-slice.ts index 05f50c2..294b2f3 100644 --- a/apps/web/stores/lib/slices/datetime-slice.ts +++ b/apps/web/stores/lib/slices/datetime-slice.ts @@ -1,14 +1,14 @@ import { type StateCreator } from 'zustand'; export type DateTimeSlice = { - date: Date; + date: Date | undefined; setDate: (date: Date) => void; setTime: (time: null | string) => void; time: null | string; }; export const createDateTimeSlice: StateCreator = (set) => ({ - date: new Date(), + date: undefined, setDate: (date) => set({ date }), setTime: (time) => set({ time }), time: null,