export function groupByCategory< TItem extends { categoryName: string | null }, TCategory extends { name: string }, >(items: TItem[], categories: TCategory[]): [string, TItem[]][] { const groups = new Map(); for (const item of items) { const key = item.categoryName ?? 'Non catégorisé'; const list = groups.get(key); if (list) list.push(item); else groups.set(key, [item]); } const result: [string, TItem[]][] = []; for (const cat of categories) { const list = groups.get(cat.name); if (list?.length) result.push([cat.name, list]); } const uncategorized = groups.get('Non catégorisé'); if (uncategorized?.length) { result.unshift(['Non catégorisé', uncategorized]); } return result; }