import React, {useCallback, useMemo} from 'react' import { RefreshControl, StyleSheet, View, ActivityIndicator, FlatList, 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 AlgoItem from 'view/com/algos/AlgoItem' 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} from 'platform/detection' import {colors, s} from 'lib/styles' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {AlgoItemModel} from 'state/models/feeds/algo/algo-item' import {SavedFeedsModel} from 'state/models/feeds/algo/saved' type Props = NativeStackScreenProps export const SavedFeeds = 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 saved feeds. To save a feed, click the save button when a custom feed or algorithm shows up. ) } 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}) => ( )} initialNumToRender={10} ListFooterComponent={_ListFooterComponent} ListEmptyComponent={_ListEmptyComponent} extraData={savedFeeds.isLoading} // @ts-ignore our .web version only -prf desktopFixedHeight /> ) }), ) const SavedFeedItem = observer( ({item, savedFeeds}: {item: AlgoItemModel; savedFeeds: SavedFeedsModel}) => { const isPinned = savedFeeds.isPinned(item) return ( { savedFeeds.togglePinnedFeed(item) console.log('pinned', savedFeeds.pinned) console.log('isPinned', savedFeeds.isPinned(item)) }}> ) }, ) const styles = StyleSheet.create({ footer: { paddingVertical: 20, }, empty: { paddingHorizontal: 20, paddingVertical: 20, borderRadius: 16, marginHorizontal: 24, marginTop: 10, }, itemContainer: { flexDirection: 'row', alignItems: 'center', marginRight: 18, }, item: { borderTopWidth: 0, }, })