Implement beginner version of frontend roadmap

feat/migrate-roadmaps
Kamran Ahmed 11 months ago
parent d0e2da2287
commit 39153e5f3d
  1. 32
      src/components/EditorRoadmap/EditorRoadmap.tsx
  2. 1922
      src/data/roadmaps/frontend/frontend-beginner.json

@ -7,6 +7,8 @@ import { Spinner } from '../ReactIcons/Spinner';
import type { ResourceType } from '../../lib/resource-progress'; import type { ResourceType } from '../../lib/resource-progress';
import { httpGet } from '../../lib/http'; import { httpGet } from '../../lib/http';
import { ProgressNudge } from '../FrameRenderer/ProgressNudge'; import { ProgressNudge } from '../FrameRenderer/ProgressNudge';
import { getUrlParams } from '../../lib/browser.ts';
import { cn } from '../../lib/classname.ts';
type EditorRoadmapProps = { type EditorRoadmapProps = {
resourceId: string; resourceId: string;
@ -20,6 +22,7 @@ type EditorRoadmapProps = {
export function EditorRoadmap(props: EditorRoadmapProps) { export function EditorRoadmap(props: EditorRoadmapProps) {
const { resourceId, resourceType = 'roadmap', dimensions } = props; const { resourceId, resourceType = 'roadmap', dimensions } = props;
const [hasSwitchedRoadmap, setHasSwitchedRoadmap] = useState(false);
const [isLoading, setIsLoading] = useState(true); const [isLoading, setIsLoading] = useState(true);
const [roadmapData, setRoadmapData] = useState< const [roadmapData, setRoadmapData] = useState<
Omit<RoadmapRendererProps, 'resourceId'> | undefined Omit<RoadmapRendererProps, 'resourceId'> | undefined
@ -27,9 +30,11 @@ export function EditorRoadmap(props: EditorRoadmapProps) {
const loadRoadmapData = async () => { const loadRoadmapData = async () => {
setIsLoading(true); setIsLoading(true);
const { r: switchRoadmapId } = getUrlParams();
const { response, error } = await httpGet< const { response, error } = await httpGet<
Omit<RoadmapRendererProps, 'resourceId'> Omit<RoadmapRendererProps, 'resourceId'>
>(`/${resourceId}.json`); >(`/${switchRoadmapId || resourceId}.json`);
if (error) { if (error) {
console.error(error); console.error(error);
@ -38,21 +43,28 @@ export function EditorRoadmap(props: EditorRoadmapProps) {
setRoadmapData(response); setRoadmapData(response);
setIsLoading(false); setIsLoading(false);
setHasSwitchedRoadmap(!!switchRoadmapId);
}; };
useEffect(() => { useEffect(() => {
loadRoadmapData().finally(); loadRoadmapData().finally();
}, [resourceId]); }, [resourceId]);
const aspectRatio = dimensions.width / dimensions.height;
if (!roadmapData || isLoading) { if (!roadmapData || isLoading) {
return ( return (
<div <div
style={ style={
{ !hasSwitchedRoadmap
'--aspect-ratio': dimensions.width / dimensions.height, ? ({
} as CSSProperties '--aspect-ratio': aspectRatio,
} as CSSProperties)
: undefined
}
className={
'flex aspect-[var(--aspect-ratio)] w-full flex-col justify-center'
} }
className="flex aspect-[var(--aspect-ratio)] w-full justify-center"
> >
<div className="flex w-full justify-center"> <div className="flex w-full justify-center">
<Spinner <Spinner
@ -68,11 +80,13 @@ export function EditorRoadmap(props: EditorRoadmapProps) {
return ( return (
<div <div
style={ style={
{ !hasSwitchedRoadmap
'--aspect-ratio': dimensions.width / dimensions.height, ? ({
} as CSSProperties '--aspect-ratio': aspectRatio,
} as CSSProperties)
: undefined
} }
className="flex aspect-[var(--aspect-ratio)] w-full justify-center" className={'flex aspect-[var(--aspect-ratio)] w-full justify-center flex-col'}
> >
<EditorRoadmapRenderer <EditorRoadmapRenderer
{...roadmapData} {...roadmapData}

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save