mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import React from 'react'
2import {View} from 'react-native'
3import {TID} from '@atproto/common-web'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6
7import {DISCOVER_SAVED_FEED, TIMELINE_SAVED_FEED} from '#/lib/constants'
8import {useOverwriteSavedFeedsMutation} from '#/state/queries/preferences'
9import {UsePreferencesQueryResponse} from '#/state/queries/preferences'
10import {CenteredView} from '#/view/com/util/Views'
11import {atoms as a} from '#/alf'
12import {Button, ButtonIcon, ButtonText} from '#/components/Button'
13import {useHeaderOffset} from '#/components/hooks/useHeaderOffset'
14import {ListSparkle_Stroke2_Corner0_Rounded as ListSparkle} from '#/components/icons/ListSparkle'
15import {PlusLarge_Stroke2_Corner0_Rounded as Plus} from '#/components/icons/Plus'
16import {Link} from '#/components/Link'
17import {Text} from '#/components/Typography'
18
19export function NoFeedsPinned({
20 preferences,
21}: {
22 preferences: UsePreferencesQueryResponse
23}) {
24 const {_} = useLingui()
25 const headerOffset = useHeaderOffset()
26 const {isPending, mutateAsync: overwriteSavedFeeds} =
27 useOverwriteSavedFeedsMutation()
28
29 const addRecommendedFeeds = React.useCallback(async () => {
30 let skippedTimeline = false
31 let skippedDiscover = false
32 let remainingSavedFeeds = []
33
34 // remove first instance of both timeline and discover, since we're going to overwrite them
35 for (const savedFeed of preferences.savedFeeds) {
36 if (savedFeed.type === 'timeline' && !skippedTimeline) {
37 skippedTimeline = true
38 } else if (
39 savedFeed.value === DISCOVER_SAVED_FEED.value &&
40 !skippedDiscover
41 ) {
42 skippedDiscover = true
43 } else {
44 remainingSavedFeeds.push(savedFeed)
45 }
46 }
47
48 const toSave = [
49 {
50 ...DISCOVER_SAVED_FEED,
51 pinned: true,
52 id: TID.nextStr(),
53 },
54 {
55 ...TIMELINE_SAVED_FEED,
56 pinned: true,
57 id: TID.nextStr(),
58 },
59 ...remainingSavedFeeds,
60 ]
61
62 await overwriteSavedFeeds(toSave)
63 }, [overwriteSavedFeeds, preferences.savedFeeds])
64
65 return (
66 <CenteredView sideBorders style={[a.h_full_vh]}>
67 <View
68 style={[
69 a.align_center,
70 a.h_full_vh,
71 a.py_3xl,
72 a.px_xl,
73 {
74 paddingTop: headerOffset + a.py_3xl.paddingTop,
75 },
76 ]}>
77 <View style={[a.align_center, a.gap_sm, a.pb_xl]}>
78 <Text style={[a.text_xl, a.font_bold]}>
79 <Trans>Whoops!</Trans>
80 </Text>
81 <Text
82 style={[a.text_md, a.text_center, a.leading_snug, {maxWidth: 340}]}>
83 <Trans>
84 Looks like you unpinned all your feeds. But don't worry, you can
85 add some below 😄
86 </Trans>
87 </Text>
88 </View>
89
90 <View style={[a.flex_row, a.gap_md, a.justify_center, a.flex_wrap]}>
91 <Button
92 disabled={isPending}
93 label={_(msg`Apply default recommended feeds`)}
94 size="large"
95 variant="solid"
96 color="primary"
97 onPress={addRecommendedFeeds}>
98 <ButtonIcon icon={Plus} position="left" />
99 <ButtonText>{_(msg`Add recommended feeds`)}</ButtonText>
100 </Button>
101
102 <Link
103 label={_(msg`Browse other feeds`)}
104 to="/feeds"
105 size="large"
106 variant="solid"
107 color="secondary">
108 <ButtonIcon icon={ListSparkle} position="left" />
109 <ButtonText>{_(msg`Browse other feeds`)}</ButtonText>
110 </Link>
111 </View>
112 </View>
113 </CenteredView>
114 )
115}