import React, { useCallback, useEffect } from 'react'; import { useGetImage } from 'utility/JellyfinApi'; import { NavigationProp } from '../types'; import { Text, SafeAreaView, FlatList, StyleSheet } from 'react-native'; import { useDispatch } from 'react-redux'; import { useNavigation } from '@react-navigation/native'; import { useTypedSelector } from 'store'; import { fetchRecentAlbums } from 'store/music/actions'; import TouchableHandler from 'components/TouchableHandler'; import ListContainer from './components/ListContainer'; import AlbumImage, { AlbumItem } from './components/AlbumImage'; import { useRecentAlbums } from 'store/music/selectors'; import { Header } from 'components/Typography'; import ListButton from 'components/ListButton'; import { t } from '@localisation'; import useDefaultStyles from 'components/Colors'; import { Album } from 'store/music/types'; const styles = StyleSheet.create({ columnWrapper: { paddingLeft: 10, paddingRight: 10 } }); const NavigationHeader: React.FC = () => { const navigation = useNavigation(); const defaultStyles = useDefaultStyles(); const handleAllAlbumsClick = useCallback(() => { navigation.navigate('Albums'); }, [navigation]); const handlePlaylistsClick = useCallback(() => { navigation.navigate('Playlists'); }, [navigation]); const handleSearchClick = useCallback(() => { navigation.navigate('Search'); }, [navigation]); return ( <> {t('all-albums')} {t('playlists')} {t('search')}
{t('recent-albums')}
); }; const RecentAlbums: React.FC = () => { const defaultStyles = useDefaultStyles(); // Retrieve data from store const { entities: albums } = useTypedSelector((state) => state.music.albums); const recentAlbums = useRecentAlbums(24); const isLoading = useTypedSelector((state) => state.music.albums.isLoading); // Initialise helpers const dispatch = useDispatch(); const navigation = useNavigation(); const getImage = useGetImage(); // Set callbacks const retrieveData = useCallback(() => dispatch(fetchRecentAlbums()), [dispatch]); const selectAlbum = useCallback((id: string) => navigation.navigate('Album', { id, album: albums[id] as Album }), [navigation, albums]); // Retrieve data on mount useEffect(() => { retrieveData(); }, [retrieveData]); return ( d} columnWrapperStyle={styles.columnWrapper} ListHeaderComponent={NavigationHeader} renderItem={({ item }) => ( {albums[item]?.Name} {albums[item]?.AlbumArtist} )} /> ); }; export default RecentAlbums;