about summary refs log tree commit diff
path: root/src/screens/StarterPack
diff options
context:
space:
mode:
Diffstat (limited to 'src/screens/StarterPack')
-rw-r--r--src/screens/StarterPack/StarterPackScreen.tsx71
-rw-r--r--src/screens/StarterPack/Wizard/State.tsx10
-rw-r--r--src/screens/StarterPack/Wizard/index.tsx12
3 files changed, 53 insertions, 40 deletions
diff --git a/src/screens/StarterPack/StarterPackScreen.tsx b/src/screens/StarterPack/StarterPackScreen.tsx
index 595e18527..5b267ff27 100644
--- a/src/screens/StarterPack/StarterPackScreen.tsx
+++ b/src/screens/StarterPack/StarterPackScreen.tsx
@@ -32,6 +32,7 @@ import {getStarterPackOgCard} from 'lib/strings/starter-pack'
 import {isWeb} from 'platform/detection'
 import {updateProfileShadow} from 'state/cache/profile-shadow'
 import {useModerationOpts} from 'state/preferences/moderation-opts'
+import {getAllListMembers} from 'state/queries/list-members'
 import {useResolvedStarterPackShortLink} from 'state/queries/resolve-short-link'
 import {useResolveDidQuery} from 'state/queries/resolve-uri'
 import {useShortenLink} from 'state/queries/shorten-link'
@@ -327,42 +328,52 @@ function Header({
 
     setIsProcessing(true)
 
+    let listItems: AppBskyGraphDefs.ListItemView[] = []
     try {
-      const list = await agent.app.bsky.graph.getList({
-        list: starterPack.list.uri,
-      })
-      const dids = list.data.items
-        .filter(
-          li =>
-            li.subject.did !== currentAccount?.did &&
-            !isBlockedOrBlocking(li.subject) &&
-            !isMuted(li.subject) &&
-            !li.subject.viewer?.following,
-        )
-        .map(li => li.subject.did)
-
-      const followUris = await bulkWriteFollows(agent, dids)
-
-      batchedUpdates(() => {
-        for (let did of dids) {
-          updateProfileShadow(queryClient, did, {
-            followingUri: followUris.get(did),
-          })
-        }
+      listItems = await getAllListMembers(agent, starterPack.list.uri)
+    } catch (e) {
+      setIsProcessing(false)
+      Toast.show(_(msg`An error occurred while trying to follow all`), 'xmark')
+      logger.error('Failed to get list members for starter pack', {
+        safeMessage: e,
       })
+      return
+    }
 
-      logEvent('starterPack:followAll', {
-        logContext: 'StarterPackProfilesList',
-        starterPack: starterPack.uri,
-        count: dids.length,
-      })
-      captureAction(ProgressGuideAction.Follow, dids.length)
-      Toast.show(_(msg`All accounts have been followed!`))
+    const dids = listItems
+      .filter(
+        li =>
+          li.subject.did !== currentAccount?.did &&
+          !isBlockedOrBlocking(li.subject) &&
+          !isMuted(li.subject) &&
+          !li.subject.viewer?.following,
+      )
+      .map(li => li.subject.did)
+
+    let followUris: Map<string, string>
+    try {
+      followUris = await bulkWriteFollows(agent, dids)
     } catch (e) {
-      Toast.show(_(msg`An error occurred while trying to follow all`), 'xmark')
-    } finally {
       setIsProcessing(false)
+      Toast.show(_(msg`An error occurred while trying to follow all`), 'xmark')
+      logger.error('Failed to follow all accounts', {safeMessage: e})
     }
+
+    setIsProcessing(false)
+    batchedUpdates(() => {
+      for (let did of dids) {
+        updateProfileShadow(queryClient, did, {
+          followingUri: followUris.get(did),
+        })
+      }
+    })
+    Toast.show(_(msg`All accounts have been followed!`))
+    captureAction(ProgressGuideAction.Follow, dids.length)
+    logEvent('starterPack:followAll', {
+      logContext: 'StarterPackProfilesList',
+      starterPack: starterPack.uri,
+      count: dids.length,
+    })
   }
 
   if (!AppBskyGraphStarterpack.isRecord(record)) {
diff --git a/src/screens/StarterPack/Wizard/State.tsx b/src/screens/StarterPack/Wizard/State.tsx
index ba5bb147c..debb7e23c 100644
--- a/src/screens/StarterPack/Wizard/State.tsx
+++ b/src/screens/StarterPack/Wizard/State.tsx
@@ -7,6 +7,7 @@ import {
 import {GeneratorView} from '@atproto/api/dist/client/types/app/bsky/feed/defs'
 import {msg} from '@lingui/macro'
 
+import {STARTER_PACK_MAX_SIZE} from 'lib/constants'
 import {useSession} from 'state/session'
 import * as Toast from '#/view/com/util/Toast'
 
@@ -73,9 +74,10 @@ function reducer(state: State, action: Action): State {
       updatedState = {...state, description: action.description}
       break
     case 'AddProfile':
-      if (state.profiles.length >= 51) {
+      if (state.profiles.length > STARTER_PACK_MAX_SIZE) {
         Toast.show(
-          msg`You may only add up to 50 profiles`.message ?? '',
+          msg`You may only add up to ${STARTER_PACK_MAX_SIZE} profiles`
+            .message ?? '',
           'info',
         )
       } else {
@@ -91,8 +93,8 @@ function reducer(state: State, action: Action): State {
       }
       break
     case 'AddFeed':
-      if (state.feeds.length >= 50) {
-        Toast.show(msg`You may only add up to 50 feeds`.message ?? '', 'info')
+      if (state.feeds.length >= 3) {
+        Toast.show(msg`You may only add up to 3 feeds`.message ?? '', 'info')
       } else {
         updatedState = {...state, feeds: [...state.feeds, action.feed]}
       }
diff --git a/src/screens/StarterPack/Wizard/index.tsx b/src/screens/StarterPack/Wizard/index.tsx
index 8d9bb165b..40a4a510b 100644
--- a/src/screens/StarterPack/Wizard/index.tsx
+++ b/src/screens/StarterPack/Wizard/index.tsx
@@ -20,7 +20,7 @@ import {useFocusEffect, useNavigation} from '@react-navigation/native'
 import {NativeStackScreenProps} from '@react-navigation/native-stack'
 
 import {logger} from '#/logger'
-import {HITSLOP_10} from 'lib/constants'
+import {HITSLOP_10, STARTER_PACK_MAX_SIZE} from 'lib/constants'
 import {createSanitizedDisplayName} from 'lib/moderation/create-sanitized-display-name'
 import {CommonNavigatorParams, NavigationProp} from 'lib/routes/types'
 import {logEvent} from 'lib/statsig/statsig'
@@ -33,7 +33,7 @@ import {
 } from 'lib/strings/starter-pack'
 import {isAndroid, isNative, isWeb} from 'platform/detection'
 import {useModerationOpts} from 'state/preferences/moderation-opts'
-import {useListMembersQuery} from 'state/queries/list-members'
+import {useAllListMembersQuery} from 'state/queries/list-members'
 import {useProfileQuery} from 'state/queries/profile'
 import {
   useCreateStarterPackMutation,
@@ -78,11 +78,10 @@ export function Wizard({
   const listUri = starterPack?.list?.uri
 
   const {
-    data: profilesData,
+    data: listItems,
     isLoading: isLoadingProfiles,
     isError: isErrorProfiles,
-  } = useListMembersQuery(listUri, 50)
-  const listItems = profilesData?.pages.flatMap(p => p.items)
+  } = useAllListMembersQuery(listUri)
 
   const {
     data: profile,
@@ -428,7 +427,8 @@ function Footer({
       {items.length > minimumItems && (
         <View style={[a.absolute, {right: 14, top: 31}]}>
           <Text style={[a.font_bold]}>
-            {items.length}/{state.currentStep === 'Profiles' ? 50 : 3}
+            {items.length}/
+            {state.currentStep === 'Profiles' ? STARTER_PACK_MAX_SIZE : 3}
           </Text>
         </View>
       )}