import _ from 'lodash'; import React, { useEffect, useMemo } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import Alert from 'Components/Alert'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import { kinds } from 'Helpers/Props'; import { clearAlbums, fetchAlbums } from 'Store/Actions/albumActions'; import createArtistAlbumsSelector from 'Store/Selectors/createArtistAlbumsSelector'; import translate from 'Utilities/String/translate'; import AlbumStudioAlbum from './AlbumStudioAlbum'; import styles from './AlbumDetails.css'; interface AlbumDetailsProps { artistId: number; } function AlbumDetails(props: AlbumDetailsProps) { const { artistId } = props; const { isFetching, isPopulated, error, items: albums, } = useSelector(createArtistAlbumsSelector(artistId)); const dispatch = useDispatch(); useEffect(() => { dispatch(fetchAlbums({ artistId })); return () => { dispatch(clearAlbums()); }; }, [dispatch, artistId]); const latestAlbums = useMemo(() => { const sortedAlbums = _.orderBy(albums, 'releaseDate', 'desc'); return sortedAlbums.slice(0, 20); }, [albums]); return (
{isFetching ? : null} {!isFetching && error ? ( {translate('AlbumsLoadError')} ) : null} {isPopulated && !error ? latestAlbums.map((album) => { const { id: albumId, title, disambiguation, albumType, monitored, statistics, isSaving = false, } = album; return ( ); }) : null} {latestAlbums.length < albums.length ? (
{translate('AlbumStudioTruncated')}
) : null}
); } export default AlbumDetails;