diff options
| author | Adrian-Ryan Acala <github@adrianacala.com> | 2025-06-07 08:29:50 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-07 16:29:50 +0100 |
| commit | f53ad0a1bf373e4064ff3e142bfce4b27e4ef9d5 (patch) | |
| tree | d6c73b00fdfe19ee7f4d30b3a9481a5c72fc240d /apps/web/lib/hooks/useDialogFormReset.ts | |
| parent | 090c0d1c3c1b6bf2f569eb4c9e1164523f048319 (diff) | |
| download | karakeep-f53ad0a1bf373e4064ff3e142bfce4b27e4ef9d5.tar.zst | |
fix: preserve unsaved title changes when modifying bookmark tags in the edit dialog (#1515)
* feat: preserve unsaved title changes when modifying bookmark tags
Prevents loss of unsaved title edits when users interact with tag
selectors or other UI elements. Adds useDialogFormReset hook to
maintain form state consistency across component re-renders.
Fixes #1339
* Revert unnecessary modifications
---------
Co-authored-by: Mohamed Bassem <me@mbassem.com>
Diffstat (limited to 'apps/web/lib/hooks/useDialogFormReset.ts')
| -rw-r--r-- | apps/web/lib/hooks/useDialogFormReset.ts | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/apps/web/lib/hooks/useDialogFormReset.ts b/apps/web/lib/hooks/useDialogFormReset.ts new file mode 100644 index 00000000..de087ca9 --- /dev/null +++ b/apps/web/lib/hooks/useDialogFormReset.ts @@ -0,0 +1,27 @@ +import type { FieldValues, UseFormReturn } from "react-hook-form"; +import { useEffect, useRef } from "react"; + +/** + * Custom hook to handle form reset behavior in dialogs + * Only resets the form when the dialog transitions from closed to open, + * preventing loss of unsaved changes when external data updates occur + * + * @param open - Dialog open state + * @param form - React Hook Form instance + * @param resetData - Data to reset the form with + */ +export function useDialogFormReset<T extends FieldValues>( + open: boolean, + form: UseFormReturn<T>, + resetData: T, +) { + const prevOpenRef = useRef(open); + + useEffect(() => { + // Only reset form when transitioning from closed to open, not on data updates + if (open && !prevOpenRef.current) { + form.reset(resetData); + } + prevOpenRef.current = open; + }, [open, form, resetData]); +} |
