feat(FE-invalidate-mutation): Refactor SWR keys for recording detail

pages and add cache invalidation
This commit is contained in:
rstubryan
2026-04-07 16:06:46 +07:00
parent 6e34eede4b
commit b89730ab68
3 changed files with 14 additions and 6 deletions
@@ -11,10 +11,13 @@ const RecordingEdit = () => {
const searchParams = useSearchParams(); const searchParams = useSearchParams();
const recordingId = searchParams.get('recordingId'); const recordingId = searchParams.get('recordingId');
const recordingDetailKey = recordingId
? ['recording-detail', recordingId]
: null;
const { data: recording, isLoading: isLoadingRecording } = useSWR( const { data: recording, isLoading: isLoadingRecording } = useSWR(
recordingId, recordingDetailKey,
(id: string) => RecordingApi.getSingle(parseInt(id)) ([, id]: [string, string]) => RecordingApi.getSingle(parseInt(id))
); );
if (!recordingId) { if (!recordingId) {
+5 -2
View File
@@ -11,10 +11,13 @@ const RecordingDetail = () => {
const searchParams = useSearchParams(); const searchParams = useSearchParams();
const recordingId = searchParams.get('recordingId'); const recordingId = searchParams.get('recordingId');
const recordingDetailKey = recordingId
? ['recording-detail', recordingId]
: null;
const { data: recording, isLoading: isLoadingRecording } = useSWR( const { data: recording, isLoading: isLoadingRecording } = useSWR(
recordingId, recordingDetailKey,
(id: string) => RecordingApi.getSingle(parseInt(id)) ([, id]: [string, string]) => RecordingApi.getSingle(parseInt(id))
); );
if (!recordingId) { if (!recordingId) {
@@ -4,7 +4,7 @@ import { useMemo, useState, useEffect, useCallback } from 'react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useFormik } from 'formik'; import { useFormik } from 'formik';
import useSWR from 'swr'; import useSWR, { useSWRConfig } from 'swr';
import { Icon } from '@iconify/react'; import { Icon } from '@iconify/react';
import Button from '@/components/Button'; import Button from '@/components/Button';
@@ -183,6 +183,7 @@ const productionStandardColumns: ColumnDef<StandardDetails>[] = [
const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
// ===== HOOKS & ROUTER ===== // ===== HOOKS & ROUTER =====
const router = useRouter(); const router = useRouter();
const { mutate } = useSWRConfig();
// ===== STATE MANAGEMENT ===== // ===== STATE MANAGEMENT =====
const [selectedRecordDate, setSelectedRecordDate] = useState<string>( const [selectedRecordDate, setSelectedRecordDate] = useState<string>(
@@ -319,11 +320,12 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
setRecordingFormErrorMessage(res.message); setRecordingFormErrorMessage(res.message);
return; return;
} }
await mutate(['recording-detail', recordingId.toString()]);
toast.success(res?.message as string); toast.success(res?.message as string);
router.refresh(); router.refresh();
router.push('/production/recording'); router.push('/production/recording');
}, },
[router] [mutate, router]
); );
const deleteRecordingClickHandler = useCallback(() => { const deleteRecordingClickHandler = useCallback(() => {