fix: member progress (#8188)

* fix: member progress

* fix: remove question check

* refactor: resource meta
pull/8190/head
Arik Chakma 2 weeks ago committed by GitHub
parent 66119e935b
commit 31a852113f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 25
      src/components/TeamProgress/MemberProgressModal.tsx
  2. 1
      src/components/UserProgress/UserProgressModal.tsx
  3. 29
      src/lib/roadmap.ts

@ -18,6 +18,9 @@ import { pageProgressMessage } from '../../stores/page';
import { MemberProgressModalHeader } from './MemberProgressModalHeader'; import { MemberProgressModalHeader } from './MemberProgressModalHeader';
import { replaceChildren } from '../../lib/dom.ts'; import { replaceChildren } from '../../lib/dom.ts';
import { XIcon } from 'lucide-react'; 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 = { export type ProgressMapProps = {
member: TeamMember; member: TeamMember;
@ -88,14 +91,24 @@ export function MemberProgressModal(props: ProgressMapProps) {
} }
async function renderResource(jsonUrl: string) { async function renderResource(jsonUrl: string) {
const page = await getResourceMeta(resourceType, resourceId);
if (!page) {
toast.error('Resource not found');
return;
}
const renderer = page.renderer || 'balsamiq';
const res = await fetch(jsonUrl, {}); const res = await fetch(jsonUrl, {});
const json = await res.json(); const json = await res.json();
const svg: SVGElement | null = await wireframeJSONToSVG(json, { const svg =
renderer === 'editor'
? await renderFlowJSON(json as any)
: await wireframeJSONToSVG(json, {
fontURL: '/fonts/balsamiq.woff2', fontURL: '/fonts/balsamiq.woff2',
}); });
replaceChildren(containerEl.current!, svg); replaceChildren(containerEl.current!, svg);
// containerEl.current?.replaceChildren(svg);
} }
useKeydown('Escape', () => { useKeydown('Escape', () => {
@ -136,10 +149,10 @@ export function MemberProgressModal(props: ProgressMapProps) {
skipped = [], skipped = [],
} = memberProgress; } = memberProgress;
done.forEach((id: string) => renderTopicProgress(id, 'done')); done.forEach((id) => renderTopicProgress(id, 'done'));
learning.forEach((id: string) => renderTopicProgress(id, 'learning')); learning.forEach((id) => renderTopicProgress(id, 'learning'));
skipped.forEach((id: string) => renderTopicProgress(id, 'skipped')); skipped.forEach((id) => renderTopicProgress(id, 'skipped'));
removed.forEach((id: string) => renderTopicProgress(id, 'removed')); removed.forEach((id) => renderTopicProgress(id, 'removed'));
}) })
.catch((err) => { .catch((err) => {
console.error(err); console.error(err);

@ -11,7 +11,6 @@ import { useAuth } from '../../hooks/use-auth';
import { ModalLoader } from './ModalLoader.tsx'; import { ModalLoader } from './ModalLoader.tsx';
import { UserProgressModalHeader } from './UserProgressModalHeader'; import { UserProgressModalHeader } from './UserProgressModalHeader';
import { X } from 'lucide-react'; import { X } from 'lucide-react';
import type { PageType } from '../CommandMenu/CommandMenu.tsx';
import type { AllowedRoadmapRenderer } from '../../lib/roadmap.ts'; import type { AllowedRoadmapRenderer } from '../../lib/roadmap.ts';
import { renderFlowJSON } from '../../../editor/renderer/renderer.ts'; import { renderFlowJSON } from '../../../editor/renderer/renderer.ts';

@ -1,4 +1,7 @@
import type { PageType } from '../components/CommandMenu/CommandMenu';
import type { MarkdownFileType } from './file'; import type { MarkdownFileType } from './file';
import { httpGet } from './http';
import type { ResourceType } from './resource-progress';
export function resourceTitleFromId(id: string): string { export function resourceTitleFromId(id: string): string {
if (id === 'devops') { if (id === 'devops') {
@ -150,3 +153,29 @@ export async function getRoadmapFaqsById(roadmapId: string): Promise<string[]> {
return faqs || []; return faqs || [];
} }
export async function getResourceMeta(
resourceType: ResourceType,
resourceId: string,
) {
const { error, response } = await httpGet<PageType[]>(`/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;
}

Loading…
Cancel
Save