Spaces:
Running
Running
// Common parsing and grouping utilities for galleries | |
export const VARIANT_PREFIX_MAP: { [variant: string]: string } = { | |
attacked_wmd: 'attacked_wmd_', | |
attacked: 'attacked_', | |
wmd: 'wmd_', | |
} | |
export function getVariant(name: string): string { | |
return ( | |
Object.entries(VARIANT_PREFIX_MAP).find(([, prefix]) => name.startsWith(prefix))?.[0] || | |
'original' | |
) | |
} | |
export function getImageName(name: string, variant: string): string { | |
if (variant !== 'original' && variant in VARIANT_PREFIX_MAP) { | |
return name.replace(VARIANT_PREFIX_MAP[variant], '') | |
} | |
return name | |
} | |
export function groupByNameAndVariant<T extends { name: string }>( | |
items: T[] | |
): { | |
[name: string]: { [variant: string]: T } | |
} { | |
const grouped: { [name: string]: { [variant: string]: T } } = {} | |
items.forEach((item) => { | |
const variant = getVariant(item.name) | |
const imageName = getImageName(item.name, variant) | |
if (!grouped[imageName]) grouped[imageName] = {} | |
grouped[imageName][variant] = item | |
}) | |
return grouped | |
} | |