Detect different discs, even when missing the first track of the disc. Fix #620.

This commit is contained in:
Deluan
2020-11-12 20:32:59 -05:00
parent bdad927f11
commit 25db696c06
+23 -11
View File
@@ -1,4 +1,4 @@
import React, { useState, isValidElement, cloneElement } from 'react' import React, { useState, isValidElement, cloneElement, useMemo } from 'react'
import { useDispatch } from 'react-redux' import { useDispatch } from 'react-redux'
import { Datagrid, DatagridBody, DatagridRow } from 'react-admin' import { Datagrid, DatagridBody, DatagridRow } from 'react-admin'
import { TableCell, TableRow, Typography } from '@material-ui/core' import { TableCell, TableRow, Typography } from '@material-ui/core'
@@ -65,7 +65,7 @@ const DiscSubtitleRow = ({
export const SongDatagridRow = ({ export const SongDatagridRow = ({
record, record,
children, children,
multiDisc, firstTracks,
contextAlwaysVisible, contextAlwaysVisible,
onClickDiscSubtitle, onClickDiscSubtitle,
...rest ...rest
@@ -77,7 +77,7 @@ export const SongDatagridRow = ({
const childCount = fields.length const childCount = fields.length
return ( return (
<> <>
{multiDisc && record.trackNumber === 1 && ( {firstTracks.has(record.id) && (
<DiscSubtitleRow <DiscSubtitleRow
record={record} record={record}
onClick={onClickDiscSubtitle} onClick={onClickDiscSubtitle}
@@ -128,21 +128,33 @@ export const SongDatagrid = ({
dispatch(playTracks(data, idsToPlay)) dispatch(playTracks(data, idsToPlay))
} }
const multiDisc = const firstTracks = useMemo(() => {
showDiscSubtitles && const set = new Set(
new Set(
ids ids
.map((id) => data[id]) .filter((i) => data[i])
.filter((r) => r) // remove null records .reduce((acc, id) => {
.map((r) => r.discNumber) const last = acc && acc[acc.length - 1]
).size > 1 if (
acc.length === 0 ||
(last && data[id].discNumber !== data[last].discNumber)
) {
acc.push(id)
}
return acc
}, [])
)
if (!showDiscSubtitles || set.size < 2) {
set.clear()
}
return set
}, [ids, data, showDiscSubtitles])
const SongDatagridBody = (props) => ( const SongDatagridBody = (props) => (
<DatagridBody <DatagridBody
{...props} {...props}
row={ row={
<SongDatagridRow <SongDatagridRow
multiDisc={multiDisc} firstTracks={firstTracks}
contextAlwaysVisible={contextAlwaysVisible} contextAlwaysVisible={contextAlwaysVisible}
onClickDiscSubtitle={playDisc} onClickDiscSubtitle={playDisc}
/> />