about summary refs log tree commit diff
path: root/src/view/com/auth/onboarding/RecommendedFollows.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/com/auth/onboarding/RecommendedFollows.tsx')
-rw-r--r--src/view/com/auth/onboarding/RecommendedFollows.tsx272
1 files changed, 0 insertions, 272 deletions
diff --git a/src/view/com/auth/onboarding/RecommendedFollows.tsx b/src/view/com/auth/onboarding/RecommendedFollows.tsx
deleted file mode 100644
index a840f949e..000000000
--- a/src/view/com/auth/onboarding/RecommendedFollows.tsx
+++ /dev/null
@@ -1,272 +0,0 @@
-import React from 'react'
-import {ActivityIndicator, FlatList, StyleSheet, View} from 'react-native'
-import {AppBskyActorDefs, moderateProfile} from '@atproto/api'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {msg, Trans} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-
-import {logger} from '#/logger'
-import {useModerationOpts} from '#/state/queries/preferences'
-import {useSuggestedFollowsQuery} from '#/state/queries/suggested-follows'
-import {useGetSuggestedFollowersByActor} from '#/state/queries/suggested-follows'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {Button} from 'view/com/util/forms/Button'
-import {Mobile, TabletOrDesktop} from 'view/com/util/layouts/Breakpoints'
-import {TitleColumnLayout} from 'view/com/util/layouts/TitleColumnLayout'
-import {Text} from 'view/com/util/text/Text'
-import {ViewHeader} from 'view/com/util/ViewHeader'
-import {RecommendedFollowsItem} from './RecommendedFollowsItem'
-
-type Props = {
-  next: () => void
-}
-export function RecommendedFollows({next}: Props) {
-  const pal = usePalette('default')
-  const {_} = useLingui()
-  const {isTabletOrMobile} = useWebMediaQueries()
-  const {data: suggestedFollows} = useSuggestedFollowsQuery()
-  const getSuggestedFollowsByActor = useGetSuggestedFollowersByActor()
-  const [additionalSuggestions, setAdditionalSuggestions] = React.useState<{
-    [did: string]: AppBskyActorDefs.ProfileView[]
-  }>({})
-  const existingDids = React.useRef<string[]>([])
-  const moderationOpts = useModerationOpts()
-
-  const title = (
-    <>
-      <Trans>
-        <Text
-          style={[
-            pal.textLight,
-            tdStyles.title1,
-            isTabletOrMobile && tdStyles.title1Small,
-          ]}>
-          Follow some
-        </Text>
-        <Text
-          style={[
-            pal.link,
-            tdStyles.title2,
-            isTabletOrMobile && tdStyles.title2Small,
-          ]}>
-          Recommended
-        </Text>
-        <Text
-          style={[
-            pal.link,
-            tdStyles.title2,
-            isTabletOrMobile && tdStyles.title2Small,
-          ]}>
-          Users
-        </Text>
-      </Trans>
-      <Text type="2xl-medium" style={[pal.textLight, tdStyles.description]}>
-        <Trans>
-          Follow some users to get started. We can recommend you more users
-          based on who you find interesting.
-        </Trans>
-      </Text>
-      <View
-        style={{
-          flexDirection: 'row',
-          justifyContent: 'flex-end',
-          marginTop: 20,
-        }}>
-        <Button onPress={next} testID="continueBtn">
-          <View
-            style={{
-              flexDirection: 'row',
-              alignItems: 'center',
-              paddingLeft: 2,
-              gap: 6,
-            }}>
-            <Text
-              type="2xl-medium"
-              style={{color: '#fff', position: 'relative', top: -1}}>
-              <Trans context="action">Done</Trans>
-            </Text>
-            <FontAwesomeIcon icon="angle-right" color="#fff" size={14} />
-          </View>
-        </Button>
-      </View>
-    </>
-  )
-
-  const suggestions = React.useMemo(() => {
-    if (!suggestedFollows) return []
-
-    const additional = Object.entries(additionalSuggestions)
-    const items = suggestedFollows.pages.flatMap(page => page.actors)
-
-    outer: while (additional.length) {
-      const additionalAccount = additional.shift()
-
-      if (!additionalAccount) break
-
-      const [followedUser, relatedAccounts] = additionalAccount
-
-      for (let i = 0; i < items.length; i++) {
-        if (items[i].did === followedUser) {
-          items.splice(i + 1, 0, ...relatedAccounts)
-          continue outer
-        }
-      }
-    }
-
-    existingDids.current = items.map(i => i.did)
-
-    return items
-  }, [suggestedFollows, additionalSuggestions])
-
-  const onFollowStateChange = React.useCallback(
-    async ({following, did}: {following: boolean; did: string}) => {
-      if (following) {
-        try {
-          const {suggestions: results} = await getSuggestedFollowsByActor(did)
-
-          if (results.length) {
-            const deduped = results.filter(
-              r => !existingDids.current.find(did => did === r.did),
-            )
-            setAdditionalSuggestions(s => ({
-              ...s,
-              [did]: deduped.slice(0, 3),
-            }))
-          }
-        } catch (e) {
-          logger.error('RecommendedFollows: failed to get suggestions', {
-            message: e,
-          })
-        }
-      }
-
-      // not handling the unfollow case
-    },
-    [existingDids, getSuggestedFollowsByActor, setAdditionalSuggestions],
-  )
-
-  return (
-    <>
-      <TabletOrDesktop>
-        <TitleColumnLayout
-          testID="recommendedFollowsOnboarding"
-          title={title}
-          horizontal
-          titleStyle={isTabletOrMobile ? undefined : {minWidth: 470}}
-          contentStyle={{paddingHorizontal: 0}}>
-          {!suggestedFollows || !moderationOpts ? (
-            <ActivityIndicator size="large" />
-          ) : (
-            <FlatList
-              data={suggestions}
-              renderItem={({item}) => (
-                <RecommendedFollowsItem
-                  profile={item}
-                  onFollowStateChange={onFollowStateChange}
-                  moderation={moderateProfile(item, moderationOpts)}
-                />
-              )}
-              keyExtractor={item => item.did}
-              style={{flex: 1}}
-            />
-          )}
-        </TitleColumnLayout>
-      </TabletOrDesktop>
-
-      <Mobile>
-        <View style={[mStyles.container]} testID="recommendedFollowsOnboarding">
-          <View>
-            <ViewHeader
-              title={_(msg`Recommended Users`)}
-              showBackButton={false}
-              showOnDesktop
-            />
-            <Text type="lg-medium" style={[pal.text, mStyles.header]}>
-              <Trans>
-                Check out some recommended users. Follow them to see similar
-                users.
-              </Trans>
-            </Text>
-          </View>
-          {!suggestedFollows || !moderationOpts ? (
-            <ActivityIndicator size="large" />
-          ) : (
-            <FlatList
-              data={suggestions}
-              renderItem={({item}) => (
-                <RecommendedFollowsItem
-                  profile={item}
-                  onFollowStateChange={onFollowStateChange}
-                  moderation={moderateProfile(item, moderationOpts)}
-                />
-              )}
-              keyExtractor={item => item.did}
-              style={{flex: 1}}
-              showsVerticalScrollIndicator={false}
-            />
-          )}
-          <Button
-            onPress={next}
-            label={_(msg`Continue`)}
-            testID="continueBtn"
-            style={mStyles.button}
-            labelStyle={mStyles.buttonText}
-          />
-        </View>
-      </Mobile>
-    </>
-  )
-}
-
-const tdStyles = StyleSheet.create({
-  container: {
-    flex: 1,
-    marginHorizontal: 16,
-    justifyContent: 'space-between',
-  },
-  title1: {
-    fontSize: 36,
-    fontWeight: '800',
-    textAlign: 'right',
-  },
-  title1Small: {
-    fontSize: 24,
-  },
-  title2: {
-    fontSize: 58,
-    fontWeight: '800',
-    textAlign: 'right',
-  },
-  title2Small: {
-    fontSize: 36,
-  },
-  description: {
-    maxWidth: 400,
-    marginTop: 10,
-    marginLeft: 'auto',
-    textAlign: 'right',
-  },
-})
-
-const mStyles = StyleSheet.create({
-  container: {
-    flex: 1,
-    justifyContent: 'space-between',
-  },
-  header: {
-    marginBottom: 16,
-    marginHorizontal: 16,
-  },
-  button: {
-    marginBottom: 16,
-    marginHorizontal: 16,
-    marginTop: 16,
-    alignItems: 'center',
-  },
-  buttonText: {
-    textAlign: 'center',
-    fontSize: 18,
-    paddingVertical: 4,
-  },
-})