Get rid of deprecated interface usages

This commit is contained in:
Eric Bailey
2024-04-23 11:25:15 -05:00
parent e6761f8a2e
commit b0e394c42e
10 changed files with 75 additions and 56 deletions
+9 -4
View File
@@ -1,5 +1,6 @@
import React from 'react' import React from 'react'
import {View} from 'react-native' import {View} from 'react-native'
import {TID} from '@atproto/common-web'
import {msg, Trans} from '@lingui/macro' import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react' import {useLingui} from '@lingui/react'
@@ -62,10 +63,14 @@ export function StepFinished() {
// these must be serial // these must be serial
(async () => { (async () => {
await getAgent().setInterestsPref({tags: selectedInterests}) await getAgent().setInterestsPref({tags: selectedInterests})
await saveFeeds({ await saveFeeds(
saved: selectedFeeds, selectedFeeds.map(f => ({
pinned: selectedFeeds, id: TID.nextStr(),
}) type: 'feed',
value: f,
pinned: true,
})),
)
})(), })(),
]) ])
} catch (e: any) { } catch (e: any) {
+5 -5
View File
@@ -14,9 +14,9 @@ import {createFullHandle, validateHandle} from '#/lib/strings/handles'
import {getAge} from '#/lib/strings/time' import {getAge} from '#/lib/strings/time'
import {logger} from '#/logger' import {logger} from '#/logger'
import { import {
DEFAULT_PROD_FEEDS, DEFAULT_PROD_FEED,
useAddSavedFeedMutation,
usePreferencesSetBirthDateMutation, usePreferencesSetBirthDateMutation,
useSetSaveFeedsMutation,
} from '#/state/queries/preferences' } from '#/state/queries/preferences'
import {useSessionApi} from '#/state/session' import {useSessionApi} from '#/state/session'
import {useOnboardingDispatch} from '#/state/shell' import {useOnboardingDispatch} from '#/state/shell'
@@ -208,7 +208,7 @@ export function useSubmitSignup({
const {_} = useLingui() const {_} = useLingui()
const {createAccount} = useSessionApi() const {createAccount} = useSessionApi()
const {mutateAsync: setBirthDate} = usePreferencesSetBirthDateMutation() const {mutateAsync: setBirthDate} = usePreferencesSetBirthDateMutation()
const {mutate: setSavedFeeds} = useSetSaveFeedsMutation() const {mutate: addSavedFeed} = useAddSavedFeedMutation()
const onboardingDispatch = useOnboardingDispatch() const onboardingDispatch = useOnboardingDispatch()
return useCallback( return useCallback(
@@ -266,7 +266,7 @@ export function useSubmitSignup({
}) })
await setBirthDate({birthDate: state.dateOfBirth}) await setBirthDate({birthDate: state.dateOfBirth})
if (IS_PROD_SERVICE(state.serviceUrl)) { if (IS_PROD_SERVICE(state.serviceUrl)) {
setSavedFeeds(DEFAULT_PROD_FEEDS) addSavedFeed(DEFAULT_PROD_FEED)
} }
} catch (e: any) { } catch (e: any) {
onboardingDispatch({type: 'skip'}) // undo starting the onboard onboardingDispatch({type: 'skip'}) // undo starting the onboard
@@ -314,7 +314,7 @@ export function useSubmitSignup({
onboardingDispatch, onboardingDispatch,
createAccount, createAccount,
setBirthDate, setBirthDate,
setSavedFeeds, addSavedFeed,
], ],
) )
} }
+5 -9
View File
@@ -22,18 +22,14 @@ export const DEFAULT_THREAD_VIEW_PREFS: ThreadViewPreferences = {
const DEFAULT_PROD_FEED_PREFIX = (rkey: string) => const DEFAULT_PROD_FEED_PREFIX = (rkey: string) =>
`at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/${rkey}` `at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/${rkey}`
export const DEFAULT_PROD_FEEDS = { export const DEFAULT_PROD_FEED = {
pinned: [DEFAULT_PROD_FEED_PREFIX('whats-hot')], type: 'feed',
saved: [DEFAULT_PROD_FEED_PREFIX('whats-hot')], value: DEFAULT_PROD_FEED_PREFIX('whats-hot'),
pinned: true,
} }
export const DEFAULT_LOGGED_OUT_PREFERENCES: UsePreferencesQueryResponse = { export const DEFAULT_LOGGED_OUT_PREFERENCES: UsePreferencesQueryResponse = {
birthDate: new Date('2022-11-17'), // TODO(pwi) birthDate: new Date('2022-11-17'), // TODO(pwi)
feeds: {
saved: [],
pinned: [],
unpinned: [],
},
moderationPrefs: { moderationPrefs: {
adultContentEnabled: false, adultContentEnabled: false,
labels: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES, labels: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES,
@@ -45,5 +41,5 @@ export const DEFAULT_LOGGED_OUT_PREFERENCES: UsePreferencesQueryResponse = {
threadViewPrefs: DEFAULT_THREAD_VIEW_PREFS, threadViewPrefs: DEFAULT_THREAD_VIEW_PREFS,
userAge: 13, // TODO(pwi) userAge: 13, // TODO(pwi)
interests: {tags: []}, interests: {tags: []},
savedFeeds: [], // TODO could put stub ehre savedFeeds: [],
} }
-8
View File
@@ -54,14 +54,6 @@ export function usePreferencesQuery() {
const preferences: UsePreferencesQueryResponse = { const preferences: UsePreferencesQueryResponse = {
...res, ...res,
feeds: {
saved: res.feeds?.saved || [],
pinned: res.feeds?.pinned || [],
unpinned:
res.feeds.saved?.filter(f => {
return !res.feeds.pinned?.includes(f)
}) || [],
},
feedViewPrefs: { feedViewPrefs: {
...DEFAULT_HOME_FEED_PREFS, ...DEFAULT_HOME_FEED_PREFS,
...(res.feedViewPrefs.home || {}), ...(res.feedViewPrefs.home || {}),
+1 -4
View File
@@ -1,7 +1,7 @@
import { import {
BskyFeedViewPreference,
BskyPreferences, BskyPreferences,
BskyThreadViewPreference, BskyThreadViewPreference,
BskyFeedViewPreference,
} from '@atproto/api' } from '@atproto/api'
export type UsePreferencesQueryResponse = Omit< export type UsePreferencesQueryResponse = Omit<
@@ -16,9 +16,6 @@ export type UsePreferencesQueryResponse = Omit<
*/ */
threadViewPrefs: ThreadViewPreferences threadViewPrefs: ThreadViewPreferences
userAge: number | undefined userAge: number | undefined
feeds: Required<BskyPreferences['feeds']> & {
unpinned: string[]
}
} }
export type ThreadViewPreferences = Pick< export type ThreadViewPreferences = Pick<
+4
View File
@@ -1,5 +1,6 @@
import React from 'react' import React from 'react'
import {useWindowDimensions, View} from 'react-native' import {useWindowDimensions, View} from 'react-native'
import {AppBskyActorDefs} from '@atproto/api'
import {msg} from '@lingui/macro' import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react' import {useLingui} from '@lingui/react'
import {useNavigation} from '@react-navigation/native' import {useNavigation} from '@react-navigation/native'
@@ -34,6 +35,7 @@ export function FeedPage({
feedParams, feedParams,
renderEmptyState, renderEmptyState,
renderEndOfFeed, renderEndOfFeed,
savedFeedConfig,
}: { }: {
testID?: string testID?: string
feed: FeedDescriptor feed: FeedDescriptor
@@ -41,6 +43,7 @@ export function FeedPage({
isPageFocused: boolean isPageFocused: boolean
renderEmptyState: () => JSX.Element renderEmptyState: () => JSX.Element
renderEndOfFeed?: () => JSX.Element renderEndOfFeed?: () => JSX.Element
savedFeedConfig?: AppBskyActorDefs.SavedFeed
}) { }) {
const {hasSession} = useSession() const {hasSession} = useSession()
const {_} = useLingui() const {_} = useLingui()
@@ -132,6 +135,7 @@ export function FeedPage({
renderEmptyState={renderEmptyState} renderEmptyState={renderEmptyState}
renderEndOfFeed={renderEndOfFeed} renderEndOfFeed={renderEndOfFeed}
headerOffset={headerOffset} headerOffset={headerOffset}
savedFeedConfig={savedFeedConfig}
/> />
</MainScrollProvider> </MainScrollProvider>
{(isScrolledDown || hasNew) && ( {(isScrolledDown || hasNew) && (
+13 -1
View File
@@ -8,6 +8,7 @@ import {
View, View,
ViewStyle, ViewStyle,
} from 'react-native' } from 'react-native'
import {AppBskyActorDefs} from '@atproto/api'
import {msg} from '@lingui/macro' import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react' import {useLingui} from '@lingui/react'
import {useQueryClient} from '@tanstack/react-query' import {useQueryClient} from '@tanstack/react-query'
@@ -63,6 +64,7 @@ let Feed = ({
desktopFixedHeightOffset, desktopFixedHeightOffset,
ListHeaderComponent, ListHeaderComponent,
extraData, extraData,
savedFeedConfig,
}: { }: {
feed: FeedDescriptor feed: FeedDescriptor
feedParams?: FeedParams feedParams?: FeedParams
@@ -81,6 +83,7 @@ let Feed = ({
desktopFixedHeightOffset?: number desktopFixedHeightOffset?: number
ListHeaderComponent?: () => JSX.Element ListHeaderComponent?: () => JSX.Element
extraData?: any extraData?: any
savedFeedConfig?: AppBskyActorDefs.SavedFeed
}): React.ReactNode => { }): React.ReactNode => {
const theme = useTheme() const theme = useTheme()
const {track} = useAnalytics() const {track} = useAnalytics()
@@ -278,6 +281,7 @@ let Feed = ({
feedDesc={feed} feedDesc={feed}
error={error ?? undefined} error={error ?? undefined}
onPressTryAgain={onPressTryAgain} onPressTryAgain={onPressTryAgain}
savedFeedConfig={savedFeedConfig}
/> />
) )
} else if (item === LOAD_MORE_ERROR_ITEM) { } else if (item === LOAD_MORE_ERROR_ITEM) {
@@ -300,7 +304,15 @@ let Feed = ({
} }
return <FeedSlice slice={item} /> return <FeedSlice slice={item} />
}, },
[feed, error, onPressTryAgain, onPressRetryLoadMore, renderEmptyState, _], [
feed,
error,
onPressTryAgain,
onPressRetryLoadMore,
renderEmptyState,
_,
savedFeedConfig,
],
) )
const shouldRenderEndOfFeed = const shouldRenderEndOfFeed =
+31 -22
View File
@@ -1,21 +1,22 @@
import React from 'react' import React from 'react'
import {View} from 'react-native' import {View} from 'react-native'
import {AppBskyFeedGetAuthorFeed, AtUri} from '@atproto/api' import {AppBskyActorDefs, AppBskyFeedGetAuthorFeed, AtUri} from '@atproto/api'
import {Text} from '../util/text/Text'
import {Button} from '../util/forms/Button'
import * as Toast from '../util/Toast'
import {ErrorMessage} from '../util/error/ErrorMessage'
import {usePalette} from 'lib/hooks/usePalette'
import {useNavigation} from '@react-navigation/native'
import {NavigationProp} from 'lib/routes/types'
import {logger} from '#/logger'
import {msg as msgLingui, Trans} from '@lingui/macro' import {msg as msgLingui, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react' import {useLingui} from '@lingui/react'
import {FeedDescriptor} from '#/state/queries/post-feed' import {useNavigation} from '@react-navigation/native'
import {EmptyState} from '../util/EmptyState'
import {cleanError} from '#/lib/strings/errors' import {cleanError} from '#/lib/strings/errors'
import {logger} from '#/logger'
import {FeedDescriptor} from '#/state/queries/post-feed'
import {useRemoveFeedMutation} from '#/state/queries/preferences' import {useRemoveFeedMutation} from '#/state/queries/preferences'
import {usePalette} from 'lib/hooks/usePalette'
import {NavigationProp} from 'lib/routes/types'
import * as Prompt from '#/components/Prompt' import * as Prompt from '#/components/Prompt'
import {EmptyState} from '../util/EmptyState'
import {ErrorMessage} from '../util/error/ErrorMessage'
import {Button} from '../util/forms/Button'
import {Text} from '../util/text/Text'
import * as Toast from '../util/Toast'
export enum KnownError { export enum KnownError {
Block = 'Block', Block = 'Block',
@@ -33,10 +34,12 @@ export function FeedErrorMessage({
feedDesc, feedDesc,
error, error,
onPressTryAgain, onPressTryAgain,
savedFeedConfig,
}: { }: {
feedDesc: FeedDescriptor feedDesc: FeedDescriptor
error?: Error error?: Error
onPressTryAgain: () => void onPressTryAgain: () => void
savedFeedConfig?: AppBskyActorDefs.SavedFeed
}) { }) {
const {_: _l} = useLingui() const {_: _l} = useLingui()
const knownError = React.useMemo( const knownError = React.useMemo(
@@ -46,13 +49,15 @@ export function FeedErrorMessage({
if ( if (
typeof knownError !== 'undefined' && typeof knownError !== 'undefined' &&
knownError !== KnownError.Unknown && knownError !== KnownError.Unknown &&
(feedDesc.startsWith('feedgen') || knownError === KnownError.FeedNSFPublic) (savedFeedConfig?.type === 'feed' ||
knownError === KnownError.FeedNSFPublic)
) { ) {
return ( return (
<FeedgenErrorMessage <FeedgenErrorMessage
feedDesc={feedDesc} feedDesc={feedDesc}
knownError={knownError} knownError={knownError}
rawError={error} rawError={error}
savedFeedConfig={savedFeedConfig}
/> />
) )
} }
@@ -79,10 +84,12 @@ function FeedgenErrorMessage({
feedDesc, feedDesc,
knownError, knownError,
rawError, rawError,
savedFeedConfig,
}: { }: {
feedDesc: FeedDescriptor feedDesc: FeedDescriptor
knownError: KnownError knownError: KnownError
rawError?: Error rawError?: Error
savedFeedConfig?: AppBskyActorDefs.SavedFeed
}) { }) {
const pal = usePalette('default') const pal = usePalette('default')
const {_: _l} = useLingui() const {_: _l} = useLingui()
@@ -131,7 +138,8 @@ function FeedgenErrorMessage({
const onRemoveFeed = React.useCallback(async () => { const onRemoveFeed = React.useCallback(async () => {
try { try {
await removeFeed({uri}) if (!savedFeedConfig) return
await removeFeed(savedFeedConfig)
} catch (err) { } catch (err) {
Toast.show( Toast.show(
_l( _l(
@@ -140,7 +148,7 @@ function FeedgenErrorMessage({
) )
logger.error('Failed to remove feed', {message: err}) logger.error('Failed to remove feed', {message: err})
} }
}, [uri, removeFeed, _l]) }, [removeFeed, _l, savedFeedConfig])
const cta = React.useMemo(() => { const cta = React.useMemo(() => {
switch (knownError) { switch (knownError) {
@@ -154,13 +162,14 @@ function FeedgenErrorMessage({
case KnownError.FeedgenUnknown: { case KnownError.FeedgenUnknown: {
return ( return (
<View style={{flexDirection: 'row', alignItems: 'center', gap: 10}}> <View style={{flexDirection: 'row', alignItems: 'center', gap: 10}}>
{knownError === KnownError.FeedgenDoesNotExist && ( {knownError === KnownError.FeedgenDoesNotExist &&
<Button savedFeedConfig && (
type="inverted" <Button
label={_l(msgLingui`Remove feed`)} type="inverted"
onPress={onRemoveFeed} label={_l(msgLingui`Remove feed`)}
/> onPress={onRemoveFeed}
)} />
)}
<Button <Button
type="default-light" type="default-light"
label={_l(msgLingui`View profile`)} label={_l(msgLingui`View profile`)}
@@ -170,7 +179,7 @@ function FeedgenErrorMessage({
) )
} }
} }
}, [knownError, onViewProfile, onRemoveFeed, _l]) }, [knownError, onViewProfile, onRemoveFeed, _l, savedFeedConfig])
return ( return (
<> <>
+5 -1
View File
@@ -197,7 +197,7 @@ function HomeScreenReady({
return { return {
mergeFeedEnabled: Boolean(preferences.feedViewPrefs.lab_mergeFeedEnabled), mergeFeedEnabled: Boolean(preferences.feedViewPrefs.lab_mergeFeedEnabled),
mergeFeedSources: preferences.feedViewPrefs.lab_mergeFeedEnabled mergeFeedSources: preferences.feedViewPrefs.lab_mergeFeedEnabled
? preferences.feeds.saved ? preferences.savedFeeds.map(f => f.value)
: [], : [],
} }
}, [preferences]) }, [preferences])
@@ -226,6 +226,9 @@ function HomeScreenReady({
/> />
) )
} }
const savedFeedConfig = preferences.savedFeeds.find(f => {
return feed.includes(f.value)
})
return ( return (
<FeedPage <FeedPage
@@ -234,6 +237,7 @@ function HomeScreenReady({
isPageFocused={selectedFeed === feed} isPageFocused={selectedFeed === feed}
feed={feed} feed={feed}
renderEmptyState={renderCustomFeedEmptyState} renderEmptyState={renderCustomFeedEmptyState}
savedFeedConfig={savedFeedConfig}
/> />
) )
})} })}
+2 -2
View File
@@ -92,7 +92,7 @@ export function SavedFeeds({}: Props) {
</Text> </Text>
</View> </View>
{preferences?.feeds ? ( {preferences?.savedFeeds.length ? (
!pinnedFeeds.length ? ( !pinnedFeeds.length ? (
<View <View
style={[ style={[
@@ -126,7 +126,7 @@ export function SavedFeeds({}: Props) {
<Trans>Saved Feeds</Trans> <Trans>Saved Feeds</Trans>
</Text> </Text>
</View> </View>
{preferences?.feeds ? ( {preferences?.savedFeeds.length ? (
!unpinnedFeeds.length ? ( !unpinnedFeeds.length ? (
<View <View
style={[ style={[