Skip to content

Commit 0db3ac0

Browse files
committed
data: TrackSection.directory, find.trackSection, etc
1 parent 83911a3 commit 0db3ac0

File tree

2 files changed

+76
-23
lines changed

2 files changed

+76
-23
lines changed

src/data/composite/things/album/withTracks.js

+11-8
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
import {input, templateCompositeFrom} from '#composite';
22

3-
import {exitWithoutDependency, raiseOutputWithoutDependency}
4-
from '#composite/control-flow';
3+
import find from '#find';
4+
5+
import {exitWithoutDependency} from '#composite/control-flow';
56
import {withFlattenedList, withPropertyFromList} from '#composite/data';
7+
import {withResolvedReferenceList} from '#composite/wiki-data';
68

79
export default templateCompositeFrom({
810
annotation: `withTracks`,
911

1012
outputs: ['#tracks'],
1113

1214
steps: () => [
13-
raiseOutputWithoutDependency({
14-
dependency: 'trackSections',
15-
output: input.value({
16-
'#tracks': [],
17-
}),
15+
withResolvedReferenceList({
16+
list: 'trackSections',
17+
data: 'ownTrackSectionData',
18+
find: input.value(find.unqualifiedTrackSection),
19+
}).outputs({
20+
['#resolvedReferenceList']: '#trackSections',
1821
}),
1922

2023
withPropertyFromList({
21-
list: 'trackSections',
24+
list: '#trackSections',
2225
property: input.value('tracks'),
2326
}),
2427

src/data/things/album.js

+65-15
Original file line numberDiff line numberDiff line change
@@ -121,17 +121,11 @@ export class Album extends Thing {
121121
commentary: commentary(),
122122
additionalFiles: additionalFiles(),
123123

124-
trackSections: {
125-
flags: {update: true, expose: true},
126-
127-
update: {
128-
validate:
129-
validateWikiData({
130-
referenceType:
131-
TrackSection[Thing.referenceType],
132-
}),
133-
},
134-
},
124+
trackSections: referenceList({
125+
referenceType: input.value('unqualified-track-section'),
126+
data: 'ownTrackSectionData',
127+
find: input.value(find.unqualifiedTrackSection),
128+
}),
135129

136130
artistContribs: contributionList(),
137131
coverArtistContribs: contributionList(),
@@ -172,6 +166,10 @@ export class Album extends Thing {
172166
class: input.value(Group),
173167
}),
174168

169+
ownTrackSectionData: wikiData({
170+
class: input.value(TrackSection),
171+
}),
172+
175173
// Expose only
176174

177175
commentatorArtists: commentatorArtists(),
@@ -360,6 +358,7 @@ export class Album extends Thing {
360358

361359
save(results) {
362360
const albumData = [];
361+
const trackSectionData = [];
363362
const trackData = [];
364363

365364
for (const {header: album, entries} of results) {
@@ -376,7 +375,10 @@ export class Album extends Thing {
376375
const albumRef = Thing.getReference(album);
377376

378377
const closeCurrentTrackSection = () => {
379-
if (empty(currentTrackSectionTracks)) {
378+
if (
379+
currentTrackSection.isDefaultTrackSection &&
380+
empty(currentTrackSectionTracks)
381+
) {
380382
return;
381383
}
382384

@@ -391,6 +393,7 @@ export class Album extends Thing {
391393
[album];
392394

393395
trackSections.push(currentTrackSection);
396+
trackSectionData.push(currentTrackSection);
394397
};
395398

396399
for (const entry of entries) {
@@ -402,7 +405,6 @@ export class Album extends Thing {
402405
}
403406

404407
currentTrackSectionTracks.push(entry);
405-
406408
trackData.push(entry);
407409

408410
entry.dataSourceAlbum = albumRef;
@@ -412,10 +414,16 @@ export class Album extends Thing {
412414

413415
albumData.push(album);
414416

415-
album.trackSections = trackSections;
417+
album.trackSections =
418+
trackSections
419+
.map(trackSection =>
420+
`unqualified-track-section:` +
421+
trackSection.unqualifiedDirectory);
422+
423+
album.ownTrackSectionData = trackSections;
416424
}
417425

418-
return {albumData, trackData};
426+
return {albumData, trackSectionData, trackData};
419427
},
420428

421429
sort({albumData, trackData}) {
@@ -478,6 +486,34 @@ export class TrackSection extends Thing {
478486

479487
// Expose only
480488

489+
directory: [
490+
withAlbum(),
491+
492+
exitWithoutDependency({
493+
dependency: '#album',
494+
}),
495+
496+
withPropertyFromObject({
497+
object: '#album',
498+
property: input.value('directory'),
499+
}),
500+
501+
withDirectory({
502+
directory: 'unqualifiedDirectory',
503+
}).outputs({
504+
'#directory': '#unqualifiedDirectory',
505+
}),
506+
507+
{
508+
dependencies: ['#album.directory', '#unqualifiedDirectory'],
509+
compute: ({
510+
['#album.directory']: albumDirectory,
511+
['#unqualifiedDirectory']: unqualifiedDirectory,
512+
}) =>
513+
albumDirectory + '/' + unqualifiedDirectory,
514+
},
515+
],
516+
481517
startIndex: [
482518
withAlbum(),
483519

@@ -517,6 +553,20 @@ export class TrackSection extends Thing {
517553
],
518554
});
519555

556+
static [Thing.findSpecs] = {
557+
trackSection: {
558+
referenceTypes: ['track-section'],
559+
bindTo: 'trackSectionData',
560+
},
561+
562+
unqualifiedTrackSection: {
563+
referenceTypes: ['unqualified-track-section'],
564+
565+
getMatchableDirectories: trackSection =>
566+
[trackSection.unqualifiedDirectory],
567+
},
568+
};
569+
520570
static [Thing.yamlDocumentSpec] = {
521571
fields: {
522572
'Section': {property: 'name'},

0 commit comments

Comments
 (0)