}
`,
})
export class MemberCard {
readonly member = input.required();
readonly copy = input.required();
protected readonly links = computed(() => memberLinks(this.member()).slice(0, 3));
}
/** A member's links, GitHub first when there is a username for it. */
export function memberLinks(member: PublicMember): { label: string; url: string }[] {
const entries = Object.entries(member.links ?? {}).map(([label, url]) => ({
label,
url,
}));
// The username is handed over separately, so build the URL rather than
// hope somebody also filled the links map in.
if (member.github_username && !entries.some((link) => link.label === 'github')) {
entries.unshift({
label: 'github',
url: `https://github.com/${member.github_username}`,
});
}
return entries;
}