unmount hack

This commit is contained in:
GleidsonDaniel 2024-03-28 10:06:41 -03:00
parent f899e9b1ca
commit 02d9fb9dc1
1 changed files with 30 additions and 16 deletions

View File

@ -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]
);
};