import { useEffect, useState } from 'preact/hooks'; import { httpGet, httpPut } from '../../lib/http'; import type { PageType } from '../CommandMenu/CommandMenu'; import PlusIcon from '../../icons/plus.svg'; import PlusWhiteIcon from '../../icons/plus-white.svg'; import { pageProgressMessage } from '../../stores/page'; import type { TeamDocument } from './CreateTeamForm'; import { UpdateTeamResourceModal } from './UpdateTeamResourceModal'; import { SelectRoadmapModal } from './SelectRoadmapModal'; export type TeamResourceConfig = { resourceId: string; resourceType: string; removed: string[]; }[]; type RoadmapSelectorProps = { team: TeamDocument; teamResourceConfig: TeamResourceConfig; setTeamResourceConfig: (config: TeamResourceConfig) => void; }; export function RoadmapSelector(props: RoadmapSelectorProps) { const { team, teamResourceConfig = [], setTeamResourceConfig } = props; const [showSelectRoadmapModal, setShowSelectRoadmapModal] = useState(false); const [allRoadmaps, setAllRoadmaps] = useState([]); const [changingRoadmapId, setChangingRoadmapId] = useState(''); const [error, setError] = useState(''); async function loadAllRoadmaps() { const { error, response } = await httpGet(`/pages.json`); if (error) { setError(error.message || 'Something went wrong. Please try again!'); return; } if (!response) { return []; } const allRoadmaps = response .filter((page) => page.group === 'Roadmaps') .sort((a, b) => { if (a.title === 'Android') return 1; return a.title.localeCompare(b.title); }); setAllRoadmaps(allRoadmaps); return response; } async function deleteResource(roadmapId: string) { if (!team?._id) { return; } pageProgressMessage.set(`Deleting resource`); const { error, response } = await httpPut( `${import.meta.env.PUBLIC_API_URL}/v1-delete-team-resource-config/${ team._id }`, { resourceId: roadmapId, resourceType: 'roadmap', } ); if (error || !response) { setError(error?.message || 'Error deleting roadmap'); return; } setTeamResourceConfig(response); } async function onRemove(resourceId: string) { pageProgressMessage.set('Removing roadmap'); deleteResource(resourceId).finally(() => { pageProgressMessage.set(''); }); } async function addTeamResource(roadmapId: string) { if (!team?._id) { return; } pageProgressMessage.set(`Adding roadmap to team`); const { error, response } = await httpPut( `${import.meta.env.PUBLIC_API_URL}/v1-update-team-resource-config/${ team._id }`, { teamId: team._id, resourceId: roadmapId, resourceType: 'roadmap', removed: [], } ); if (error || !response) { setError(error?.message || 'Error adding roadmap'); return; } setTeamResourceConfig(response); } useEffect(() => { loadAllRoadmaps().finally(); }, []); return (
{changingRoadmapId && ( setChangingRoadmapId('')} resourceId={changingRoadmapId} resourceType={'roadmap'} teamId={team?._id!} setTeamResourceConfig={setTeamResourceConfig} defaultRemovedItems={ teamResourceConfig.find((c) => c.resourceId === changingRoadmapId) ?.removed || [] } /> )} {showSelectRoadmapModal && ( setShowSelectRoadmapModal(false)} teamResourceConfig={teamResourceConfig} allRoadmaps={allRoadmaps} teamId={team?._id!} onRoadmapAdd={(roadmapId) => { addTeamResource(roadmapId).finally(() => { pageProgressMessage.set(''); }); }} onRoadmapRemove={(roadmapId) => { onRemove(roadmapId).finally(() => {}); }} /> )} {!teamResourceConfig.length && (
No roadmaps selected.

Please search and add roadmaps from below

)} {teamResourceConfig.length > 0 && (
{teamResourceConfig.map(({ resourceId, removed: removedTopics }) => { const roadmapTitle = allRoadmaps.find((roadmap) => roadmap.id === resourceId)?.title || '...'; return (
{roadmapTitle} {removedTopics.length > 0 ? ( {removedTopics.length} topic {removedTopics.length > 1 ? 's' : ''} removed ) : ( No changes made .. )}
); })}
)}
); }