import { For, createSignal, onCleanup, onMount, type JSX } from "solid-js"; import { ChevronDown } from "../../../lib/icons"; import { activeDepartment, departmentItems, type DepartmentItem } from "../data/shell.data"; import styles from "./DepartmentSelector.module.scss"; const defaultDepartment = departmentItems.find((item) => item.id === activeDepartment.id) ?? departmentItems[0]; const defaultTeamName = departmentItems .find((item) => item.id === activeDepartment.id) ?.teams.find((teamName) => teamName === activeDepartment.teamName) ?? defaultDepartment?.teams[0] ?? ""; export const DepartmentSelector = (): JSX.Element => { const [isOpen, setIsOpen] = createSignal(false); const [selectedDepartment, setSelectedDepartment] = createSignal(defaultDepartment); const [selectedTeamName, setSelectedTeamName] = createSignal(defaultTeamName); let rootRef: HTMLDivElement | undefined; 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() ? ( ); };