Skip to content

Commit 31a8521

Browse files
authored
fix: member progress (kamranahmedse#8188)
* fix: member progress * fix: remove question check * refactor: resource meta
1 parent 66119e9 commit 31a8521

File tree

3 files changed

+50
-9
lines changed

3 files changed

+50
-9
lines changed

src/components/TeamProgress/MemberProgressModal.tsx

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ import { pageProgressMessage } from '../../stores/page';
1818
import { MemberProgressModalHeader } from './MemberProgressModalHeader';
1919
import { replaceChildren } from '../../lib/dom.ts';
2020
import { XIcon } from 'lucide-react';
21+
import type { PageType } from '../CommandMenu/CommandMenu.tsx';
22+
import { renderFlowJSON } from '../../../editor/renderer/renderer.ts';
23+
import { getResourceMeta } from '../../lib/roadmap.ts';
2124

2225
export type ProgressMapProps = {
2326
member: TeamMember;
@@ -88,14 +91,24 @@ export function MemberProgressModal(props: ProgressMapProps) {
8891
}
8992

9093
async function renderResource(jsonUrl: string) {
94+
const page = await getResourceMeta(resourceType, resourceId);
95+
if (!page) {
96+
toast.error('Resource not found');
97+
return;
98+
}
99+
100+
const renderer = page.renderer || 'balsamiq';
101+
91102
const res = await fetch(jsonUrl, {});
92103
const json = await res.json();
93-
const svg: SVGElement | null = await wireframeJSONToSVG(json, {
94-
fontURL: '/fonts/balsamiq.woff2',
95-
});
104+
const svg =
105+
renderer === 'editor'
106+
? await renderFlowJSON(json as any)
107+
: await wireframeJSONToSVG(json, {
108+
fontURL: '/fonts/balsamiq.woff2',
109+
});
96110

97111
replaceChildren(containerEl.current!, svg);
98-
// containerEl.current?.replaceChildren(svg);
99112
}
100113

101114
useKeydown('Escape', () => {
@@ -136,10 +149,10 @@ export function MemberProgressModal(props: ProgressMapProps) {
136149
skipped = [],
137150
} = memberProgress;
138151

139-
done.forEach((id: string) => renderTopicProgress(id, 'done'));
140-
learning.forEach((id: string) => renderTopicProgress(id, 'learning'));
141-
skipped.forEach((id: string) => renderTopicProgress(id, 'skipped'));
142-
removed.forEach((id: string) => renderTopicProgress(id, 'removed'));
152+
done.forEach((id) => renderTopicProgress(id, 'done'));
153+
learning.forEach((id) => renderTopicProgress(id, 'learning'));
154+
skipped.forEach((id) => renderTopicProgress(id, 'skipped'));
155+
removed.forEach((id) => renderTopicProgress(id, 'removed'));
143156
})
144157
.catch((err) => {
145158
console.error(err);

src/components/UserProgress/UserProgressModal.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import { useAuth } from '../../hooks/use-auth';
1111
import { ModalLoader } from './ModalLoader.tsx';
1212
import { UserProgressModalHeader } from './UserProgressModalHeader';
1313
import { X } from 'lucide-react';
14-
import type { PageType } from '../CommandMenu/CommandMenu.tsx';
1514
import type { AllowedRoadmapRenderer } from '../../lib/roadmap.ts';
1615
import { renderFlowJSON } from '../../../editor/renderer/renderer.ts';
1716

src/lib/roadmap.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
import type { PageType } from '../components/CommandMenu/CommandMenu';
12
import type { MarkdownFileType } from './file';
3+
import { httpGet } from './http';
4+
import type { ResourceType } from './resource-progress';
25

36
export function resourceTitleFromId(id: string): string {
47
if (id === 'devops') {
@@ -150,3 +153,29 @@ export async function getRoadmapFaqsById(roadmapId: string): Promise<string[]> {
150153

151154
return faqs || [];
152155
}
156+
157+
export async function getResourceMeta(
158+
resourceType: ResourceType,
159+
resourceId: string,
160+
) {
161+
const { error, response } = await httpGet<PageType[]>(`/pages.json`);
162+
if (error || !response) {
163+
return null;
164+
}
165+
166+
const page = response.find((page) => {
167+
if (resourceType === 'roadmap') {
168+
return page.url === `/${resourceId}`;
169+
} else if (resourceType === 'best-practice') {
170+
return page.url === `/best-practices/${resourceId}`;
171+
}
172+
173+
return false;
174+
});
175+
176+
if (!page) {
177+
return null;
178+
}
179+
180+
return page;
181+
}

0 commit comments

Comments
 (0)