import React, {useCallback, useMemo} from 'react' import { RefreshControl, StyleSheet, View, ActivityIndicator, Pressable, TouchableOpacity, } from 'react-native' import {useFocusEffect} from '@react-navigation/native' import {NativeStackScreenProps} from '@react-navigation/native-stack' import {useAnalytics} from 'lib/analytics' import {usePalette} from 'lib/hooks/usePalette' import {CommonNavigatorParams} from 'lib/routes/types' import {observer} from 'mobx-react-lite' import {useStores} from 'state/index' import {withAuthRequired} from 'view/com/auth/withAuthRequired' import {ViewHeader} from 'view/com/util/ViewHeader' import {CenteredView} from 'view/com/util/Views' import {Text} from 'view/com/util/text/Text' import {isDesktopWeb, isWeb} from 'platform/detection' import {s} from 'lib/styles' import DraggableFlatList, { ShadowDecorator, ScaleDecorator, } from 'react-native-draggable-flatlist' import {SavedFeedItem} from 'view/com/algos/SavedFeedItem' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {CustomFeedModel} from 'state/models/feeds/custom-feed' type Props = NativeStackScreenProps export const PinnedFeeds = withAuthRequired( observer(({}: Props) => { // hooks for global items const pal = usePalette('default') const rootStore = useStores() const {screen} = useAnalytics() // hooks for local const savedFeeds = useMemo(() => rootStore.me.savedFeeds, [rootStore]) useFocusEffect( useCallback(() => { screen('SavedFeeds') rootStore.shell.setMinimalShellMode(false) savedFeeds.refresh() }, [screen, rootStore, savedFeeds]), ) const _ListEmptyComponent = () => { return ( You don't have any pinned feeds. To pin a feed, go back to the Saved Feeds screen and click the pin icon! ) } const _ListFooterComponent = () => { return ( {savedFeeds.isLoading && } ) } return ( item.data.uri} refreshing={savedFeeds.isRefreshing} refreshControl={ savedFeeds.refresh()} tintColor={pal.colors.text} titleColor={pal.colors.text} /> } renderItem={({item, drag}) => } initialNumToRender={10} ListFooterComponent={_ListFooterComponent} ListEmptyComponent={_ListEmptyComponent} extraData={savedFeeds.isLoading} onDragEnd={({data}) => savedFeeds.reorderPinnedFeeds(data)} // @ts-ignore our .web version only -prf desktopFixedHeight /> ) }), ) const PinnedItem = observer( ({item, drag}: {item: CustomFeedModel; drag: () => void}) => { const pal = usePalette('default') const rootStore = useStores() const savedFeeds = useMemo(() => rootStore.me.savedFeeds, [rootStore]) return ( {isWeb ? ( { savedFeeds.movePinnedItem(item, 'up') }}> { savedFeeds.movePinnedItem(item, 'down') }}> ) : ( )} ) }, ) const styles = StyleSheet.create({ footer: { paddingVertical: 20, }, empty: { paddingHorizontal: 20, paddingVertical: 20, borderRadius: 16, marginHorizontal: 24, marginTop: 10, }, itemContainer: { flex: 1, flexDirection: 'row', alignItems: 'center', marginLeft: 18, }, item: { borderTopWidth: 0, }, icon: {marginRight: 10}, webArrowButtonsContainer: { flexDirection: 'column', justifyContent: 'space-around', }, webArrowUpButton: {marginBottom: 10}, })