import React, { useMemo } from 'react' import { BulkActionsToolbar, FunctionField, ListToolbar, NumberField, TextField, useListContext, useVersion, } 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 { ArtistLinkField, DateField, DurationField, QualityInfo, RatingField, SizeField, SongBulkActions, SongContextMenu, SongDatagrid, SongInfo, SongTitleField, useResourceRefresh, useSelectedFields, } from '../common' import config from '../config' import ExpandInfoDialog from '../dialogs/ExpandInfoDialog' import { removeAlbumCommentsFromSongs } from './utils.js' 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 || ''} sortable={false} /> ), playCount: isDesktop && ( ), playDate: , quality: isDesktop && , size: 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', 'playCount', 'playDate', 'size'], }) const bulkActionsLabel = isDesktop ? 'ra.action.bulk_actions' : 'ra.action.bulk_actions_mobile' return ( <>
0, })} key={version} > dispatch(playTracks(data, ids, id))} {...props} hasBulkActions={true} showDiscSubtitles={true} showReleaseDivider={true} contextAlwaysVisible={!isDesktop} classes={{ row: classes.row }} > {columns} ) } />
} /> ) } const SanitizedAlbumSongs = (props) => { removeAlbumCommentsFromSongs(props) const { loaded, loading, total, ...rest } = useListContext(props) return <>{loaded && } } export default SanitizedAlbumSongs