2022-03-23 09:13:23 +00:00
|
|
|
import React, { useContext, useRef } from "react";
|
2022-02-01 09:58:06 +00:00
|
|
|
|
|
|
|
import {
|
|
|
|
ExitFormDialogContext,
|
|
|
|
ExitFormDialogData,
|
|
|
|
SubmitFn,
|
2022-06-21 09:36:55 +00:00
|
|
|
WithFormId,
|
2022-02-01 09:58:06 +00:00
|
|
|
} from "./ExitFormDialogProvider";
|
|
|
|
|
|
|
|
export interface UseExitFormDialogResult
|
2022-04-27 12:57:10 +00:00
|
|
|
extends Omit<ExitFormDialogData, "setIsDirty" | "setExitDialogSubmitRef">,
|
2022-02-01 09:58:06 +00:00
|
|
|
WithFormId {
|
|
|
|
setIsDirty: (isDirty: boolean) => void;
|
|
|
|
setExitDialogSubmitRef: (submitFn: SubmitFn) => void;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface UseExitFormDialogProps {
|
|
|
|
formId: symbol;
|
2022-03-23 09:13:23 +00:00
|
|
|
isDisabled?: boolean;
|
2022-02-01 09:58:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export const useExitFormDialog = (
|
2022-06-21 09:36:55 +00:00
|
|
|
{ formId, isDisabled }: UseExitFormDialogProps = { formId: undefined },
|
2022-02-01 09:58:06 +00:00
|
|
|
): UseExitFormDialogResult => {
|
|
|
|
const id = useRef(formId || Symbol()).current;
|
|
|
|
|
2022-03-23 09:13:23 +00:00
|
|
|
const exitDialogProps = useContext(ExitFormDialogContext);
|
|
|
|
const {
|
|
|
|
setIsDirty,
|
|
|
|
setIsSubmitDisabled,
|
2022-06-21 09:36:55 +00:00
|
|
|
setExitDialogSubmitRef,
|
2022-03-23 09:13:23 +00:00
|
|
|
} = exitDialogProps;
|
|
|
|
|
|
|
|
React.useEffect(() => {
|
|
|
|
if (isDisabled !== undefined) {
|
|
|
|
setIsSubmitDisabled(isDisabled);
|
|
|
|
}
|
|
|
|
}, [isDisabled]);
|
2022-02-01 09:58:06 +00:00
|
|
|
|
|
|
|
return {
|
2022-03-23 09:13:23 +00:00
|
|
|
...exitDialogProps,
|
2022-02-01 09:58:06 +00:00
|
|
|
formId: id,
|
|
|
|
setIsDirty: (value: boolean) => setIsDirty(id, value),
|
|
|
|
setExitDialogSubmitRef: (submitFn: SubmitFn) =>
|
2022-06-21 09:36:55 +00:00
|
|
|
setExitDialogSubmitRef(id, submitFn),
|
2022-02-01 09:58:06 +00:00
|
|
|
};
|
|
|
|
};
|