Fine tune colors, remove PlayButton from AlbumDetail
This commit is contained in:
@@ -6,7 +6,6 @@ import 'react-image-lightbox/style.css'
|
|||||||
import subsonic from '../subsonic'
|
import subsonic from '../subsonic'
|
||||||
import { DurationField, formatRange, StarButton, SizeField } from '../common'
|
import { DurationField, formatRange, StarButton, SizeField } from '../common'
|
||||||
import { ArtistLinkField } from '../common'
|
import { ArtistLinkField } from '../common'
|
||||||
import { PlayButton } from '../common'
|
|
||||||
|
|
||||||
const AlbumDetails = ({ classes, record }) => {
|
const AlbumDetails = ({ classes, record }) => {
|
||||||
const [isLightboxOpen, setLightboxOpen] = React.useState(false)
|
const [isLightboxOpen, setLightboxOpen] = React.useState(false)
|
||||||
@@ -37,13 +36,7 @@ const AlbumDetails = ({ classes, record }) => {
|
|||||||
image={imageUrl}
|
image={imageUrl}
|
||||||
className={classes.albumCover}
|
className={classes.albumCover}
|
||||||
onClick={handleOpenLightbox}
|
onClick={handleOpenLightbox}
|
||||||
>
|
></CardMedia>
|
||||||
<PlayButton
|
|
||||||
record={record}
|
|
||||||
className={classes.playButton}
|
|
||||||
size={'large'}
|
|
||||||
/>
|
|
||||||
</CardMedia>
|
|
||||||
<CardContent className={classes.albumDetails}>
|
<CardContent className={classes.albumDetails}>
|
||||||
<Typography variant="h5" className={classes.albumTitle}>
|
<Typography variant="h5" className={classes.albumTitle}>
|
||||||
{record.name}
|
{record.name}
|
||||||
@@ -54,8 +47,8 @@ const AlbumDetails = ({ classes, record }) => {
|
|||||||
<Typography component="p">{genreYear(record)}</Typography>
|
<Typography component="p">{genreYear(record)}</Typography>
|
||||||
<Typography component="p">
|
<Typography component="p">
|
||||||
{record.songCount}{' '}
|
{record.songCount}{' '}
|
||||||
{translate('resources.song.name', { smart_count: record.songCount })}{' '}
|
{translate('resources.song.name', { smart_count: record.songCount })}
|
||||||
· <DurationField record={record} source={'duration'} /> ·{' '}
|
{' · '} <DurationField record={record} source={'duration'} /> {' · '}
|
||||||
<SizeField record={record} source="size" />
|
<SizeField record={record} source="size" />
|
||||||
</Typography>
|
</Typography>
|
||||||
<StarButton record={record} resource={'album'} size={'large'} />
|
<StarButton record={record} resource={'album'} size={'large'} />
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import React from 'react'
|
|||||||
import {
|
import {
|
||||||
GridList,
|
GridList,
|
||||||
GridListTile,
|
GridListTile,
|
||||||
|
Typography,
|
||||||
GridListTileBar,
|
GridListTileBar,
|
||||||
useMediaQuery,
|
useMediaQuery,
|
||||||
} from '@material-ui/core'
|
} from '@material-ui/core'
|
||||||
@@ -11,7 +12,12 @@ import { Link } from 'react-router-dom'
|
|||||||
import { linkToRecord, Loading } from 'react-admin'
|
import { linkToRecord, Loading } from 'react-admin'
|
||||||
import { withContentRect } from 'react-measure'
|
import { withContentRect } from 'react-measure'
|
||||||
import subsonic from '../subsonic'
|
import subsonic from '../subsonic'
|
||||||
import { AlbumContextMenu, PlayButton } from '../common'
|
import {
|
||||||
|
AlbumContextMenu,
|
||||||
|
PlayButton,
|
||||||
|
ArtistLinkField,
|
||||||
|
RangeField,
|
||||||
|
} from '../common'
|
||||||
|
|
||||||
const useStyles = makeStyles((theme) => ({
|
const useStyles = makeStyles((theme) => ({
|
||||||
root: {
|
root: {
|
||||||
@@ -38,19 +44,16 @@ const useStyles = makeStyles((theme) => ({
|
|||||||
textAlign: 'left',
|
textAlign: 'left',
|
||||||
fontSize: '1em',
|
fontSize: '1em',
|
||||||
},
|
},
|
||||||
artistLink: {
|
albumName: {
|
||||||
color: theme.palette.primary.light,
|
fontSize: '14px',
|
||||||
},
|
color: theme.palette.type === 'dark' ? '#eee' : 'black',
|
||||||
albumArtist: {
|
|
||||||
fontSize: '12px',
|
|
||||||
color: '#c5c5c5',
|
|
||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
whiteSpace: 'nowrap',
|
whiteSpace: 'nowrap',
|
||||||
textOverflow: 'ellipsis',
|
textOverflow: 'ellipsis',
|
||||||
},
|
},
|
||||||
albumName: {
|
albumSubtitle: {
|
||||||
fontSize: '14px',
|
fontSize: '12px',
|
||||||
color: '#eee',
|
color: theme.palette.type === 'dark' ? '#c5c5c5' : '#696969',
|
||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
whiteSpace: 'nowrap',
|
whiteSpace: 'nowrap',
|
||||||
textOverflow: 'ellipsis',
|
textOverflow: 'ellipsis',
|
||||||
@@ -63,7 +66,7 @@ const useStyles = makeStyles((theme) => ({
|
|||||||
opacity: 1,
|
opacity: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
albumLlink: {
|
albumLink: {
|
||||||
position: 'relative',
|
position: 'relative',
|
||||||
display: 'block',
|
display: 'block',
|
||||||
textDecoration: 'none',
|
textDecoration: 'none',
|
||||||
@@ -118,22 +121,26 @@ const AlbumGridTile = ({ showArtist, record, basePath }) => {
|
|||||||
<Cover album={record} />
|
<Cover album={record} />
|
||||||
<GridListTileBar
|
<GridListTileBar
|
||||||
className={isDesktop ? classes.tileBar : classes.tileBarMobile}
|
className={isDesktop ? classes.tileBar : classes.tileBarMobile}
|
||||||
subtitle={
|
subtitle={<PlayButton color={'white'} record={record} size="small" />}
|
||||||
<PlayButton
|
|
||||||
record={record}
|
|
||||||
className={classes.playButton}
|
|
||||||
size="small"
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
actionIcon={<AlbumContextMenu record={record} color={'white'} />}
|
actionIcon={<AlbumContextMenu record={record} color={'white'} />}
|
||||||
/>
|
/>
|
||||||
</Link>
|
</Link>
|
||||||
<Link
|
<Link
|
||||||
className={classes.albumLlink}
|
className={classes.albumLink}
|
||||||
to={linkToRecord(basePath, record.id, 'show')}
|
to={linkToRecord(basePath, record.id, 'show')}
|
||||||
>
|
>
|
||||||
<div className={classes.albumName}>{record.name}</div>
|
<Typography className={classes.albumName}>{record.name}</Typography>
|
||||||
<div className={classes.albumArtist}>{record.albumArtist}</div>
|
{showArtist ? (
|
||||||
|
<ArtistLinkField record={record} className={classes.albumSubtitle} />
|
||||||
|
) : (
|
||||||
|
<RangeField
|
||||||
|
record={record}
|
||||||
|
source={'year'}
|
||||||
|
sortBy={'maxYear'}
|
||||||
|
sortByOrder={'DESC'}
|
||||||
|
className={classes.albumSubtitle}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -11,10 +11,6 @@ export const useStyles = makeStyles((theme) => ({
|
|||||||
minWidth: '32em',
|
minWidth: '32em',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
playButton: {
|
|
||||||
opacity: 0,
|
|
||||||
transition: 'all 150ms ease-out',
|
|
||||||
},
|
|
||||||
albumCover: {
|
albumCover: {
|
||||||
display: 'inline-flex',
|
display: 'inline-flex',
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
|
|||||||
@@ -5,8 +5,16 @@ import { IconButton } from '@material-ui/core'
|
|||||||
import { useDispatch } from 'react-redux'
|
import { useDispatch } from 'react-redux'
|
||||||
import { useDataProvider } from 'react-admin'
|
import { useDataProvider } from 'react-admin'
|
||||||
import { playTracks } from '../audioplayer'
|
import { playTracks } from '../audioplayer'
|
||||||
|
import { makeStyles } from '@material-ui/core/styles'
|
||||||
|
|
||||||
const PlayButton = ({ record, size = 'small', ...rest }) => {
|
const useStyles = makeStyles({
|
||||||
|
icon: {
|
||||||
|
color: (props) => props.color,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const PlayButton = ({ record, color, size, ...rest }) => {
|
||||||
|
const classes = useStyles({ color })
|
||||||
let extractSongsData = function (response) {
|
let extractSongsData = function (response) {
|
||||||
const data = response.data.reduce(
|
const data = response.data.reduce(
|
||||||
(acc, cur) => ({ ...acc, [cur.id]: cur }),
|
(acc, cur) => ({ ...acc, [cur.id]: cur }),
|
||||||
@@ -37,6 +45,8 @@ const PlayButton = ({ record, size = 'small', ...rest }) => {
|
|||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
playAlbum(record)
|
playAlbum(record)
|
||||||
}}
|
}}
|
||||||
|
aria-label="play"
|
||||||
|
className={classes.icon}
|
||||||
{...rest}
|
{...rest}
|
||||||
size={size}
|
size={size}
|
||||||
>
|
>
|
||||||
@@ -46,7 +56,12 @@ const PlayButton = ({ record, size = 'small', ...rest }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PlayButton.propTypes = {
|
PlayButton.propTypes = {
|
||||||
icon: PropTypes.element,
|
|
||||||
record: PropTypes.object,
|
record: PropTypes.object,
|
||||||
|
color: PropTypes.string,
|
||||||
|
size: PropTypes.string,
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayButton.defaultProps = {
|
||||||
|
size: 'small',
|
||||||
}
|
}
|
||||||
export default PlayButton
|
export default PlayButton
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ const formatRange = (record, source) => {
|
|||||||
return range.join('-')
|
return range.join('-')
|
||||||
}
|
}
|
||||||
|
|
||||||
const RangeField = ({ record = {}, source }) => {
|
const RangeField = ({ className, record = {}, source }) => {
|
||||||
return <span>{formatRange(record, source)}</span>
|
return <span className={className}>{formatRange(record, source)}</span>
|
||||||
}
|
}
|
||||||
|
|
||||||
RangeField.propTypes = {
|
RangeField.propTypes = {
|
||||||
|
|||||||
Reference in New Issue
Block a user