From fbf3e6577af5b83f4ea2490481acdfec8fdbabdd Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Tue, 11 Feb 2025 18:29:18 +0600 Subject: [PATCH] fix: member progress --- .../TeamProgress/MemberProgressModal.tsx | 45 +++++++++++++++---- .../UserProgress/UserProgressModal.tsx | 1 - 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/components/TeamProgress/MemberProgressModal.tsx b/src/components/TeamProgress/MemberProgressModal.tsx index 09ff67389..4d4073da5 100644 --- a/src/components/TeamProgress/MemberProgressModal.tsx +++ b/src/components/TeamProgress/MemberProgressModal.tsx @@ -18,6 +18,8 @@ import { pageProgressMessage } from '../../stores/page'; import { MemberProgressModalHeader } from './MemberProgressModalHeader'; 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'; export type ProgressMapProps = { member: TeamMember; @@ -88,14 +90,41 @@ 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}`; + } else if (resourceType === 'question') { + return page.url === `/questions/${resourceId}`; + } + + return false; + }); + + if (!page) { + toast.error('Resource not found'); + return; + } + + const renderer = page.renderer || 'balsamiq'; + const res = await fetch(jsonUrl, {}); const json = await res.json(); - const svg: SVGElement | null = await wireframeJSONToSVG(json, { - fontURL: '/fonts/balsamiq.woff2', - }); + const svg = + renderer === 'editor' + ? await renderFlowJSON(json as any) + : await wireframeJSONToSVG(json, { + fontURL: '/fonts/balsamiq.woff2', + }); replaceChildren(containerEl.current!, svg); - // containerEl.current?.replaceChildren(svg); } useKeydown('Escape', () => { @@ -136,10 +165,10 @@ export function MemberProgressModal(props: ProgressMapProps) { skipped = [], } = memberProgress; - done.forEach((id: string) => renderTopicProgress(id, 'done')); - learning.forEach((id: string) => renderTopicProgress(id, 'learning')); - skipped.forEach((id: string) => renderTopicProgress(id, 'skipped')); - removed.forEach((id: string) => renderTopicProgress(id, 'removed')); + done.forEach((id) => renderTopicProgress(id, 'done')); + learning.forEach((id) => renderTopicProgress(id, 'learning')); + skipped.forEach((id) => renderTopicProgress(id, 'skipped')); + removed.forEach((id) => renderTopicProgress(id, 'removed')); }) .catch((err) => { console.error(err); diff --git a/src/components/UserProgress/UserProgressModal.tsx b/src/components/UserProgress/UserProgressModal.tsx index e91bd34bb..6fd1eeba0 100644 --- a/src/components/UserProgress/UserProgressModal.tsx +++ b/src/components/UserProgress/UserProgressModal.tsx @@ -11,7 +11,6 @@ import { useAuth } from '../../hooks/use-auth'; import { ModalLoader } from './ModalLoader.tsx'; import { UserProgressModalHeader } from './UserProgressModalHeader'; import { X } from 'lucide-react'; -import type { PageType } from '../CommandMenu/CommandMenu.tsx'; import type { AllowedRoadmapRenderer } from '../../lib/roadmap.ts'; import { renderFlowJSON } from '../../../editor/renderer/renderer.ts';