import { useEffect, useMemo, useRef, useState } from 'react'; import { useRecoilState } from 'recoil'; import { currentPipelineState } from '@/pipeline/states/currentPipelineState'; import { DropdownMenuHeader } from '@/ui/dropdown/components/DropdownMenuHeader'; import { DropdownMenuSearchInput } from '@/ui/dropdown/components/DropdownMenuSearchInput'; import { StyledDropdownMenu } from '@/ui/dropdown/components/StyledDropdownMenu'; import { StyledDropdownMenuItemsContainer } from '@/ui/dropdown/components/StyledDropdownMenuItemsContainer'; import { StyledDropdownMenuSeparator } from '@/ui/dropdown/components/StyledDropdownMenuSeparator'; import { IconChevronDown } from '@/ui/icon'; import { SingleEntitySelectBase } from '@/ui/input/relation-picker/components/SingleEntitySelectBase'; import { useEntitySelectSearch } from '@/ui/input/relation-picker/hooks/useEntitySelectSearch'; import { EntityForSelect } from '@/ui/input/relation-picker/types/EntityForSelect'; import { MenuItem } from '@/ui/menu-item/components/MenuItem'; import { RecoilScope } from '@/ui/utilities/recoil-scope/components/RecoilScope'; import { useFilteredSearchCompanyQuery } from '../hooks/useFilteredSearchCompanyQuery'; export type CompanyProgressPickerProps = { companyId: string | null; onSubmit: ( newCompanyId: EntityForSelect | null, newPipelineStageId: string | null, ) => void; onCancel?: () => void; }; export const CompanyProgressPicker = ({ companyId, onSubmit, onCancel, }: CompanyProgressPickerProps) => { const containerRef = useRef(null); const { searchFilter, handleSearchFilterChange } = useEntitySelectSearch(); const companies = useFilteredSearchCompanyQuery({ searchFilter, selectedIds: companyId ? [companyId] : [], }); const [isProgressSelectionUnfolded, setIsProgressSelectionUnfolded] = useState(false); const [selectedPipelineStageId, setSelectedPipelineStageId] = useState< string | null >(null); const [currentPipeline] = useRecoilState(currentPipelineState); const currentPipelineStages = useMemo( () => currentPipeline?.pipelineStages ?? [], [currentPipeline], ); const handlePipelineStageChange = (newPipelineStageId: string) => { setSelectedPipelineStageId(newPipelineStageId); setIsProgressSelectionUnfolded(false); }; const handleEntitySelected = async ( selectedCompany: EntityForSelect | null | undefined, ) => { onSubmit(selectedCompany ?? null, selectedPipelineStageId); }; useEffect(() => { if (currentPipelineStages?.[0]?.id) { setSelectedPipelineStageId(currentPipelineStages?.[0]?.id); } }, [currentPipelineStages]); const selectedPipelineStage = useMemo( () => currentPipelineStages.find( (pipelineStage) => pipelineStage.id === selectedPipelineStageId, ), [currentPipelineStages, selectedPipelineStageId], ); return ( {isProgressSelectionUnfolded ? ( {currentPipelineStages.map((pipelineStage, index) => ( { handlePipelineStageChange(pipelineStage.id); }} text={pipelineStage.name} /> ))} ) : ( <> setIsProgressSelectionUnfolded(true)} > {selectedPipelineStage?.name} )} ); };