* Update Introduction * Update Camera step * Change link to expectations Co-authored-by: Josh Gomez <114548659+jgomez720@users.noreply.github.com> * Set outline for onboarding * Add Streaming step * Remove Units step * Add default kcl script * Add Code Editor step * Add Parametric Modeling step * Add Interactive Numbers step * Update bracket to use sqrt * Add Command K step * Assuage @jessfraz's code itchies * Add User Menu step * Add Project Menu step * Add Export step * Improve error page to actually show error * Update the sketch step * Add Future Work section * Bring back the bracket code on the final step * Set up the code to the bracket when starting onboarding * Fix missing import * Don't throw away users code if not empty * Prompt the user if they have content in their file --------- Co-authored-by: Josh Gomez <114548659+jgomez720@users.noreply.github.com>
132 lines
3.2 KiB
TypeScript
132 lines
3.2 KiB
TypeScript
import { useHotkeys } from 'react-hotkeys-hook'
|
|
import { Outlet, useNavigate } from 'react-router-dom'
|
|
import Introduction from './Introduction'
|
|
import Camera from './Camera'
|
|
import Sketching from './Sketching'
|
|
import { useCallback } from 'react'
|
|
import makeUrlPathRelative from '../../lib/makeUrlPathRelative'
|
|
import { useGlobalStateContext } from 'hooks/useGlobalStateContext'
|
|
import Streaming from './Streaming'
|
|
import CodeEditor from './CodeEditor'
|
|
import ParametricModeling from './ParametricModeling'
|
|
import InteractiveNumbers from './InteractiveNumbers'
|
|
import CmdK from './CmdK'
|
|
import UserMenu from './UserMenu'
|
|
import ProjectMenu from './ProjectMenu'
|
|
import Export from './Export'
|
|
import FutureWork from './FutureWork'
|
|
|
|
export const onboardingPaths = {
|
|
INDEX: '/',
|
|
CAMERA: '/camera',
|
|
STREAMING: '/streaming',
|
|
EDITOR: '/editor',
|
|
PARAMETRIC_MODELING: '/parametric-modeling',
|
|
INTERACTIVE_NUMBERS: '/interactive-numbers',
|
|
COMMAND_K: '/command-k',
|
|
USER_MENU: '/user-menu',
|
|
PROJECT_MENU: '/project-menu',
|
|
EXPORT: '/export',
|
|
MOVE: '/move',
|
|
SKETCHING: '/sketching',
|
|
FUTURE_WORK: '/future-work',
|
|
}
|
|
|
|
export const onboardingRoutes = [
|
|
{
|
|
index: true,
|
|
element: <Introduction />,
|
|
},
|
|
{
|
|
path: makeUrlPathRelative(onboardingPaths.CAMERA),
|
|
element: <Camera />,
|
|
},
|
|
{
|
|
path: makeUrlPathRelative(onboardingPaths.STREAMING),
|
|
element: <Streaming />,
|
|
},
|
|
{
|
|
path: makeUrlPathRelative(onboardingPaths.EDITOR),
|
|
element: <CodeEditor />,
|
|
},
|
|
{
|
|
path: makeUrlPathRelative(onboardingPaths.PARAMETRIC_MODELING),
|
|
element: <ParametricModeling />,
|
|
},
|
|
{
|
|
path: makeUrlPathRelative(onboardingPaths.INTERACTIVE_NUMBERS),
|
|
element: <InteractiveNumbers />,
|
|
},
|
|
{
|
|
path: makeUrlPathRelative(onboardingPaths.COMMAND_K),
|
|
element: <CmdK />,
|
|
},
|
|
{
|
|
path: makeUrlPathRelative(onboardingPaths.USER_MENU),
|
|
element: <UserMenu />,
|
|
},
|
|
{
|
|
path: makeUrlPathRelative(onboardingPaths.PROJECT_MENU),
|
|
element: <ProjectMenu />,
|
|
},
|
|
{
|
|
path: makeUrlPathRelative(onboardingPaths.EXPORT),
|
|
element: <Export />,
|
|
},
|
|
// Export / conversion API
|
|
{
|
|
path: makeUrlPathRelative(onboardingPaths.SKETCHING),
|
|
element: <Sketching />,
|
|
},
|
|
{
|
|
path: makeUrlPathRelative(onboardingPaths.FUTURE_WORK),
|
|
element: <FutureWork />,
|
|
},
|
|
]
|
|
|
|
export function useNextClick(newStatus: string) {
|
|
const {
|
|
settings: { send },
|
|
} = useGlobalStateContext()
|
|
const navigate = useNavigate()
|
|
|
|
return useCallback(() => {
|
|
send({
|
|
type: 'Set Onboarding Status',
|
|
data: { onboardingStatus: newStatus },
|
|
})
|
|
navigate((newStatus !== onboardingPaths.CAMERA ? '..' : '.') + newStatus)
|
|
}, [newStatus, send, navigate])
|
|
}
|
|
|
|
export function useDismiss() {
|
|
const {
|
|
settings: { send },
|
|
} = useGlobalStateContext()
|
|
const navigate = useNavigate()
|
|
|
|
return useCallback(
|
|
(path: string) => {
|
|
send({
|
|
type: 'Set Onboarding Status',
|
|
data: { onboardingStatus: 'dismissed' },
|
|
})
|
|
navigate(path)
|
|
},
|
|
[send, navigate]
|
|
)
|
|
}
|
|
|
|
const Onboarding = () => {
|
|
const dismiss = useDismiss()
|
|
useHotkeys('esc', () => dismiss('../'))
|
|
|
|
return (
|
|
<>
|
|
<Outlet />
|
|
</>
|
|
)
|
|
}
|
|
|
|
export default Onboarding
|