diff --git a/.gitignore b/.gitignore index e47b8ec3..9e1fadc8 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,6 @@ next-env.d.ts # claude .claude + +# rtk +rtk.exe diff --git a/src/app/production/recording/detail/edit/page.tsx b/src/app/production/recording/detail/edit/page.tsx index ad6c6a9a..aa5f1f46 100644 --- a/src/app/production/recording/detail/edit/page.tsx +++ b/src/app/production/recording/detail/edit/page.tsx @@ -11,10 +11,13 @@ const RecordingEdit = () => { const searchParams = useSearchParams(); const recordingId = searchParams.get('recordingId'); + const recordingDetailKey = recordingId + ? ['recording-detail', recordingId] + : null; const { data: recording, isLoading: isLoadingRecording } = useSWR( - recordingId, - (id: string) => RecordingApi.getSingle(parseInt(id)) + recordingDetailKey, + ([, id]: [string, string]) => RecordingApi.getSingle(parseInt(id)) ); if (!recordingId) { diff --git a/src/app/production/recording/detail/page.tsx b/src/app/production/recording/detail/page.tsx index 194365a3..136c4283 100644 --- a/src/app/production/recording/detail/page.tsx +++ b/src/app/production/recording/detail/page.tsx @@ -11,10 +11,13 @@ const RecordingDetail = () => { const searchParams = useSearchParams(); const recordingId = searchParams.get('recordingId'); + const recordingDetailKey = recordingId + ? ['recording-detail', recordingId] + : null; const { data: recording, isLoading: isLoadingRecording } = useSWR( - recordingId, - (id: string) => RecordingApi.getSingle(parseInt(id)) + recordingDetailKey, + ([, id]: [string, string]) => RecordingApi.getSingle(parseInt(id)) ); if (!recordingId) { diff --git a/src/components/pages/production/recording/form/RecordingForm.schema.ts b/src/components/pages/production/recording/form/RecordingForm.schema.ts index 2a78ffe0..e4cf7a49 100644 --- a/src/components/pages/production/recording/form/RecordingForm.schema.ts +++ b/src/components/pages/production/recording/form/RecordingForm.schema.ts @@ -71,7 +71,7 @@ const StockObjectSchema: Yup.ObjectSchema = Yup.object({ .typeError('Produk harus berupa angka!'), qty: Yup.number() .required('Jumlah penggunaan wajib diisi!') - .min(1, 'Jumlah penggunaan tidak boleh 0!') + .moreThan(0, 'Jumlah penggunaan harus lebih dari 0!') .typeError('Jumlah penggunaan harus berupa angka!'), }); diff --git a/src/components/pages/production/recording/form/RecordingForm.tsx b/src/components/pages/production/recording/form/RecordingForm.tsx index 0ac34983..2a044874 100644 --- a/src/components/pages/production/recording/form/RecordingForm.tsx +++ b/src/components/pages/production/recording/form/RecordingForm.tsx @@ -4,7 +4,7 @@ import { useMemo, useState, useEffect, useCallback } from 'react'; import { useRouter } from 'next/navigation'; import { useFormik } from 'formik'; -import useSWR from 'swr'; +import useSWR, { useSWRConfig } from 'swr'; import { Icon } from '@iconify/react'; import Button from '@/components/Button'; @@ -183,6 +183,7 @@ const productionStandardColumns: ColumnDef[] = [ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { // ===== HOOKS & ROUTER ===== const router = useRouter(); + const { mutate } = useSWRConfig(); // ===== STATE MANAGEMENT ===== const [selectedRecordDate, setSelectedRecordDate] = useState( @@ -319,11 +320,12 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { setRecordingFormErrorMessage(res.message); return; } + await mutate(['recording-detail', recordingId.toString()]); toast.success(res?.message as string); router.refresh(); router.push('/production/recording'); }, - [router] + [mutate, router] ); const deleteRecordingClickHandler = useCallback(() => {