import { Avatar, makeStyles, useMediaQuery } from '@material-ui/core' import React, { cloneElement } from 'react' import { CreateButton, Datagrid, DateField, EditButton, Filter, sanitizeListRestProps, SearchInput, SimpleList, TextField, TopToolbar, UrlField, useTranslate, } from 'react-admin' import { List } from '../common' import { ToggleFieldsMenu, useSelectedFields } from '../common' import subsonic from '../subsonic' import { StreamField } from './StreamField' import { setTrack } from '../actions' import { songFromRadio } from './helper' import { RADIO_PLACEHOLDER_IMAGE } from '../consts' import { useDispatch } from 'react-redux' const useStyles = makeStyles({ row: { '&:hover': { '& $contextMenu': { visibility: 'visible', }, }, }, contextMenu: { visibility: 'hidden', }, }) const RadioFilter = (props) => ( ) const RadioListActions = ({ className, filters, resource, showFilter, displayedFilters, filterValues, isAdmin, ...rest }) => { const isNotSmall = useMediaQuery((theme) => theme.breakpoints.up('sm')) const translate = useTranslate() return ( {isAdmin && ( {translate('ra.action.create')} )} {filters && cloneElement(filters, { resource, showFilter, displayedFilters, filterValues, context: 'button', })} {isNotSmall && } ) } const avatarStyle = { width: 40, height: 40 } const CoverArtField = ({ record }) => { if (!record) return null const src = record.uploadedImage ? subsonic.getCoverArtUrl(record, 40, true) : RADIO_PLACEHOLDER_IMAGE return ( ) } CoverArtField.defaultProps = { label: '' } const RadioList = ({ permissions, ...props }) => { const classes = useStyles() const isXsmall = useMediaQuery((theme) => theme.breakpoints.down('xs')) const dispatch = useDispatch() const isAdmin = permissions === 'admin' const toggleableFields = { coverArt: , name: , homePageUrl: ( e.stopPropagation()} target="_blank" rel="noopener noreferrer" /> ), streamUrl: , updatedAt: , createdAt: , } const columns = useSelectedFields({ resource: 'radio', columns: toggleableFields, defaultOff: ['streamUrl', 'createdAt'], }) const handleRowClick = async (id, basePath, record) => { dispatch(setTrack(await songFromRadio(record))) } return ( } filters={} perPage={isXsmall ? 25 : 10} > {isXsmall ? ( } leftIcon={(r) => ( { e.preventDefault() e.stopPropagation() }} /> )} primaryText={(r) => r.name} secondaryText={(r) => r.homePageUrl} /> ) : ( {columns} {isAdmin && } )} ) } export default RadioList