add activity notifications screen
This commit is contained in:
@@ -111,6 +111,7 @@ import {router} from '#/routes'
|
|||||||
import {Referrer} from '../modules/expo-bluesky-swiss-army'
|
import {Referrer} from '../modules/expo-bluesky-swiss-army'
|
||||||
import {LegacyNotificationSettingsScreen} from './screens/Settings/LegacyNotificationSettings'
|
import {LegacyNotificationSettingsScreen} from './screens/Settings/LegacyNotificationSettings'
|
||||||
import {NotificationSettingsScreen} from './screens/Settings/NotificationSettings'
|
import {NotificationSettingsScreen} from './screens/Settings/NotificationSettings'
|
||||||
|
import {ActivityNotificationSettingsScreen} from './screens/Settings/NotificationSettings/ActivityNotificationSettings'
|
||||||
import {LikeNotificationSettingsScreen} from './screens/Settings/NotificationSettings/LikeNotificationSettings'
|
import {LikeNotificationSettingsScreen} from './screens/Settings/NotificationSettings/LikeNotificationSettings'
|
||||||
import {LikesOnRepostsNotificationSettingsScreen} from './screens/Settings/NotificationSettings/LikesOnRepostsNotificationSettings'
|
import {LikesOnRepostsNotificationSettingsScreen} from './screens/Settings/NotificationSettings/LikesOnRepostsNotificationSettings'
|
||||||
import {MentionNotificationSettingsScreen} from './screens/Settings/NotificationSettings/MentionNotificationSettings'
|
import {MentionNotificationSettingsScreen} from './screens/Settings/NotificationSettings/MentionNotificationSettings'
|
||||||
@@ -459,6 +460,14 @@ function commonScreens(Stack: typeof Flat, unreadCountLabel?: string) {
|
|||||||
requireAuth: true,
|
requireAuth: true,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
<Stack.Screen
|
||||||
|
name="ActivityNotificationSettings"
|
||||||
|
getComponent={() => ActivityNotificationSettingsScreen}
|
||||||
|
options={{
|
||||||
|
title: title(msg`Activity notifications`),
|
||||||
|
requireAuth: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<Stack.Screen
|
<Stack.Screen
|
||||||
name="MiscellaneousNotificationSettings"
|
name="MiscellaneousNotificationSettings"
|
||||||
getComponent={() => MiscellaneousNotificationSettingsScreen}
|
getComponent={() => MiscellaneousNotificationSettingsScreen}
|
||||||
|
|||||||
@@ -0,0 +1,121 @@
|
|||||||
|
import {useCallback} from 'react'
|
||||||
|
import {Text, View} from 'react-native'
|
||||||
|
import {Trans} from '@lingui/macro'
|
||||||
|
|
||||||
|
import {
|
||||||
|
type AllNavigatorParams,
|
||||||
|
type NativeStackScreenProps,
|
||||||
|
} from '#/lib/routes/types'
|
||||||
|
import {useNotificationSettingsQuery} from '#/state/queries/notifications/settings'
|
||||||
|
import {List} from '#/view/com/util/List'
|
||||||
|
import {atoms as a, useTheme} from '#/alf'
|
||||||
|
import * as Admonition from '#/components/Admonition'
|
||||||
|
import {Bell_Filled_Corner0_Rounded as BellIcon} from '#/components/icons/Bell'
|
||||||
|
import {BellRinging_Stroke2_Corner0_Rounded as BellRingingIcon} from '#/components/icons/BellRinging'
|
||||||
|
import * as Layout from '#/components/Layout'
|
||||||
|
import {ListFooter} from '#/components/Lists'
|
||||||
|
import * as SettingsList from '../components/SettingsList'
|
||||||
|
import {ItemTextWithSubtitle} from './components/ItemTextWithSubtitle'
|
||||||
|
import {PreferenceControls} from './components/PreferenceControls'
|
||||||
|
|
||||||
|
type Props = NativeStackScreenProps<
|
||||||
|
AllNavigatorParams,
|
||||||
|
'ActivityNotificationSettings'
|
||||||
|
>
|
||||||
|
export function ActivityNotificationSettingsScreen({}: Props) {
|
||||||
|
const t = useTheme()
|
||||||
|
const {data: preferences, isError} = useNotificationSettingsQuery()
|
||||||
|
|
||||||
|
// TODO: Fetch subscriptions
|
||||||
|
const items = [] as string[]
|
||||||
|
|
||||||
|
const renderItem = useCallback(() => {
|
||||||
|
return null
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout.Screen>
|
||||||
|
<Layout.Header.Outer>
|
||||||
|
<Layout.Header.BackButton />
|
||||||
|
<Layout.Header.Content>
|
||||||
|
<Layout.Header.TitleText>
|
||||||
|
<Trans>Notifications</Trans>
|
||||||
|
</Layout.Header.TitleText>
|
||||||
|
</Layout.Header.Content>
|
||||||
|
<Layout.Header.Slot />
|
||||||
|
</Layout.Header.Outer>
|
||||||
|
<List
|
||||||
|
ListHeaderComponent={
|
||||||
|
<SettingsList.Container>
|
||||||
|
<SettingsList.Item style={[a.align_start]}>
|
||||||
|
<SettingsList.ItemIcon icon={BellRingingIcon} />
|
||||||
|
<ItemTextWithSubtitle
|
||||||
|
bold
|
||||||
|
titleText={<Trans>Activity alerts</Trans>}
|
||||||
|
subtitleText={
|
||||||
|
<Trans>
|
||||||
|
Activity Alerts notify you instantly when your favorite
|
||||||
|
accounts post or reply.
|
||||||
|
</Trans>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</SettingsList.Item>
|
||||||
|
{isError ? (
|
||||||
|
<View style={[a.px_lg, a.pt_md]}>
|
||||||
|
<Admonition.Admonition type="error">
|
||||||
|
<Trans>Failed to load notification settings.</Trans>
|
||||||
|
</Admonition.Admonition>
|
||||||
|
</View>
|
||||||
|
) : (
|
||||||
|
<PreferenceControls
|
||||||
|
name="subscribedPost"
|
||||||
|
preference={preferences?.subscribedPost}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</SettingsList.Container>
|
||||||
|
}
|
||||||
|
data={items}
|
||||||
|
renderItem={renderItem}
|
||||||
|
ListEmptyComponent={
|
||||||
|
<View style={[a.px_xl, a.py_md]}>
|
||||||
|
<Admonition.Outer type="tip">
|
||||||
|
<Admonition.Row>
|
||||||
|
<Admonition.Icon />
|
||||||
|
<View style={[a.flex_1, a.gap_sm]}>
|
||||||
|
<Admonition.Text>
|
||||||
|
<Trans>
|
||||||
|
Enable Activity Alerts for an account by visiting their
|
||||||
|
profile and pressing the{' '}
|
||||||
|
<Text style={[a.font_bold, t.atoms.text_contrast_high]}>
|
||||||
|
bell icon
|
||||||
|
</Text>{' '}
|
||||||
|
<BellIcon size="xs" style={t.atoms.text_contrast_high} />.
|
||||||
|
</Trans>
|
||||||
|
</Admonition.Text>
|
||||||
|
<Admonition.Text>
|
||||||
|
<Trans>
|
||||||
|
By default, only accounts you follow can receive alerts
|
||||||
|
from you – this can be changed in{' '}
|
||||||
|
<Text style={[a.font_bold, t.atoms.text_contrast_high]}>
|
||||||
|
Settings → Privacy & Security
|
||||||
|
</Text>
|
||||||
|
.
|
||||||
|
</Trans>
|
||||||
|
</Admonition.Text>
|
||||||
|
</View>
|
||||||
|
</Admonition.Row>
|
||||||
|
</Admonition.Outer>
|
||||||
|
</View>
|
||||||
|
}
|
||||||
|
ListFooterComponent={
|
||||||
|
<ListFooter
|
||||||
|
style={[items.length === 0 && a.border_transparent]}
|
||||||
|
// isFetchingNextPage={isFetchingNextPage}
|
||||||
|
// error={cleanError(error)}
|
||||||
|
// onRetry={fetchNextPage}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Layout.Screen>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -16,7 +16,7 @@ import {useNotificationSettingsQuery} from '#/state/queries/notifications/settin
|
|||||||
import {atoms as a} from '#/alf'
|
import {atoms as a} from '#/alf'
|
||||||
import {Admonition} from '#/components/Admonition'
|
import {Admonition} from '#/components/Admonition'
|
||||||
import {At_Stroke2_Corner2_Rounded as AtIcon} from '#/components/icons/At'
|
import {At_Stroke2_Corner2_Rounded as AtIcon} from '#/components/icons/At'
|
||||||
// import {BellRinging_Stroke2_Corner0_Rounded as BellRingingIcon} from '#/components/icons/BellRinging'
|
import {BellRinging_Stroke2_Corner0_Rounded as BellRingingIcon} from '#/components/icons/BellRinging'
|
||||||
import {Bubble_Stroke2_Corner2_Rounded as BubbleIcon} from '#/components/icons/Bubble'
|
import {Bubble_Stroke2_Corner2_Rounded as BubbleIcon} from '#/components/icons/Bubble'
|
||||||
import {Haptic_Stroke2_Corner2_Rounded as HapticIcon} from '#/components/icons/Haptic'
|
import {Haptic_Stroke2_Corner2_Rounded as HapticIcon} from '#/components/icons/Haptic'
|
||||||
import {
|
import {
|
||||||
@@ -183,7 +183,7 @@ export function NotificationSettingsScreen({}: Props) {
|
|||||||
showSkeleton={!settings}
|
showSkeleton={!settings}
|
||||||
/>
|
/>
|
||||||
</SettingsList.LinkItem>
|
</SettingsList.LinkItem>
|
||||||
{/* <SettingsList.LinkItem
|
<SettingsList.LinkItem
|
||||||
label={_(msg`Settings for activity alerts`)}
|
label={_(msg`Settings for activity alerts`)}
|
||||||
to={{screen: 'ActivityNotificationSettings'}}
|
to={{screen: 'ActivityNotificationSettings'}}
|
||||||
contentContainerStyle={[a.align_start]}>
|
contentContainerStyle={[a.align_start]}>
|
||||||
@@ -196,7 +196,7 @@ export function NotificationSettingsScreen({}: Props) {
|
|||||||
}
|
}
|
||||||
showSkeleton={!settings}
|
showSkeleton={!settings}
|
||||||
/>
|
/>
|
||||||
</SettingsList.LinkItem> */}
|
</SettingsList.LinkItem>
|
||||||
<SettingsList.LinkItem
|
<SettingsList.LinkItem
|
||||||
label={_(
|
label={_(
|
||||||
msg`Settings for notifications for likes of your reposts`,
|
msg`Settings for notifications for likes of your reposts`,
|
||||||
|
|||||||
Reference in New Issue
Block a user