({
post,
draftIdentifier,
}: UseDiscardPostProps = {})
| 31 | } |
| 32 | |
| 33 | export const useDiscardPost = ({ |
| 34 | post, |
| 35 | draftIdentifier, |
| 36 | }: UseDiscardPostProps = {}): UseDiscardPost => { |
| 37 | const formRef = useRef<HTMLFormElement>(); |
| 38 | const draftKey = generateWritePostKey(draftIdentifier ?? post?.id); |
| 39 | const [draft, updateDraft, isDraftReady, isUpdatingDraft] = |
| 40 | usePersistentContext<Partial<WriteForm>>(draftKey, {}); |
| 41 | const onValidateAction = useCallback(() => { |
| 42 | if (!formRef.current) { |
| 43 | return true; |
| 44 | } |
| 45 | |
| 46 | const form = formToJson<EditPostProps>(formRef.current); |
| 47 | const isTitleSaved = checkSavedProperty('title', form, draft, post); |
| 48 | const isContentSaved = checkSavedProperty('content', form, draft, post); |
| 49 | return isTitleSaved && isContentSaved; |
| 50 | }, [post, draft]); |
| 51 | |
| 52 | const { onAskConfirmation } = useExitConfirmation({ onValidateAction }); |
| 53 | |
| 54 | const clearDraft = useCallback(async () => { |
| 55 | await updateDraft({}); |
| 56 | await deleteCache(draftKey); |
| 57 | await deleteCache(generateWritePostKey()); |
| 58 | }, [updateDraft, draftKey]); |
| 59 | |
| 60 | return { |
| 61 | onAskConfirmation, |
| 62 | draft, |
| 63 | updateDraft, |
| 64 | isDraftReady, |
| 65 | formRef, |
| 66 | clearDraft, |
| 67 | isUpdatingDraft, |
| 68 | }; |
| 69 | }; |
no test coverage detected