diff --git a/src/components/TeamProgress/MemberProgressModal.tsx b/src/components/TeamProgress/MemberProgressModal.tsx index d3b447cf1..4c09974ac 100644 --- a/src/components/TeamProgress/MemberProgressModal.tsx +++ b/src/components/TeamProgress/MemberProgressModal.tsx @@ -20,6 +20,7 @@ import { replaceChildren } from '../../lib/dom.ts'; import { XIcon } from 'lucide-react'; import type { PageType } from '../CommandMenu/CommandMenu.tsx'; import { renderFlowJSON } from '../../../editor/renderer/renderer.ts'; +import { getResourceMeta } from '../../lib/roadmap.ts'; export type ProgressMapProps = { member: TeamMember; @@ -90,22 +91,7 @@ export function MemberProgressModal(props: ProgressMapProps) { } async function renderResource(jsonUrl: string) { - const { error, response } = await httpGet(`/pages.json`); - if (error || !response) { - toast.error(error?.message || 'Resource not found'); - return; - } - - const page = response.find((page) => { - if (resourceType === 'roadmap') { - return page.url === `/${resourceId}`; - } else if (resourceType === 'best-practice') { - return page.url === `/best-practices/${resourceId}`; - } - - return false; - }); - + const page = await getResourceMeta(resourceType, resourceId); if (!page) { toast.error('Resource not found'); return; diff --git a/src/lib/roadmap.ts b/src/lib/roadmap.ts index bac7dfefc..34b1d66ed 100644 --- a/src/lib/roadmap.ts +++ b/src/lib/roadmap.ts @@ -1,4 +1,7 @@ +import type { PageType } from '../components/CommandMenu/CommandMenu'; import type { MarkdownFileType } from './file'; +import { httpGet } from './http'; +import type { ResourceType } from './resource-progress'; export function resourceTitleFromId(id: string): string { if (id === 'devops') { @@ -150,3 +153,29 @@ export async function getRoadmapFaqsById(roadmapId: string): Promise { return faqs || []; } + +export async function getResourceMeta( + resourceType: ResourceType, + resourceId: string, +) { + const { error, response } = await httpGet(`/pages.json`); + if (error || !response) { + return null; + } + + const page = response.find((page) => { + if (resourceType === 'roadmap') { + return page.url === `/${resourceId}`; + } else if (resourceType === 'best-practice') { + return page.url === `/best-practices/${resourceId}`; + } + + return false; + }); + + if (!page) { + return null; + } + + return page; +}