From fc0a4bf2e7721fcbfd5264e09da40962f48df77c Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Tue, 18 Feb 2025 22:20:05 +0300 Subject: [PATCH] rename AddTimeRange -> EditableTimeRangeForm & refactor --- .../schedule/components/slot-time.tsx | 96 +++++++++---------- .../schedule/components/time-range.tsx | 16 +++- .../components/schedule/day-slot-add-form.tsx | 9 +- 3 files changed, 62 insertions(+), 59 deletions(-) diff --git a/apps/web/components/schedule/components/slot-time.tsx b/apps/web/components/schedule/components/slot-time.tsx index 03be576..d0b0c62 100644 --- a/apps/web/components/schedule/components/slot-time.tsx +++ b/apps/web/components/schedule/components/slot-time.tsx @@ -1,64 +1,28 @@ +/* eslint-disable react/jsx-no-bind */ 'use client'; import { ScheduleTimeContext } from '../context'; import { type SlotComponentProps } from '../types'; -import { AddTimeRange, ReadonlyTimeRange } from './time-range'; +import { EditableTimeRangeForm, ReadonlyTimeRange } from './time-range'; import { useSlotMutation, useSlotQuery } from '@/hooks/slots'; import { Button } from '@repo/ui/components/ui/button'; import { PencilLine } from 'lucide-react'; import { use, useEffect } from 'react'; export function SlotTime(props: Readonly) { - return ( -
-
- ); + const { editMode } = use(ScheduleTimeContext); + + return editMode ? : ; } -function EditSaveButton({ documentId }: Readonly) { - const { editMode, endTime, resetTime, setEditMode, startTime } = use(ScheduleTimeContext); - const { mutate: updateSlot } = useSlotMutation({ documentId }); +function SlotTimeEditForm({ documentId }: Readonly) { + const { editMode, endTime, resetTime, setEditMode, setEndTime, setStartTime, startTime } = + use(ScheduleTimeContext); + const { isPending: isMutationPending, mutate: updateSlot } = useSlotMutation({ documentId }); - const { data } = useSlotQuery({ documentId }); + const { data, isPending: isQueryPending } = useSlotQuery({ documentId }); const slot = data?.data?.slot; - if (editMode) { - function handleOnSave() { - updateSlot({ data: { time_end: endTime, time_start: startTime }, documentId }); - resetTime(); - setEditMode(false); - } - - return ( - - ); - } - - const hasOrders = Boolean(slot?.orders.length); - - return ( - - ); -} - -function Time(props: Readonly) { - const { editMode, setEndTime, setStartTime } = use(ScheduleTimeContext); - - const { data } = useSlotQuery(props); - const slot = data?.data?.slot; - - const { isPending } = useSlotMutation(props); + const isPending = isMutationPending || isQueryPending; useEffect(() => { if (editMode) { @@ -67,9 +31,43 @@ function Time(props: Readonly) { } }, [editMode, setEndTime, setStartTime, slot]); + function handleSubmit() { + updateSlot({ data: { time_end: endTime, time_start: startTime }, documentId }); + resetTime(); + setEditMode(false); + } + + return ( + + + + ); +} + +function SlotTimeReadonly(props: Readonly) { + const { setEditMode } = use(ScheduleTimeContext); + + const { data } = useSlotQuery(props); + const slot = data?.data?.slot; + if (!slot) return null; - if (editMode) return ; + const hasOrders = Boolean(slot?.orders.length); - return ; + return ( +
+ + +
+ ); } diff --git a/apps/web/components/schedule/components/time-range.tsx b/apps/web/components/schedule/components/time-range.tsx index 2da18ad..6041ebd 100644 --- a/apps/web/components/schedule/components/time-range.tsx +++ b/apps/web/components/schedule/components/time-range.tsx @@ -3,10 +3,11 @@ import { ScheduleTimeContext } from '../context'; import { formatTime } from '@/utils/date'; import { Input } from '@repo/ui/components/ui/input'; import { cn } from '@repo/ui/lib/utils'; -import { use } from 'react'; +import { type FormEvent, type PropsWithChildren, use } from 'react'; -type AddTimeRangeProps = { +type EditableTimeRangeProps = { readonly disabled?: boolean; + readonly onSubmit: (event: FormEvent) => void; }; type TimeRangeProps = { @@ -16,11 +17,15 @@ type TimeRangeProps = { readonly time_start: string; }; -export function AddTimeRange({ disabled = false }: AddTimeRangeProps) { +export function EditableTimeRangeForm({ + children, + disabled = false, + onSubmit, +}: PropsWithChildren) { const { endTime, setEndTime, setStartTime, startTime } = use(ScheduleTimeContext); return ( - <> +
- + {children} +
); } diff --git a/apps/web/components/schedule/day-slot-add-form.tsx b/apps/web/components/schedule/day-slot-add-form.tsx index 862f94a..8c5fbee 100644 --- a/apps/web/components/schedule/day-slot-add-form.tsx +++ b/apps/web/components/schedule/day-slot-add-form.tsx @@ -1,6 +1,6 @@ /* eslint-disable canonical/id-match */ 'use client'; -import { AddTimeRange } from './components/time-range'; +import { EditableTimeRangeForm } from './components/time-range'; import { ScheduleTimeContext, ScheduleTimeContextProvider } from './context'; import { ScheduleContext } from '@/context/schedule'; import { useSlotAdd } from '@/hooks/slots'; @@ -33,13 +33,12 @@ export const DaySlotAddForm = withContext(ScheduleTimeContextProvider)(function return (
-
- - - +
); });