export type NotificationScope = 'photos' | 'guests' | 'gallery' | 'events' | 'package' | 'general'; export type ScopedNotification = { scope: NotificationScope; is_read?: boolean; }; export type NotificationGroup = { scope: NotificationScope; items: T[]; unread: number; }; const SCOPE_ORDER: NotificationScope[] = [ 'photos', 'guests', 'gallery', 'events', 'package', 'general', ]; export function groupNotificationsByScope(items: T[]): NotificationGroup[] { const groups = new Map>(); items.forEach((item) => { const scope = item.scope ?? 'general'; const existing = groups.get(scope); if (existing) { existing.items.push(item); if (!item.is_read) { existing.unread += 1; } return; } groups.set(scope, { scope, items: [item], unread: item.is_read ? 0 : 1, }); }); return Array.from(groups.values()).sort((a, b) => { const aIndex = SCOPE_ORDER.indexOf(a.scope); const bIndex = SCOPE_ORDER.indexOf(b.scope); return aIndex - bIndex; }); }