Get rid of deprecated interface usages
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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: [],
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,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<
|
||||||
|
|||||||
@@ -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) && (
|
||||||
|
|||||||
@@ -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 =
|
||||||
|
|||||||
@@ -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 (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -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}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
|
|||||||
@@ -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={[
|
||||||
|
|||||||
Reference in New Issue
Block a user