41 lines
989 B
TypeScript
41 lines
989 B
TypeScript
![]() |
import { useContext, useRef } from "react";
|
||
|
|
||
|
import {
|
||
|
ExitFormDialogContext,
|
||
|
ExitFormDialogData,
|
||
|
SubmitFn,
|
||
|
WithFormId
|
||
|
} from "./ExitFormDialogProvider";
|
||
|
|
||
|
export interface UseExitFormDialogResult
|
||
|
extends Pick<
|
||
|
ExitFormDialogData,
|
||
|
"setEnableExitDialog" | "shouldBlockNavigation" | "setIsSubmitting"
|
||
|
>,
|
||
|
WithFormId {
|
||
|
setIsDirty: (isDirty: boolean) => void;
|
||
|
setExitDialogSubmitRef: (submitFn: SubmitFn) => void;
|
||
|
}
|
||
|
|
||
|
export interface UseExitFormDialogProps {
|
||
|
formId: symbol;
|
||
|
}
|
||
|
|
||
|
export const useExitFormDialog = (
|
||
|
{ formId }: UseExitFormDialogProps = { formId: undefined }
|
||
|
): UseExitFormDialogResult => {
|
||
|
const id = useRef(formId || Symbol()).current;
|
||
|
|
||
|
const { setIsDirty, setExitDialogSubmitRef, ...rest } = useContext(
|
||
|
ExitFormDialogContext
|
||
|
);
|
||
|
|
||
|
return {
|
||
|
...rest,
|
||
|
formId: id,
|
||
|
setIsDirty: (value: boolean) => setIsDirty(id, value),
|
||
|
setExitDialogSubmitRef: (submitFn: SubmitFn) =>
|
||
|
setExitDialogSubmitRef(id, submitFn)
|
||
|
};
|
||
|
};
|