Rocky_Mountain_Vending/lib/manuals-catalog.ts

36 lines
1.1 KiB
TypeScript

import type { Manual, ManualGroup } from "@/lib/manuals-types"
export function groupManuals(manuals: Manual[]): ManualGroup[] {
const grouped: Record<string, Record<string, Manual[]>> = {}
for (const manual of manuals) {
if (!grouped[manual.manufacturer]) {
grouped[manual.manufacturer] = {}
}
if (!grouped[manual.manufacturer][manual.category]) {
grouped[manual.manufacturer][manual.category] = []
}
grouped[manual.manufacturer][manual.category].push(manual)
}
return Object.entries(grouped)
.map(([manufacturer, categories]) => ({
manufacturer,
categories: Object.fromEntries(
Object.entries(categories).sort(([left], [right]) =>
left.localeCompare(right)
)
),
}))
.sort((left, right) => left.manufacturer.localeCompare(right.manufacturer))
}
export function getManufacturers(manuals: Manual[]): string[] {
return Array.from(
new Set(manuals.map((manual) => manual.manufacturer))
).sort()
}
export function getCategories(manuals: Manual[]): string[] {
return Array.from(new Set(manuals.map((manual) => manual.category))).sort()
}