import React, { useMemo } from 'react' import { BulkActionsToolbar, ListToolbar, TextField, NumberField, useVersion, useListContext, FunctionField, } from 'react-admin' import clsx from 'clsx' import { useDispatch } from 'react-redux' import { Card, useMediaQuery } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder' import { playTracks } from '../actions' import { DurationField, SongBulkActions, SongContextMenu, SongDatagrid, SongInfo, SongTitleField, RatingField, QualityInfo, useSelectedFields, useResourceRefresh, } from '../common' import { AddToPlaylistDialog } from '../dialogs' import config from '../config' import ExpandInfoDialog from '../dialogs/ExpandInfoDialog' 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', }, }, bulkActionsDisplayed: { marginTop: -theme.spacing(8), transition: theme.transitions.create('margin-top'), }, actions: { zIndex: 2, display: 'flex', justifyContent: 'flex-end', flexWrap: 'wrap', }, noResults: { padding: 20 }, columnIcon: { marginLeft: '3px', marginTop: '-2px', verticalAlign: 'text-top', }, toolbar: { justifyContent: 'flex-start', }, row: { '&:hover': { '& $contextMenu': { visibility: 'visible', }, '& $ratingField': { visibility: 'visible', }, }, }, contextMenu: { visibility: (props) => (props.isDesktop ? 'hidden' : 'visible'), }, ratingField: { visibility: 'hidden', }, }), { name: 'RaList' } ) const AlbumSongs = (props) => { const { data, ids } = props const isDesktop = useMediaQuery((theme) => theme.breakpoints.up('md')) const classes = useStyles({ isDesktop }) const dispatch = useDispatch() const version = useVersion() useResourceRefresh('song', 'album') const toggleableFields = useMemo(() => { return { trackNumber: isDesktop && ( ), title: ( ), artist: isDesktop && , duration: , year: isDesktop && ( r.year || ''} sortByOrder={'DESC'} /> ), quality: isDesktop && , channels: isDesktop && , bpm: isDesktop && , rating: isDesktop && config.enableStarRating && ( ), } }, [isDesktop, classes.ratingField]) const columns = useSelectedFields({ resource: 'albumSong', columns: toggleableFields, omittedColumns: ['title'], defaultOff: ['channels', 'bpm', 'year'], }) return ( <>
0, })} key={version} > dispatch(playTracks(data, ids, id))} {...props} hasBulkActions={true} showDiscSubtitles={true} contextAlwaysVisible={!isDesktop} classes={{ row: classes.row }} > {columns} ) } />
} /> ) } export const removeAlbumCommentsFromSongs = ({ album, data }) => { if (album?.comment && data) { Object.values(data).forEach((song) => { song.comment = '' }) } } const SanitizedAlbumSongs = (props) => { removeAlbumCommentsFromSongs(props) const { loaded, loading, total, ...rest } = useListContext(props) return <>{loaded && } } export default SanitizedAlbumSongs