File size: 1,029 Bytes
503a577
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 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
}