tooot/src/screens/Tabs/Notifications.tsx

78 lines
2.3 KiB
TypeScript
Raw Normal View History

2021-01-14 00:43:35 +01:00
import { HeaderCenter } from '@components/Header'
2021-02-08 23:47:20 +01:00
import Timeline from '@components/Timeline'
2021-01-30 01:29:15 +01:00
import sharedScreens from '@screens/Tabs/Shared/sharedScreens'
2021-02-20 19:12:44 +01:00
import { updateInstanceNotification } from '@utils/slices/instancesSlice'
import React, { useCallback, useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import { Platform, ViewToken } from 'react-native'
2021-01-07 19:13:09 +01:00
import { createNativeStackNavigator } from 'react-native-screens/native-stack'
import { useDispatch } from 'react-redux'
2020-10-24 18:07:09 +02:00
2021-01-30 01:29:15 +01:00
const Stack = createNativeStackNavigator<Nav.TabNotificationsStackParamList>()
2020-10-23 09:22:17 +02:00
const TabNotifications = React.memo(
() => {
const { t } = useTranslation()
const dispatch = useDispatch()
2020-10-24 18:07:09 +02:00
const screenOptions = useMemo(
() => ({
2020-12-25 21:51:46 +01:00
headerTitle: t('notifications:heading'),
2021-01-14 00:43:35 +01:00
...(Platform.OS === 'android' && {
headerCenter: () => (
<HeaderCenter content={t('notifications:heading')} />
)
}),
2021-01-13 01:03:46 +01:00
headerHideShadow: true,
headerTopInsetEnabled: false
}),
[]
)
const children = useCallback(
({ navigation }) => (
<Timeline
page='Notifications'
customProps={{
viewabilityConfigCallbackPairs: [
{
onViewableItemsChanged: ({
viewableItems
}: {
viewableItems: ViewToken[]
}) => {
if (
navigation.isFocused() &&
viewableItems.length &&
viewableItems[0].index === 0
) {
dispatch(
2021-02-20 19:12:44 +01:00
updateInstanceNotification({
readTime: viewableItems[0].item.created_at
})
)
}
},
viewabilityConfig: {
minimumViewTime: 100,
itemVisiblePercentThreshold: 60
}
}
]
}}
/>
),
[]
)
2020-10-30 20:03:44 +01:00
return (
<Stack.Navigator screenOptions={screenOptions}>
<Stack.Screen name='Tab-Notifications-Root' children={children} />
{sharedScreens(Stack as any)}
</Stack.Navigator>
)
},
() => true
)
2020-10-31 21:04:46 +01:00
2021-01-30 01:29:15 +01:00
export default TabNotifications