import { For, createEffect, createSignal, onCleanup, onMount, type JSX } from "solid-js"; import { ChevronDown } from "../../../lib/icons"; import { useAppShellData } from "../data/app-shell.context"; import { type DepartmentItem } from "../data/shell.data"; import styles from "./DepartmentSelector.module.scss"; export const DepartmentSelector = (): JSX.Element => { const appShellData = useAppShellData(); const [isOpen, setIsOpen] = createSignal(false); const [selectedDepartment, setSelectedDepartment] = createSignal(appShellData.departmentItems()[0] ?? appShellData.activeDepartment()); const [selectedTeamName, setSelectedTeamName] = createSignal(appShellData.activeDepartment().teamName); let rootRef: HTMLDivElement | undefined; createEffect(() => { const activeDepartment = appShellData.activeDepartment(); const matchingDepartment = appShellData.departmentItems().find((item) => item.id === activeDepartment.id) ?? appShellData.departmentItems()[0]; if (!matchingDepartment) { return; } setSelectedDepartment(matchingDepartment); setSelectedTeamName(activeDepartment.teamName || matchingDepartment.teams[0] || ""); }); onMount(() => { const handlePointerDown = (event: PointerEvent): void => { if (!isOpen()) return; if (!rootRef) return; const target = event.target; if (target instanceof Node && !rootRef.contains(target)) { setIsOpen(false); } }; document.addEventListener("pointerdown", handlePointerDown); onCleanup(() => document.removeEventListener("pointerdown", handlePointerDown)); }); const selectDepartment = (item: DepartmentItem): void => { setSelectedDepartment(item); setSelectedTeamName(item.teams[0] ?? ""); }; const selectTeam = (teamName: string): void => { setSelectedTeamName(teamName); setIsOpen(false); }; return (
{isOpen() ? ( ); };