From d2e65d2a7f411e9eb1a1ea8d97ea148c4832b430 Mon Sep 17 00:00:00 2001
From: Ansh <anshnanda10@gmail.com>
Date: Wed, 30 Aug 2023 18:06:02 -0700
Subject: Fix 1338 mark notifications read with timeout and on app state change
 (#1340)

* mark notifications read with timeout and on app state change

* fix type
---
 src/view/screens/Notifications.tsx | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

(limited to 'src/view/screens/Notifications.tsx')

diff --git a/src/view/screens/Notifications.tsx b/src/view/screens/Notifications.tsx
index 15bbf4fd0..5dda965db 100644
--- a/src/view/screens/Notifications.tsx
+++ b/src/view/screens/Notifications.tsx
@@ -1,5 +1,5 @@
 import React from 'react'
-import {FlatList, View} from 'react-native'
+import {AppState, FlatList, View} from 'react-native'
 import {useFocusEffect} from '@react-navigation/native'
 import {observer} from 'mobx-react-lite'
 import {
@@ -18,6 +18,7 @@ import {s} from 'lib/styles'
 import {useAnalytics} from 'lib/analytics/analytics'
 import {isWeb} from 'platform/detection'
 
+const NOTIFICATION_MARK_READ_TIMEOUT = 5000
 type Props = NativeStackScreenProps<
   NotificationsTabNavigatorParams,
   'Notifications'
@@ -55,10 +56,22 @@ export const NotificationsScreen = withAuthRequired(
         const softResetSub = store.onScreenSoftReset(onPressLoadLatest)
         store.me.notifications.update()
         screen('Notifications')
+        // marks notifications read if the user opens the notifications tab for x seconds
+        // but doesn't open any notifications or any other tab
+        const markReadTimeout = setTimeout(() => {
+          store.me.notifications.markAllRead()
+        }, NOTIFICATION_MARK_READ_TIMEOUT) // mark all notifications as read after 3s
+        // marks notification read if the user suspends the app while in the notification tab
+        // then opens the app into the notification tab and then closes the app again
+        const markReadOnBlur = AppState.addEventListener('change', event => {
+          if (event === 'background') store.me.notifications.markAllRead()
+        })
 
         return () => {
           softResetSub.remove()
+          markReadOnBlur.remove()
           store.me.notifications.markAllRead()
+          clearTimeout(markReadTimeout) // in case we unmount before the timeout fires
         }
       }, [store, screen, onPressLoadLatest]),
     )
-- 
cgit 1.4.1

