From 19f0d68f498d056d43c591cd8855e1a1d0992732 Mon Sep 17 00:00:00 2001 From: M00rish Date: Fri, 31 Jan 2025 12:27:09 +0100 Subject: [PATCH 1/7] fix Not found page blinking --- src/pages/home/ReportScreen.tsx | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/pages/home/ReportScreen.tsx b/src/pages/home/ReportScreen.tsx index 39a670b43284..c1b809c932b6 100644 --- a/src/pages/home/ReportScreen.tsx +++ b/src/pages/home/ReportScreen.tsx @@ -386,7 +386,9 @@ function ReportScreen({route, navigation}: ReportScreenProps) { () => !!linkedAction && !shouldReportActionBeVisible(linkedAction, linkedAction.reportActionID, canUserPerformWriteAction(report)), [linkedAction, report], ); - const prevIsLinkedActionDeleted = usePrevious(linkedAction ? isLinkedActionDeleted : undefined); + + const [isClearingDeletedLinkedAction, setIsClearingDeletedLinkedAction] = useState(); + const isLinkedActionInaccessibleWhisper = useMemo( () => !!linkedAction && isWhisperAction(linkedAction) && !(linkedAction?.whisperedToAccountIDs ?? []).includes(currentUserAccountID), [currentUserAccountID, linkedAction], @@ -416,11 +418,9 @@ function ReportScreen({route, navigation}: ReportScreenProps) { (!!deleteTransactionNavigateBackUrl && getReportIDFromLink(deleteTransactionNavigateBackUrl) === report?.reportID) || (!reportMetadata.isOptimisticReport && isLoading); - const isLinkedActionBecomesDeleted = prevIsLinkedActionDeleted !== undefined && !prevIsLinkedActionDeleted && isLinkedActionDeleted; - // eslint-disable-next-line rulesdir/no-negated-variables const shouldShowNotFoundLinkedAction = - (!isLinkedActionInaccessibleWhisper && isLinkedActionDeleted && !isLinkedActionBecomesDeleted) || + (!isLinkedActionInaccessibleWhisper && isLinkedActionDeleted && isClearingDeletedLinkedAction === false) || (shouldShowSkeleton && !reportMetadata.isLoadingInitialReportActions && !!reportActionIDFromRoute && @@ -735,13 +735,23 @@ function ReportScreen({route, navigation}: ReportScreenProps) { }, [fetchReport]); useEffect(() => { - // If the linked action is previously available but now deleted, - // remove the reportActionID from the params to not link to the deleted action. - if (!isLinkedActionBecomesDeleted) { + + if (!isLinkedActionDeleted || isClearingDeletedLinkedAction) + { return; } + Navigation.setParams({reportActionID: ''}); - }, [isLinkedActionBecomesDeleted]); + setIsClearingDeletedLinkedAction(true); + }, [isLinkedActionDeleted, isClearingDeletedLinkedAction]); + + + useEffect(() => { + if (!isClearingDeletedLinkedAction || reportActionIDFromRoute) { + return; + } + setIsClearingDeletedLinkedAction(false); + }, [isClearingDeletedLinkedAction, reportActionIDFromRoute]); // If user redirects to an inaccessible whisper via a deeplink, on a report they have access to, // then we set reportActionID as empty string, so we display them the report and not the "Not found page". From 146b89e5caa812bee780355cab67ecb33a4651fa Mon Sep 17 00:00:00 2001 From: M00rish Date: Sun, 2 Feb 2025 20:36:41 +0100 Subject: [PATCH 2/7] refactor to show not found page only when navigating to a deleted Action --- src/pages/home/ReportScreen.tsx | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/pages/home/ReportScreen.tsx b/src/pages/home/ReportScreen.tsx index c1b809c932b6..11737aae66b5 100644 --- a/src/pages/home/ReportScreen.tsx +++ b/src/pages/home/ReportScreen.tsx @@ -387,7 +387,11 @@ function ReportScreen({route, navigation}: ReportScreenProps) { [linkedAction, report], ); - const [isClearingDeletedLinkedAction, setIsClearingDeletedLinkedAction] = useState(); + const previsLinkedActionDeleted = usePrevious(linkedAction ? isLinkedActionDeleted : undefined); + + const lastReportActionIDFromRoute = usePrevious(reportActionIDFromRoute); + + const [isNavigatingToDeletedMessage, setIsNavigatingToDeletedMessage] = useState(false); const isLinkedActionInaccessibleWhisper = useMemo( () => !!linkedAction && isWhisperAction(linkedAction) && !(linkedAction?.whisperedToAccountIDs ?? []).includes(currentUserAccountID), @@ -420,7 +424,7 @@ function ReportScreen({route, navigation}: ReportScreenProps) { // eslint-disable-next-line rulesdir/no-negated-variables const shouldShowNotFoundLinkedAction = - (!isLinkedActionInaccessibleWhisper && isLinkedActionDeleted && isClearingDeletedLinkedAction === false) || + (!isLinkedActionInaccessibleWhisper && isLinkedActionDeleted && isNavigatingToDeletedMessage) || (shouldShowSkeleton && !reportMetadata.isLoadingInitialReportActions && !!reportActionIDFromRoute && @@ -735,23 +739,23 @@ function ReportScreen({route, navigation}: ReportScreenProps) { }, [fetchReport]); useEffect(() => { - - if (!isLinkedActionDeleted || isClearingDeletedLinkedAction) - { + // Only handle deletion cases when there's a deleted action + if (!isLinkedActionDeleted) { + setIsNavigatingToDeletedMessage(false); return; } - Navigation.setParams({reportActionID: ''}); - setIsClearingDeletedLinkedAction(true); - }, [isLinkedActionDeleted, isClearingDeletedLinkedAction]); - - - useEffect(() => { - if (!isClearingDeletedLinkedAction || reportActionIDFromRoute) { + // Set navigation state when user clicks a deleted message link + if (lastReportActionIDFromRoute !== reportActionIDFromRoute) { + setIsNavigatingToDeletedMessage(true); return; } - setIsClearingDeletedLinkedAction(false); - }, [isClearingDeletedLinkedAction, reportActionIDFromRoute]); + + // Clear params when message gets deleted while viewing + if (!isNavigatingToDeletedMessage && previsLinkedActionDeleted === false) { + Navigation.setParams({reportActionID: ''}); + } + }, [isLinkedActionDeleted, previsLinkedActionDeleted, lastReportActionIDFromRoute, reportActionIDFromRoute, isNavigatingToDeletedMessage]); // If user redirects to an inaccessible whisper via a deeplink, on a report they have access to, // then we set reportActionID as empty string, so we display them the report and not the "Not found page". @@ -785,7 +789,6 @@ function ReportScreen({route, navigation}: ReportScreenProps) { !isDeletedAction(mostRecentReportAction); const lastRoute = usePrevious(route); - const lastReportActionIDFromRoute = usePrevious(reportActionIDFromRoute); const onComposerFocus = useCallback(() => setIsComposerFocus(true), []); const onComposerBlur = useCallback(() => setIsComposerFocus(false), []); From 72da60199a4785953921c3003ade0dfa5c846f6f Mon Sep 17 00:00:00 2001 From: M00rish Date: Sun, 2 Feb 2025 20:47:25 +0100 Subject: [PATCH 3/7] improve naming --- src/pages/home/ReportScreen.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/pages/home/ReportScreen.tsx b/src/pages/home/ReportScreen.tsx index 11737aae66b5..4cf7e0ca6ee3 100644 --- a/src/pages/home/ReportScreen.tsx +++ b/src/pages/home/ReportScreen.tsx @@ -388,10 +388,10 @@ function ReportScreen({route, navigation}: ReportScreenProps) { ); const previsLinkedActionDeleted = usePrevious(linkedAction ? isLinkedActionDeleted : undefined); - + const lastReportActionIDFromRoute = usePrevious(reportActionIDFromRoute); - const [isNavigatingToDeletedMessage, setIsNavigatingToDeletedMessage] = useState(false); + const [isNavigatingToAction, setIsNavigatingToAction] = useState(false); const isLinkedActionInaccessibleWhisper = useMemo( () => !!linkedAction && isWhisperAction(linkedAction) && !(linkedAction?.whisperedToAccountIDs ?? []).includes(currentUserAccountID), @@ -424,7 +424,7 @@ function ReportScreen({route, navigation}: ReportScreenProps) { // eslint-disable-next-line rulesdir/no-negated-variables const shouldShowNotFoundLinkedAction = - (!isLinkedActionInaccessibleWhisper && isLinkedActionDeleted && isNavigatingToDeletedMessage) || + (!isLinkedActionInaccessibleWhisper && isLinkedActionDeleted && isNavigatingToAction) || (shouldShowSkeleton && !reportMetadata.isLoadingInitialReportActions && !!reportActionIDFromRoute && @@ -741,21 +741,21 @@ function ReportScreen({route, navigation}: ReportScreenProps) { useEffect(() => { // Only handle deletion cases when there's a deleted action if (!isLinkedActionDeleted) { - setIsNavigatingToDeletedMessage(false); + setIsNavigatingToAction(false); return; } - // Set navigation state when user clicks a deleted message link + // Set navigation state when user clicks a deleted Action link if (lastReportActionIDFromRoute !== reportActionIDFromRoute) { - setIsNavigatingToDeletedMessage(true); + setIsNavigatingToAction(true); return; } - // Clear params when message gets deleted while viewing - if (!isNavigatingToDeletedMessage && previsLinkedActionDeleted === false) { + // Clear params when Action gets deleted while heighlighted + if (!isNavigatingToAction && previsLinkedActionDeleted === false) { Navigation.setParams({reportActionID: ''}); } - }, [isLinkedActionDeleted, previsLinkedActionDeleted, lastReportActionIDFromRoute, reportActionIDFromRoute, isNavigatingToDeletedMessage]); + }, [isLinkedActionDeleted, previsLinkedActionDeleted, lastReportActionIDFromRoute, reportActionIDFromRoute, isNavigatingToAction]); // If user redirects to an inaccessible whisper via a deeplink, on a report they have access to, // then we set reportActionID as empty string, so we display them the report and not the "Not found page". From cd542fdb142618b3ce0e4782eff731742ec2b574 Mon Sep 17 00:00:00 2001 From: M00rish Date: Wed, 5 Feb 2025 19:53:37 +0100 Subject: [PATCH 4/7] update based on reviews --- src/pages/home/ReportScreen.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/pages/home/ReportScreen.tsx b/src/pages/home/ReportScreen.tsx index 4cf7e0ca6ee3..79538217805b 100644 --- a/src/pages/home/ReportScreen.tsx +++ b/src/pages/home/ReportScreen.tsx @@ -387,11 +387,11 @@ function ReportScreen({route, navigation}: ReportScreenProps) { [linkedAction, report], ); - const previsLinkedActionDeleted = usePrevious(linkedAction ? isLinkedActionDeleted : undefined); + const prevIsLinkedActionDeleted = usePrevious(linkedAction ? isLinkedActionDeleted : undefined); const lastReportActionIDFromRoute = usePrevious(reportActionIDFromRoute); - const [isNavigatingToAction, setIsNavigatingToAction] = useState(false); + const [isNavigatingToDeletedAction, setIsNavigatingToDeletedAction] = useState(false); const isLinkedActionInaccessibleWhisper = useMemo( () => !!linkedAction && isWhisperAction(linkedAction) && !(linkedAction?.whisperedToAccountIDs ?? []).includes(currentUserAccountID), @@ -424,7 +424,7 @@ function ReportScreen({route, navigation}: ReportScreenProps) { // eslint-disable-next-line rulesdir/no-negated-variables const shouldShowNotFoundLinkedAction = - (!isLinkedActionInaccessibleWhisper && isLinkedActionDeleted && isNavigatingToAction) || + (!isLinkedActionInaccessibleWhisper && isLinkedActionDeleted && isNavigatingToDeletedAction) || (shouldShowSkeleton && !reportMetadata.isLoadingInitialReportActions && !!reportActionIDFromRoute && @@ -741,21 +741,21 @@ function ReportScreen({route, navigation}: ReportScreenProps) { useEffect(() => { // Only handle deletion cases when there's a deleted action if (!isLinkedActionDeleted) { - setIsNavigatingToAction(false); + setIsNavigatingToDeletedAction(false); return; } - // Set navigation state when user clicks a deleted Action link + // we want to do this destinguish between a normal navigation and a delete behavior if (lastReportActionIDFromRoute !== reportActionIDFromRoute) { - setIsNavigatingToAction(true); + setIsNavigatingToDeletedAction(true); return; } // Clear params when Action gets deleted while heighlighted - if (!isNavigatingToAction && previsLinkedActionDeleted === false) { + if (!isNavigatingToDeletedAction && prevIsLinkedActionDeleted === false) { Navigation.setParams({reportActionID: ''}); } - }, [isLinkedActionDeleted, previsLinkedActionDeleted, lastReportActionIDFromRoute, reportActionIDFromRoute, isNavigatingToAction]); + }, [isLinkedActionDeleted, prevIsLinkedActionDeleted, lastReportActionIDFromRoute, reportActionIDFromRoute, isNavigatingToDeletedAction]); // If user redirects to an inaccessible whisper via a deeplink, on a report they have access to, // then we set reportActionID as empty string, so we display them the report and not the "Not found page". From d036c028dd9094c3d1c4d52ad4a424fe9ca15093 Mon Sep 17 00:00:00 2001 From: M00rish Date: Wed, 5 Feb 2025 20:01:50 +0100 Subject: [PATCH 5/7] lint update --- src/pages/home/ReportScreen.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/home/ReportScreen.tsx b/src/pages/home/ReportScreen.tsx index 79538217805b..66d7f3504a5c 100644 --- a/src/pages/home/ReportScreen.tsx +++ b/src/pages/home/ReportScreen.tsx @@ -745,7 +745,7 @@ function ReportScreen({route, navigation}: ReportScreenProps) { return; } - // we want to do this destinguish between a normal navigation and a delete behavior + // we want to do this destinguish between normal navigation and delete behavior if (lastReportActionIDFromRoute !== reportActionIDFromRoute) { setIsNavigatingToDeletedAction(true); return; From 259e04cf8149fb7b34cc2b541be693e1483b4a1b Mon Sep 17 00:00:00 2001 From: M00rish Date: Wed, 5 Feb 2025 21:03:54 +0100 Subject: [PATCH 6/7] fix for reloading notfound does not land on notfound again --- src/pages/home/ReportScreen.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/home/ReportScreen.tsx b/src/pages/home/ReportScreen.tsx index 66d7f3504a5c..c72549f78b9d 100644 --- a/src/pages/home/ReportScreen.tsx +++ b/src/pages/home/ReportScreen.tsx @@ -389,7 +389,7 @@ function ReportScreen({route, navigation}: ReportScreenProps) { const prevIsLinkedActionDeleted = usePrevious(linkedAction ? isLinkedActionDeleted : undefined); - const lastReportActionIDFromRoute = usePrevious(reportActionIDFromRoute); + const lastReportActionIDFromRoute = usePrevious(!firstRenderRef.current ? reportActionIDFromRoute : undefined); const [isNavigatingToDeletedAction, setIsNavigatingToDeletedAction] = useState(false); From 6f20fd0673dac4e8b6b015c80e44b70a6ead2cf7 Mon Sep 17 00:00:00 2001 From: M00rish Date: Wed, 5 Feb 2025 21:07:29 +0100 Subject: [PATCH 7/7] lint fix --- src/pages/home/ReportScreen.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/home/ReportScreen.tsx b/src/pages/home/ReportScreen.tsx index c72549f78b9d..b5ab1e187a58 100644 --- a/src/pages/home/ReportScreen.tsx +++ b/src/pages/home/ReportScreen.tsx @@ -389,6 +389,7 @@ function ReportScreen({route, navigation}: ReportScreenProps) { const prevIsLinkedActionDeleted = usePrevious(linkedAction ? isLinkedActionDeleted : undefined); + // eslint-disable-next-line react-compiler/react-compiler const lastReportActionIDFromRoute = usePrevious(!firstRenderRef.current ? reportActionIDFromRoute : undefined); const [isNavigatingToDeletedAction, setIsNavigatingToDeletedAction] = useState(false);