import React from 'react' import {View} from 'react-native' import {AtUri, AppBskyFeedGetFeed as GetCustomFeed} from '@atproto/api' import {PostsFeedModel, KnownError} from 'state/models/feeds/posts' 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 {useStores} from 'state/index' import {logger} from '#/logger' import {useModalControls} from '#/state/modals' const MESSAGES = { [KnownError.Unknown]: '', [KnownError.FeedgenDoesNotExist]: `Hmmm, we're having trouble finding this feed. It may have been deleted.`, [KnownError.FeedgenMisconfigured]: 'Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue.', [KnownError.FeedgenBadResponse]: 'Hmm, the feed server gave a bad response. Please let the feed owner know about this issue.', [KnownError.FeedgenOffline]: 'Hmm, the feed server appears to be offline. Please let the feed owner know about this issue.', [KnownError.FeedgenUnknown]: 'Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue.', } export function FeedErrorMessage({ feed, onPressTryAgain, }: { feed: PostsFeedModel onPressTryAgain: () => void }) { if ( typeof feed.knownError === 'undefined' || feed.knownError === KnownError.Unknown ) { return ( ) } return } function FeedgenErrorMessage({ feed, knownError, }: { feed: PostsFeedModel knownError: KnownError }) { const pal = usePalette('default') const store = useStores() const navigation = useNavigation() const msg = MESSAGES[knownError] const uri = (feed.params as GetCustomFeed.QueryParams).feed const [ownerDid] = safeParseFeedgenUri(uri) const {openModal, closeModal} = useModalControls() const onViewProfile = React.useCallback(() => { navigation.navigate('Profile', {name: ownerDid}) }, [navigation, ownerDid]) const onRemoveFeed = React.useCallback(async () => { openModal({ name: 'confirm', title: 'Remove feed', message: 'Remove this feed from your saved feeds?', async onPressConfirm() { try { await store.preferences.removeSavedFeed(uri) } catch (err) { Toast.show( 'There was an an issue removing this feed. Please check your internet connection and try again.', ) logger.error('Failed to remove feed', {error: err}) } }, onPressCancel() { closeModal() }, }) }, [store, openModal, closeModal, uri]) return ( {msg} {knownError === KnownError.FeedgenDoesNotExist && (