import type { SupabaseClient } from "@supabase/supabase-js"; import type { Database } from "./supabase/types"; type Division = Database["public"]["Tables"]["divisions"]["Row"]; type Department = Database["public"]["Tables"]["departments"]["Row"]; type Team = Database["public"]["Tables"]["teams"]["Row"]; type Location = Database["public"]["Tables"]["locations"]["Row"]; export type OrgMaps = { divisions: Map; departments: Map; teams: Map; locations: Map; divisionList: Division[]; locationList: Location[]; }; // Org reference data is tiny (9 divisions / 16 departments / 35 teams / 5 // locations) — fetched whole and joined client-side rather than per-row. export async function loadOrgMaps(supabase: SupabaseClient): Promise { const [{ data: divisions }, { data: departments }, { data: teams }, { data: locations }] = await Promise.all([ supabase.from("divisions").select("*").order("name"), supabase.from("departments").select("*"), supabase.from("teams").select("*"), supabase.from("locations").select("*").order("name"), ]); return { divisions: new Map((divisions ?? []).map((d) => [d.id, d])), departments: new Map((departments ?? []).map((d) => [d.id, d])), teams: new Map((teams ?? []).map((t) => [t.id, t])), locations: new Map((locations ?? []).map((l) => [l.id, l])), divisionList: divisions ?? [], locationList: locations ?? [], }; } export function breadcrumbFor(orgMaps: OrgMaps, divisionId: string | null, teamId: string | null) { const division = divisionId ? orgMaps.divisions.get(divisionId) : undefined; const team = teamId ? orgMaps.teams.get(teamId) : undefined; const department = team ? orgMaps.departments.get(team.department_id) : undefined; return { division, department, team }; } export function breadcrumbLabel(orgMaps: OrgMaps, divisionId: string | null, teamId: string | null): string { const { division, department, team } = breadcrumbFor(orgMaps, divisionId, teamId); return [division?.name, department?.name, team?.name].filter(Boolean).join(" › ") || "–"; }