'use client'; import { NumberField, TextareaField, TextField, TimeField } from '@/components/shared/data-fields'; import { useServiceMutation, useServiceQuery } from '@/hooks/api/services'; import { Button } from '@repo/ui/components/ui/button'; import { Card } from '@repo/ui/components/ui/card'; import { convertTimeString } from '@repo/utils/datetime-format'; import { useState } from 'react'; type Props = { serviceId: string; }; export function ServiceDataCard({ serviceId }: Readonly) { const { data: { service } = {} } = useServiceQuery({ documentId: serviceId }); const { cancelChanges, hasChanges, isPending, resetTrigger, saveChanges, updateField } = useServiceEdit(serviceId); if (!service) return null; return (
updateField('name', name)} value={service?.name ?? ''} /> updateField('duration', convertTimeString(time).db())} value={service?.duration ?? ''} /> updateField('price', price)} value={service?.price ?? null} /> updateField('description', description)} rows={4} value={service?.description ?? ''} /> {hasChanges && (
)}
); } function useServiceEdit(serviceId: string) { const { isPending, mutate } = useServiceMutation({ documentId: serviceId }); const [pendingChanges, setPendingChanges] = useState>({}); const [resetTrigger, setResetTrigger] = useState(0); const updateField = (field: string, value: unknown) => { setPendingChanges((previous) => ({ ...previous, [field]: value })); }; const saveChanges = () => { if (Object.keys(pendingChanges).length === 0) return; mutate({ data: pendingChanges }); setPendingChanges({}); }; const cancelChanges = () => { setPendingChanges({}); setResetTrigger((previous) => previous + 1); }; const hasChanges = Object.keys(pendingChanges).length > 0; return { cancelChanges, hasChanges, isPending, resetTrigger, saveChanges, updateField, }; }