import { useEffect, useMemo, useState } from "react"; import { ProjectModal } from "@/components/project-modal"; import { useSelection } from "@/components/selection-provider"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useProjects } from "@/lib/query/hooks"; export function ProjectSelect({ placeholder = "Select Project", showLabel = false, label = "Project", labelPosition = "top", }: { placeholder?: string; showLabel?: boolean; label?: string; labelPosition?: "top" | "bottom"; }) { const [open, setOpen] = useState(false); const [pendingProjectId, setPendingProjectId] = useState(null); const { selectedOrganisationId, selectedProjectId, selectProject } = useSelection(); const { data: projectsData = [] } = useProjects(selectedOrganisationId); const projects = useMemo( () => [...projectsData].sort((a, b) => a.Project.name.localeCompare(b.Project.name)), [projectsData], ); const selectedProject = useMemo( () => projects.find((proj) => proj.Project.id === selectedProjectId) ?? null, [projects, selectedProjectId], ); useEffect(() => { if (!pendingProjectId) return; const project = projects.find((proj) => proj.Project.id === pendingProjectId); if (project) { selectProject(project); setPendingProjectId(null); } }, [pendingProjectId, projects, selectProject]); return ( ); }