import { useEffect, useRef, useState } from 'react'; import { useKeydown } from '../../hooks/use-keydown'; import { useOutsideClick } from '../../hooks/use-outside-click'; import type { PageType } from '../CommandMenu/CommandMenu'; import type { TeamResourceConfig } from './RoadmapSelector'; import CloseIcon from '../../icons/close.svg'; import { SelectRoadmapModalItem } from './SelectRoadmapModalItem'; export type SelectRoadmapModalProps = { teamId: string; allRoadmaps: PageType[]; onClose: () => void; teamResourceConfig: TeamResourceConfig; onRoadmapAdd: (roadmapId: string) => void; onRoadmapRemove: (roadmapId: string) => void; }; export function SelectRoadmapModal(props: SelectRoadmapModalProps) { const { onClose, allRoadmaps, onRoadmapAdd, onRoadmapRemove, teamResourceConfig, } = props; const popupBodyEl = useRef(null); const searchInputEl = useRef(null); const [searchResults, setSearchResults] = useState(allRoadmaps); const [searchText, setSearchText] = useState(''); useKeydown('Escape', () => { onClose(); }); useOutsideClick(popupBodyEl, () => { onClose(); }); useEffect(() => { if (!searchInputEl.current) { return; } searchInputEl.current.focus(); }, [searchInputEl]); useEffect(() => { if (searchText.length === 0) { setSearchResults(allRoadmaps); return; } const searchResults = allRoadmaps.filter((roadmap) => { return ( roadmap.title.toLowerCase().includes(searchText.toLowerCase()) || roadmap.id.toLowerCase().includes(searchText.toLowerCase()) ); }); setSearchResults(searchResults); }, [searchText, allRoadmaps]); const roleBasedRoadmaps = searchResults.filter((roadmap) => roadmap?.metadata?.tags?.includes('role-roadmap') ); const skillBasedRoadmaps = searchResults.filter((roadmap) => roadmap?.metadata?.tags?.includes('skill-roadmap') ); return (
setSearchText((e.target as HTMLInputElement).value)} />
Role Based Roadmaps {roleBasedRoadmaps.length === 0 && (

)} {roleBasedRoadmaps.length > 0 && (
{roleBasedRoadmaps.map((roadmap) => { const isSelected = !!teamResourceConfig?.find( (r) => r.resourceId === roadmap.id ); return ( { if (isSelected) { onRoadmapRemove(roadmap.id); } else { onRoadmapAdd(roadmap.id); } }} /> ); })}
)} Skill Based Roadmaps
{skillBasedRoadmaps.map((roadmap) => { const isSelected = !!teamResourceConfig.find( (r) => r.resourceId === roadmap.id ); return ( { if (isSelected) { onRoadmapRemove(roadmap.id); } else { onRoadmapAdd(roadmap.id); } }} /> ); })}
); }