import { useMemo } from "react"; import { Popover, Skeleton } from "@mui/material"; import { ChevronDown, Users } from "lucide-react"; import type { WorkOrderUser } from "@/domain/work-orders/types/work-order"; import { CheckboxMenuItem } from "@/components/ui/checkbox-menu-item"; import { MenuAnchorButton } from "@/components/ui/menu-anchor-button"; import { useMenuAnchor } from "@/hooks/use-menu-anchor"; import type { DashboardScope } from "./dashboard-scope"; type DashboardScopePickerProps = { scope: DashboardScope; onChange: (scope: DashboardScope) => void; users: WorkOrderUser[]; usersLoading?: boolean; currentUserId?: string | number; }; export function DashboardScopePicker({ scope, onChange, users, usersLoading = false, currentUserId, }: DashboardScopePickerProps) { const { anchorEl, open, setAnchor, close } = useMenuAnchor(); const meId = currentUserId != null && currentUserId !== "" ? String(currentUserId) : null; const dispatchers = useMemo( () => [...users].sort((a, b) => a.name.localeCompare(b.name)), [users], ); const label = useMemo(() => { if (scope.mode === "all") return "All dispatchers"; if (scope.mode === "mine") return "My WOs"; return dispatchers.find((user) => String(user.id) === scope.id)?.name ?? "Dispatcher"; }, [scope, dispatchers]); const select = (next: DashboardScope) => { onChange(next); close(); }; if (usersLoading && users.length === 0) { return ( ); } return ( <> {label} select({ mode: "all" })} /> {meId != null && ( select({ mode: "mine" })} /> )} {dispatchers.map((user) => { const id = String(user.id); return ( me ) : undefined } onClick={() => select({ mode: "individual", id })} /> ); })} ); }