import React, {useMemo} from 'react' import { ActivityIndicator, FlatList, RefreshControl, StyleSheet, View, } from 'react-native' import {AppBskyActorDefs as ActorDefs} from '@atproto/api' import {Text} from '../com/util/text/Text' import {useStores} from 'state/index' import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {withAuthRequired} from 'view/com/auth/withAuthRequired' import {observer} from 'mobx-react-lite' import {NativeStackScreenProps} from '@react-navigation/native-stack' import {CommonNavigatorParams} from 'lib/routes/types' import {MutedAccountsModel} from 'state/models/lists/muted-accounts' import {useAnalytics} from 'lib/analytics/analytics' import {useFocusEffect} from '@react-navigation/native' import {ViewHeader} from '../com/util/ViewHeader' import {CenteredView} from 'view/com/util/Views' import {ProfileCard} from 'view/com/profile/ProfileCard' type Props = NativeStackScreenProps< CommonNavigatorParams, 'ModerationMutedAccounts' > export const ModerationMutedAccounts = withAuthRequired( observer(function ModerationMutedAccountsImpl({}: Props) { const pal = usePalette('default') const store = useStores() const {isTabletOrDesktop} = useWebMediaQueries() const {screen} = useAnalytics() const mutedAccounts = useMemo(() => new MutedAccountsModel(store), [store]) useFocusEffect( React.useCallback(() => { screen('MutedAccounts') store.shell.setMinimalShellMode(false) mutedAccounts.refresh() }, [screen, store, mutedAccounts]), ) const onRefresh = React.useCallback(() => { mutedAccounts.refresh() }, [mutedAccounts]) const onEndReached = React.useCallback(() => { mutedAccounts .loadMore() .catch(err => store.log.error('Failed to load more muted accounts', err), ) }, [mutedAccounts, store]) const renderItem = ({ item, index, }: { item: ActorDefs.ProfileView index: number }) => ( ) return ( Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private. {!mutedAccounts.hasContent ? ( You have not muted any accounts yet. To mute an account, go to their profile and selected "Mute account" from the menu on their account. ) : ( item.did} refreshControl={ } onEndReached={onEndReached} renderItem={renderItem} initialNumToRender={15} // FIXME(dan) // eslint-disable-next-line react/no-unstable-nested-components ListFooterComponent={() => ( {mutedAccounts.isLoading && } )} extraData={mutedAccounts.isLoading} // @ts-ignore our .web version only -prf desktopFixedHeight /> )} ) }), ) const styles = StyleSheet.create({ container: { flex: 1, paddingBottom: 100, }, containerDesktop: { borderLeftWidth: 1, borderRightWidth: 1, paddingBottom: 0, }, title: { textAlign: 'center', marginTop: 12, marginBottom: 12, }, description: { textAlign: 'center', paddingHorizontal: 30, marginBottom: 14, }, descriptionDesktop: { marginTop: 14, }, flex1: { flex: 1, }, empty: { paddingHorizontal: 20, paddingVertical: 20, borderRadius: 16, marginHorizontal: 24, marginTop: 10, }, emptyText: { textAlign: 'center', }, footer: { height: 200, paddingTop: 20, }, })