1
0
mirror of https://github.com/tooot-app/app synced 2025-06-05 22:19:13 +02:00

Ready for push feature

This commit is contained in:
Zhiyuan Zheng
2021-03-04 01:03:53 +01:00
parent a4a6e9316b
commit cc02626adb
17 changed files with 255 additions and 135 deletions

View File

@ -0,0 +1,54 @@
import { NavigationContainerRef } from '@react-navigation/native'
import { Dispatch } from '@reduxjs/toolkit'
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
import { Instance, updateInstanceActive } from '@utils/slices/instancesSlice'
import * as Notifications from 'expo-notifications'
import { findIndex } from 'lodash'
import { useEffect } from 'react'
import { QueryClient } from 'react-query'
import pushUseNavigate from './useNavigate'
export interface Params {
navigationRef: React.RefObject<NavigationContainerRef>
queryClient: QueryClient
instances: Instance[]
dispatch: Dispatch<any>
}
const pushUseRespond = ({
navigationRef,
queryClient,
instances,
dispatch
}: Params) => {
return useEffect(() => {
const subscription = Notifications.addNotificationResponseReceivedListener(
({ notification }) => {
const queryKey: QueryKeyTimeline = [
'Timeline',
{ page: 'Notifications' }
]
queryClient.invalidateQueries(queryKey)
const payloadData = notification.request.content.data as {
notification_id?: string
instanceUrl: string
accountId: string
}
const notificationIndex = findIndex(
instances,
instance =>
instance.url === payloadData.instanceUrl &&
instance.account.id === payloadData.accountId
)
if (notificationIndex !== -1) {
dispatch(updateInstanceActive(instances[notificationIndex]))
}
pushUseNavigate(navigationRef, payloadData.notification_id)
}
)
return () => subscription.remove()
}, [instances])
}
export default pushUseRespond