From 02d9fb9dc129958cd048d8bd5c21330cdd7cce92 Mon Sep 17 00:00:00 2001 From: GleidsonDaniel Date: Thu, 28 Mar 2024 10:06:41 -0300 Subject: [PATCH] unmount hack --- .../MessageComposer/hooks/useAutoSaveDraft.ts | 46 ++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/app/containers/MessageComposer/hooks/useAutoSaveDraft.ts b/app/containers/MessageComposer/hooks/useAutoSaveDraft.ts index 5d575ea30..ee4df0a72 100644 --- a/app/containers/MessageComposer/hooks/useAutoSaveDraft.ts +++ b/app/containers/MessageComposer/hooks/useAutoSaveDraft.ts @@ -1,9 +1,9 @@ -import { useCallback, useEffect, useRef } from 'react'; import { useRoute } from '@react-navigation/native'; +import { useCallback, useEffect, useRef } from 'react'; +import { saveDraftMessage } from '../../../lib/methods/draftMessage'; import { useRoomContext } from '../../../views/RoomView/context'; import { useFocused } from '../context'; -import { saveDraftMessage } from '../../../lib/methods/draftMessage'; export const useAutoSaveDraft = (text = '') => { const route = useRoute(); @@ -12,19 +12,17 @@ export const useAutoSaveDraft = (text = '') => { const oldText = useRef(''); const intervalRef = useRef(); - const saveMessageDraft = useCallback( - (back?: boolean) => { - if (route.name === 'ShareView') return; - if (action === 'edit') return; - if (back && oldText.current === '') return; - const draftMessage = selectedMessages?.length ? JSON.stringify({ quotes: selectedMessages, msg: text }) : text; - if (oldText.current !== draftMessage) { - oldText.current = draftMessage; - saveDraftMessage({ rid, tmid, draftMessage }); - } - }, - [action, rid, tmid, text, selectedMessages?.length, route.name] - ); + const mounted = useRef(true); + + const saveMessageDraft = useCallback(() => { + if (route.name === 'ShareView') return; + if (action === 'edit') return; + const draftMessage = selectedMessages?.length ? JSON.stringify({ quotes: selectedMessages, msg: text }) : text; + if (oldText.current !== draftMessage) { + oldText.current = draftMessage; + saveDraftMessage({ rid, tmid, draftMessage }); + } + }, [action, rid, tmid, text, selectedMessages?.length, route.name]); useEffect(() => { if (focused) { @@ -35,7 +33,23 @@ export const useAutoSaveDraft = (text = '') => { return () => { clearInterval(intervalRef.current); - saveMessageDraft(true); }; }, [focused, saveMessageDraft]); + + // hack to call saveMessageDraft when component is unmounted + useEffect(() => { + () => {}; + return () => { + mounted.current = false; + }; + }, []); + + useEffect( + () => () => { + if (!mounted.current) { + saveMessageDraft(); + } + }, + [saveMessageDraft] + ); };