diff --git a/ui/src/album/AlbumShow.js b/ui/src/album/AlbumShow.js index 70e4ab20d..4560419bb 100644 --- a/ui/src/album/AlbumShow.js +++ b/ui/src/album/AlbumShow.js @@ -1,47 +1,28 @@ import React from 'react' -import { - Datagrid, - FunctionField, - List, - Loading, - TextField, - useGetOne -} from 'react-admin' +import { Loading, useGetOne } from 'react-admin' import AlbumDetails from './AlbumDetails' -import { DurationField, Title } from '../common' +import { Title } from '../common' import { useStyles } from './styles' import { AlbumActions } from './AlbumActions' import { AlbumSongBulkActions } from './AlbumSongBulkActions' -import { useMediaQuery } from '@material-ui/core' -import { setTrack } from '../audioplayer' -import { useDispatch } from 'react-redux' +import AlbumSongs from './AlbumSongs' const AlbumShow = (props) => { - const dispatch = useDispatch() - const isDesktop = useMediaQuery((theme) => theme.breakpoints.up('md')) const classes = useStyles() const { data: record, loading, error } = useGetOne('album', props.id) if (loading) { - return + return null } if (error) { return

ERROR: {error}

} - const trackName = (r) => { - const name = r.title - if (r.trackNumber) { - return r.trackNumber.toString().padStart(2, '0') + ' ' + name - } - return name - } - return ( <> - } actions={} @@ -52,23 +33,7 @@ const AlbumShow = (props) => { pagination={null} sort={{ field: 'discNumber asc, trackNumber asc', order: 'ASC' }} bulkActionButtons={} - > - dispatch(setTrack(record))} - > - {isDesktop && ( - - )} - {isDesktop && } - {!isDesktop && } - {isDesktop && } - - - + /> ) } diff --git a/ui/src/album/AlbumSongs.js b/ui/src/album/AlbumSongs.js new file mode 100644 index 000000000..ff1f283ae --- /dev/null +++ b/ui/src/album/AlbumSongs.js @@ -0,0 +1,111 @@ +import React from 'react' +import { + BulkActionsToolbar, + Datagrid, + FunctionField, + ListToolbar, + TextField, + useListController +} from 'react-admin' +import classnames from 'classnames' +import { useDispatch } from 'react-redux' +import { Card, useMediaQuery } from '@material-ui/core' +import { makeStyles } from '@material-ui/core/styles' +import { setTrack } from '../audioplayer' +import { DurationField } from '../common' + +const useStyles = makeStyles( + (theme) => ({ + root: {}, + main: { + display: 'flex' + }, + content: { + marginTop: 0, + transition: theme.transitions.create('margin-top'), + position: 'relative', + flex: '1 1 auto', + [theme.breakpoints.down('xs')]: { + boxShadow: 'none' + }, + overflow: 'inherit' + }, + bulkActionsDisplayed: { + marginTop: -theme.spacing(8), + transition: theme.transitions.create('margin-top') + }, + actions: { + zIndex: 2, + display: 'flex', + justifyContent: 'flex-end', + flexWrap: 'wrap' + }, + noResults: { padding: 20 } + }), + { name: 'RaList' } +) + +const trackName = (r) => { + const name = r.title + if (r.trackNumber) { + return r.trackNumber.toString().padStart(2, '0') + ' ' + name + } + return name +} + +const AlbumSongs = (props) => { + const classes = useStyles(props) + const dispatch = useDispatch() + const isDesktop = useMediaQuery((theme) => theme.breakpoints.up('md')) + const controllerProps = useListController(props) + const { bulkActionButtons } = props + const { loading, version } = controllerProps + + if (loading) { + return null + } + return ( + <> + +
+ 0 + })} + key={version} + > + {/*{bulkActionButtons !== false && bulkActionButtons && (*/} + + {bulkActionButtons} + + {/*)}*/} + dispatch(setTrack(record))} + {...controllerProps} + hasBulkActions={props.bulkActionButtons !== false} + > + {isDesktop && ( + + )} + {isDesktop && } + {!isDesktop && } + {isDesktop && } + + + +
+ + ) +} + +export default AlbumSongs