import './AlbumPage.css'; import { Link } from 'react-router5' import {useRouteNode} from 'react-router5' import {unslugify, formatDuration} from './utils.js'; import {useReducer, useEffect} from 'react'; import {fetchAlbums} from './AlbumList'; import {fetchTracks} from './Album'; function pageReducer(state, action) { switch (action.type) { case 'LOAD_ALBUMS': if (!action.payload.items || !action.payload.items.length) return {error: 'Not found'}; const album = action.payload.items[0]; return {...state, album}; case 'SHOW_ALBUM': const tracks = action.payload.tracks; return {...state, tracks, loading: false}; default: throw new Error(`Unknown action type: ${action.type}`); } } export default function AlbumPage({dispatch, scrollRef}) { const { route } = useRouteNode('album'); const { artist: artistSlug, album: albumSlug } = route.params; const artistName = unslugify(artistSlug); const albumName = unslugify(albumSlug); const [{album, tracks, loading, error}, dispatchPage] = useReducer(pageReducer, {loading: true}); useEffect(()=>{ if (album) fetchTracks(album.id, 'SHOW_ALBUM', dispatchPage) else fetchAlbums({artist: artistName, album: albumName}, 0, dispatchPage); }, [artistName, albumName, album, dispatch]); return (
| {track.no}. | {track.title} | {track.bit_rate} kbps | {formatDuration(track.duration)} |