2021-02-11 23:43:21 +01:00
|
|
|
import React, { useCallback, useEffect } from 'react';
|
2022-01-01 22:36:05 +01:00
|
|
|
import { MusicStackParams } from '../types';
|
2022-01-01 19:09:21 +01:00
|
|
|
import { useRoute, RouteProp } from '@react-navigation/native';
|
|
|
|
|
import { useAppDispatch, useTypedSelector } from 'store';
|
|
|
|
|
import TrackListView from './components/TrackListView';
|
2020-06-21 10:30:41 +02:00
|
|
|
import { fetchTracksByAlbum } from 'store/music/actions';
|
2022-01-01 19:09:21 +01:00
|
|
|
import { differenceInDays } from 'date-fns';
|
|
|
|
|
import { ALBUM_CACHE_AMOUNT_OF_DAYS } from 'CONSTANTS';
|
2020-11-02 22:50:00 +01:00
|
|
|
import { t } from '@localisation';
|
2020-06-16 17:51:51 +02:00
|
|
|
|
2022-01-01 22:36:05 +01:00
|
|
|
type Route = RouteProp<MusicStackParams, 'Album'>;
|
2020-06-16 17:51:51 +02:00
|
|
|
|
2020-06-17 14:58:04 +02:00
|
|
|
const Album: React.FC = () => {
|
|
|
|
|
const { params: { id } } = useRoute<Route>();
|
2022-01-01 19:09:21 +01:00
|
|
|
const dispatch = useAppDispatch();
|
2020-06-16 17:51:51 +02:00
|
|
|
|
2022-01-01 19:09:21 +01:00
|
|
|
// Retrieve the album data from the store
|
|
|
|
|
const album = useTypedSelector((state) => state.music.albums.entities[id]);
|
|
|
|
|
const albumTracks = useTypedSelector((state) => state.music.tracks.byAlbum[id]);
|
2020-06-16 17:51:51 +02:00
|
|
|
|
2022-01-01 19:09:21 +01:00
|
|
|
// Define a function for refreshing this entity
|
|
|
|
|
const refresh = useCallback(() => dispatch(fetchTracksByAlbum(id)), [id, dispatch]);
|
2020-06-16 17:51:51 +02:00
|
|
|
|
2022-01-01 19:09:21 +01:00
|
|
|
// Auto-fetch the track data periodically
|
2020-06-20 23:10:19 +02:00
|
|
|
useEffect(() => {
|
2020-06-21 10:52:54 +02:00
|
|
|
if (!album?.lastRefreshed || differenceInDays(album?.lastRefreshed, new Date()) > ALBUM_CACHE_AMOUNT_OF_DAYS) {
|
2020-06-20 23:10:19 +02:00
|
|
|
refresh();
|
|
|
|
|
}
|
2020-07-06 16:56:23 +02:00
|
|
|
}, [album?.lastRefreshed, refresh]);
|
2020-06-17 14:58:04 +02:00
|
|
|
|
|
|
|
|
return (
|
2022-01-01 19:09:21 +01:00
|
|
|
<TrackListView
|
|
|
|
|
trackIds={albumTracks || []}
|
|
|
|
|
title={album?.Name}
|
|
|
|
|
artist={album?.AlbumArtist}
|
|
|
|
|
entityId={id}
|
|
|
|
|
refresh={refresh}
|
|
|
|
|
playButtonText={t('play-album')}
|
|
|
|
|
shuffleButtonText={t('shuffle-album')}
|
2022-01-02 17:46:50 +01:00
|
|
|
downloadButtonText={t('download-album')}
|
|
|
|
|
deleteButtonText={t('delete-album')}
|
2022-01-01 19:09:21 +01:00
|
|
|
/>
|
2020-06-17 14:58:04 +02:00
|
|
|
);
|
|
|
|
|
};
|
2020-06-16 17:51:51 +02:00
|
|
|
|
2020-06-17 14:58:04 +02:00
|
|
|
export default Album;
|