diff --git a/src/components/PersonalizedRoadmap/PersonalizedRoadmap.tsx b/src/components/PersonalizedRoadmap/PersonalizedRoadmap.tsx index 7d789a7f9..1c580463b 100644 --- a/src/components/PersonalizedRoadmap/PersonalizedRoadmap.tsx +++ b/src/components/PersonalizedRoadmap/PersonalizedRoadmap.tsx @@ -1,10 +1,7 @@ import { Loader2Icon, PersonStandingIcon } from 'lucide-react'; -import { useState } from 'react'; +import { useMemo, useState } from 'react'; import { usePersonalizedRoadmap } from '../../hooks/use-personalized-roadmap'; -import { - loadFreshProgress, - renderTopicProgress, -} from '../../lib/resource-progress'; +import { renderTopicProgress } from '../../lib/resource-progress'; import { PersonalizedRoadmapModal } from './PersonalizedRoadmapModal'; import { useMutation, useQuery } from '@tanstack/react-query'; import { httpPost } from '../../lib/query-http'; @@ -12,6 +9,7 @@ import { useToast } from '../../hooks/use-toast'; import { queryClient } from '../../stores/query-client'; import { userResourceProgressOptions } from '../../queries/resource-progress'; import { useAuth } from '../../hooks/use-auth'; +import { roadmapJSONOptions } from '../../queries/roadmap'; type BulkUpdateResourceProgressBody = { done: string[]; @@ -31,11 +29,19 @@ export function PersonalizedRoadmap(props: PersonalizedRoadmapProps) { const currentUser = useAuth(); const [isModalOpen, setIsModalOpen] = useState(false); - const { data: userResourceProgress } = useQuery( - userResourceProgressOptions('roadmap', roadmapId), + const { data: roadmap } = useQuery( + roadmapJSONOptions(roadmapId), queryClient, ); + const allClickableNodes = useMemo(() => { + return ( + roadmap?.json?.nodes?.filter((node) => + ['topic', 'subtopic'].includes(node?.type ?? ''), + ) ?? [] + ); + }, [roadmap]); + const { mutate: bulkUpdateResourceProgress, isPending: isBulkUpdating } = useMutation( { @@ -67,16 +73,17 @@ export function PersonalizedRoadmap(props: PersonalizedRoadmapProps) { onData: (data) => { const { topicIds } = data; topicIds.forEach((topicId) => { - renderTopicProgress(topicId, 'skipped'); + renderTopicProgress(topicId, 'pending'); }); }, onFinish: (data) => { - console.log('-'.repeat(20)); - console.log('onFinish', data); - console.log('-'.repeat(20)); + const { topicIds } = data; + const remainingTopicIds = allClickableNodes + .filter((node) => !topicIds.includes(node?.id ?? '')) + .map((node) => node?.id ?? ''); bulkUpdateResourceProgress({ - skipped: data.topicIds, + skipped: remainingTopicIds, learning: [], done: [], pending: [], @@ -119,9 +126,8 @@ export function PersonalizedRoadmap(props: PersonalizedRoadmapProps) { setIsModalOpen(false)} onSubmit={(information) => { - const { skipped = [] } = userResourceProgress ?? {}; - for (const topicId of skipped) { - renderTopicProgress(topicId, 'pending'); + for (const node of allClickableNodes) { + renderTopicProgress(node?.id, 'skipped'); } generatePersonalizedRoadmap(information); diff --git a/src/components/PersonalizedRoadmap/PersonalizedRoadmapForm.tsx b/src/components/PersonalizedRoadmap/PersonalizedRoadmapForm.tsx index 4c2156e6d..06184c989 100644 --- a/src/components/PersonalizedRoadmap/PersonalizedRoadmapForm.tsx +++ b/src/components/PersonalizedRoadmap/PersonalizedRoadmapForm.tsx @@ -32,13 +32,14 @@ export function PersonalizedRoadmapForm(props: PersonalizedRoadmapFormProps) { placeholder="I already know about HTML, CSS, and JavaScript..." value={info} onChange={(e) => setInfo(e.target.value)} + autoFocus />