fix(musicbrainz): don't separate members by ended status
- All band members go to single 'Members' list - Show ended status with muted color - Tooltip shows roles + period (e.g. 'guitar (1981 - 2003)') - Remove separate 'Former Members' section cc
This commit is contained in:
1 parent
77d3d21882
commit
8271cb2436
5 files changed
+40
-29
No files matched your search
@@ -402,17 +402,15 @@ fn extract_relationships(artist: &ArtistFullResponse) -> ArtistRelationships {
|
|||||||
begin: relation.begin.clone(),
|
begin: relation.begin.clone(),
|
||||||
end: relation.end.clone(),
|
end: relation.end.clone(),
|
||||||
}),
|
}),
|
||||||
|
ended: relation.ended.unwrap_or(false),
|
||||||
};
|
};
|
||||||
|
|
||||||
match relation.relation_type.as_str() {
|
match relation.relation_type.as_str() {
|
||||||
"member of band" => {
|
"member of band" => {
|
||||||
if relation.direction.as_deref() == Some("backward") {
|
if relation.direction.as_deref() == Some("backward") {
|
||||||
// We're viewing a BAND, the related artist is a MEMBER
|
// We're viewing a BAND, the related artist is a MEMBER
|
||||||
if relation.ended == Some(true) {
|
// All members go to the same list - don't separate by ended status
|
||||||
past_members.push(related);
|
members.push(related);
|
||||||
} else {
|
|
||||||
members.push(related);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// We're viewing a PERSON, the related artist is a BAND/GROUP
|
// We're viewing a PERSON, the related artist is a BAND/GROUP
|
||||||
groups.push(related);
|
groups.push(related);
|
||||||
|
|||||||
@@ -328,6 +328,7 @@ pub struct RelatedArtist {
|
|||||||
pub name: String,
|
pub name: String,
|
||||||
pub role: Option<String>,
|
pub role: Option<String>,
|
||||||
pub period: Option<Period>,
|
pub period: Option<Period>,
|
||||||
|
pub ended: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Time period for a relationship
|
/// Time period for a relationship
|
||||||
|
|||||||
@@ -128,6 +128,7 @@
|
|||||||
name: string;
|
name: string;
|
||||||
role?: string;
|
role?: string;
|
||||||
period?: { begin?: string; end?: string };
|
period?: { begin?: string; end?: string };
|
||||||
|
ended: boolean;
|
||||||
}
|
}
|
||||||
interface ArtistRelationships {
|
interface ArtistRelationships {
|
||||||
members: RelatedArtist[];
|
members: RelatedArtist[];
|
||||||
@@ -140,6 +141,7 @@
|
|||||||
name: string;
|
name: string;
|
||||||
roles: string[];
|
roles: string[];
|
||||||
period?: { begin?: string; end?: string };
|
period?: { begin?: string; end?: string };
|
||||||
|
ended: boolean;
|
||||||
}
|
}
|
||||||
let mbRelationships = $state<ArtistRelationships | null>(null);
|
let mbRelationships = $state<ArtistRelationships | null>(null);
|
||||||
let mbRelationshipsLoading = $state(false);
|
let mbRelationshipsLoading = $state(false);
|
||||||
@@ -562,8 +564,8 @@
|
|||||||
let hasRelationships = $derived(
|
let hasRelationships = $derived(
|
||||||
mbRelationships &&
|
mbRelationships &&
|
||||||
(mbRelationships.members.length > 0 ||
|
(mbRelationships.members.length > 0 ||
|
||||||
mbRelationships.pastMembers.length > 0 ||
|
mbRelationships.groups.length > 0 ||
|
||||||
mbRelationships.groups.length > 0)
|
mbRelationships.collaborators.length > 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Group members by MBID, combining their roles
|
// Group members by MBID, combining their roles
|
||||||
@@ -575,12 +577,17 @@
|
|||||||
if (member.role && !existing.roles.includes(member.role)) {
|
if (member.role && !existing.roles.includes(member.role)) {
|
||||||
existing.roles.push(member.role);
|
existing.roles.push(member.role);
|
||||||
}
|
}
|
||||||
|
// If any entry is ended, mark as ended
|
||||||
|
if (member.ended) {
|
||||||
|
existing.ended = true;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
grouped.set(member.mbid, {
|
grouped.set(member.mbid, {
|
||||||
mbid: member.mbid,
|
mbid: member.mbid,
|
||||||
name: member.name,
|
name: member.name,
|
||||||
roles: member.role ? [member.role] : [],
|
roles: member.role ? [member.role] : [],
|
||||||
period: member.period
|
period: member.period,
|
||||||
|
ended: member.ended
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -590,9 +597,6 @@
|
|||||||
let groupedMembers = $derived(
|
let groupedMembers = $derived(
|
||||||
mbRelationships ? groupMembersByMbid(mbRelationships.members) : []
|
mbRelationships ? groupMembersByMbid(mbRelationships.members) : []
|
||||||
);
|
);
|
||||||
let groupedPastMembers = $derived(
|
|
||||||
mbRelationships ? groupMembersByMbid(mbRelationships.pastMembers) : []
|
|
||||||
);
|
|
||||||
let groupedGroups = $derived(
|
let groupedGroups = $derived(
|
||||||
mbRelationships ? groupMembersByMbid(mbRelationships.groups) : []
|
mbRelationships ? groupMembersByMbid(mbRelationships.groups) : []
|
||||||
);
|
);
|
||||||
@@ -1946,25 +1950,18 @@
|
|||||||
<div class="relationship-group">
|
<div class="relationship-group">
|
||||||
<span class="relationship-label">Members</span>
|
<span class="relationship-label">Members</span>
|
||||||
{#each groupedMembers as member}
|
{#each groupedMembers as member}
|
||||||
|
{@const periodStr = member.period?.begin || member.period?.end
|
||||||
|
? `${member.period.begin || '?'} - ${member.period.end || 'present'}`
|
||||||
|
: ''}
|
||||||
|
{@const tooltipParts = [...member.roles]}
|
||||||
|
{@const tooltip = tooltipParts.length > 0
|
||||||
|
? (periodStr ? `${tooltipParts.join(', ')} (${periodStr})` : tooltipParts.join(', '))
|
||||||
|
: (periodStr || member.name)}
|
||||||
<button
|
<button
|
||||||
class="sidebar-artist-link"
|
class="sidebar-artist-link"
|
||||||
|
class:ended={member.ended}
|
||||||
onclick={() => navigateToRelatedArtist(member.name)}
|
onclick={() => navigateToRelatedArtist(member.name)}
|
||||||
title={member.roles.length > 0 ? member.roles.join(', ') : member.name}
|
title={tooltip}
|
||||||
>
|
|
||||||
<User size={12} />
|
|
||||||
{member.name}
|
|
||||||
</button>
|
|
||||||
{/each}
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
{#if groupedPastMembers.length > 0}
|
|
||||||
<div class="relationship-group">
|
|
||||||
<span class="relationship-label">Former Members</span>
|
|
||||||
{#each groupedPastMembers as member}
|
|
||||||
<button
|
|
||||||
class="sidebar-artist-link past-member"
|
|
||||||
onclick={() => navigateToRelatedArtist(member.name)}
|
|
||||||
title={member.roles.length > 0 ? member.roles.join(', ') : member.name}
|
|
||||||
>
|
>
|
||||||
<User size={12} />
|
<User size={12} />
|
||||||
{member.name}
|
{member.name}
|
||||||
@@ -2140,11 +2137,11 @@
|
|||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-artist-link.past-member {
|
.sidebar-artist-link.ended {
|
||||||
color: var(--text-muted);
|
color: var(--text-muted);
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-artist-link.past-member:hover {
|
.sidebar-artist-link.ended:hover {
|
||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 512 512" id="svg2793" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:serif="http://www.serif.com/" xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs id="defs2797"/>
|
||||||
|
<g id="_24-Connect" style="display:inline" transform="translate(-3072,-4096)">
|
||||||
|
<g id="g2211" transform="translate(3339.32,4267.43)">
|
||||||
|
<path d="m 0,169.14 c -44.818,0 -81.28,-36.462 -81.28,-81.28 0,-44.818 36.462,-81.28 81.28,-81.28 44.817,0 81.279,36.462 81.279,81.28 0,44.818 -36.462,81.28 -81.279,81.28 m -149.2,141.43 c -24.587,0 -44.59,-20.003 -44.59,-44.59 0,-24.587 20.003,-44.59 44.59,-44.59 24.587,0 44.59,20.003 44.59,44.59 0,24.587 -20.003,44.59 -44.59,44.59 m -83.91,-398.5 c 0,-29.5 24,-53.5 53.5,-53.5 29.494,0 53.49,24 53.49,53.5 0,29.494 -23.996,53.49 -53.49,53.49 -29.5,0 -53.5,-23.996 -53.5,-53.49 m 412.099,37 c 17.364,0 31.49,14.126 31.49,31.49 0,17.369 -14.126,31.5 -31.49,31.5 -17.369,0 -31.5,-14.131 -31.5,-31.5 0,-17.364 14.131,-31.49 31.5,-31.49 m -44.46,73.915 c 11.207,11.739 26.989,19.075 44.46,19.075 33.907,0 61.49,-27.589 61.49,-61.5 0,-33.906 -27.583,-61.49 -61.49,-61.49 -33.911,0 -61.5,27.584 -61.5,61.49 0,5.628 0.776,11.076 2.198,16.259 L 87.091,18.672 C 66.687,-6.959 35.231,-23.42 0,-23.42 c -26.243,0 -50.388,9.137 -69.436,24.388 l -44.024,-38.046 c 10.859,-14.093 17.34,-31.725 17.34,-50.852 0,-46.042 -37.453,-83.5 -83.49,-83.5 -46.042,0 -83.5,37.458 -83.5,83.5 0,46.036 37.458,83.49 83.5,83.49 16.012,0 30.98,-4.54 43.702,-12.388 l 45.751,39.538 c -13.281,18.326 -21.123,40.838 -21.123,65.15 0,27.971 10.377,53.562 27.478,73.133 l -30.6,39.04 c -10.397,-5.508 -22.236,-8.643 -34.798,-8.643 -41.129,0 -74.59,33.461 -74.59,74.59 0,41.129 33.461,74.59 74.59,74.59 41.129,0 74.59,-33.461 74.59,-74.59 0,-17.745 -6.24,-34.055 -16.625,-46.873 l 30.054,-38.343 c 17.567,11.607 38.596,18.376 61.181,18.376 61.359,0 111.279,-49.92 111.279,-111.28 0,-15.382 -3.138,-30.045 -8.806,-43.383 z" id="path2209" style="fill-rule:nonzero"/>
|
||||||
|
</g>
|
||||||
|
<g id="g2215" transform="translate(3521.08,4502.59)">
|
||||||
|
<path d="M 0,57.45 C -15.842,57.45 -28.73,44.562 -28.73,28.72 -28.73,12.884 -15.842,0 0,0 15.836,0 28.72,12.884 28.72,28.72 28.72,44.562 15.836,57.45 0,57.45 M 0,-30 c -32.384,0 -58.73,26.342 -58.73,58.72 0,32.384 26.346,58.73 58.73,58.73 32.378,0 58.72,-26.346 58.72,-58.73 C 58.72,-3.658 32.378,-30 0,-30" id="path2213" style="fill-rule:nonzero"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20.5 9a3.49 3.49 0 0 0-3.45 3h-1.1a2.49 2.49 0 0 0-4.396-1.052L8.878 9.731l3.143-4.225a2.458 2.458 0 0 0 2.98-.019L17.339 8H16v1h3V6h-1v1.243l-2.336-2.512A2.473 2.473 0 0 0 16 3.5a2.5 2.5 0 0 0-5 0 2.474 2.474 0 0 0 .343 1.243L7.947 9.308 4.955 7.947a2.404 2.404 0 0 0-.161-1.438l3.704-1.385-.44 1.371.942.333L10 4 7.172 3l-.334.943 1.01.357-3.659 1.368a2.498 2.498 0 1 0-.682 4.117l2.085 2.688-2.053 2.76a2.5 2.5 0 1 0 .87 3.864l3.484 1.587-1.055.373.334.943L10 21l-1-2.828-.943.333.435 1.354-3.608-1.645A2.471 2.471 0 0 0 5 17.5a2.5 2.5 0 0 0-.058-.527l3.053-1.405 3.476 4.48a2.498 2.498 0 1 0 4.113.075L18 17.707V19h1v-3h-3v1h1.293l-2.416 2.416a2.466 2.466 0 0 0-2.667-.047l-3.283-4.23 2.554-1.176A2.494 2.494 0 0 0 15.95 13h1.1a3.493 3.493 0 1 0 3.45-4zm-7-7A1.5 1.5 0 1 1 12 3.5 1.502 1.502 0 0 1 13.5 2zm0 18a1.5 1.5 0 1 1-1.5 1.5 1.502 1.502 0 0 1 1.5-1.5zM1 7.5a1.5 1.5 0 1 1 2.457 1.145l-.144.112A1.496 1.496 0 0 1 1 7.5zm3.32 1.703a2.507 2.507 0 0 0 .264-.326l2.752 1.251-1.124 1.512zM2.5 19A1.5 1.5 0 1 1 4 17.5 1.502 1.502 0 0 1 2.5 19zm2.037-2.941a2.518 2.518 0 0 0-.193-.234l1.885-2.532 1.136 1.464zm3.76-1.731L6.849 12.46l1.42-1.908L11.1 11.84a2.29 2.29 0 0 0-.033 1.213zM13.5 14a1.5 1.5 0 1 1 1.5-1.5 1.502 1.502 0 0 1-1.5 1.5zm7 1a2.5 2.5 0 1 1 2.5-2.5 2.502 2.502 0 0 1-2.5 2.5zm1.5-2.5a1.5 1.5 0 1 1-1.5-1.5 1.502 1.502 0 0 1 1.5 1.5z"/><path fill="none" d="M0 0h24v24H0z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
Reference in new issue
Block a user