Detect different discs, even when missing the first track of the disc. Fix #620.
This commit is contained in:
@@ -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}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user