Array of normalized match results.
Available genres, formats, and statuses.
export function extractAvailableFilterOptions(
matchResults: NormalizedMatchForStats[],
): {
genres: string[];
formats: string[];
statuses: MatchStatus[];
tags: string[];
} {
const genresSet = new Set<string>();
const formatsSet = new Set<string>();
const statusesSet = new Set<MatchStatus>();
const tagsSet = new Set<string>();
for (const match of matchResults) {
// Extract genres
const genres = match.selectedMatch?.genres ?? [];
for (const genre of genres) {
genresSet.add(genre);
}
// Extract format
const format = match.selectedMatch?.format;
if (format) {
formatsSet.add(format);
}
// Extract tags
const tags = match.selectedMatch?.tags ?? [];
for (const tag of tags) {
tagsSet.add(tag);
}
// Extract status
statusesSet.add(match.status);
}
return {
genres: Array.from(genresSet).sort((a, b) => a.localeCompare(b)),
formats: Array.from(formatsSet).sort((a, b) => a.localeCompare(b)),
statuses: Array.from(statusesSet).sort((a, b) => a.localeCompare(b)),
tags: Array.from(tagsSet).sort((a, b) => a.localeCompare(b)),
};
}
Extracts available filter options from match results.