// Pure selection helpers for saved ("personal") views, split out of SavedViewsProvider so the // tie-break logic is unit-testable without mounting the provider (its React Query / context deps). /** Among the views whose filters match the live filters, pick the one to treat as active: prefer the * explicitly-applied ("sticky") view when several capture identical filters, so apply(B) isn't * silently re-attributed to an earlier duplicate A; otherwise the first match. Null if none match. */ export function preferSticky( matches: T[], stickyId: number | null, ): T | null { return matches.find((v) => v.id === stickyId) ?? matches[0] ?? null; }