Skip to content

Commit 339fc19

Browse files
committed
feat(web): Show alternative values for release labels
- Extract release labels into their own component - Support displaying release labels inline (for alternative values) - Remove special list item padding for inline lists (also affects footer)
1 parent cd1fe5b commit 339fc19

File tree

4 files changed

+37
-9
lines changed

4 files changed

+37
-9
lines changed

server/components/Release.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { setupAlternativeValues } from './AlternativeValues.tsx';
22
import { ArtistCredit } from './ArtistCredit.tsx';
33
import { CoverImage } from './CoverImage.tsx';
4-
import { LinkedEntity } from './LinkedEntity.tsx';
54
import { MessageBox } from './MessageBox.tsx';
65
import { ProviderList } from './ProviderList.tsx';
6+
import { ReleaseLabels } from './ReleaseLabels.tsx';
77
import { TextWithLineBreaks } from './TextWithLineBreaks.tsx';
88
import { Tracklist } from './Tracklist.tsx';
99
import RegionList from '@/server/islands/RegionList.tsx';
@@ -59,14 +59,15 @@ export function Release({ release, releaseMap }: { release: HarmonyRelease; rele
5959
<tr>
6060
<th>Labels</th>
6161
<td>
62-
<ul>
63-
{labels?.map((label) => (
64-
<li>
65-
<LinkedEntity entity={label} entityType='label' displayName={label.name ?? '[unknown]'} />{' '}
66-
{label.catalogNumber}
67-
</li>
68-
))}
69-
</ul>
62+
<ReleaseLabels labels={labels} />
63+
<AlternativeValues
64+
property={(release) => release.labels}
65+
display={(labels) => <ReleaseLabels labels={labels} inline />}
66+
identifier={(labels) =>
67+
labels.map(
68+
({ name, catalogNumber }) => [name, catalogNumber].join('\t'),
69+
).join('\n')}
70+
/>
7071
</td>
7172
</tr>
7273
)}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import type { Label } from '@/harmonizer/types.ts';
2+
import { classList } from '@/utils/jsx.ts';
3+
import { LinkedEntity } from './LinkedEntity.tsx';
4+
5+
export function ReleaseLabels({ labels, inline }: {
6+
labels: Label[];
7+
inline?: boolean;
8+
}) {
9+
return (
10+
<ul class={classList('release-labels', inline && 'inline')}>
11+
{labels.map((label) => (
12+
<li>
13+
<LinkedEntity entity={label} entityType='label' displayName={label.name ?? '[unknown]'} />{' '}
14+
{label.catalogNumber}
15+
</li>
16+
))}
17+
</ul>
18+
);
19+
}

server/static/harmony.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ h1 + p.subtitle {
9191
text-align: center;
9292
}
9393

94+
ul.inline {
95+
display: inline-block;
96+
padding-inline: 0;
97+
}
9498
ul.inline > li {
9599
display: inline;
96100
}

utils/jsx.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/** Joins the given CSS classes, omitting all falsy values. */
2+
export function classList(...classes: Array<string | false | undefined>): string {
3+
return classes.filter(Boolean).join(' ');
4+
}

0 commit comments

Comments
 (0)