36 lines
1.1 KiB
TypeScript
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()
|
|
}
|