import { getUrlParams } from '../lib/browser'; import { useEffect, useState } from 'preact/hooks'; import type { TeamDocument } from './CreateTeam/CreateTeamForm'; import type { TeamResourceConfig } from './CreateTeam/RoadmapSelector'; import { httpGet, httpPut } from '../lib/http'; import { pageProgressMessage } from '../stores/page'; import ExternalLinkIcon from '../icons/external-link.svg'; import PlusIcon from '../icons/plus.svg'; import type { PageType } from './CommandMenu/CommandMenu'; import { UpdateTeamResourceModal } from './CreateTeam/UpdateTeamResourceModal'; import { AddTeamRoadmap } from './AddTeamRoadmap'; import { useStore } from '@nanostores/preact'; import { $canManageCurrentTeam } from '../stores/team'; import {useToast} from "../hooks/use-toast"; export function TeamRoadmaps() { const { t: teamId } = getUrlParams(); const canManageCurrentTeam = useStore($canManageCurrentTeam); const toast = useToast(); const [removingRoadmapId, setRemovingRoadmapId] = useState(''); const [isAddingRoadmap, setIsAddingRoadmap] = useState(false); const [changingRoadmapId, setChangingRoadmapId] = useState(''); const [team, setTeam] = useState(); const [resourceConfigs, setResourceConfigs] = useState( [] ); const [allRoadmaps, setAllRoadmaps] = useState([]); async function loadAllRoadmaps() { const { error, response } = await httpGet(`/pages.json`); if (error) { toast.error(error.message || 'Something went wrong'); 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 loadTeam(teamIdToFetch: string) { const { response, error } = await httpGet( `${import.meta.env.PUBLIC_API_URL}/v1-get-team/${teamIdToFetch}` ); if (error || !response) { toast.error('Error loading team'); window.location.href = '/account'; return; } setTeam(response); } async function loadTeamResourceConfig(teamId: string) { const { error, response } = await httpGet( `${import.meta.env.PUBLIC_API_URL}/v1-get-team-resource-config/${teamId}` ); if (error || !Array.isArray(response)) { console.error(error); return; } setResourceConfigs(response); } useEffect(() => { if (!teamId) { return; } Promise.all([ loadTeam(teamId), loadTeamResourceConfig(teamId), loadAllRoadmaps(), ]).finally(() => { pageProgressMessage.set(''); }); }, [teamId]); async function deleteResource(roadmapId: string) { if (!team?._id) { return; } pageProgressMessage.set(`Deleting roadmap from team`); 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) { toast.error(error?.message || 'Something went wrong'); return; } toast.success('Roadmap removed'); setResourceConfigs(response); } async function onRemove(resourceId: string) { pageProgressMessage.set('Removing roadmap'); deleteResource(resourceId).finally(() => { pageProgressMessage.set(''); }); } if (!team) { return null; } return (
{isAddingRoadmap && ( { setChangingRoadmapId(roadmapId); setIsAddingRoadmap(false); }} teamId={team?._id!} setResourceConfigs={setResourceConfigs} allRoadmaps={allRoadmaps} availableRoadmaps={allRoadmaps.filter((r) => { const isAlreadyAdded = resourceConfigs.find( (c) => c.resourceId === r.id ); return !isAlreadyAdded; })} onClose={() => setIsAddingRoadmap(false)} /> )}
{changingRoadmapId && ( setChangingRoadmapId('')} resourceId={changingRoadmapId} resourceType={'roadmap'} teamId={team?._id!} setTeamResourceConfig={setResourceConfigs} defaultRemovedItems={ resourceConfigs.find((c) => c.resourceId === changingRoadmapId) ?.removed || [] } /> )} {resourceConfigs.map((resourceConfig) => { const { resourceId, removed: removedTopics } = resourceConfig; const roadmapTitle = allRoadmaps.find((roadmap) => roadmap.id === resourceId)?.title || '...'; return (
{roadmapTitle} {'link'} {removedTopics.length > 0 ? ( {removedTopics.length} topic {removedTopics.length > 1 ? 's' : ''} removed ) : ( No changes made .. )}
{ canManageCurrentTeam && (
{removingRoadmapId !== resourceId && ( )} {removingRoadmapId === resourceId && ( Are you sure?{' '} {' '} )}
)}
); })} {canManageCurrentTeam && ( )}
); }