aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/lib
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/lib')
-rw-r--r--apps/web/lib/hooks/useDialogFormReset.ts27
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]);
+}