From 9cd38459758308e9bcae02df8161c317240131d0 Mon Sep 17 00:00:00 2001 From: Frank Noirot Date: Tue, 25 Jul 2023 10:40:26 -0400 Subject: [PATCH] Franknoirot/add walkthrough (#189) * Barebones onboarding triggering and resetting * Make onboarding route-based * Add Camera step, highlighting camera feed * Implement redirect behavior * Unify navigation hooks * Formatting * add useResizeObserver, convert to custom hook --- package.json | 2 + src/App.tsx | 2 - src/Auth.tsx | 21 +++++- src/components/Stream.tsx | 2 +- src/hooks/useBackdropHighlight.ts | 55 ++++++++++++++++ src/routes/Onboarding/Camera.tsx | 45 +++++++++++++ src/routes/Onboarding/Introduction.tsx | 45 +++++++++++++ src/routes/Onboarding/Sketching.tsx | 37 +++++++++++ src/routes/Onboarding/Units.tsx | 90 ++++++++++++++++++++++++++ src/routes/Onboarding/index.tsx | 66 +++++++++++++++++++ src/routes/Settings.tsx | 31 ++++++++- src/useStore.ts | 7 +- yarn.lock | 24 +++++++ 13 files changed, 420 insertions(+), 7 deletions(-) create mode 100644 src/hooks/useBackdropHighlight.ts create mode 100644 src/routes/Onboarding/Camera.tsx create mode 100644 src/routes/Onboarding/Introduction.tsx create mode 100644 src/routes/Onboarding/Sketching.tsx create mode 100644 src/routes/Onboarding/Units.tsx create mode 100644 src/routes/Onboarding/index.tsx diff --git a/package.json b/package.json index 41c39b759..e2bb8c366 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "@fortawesome/free-solid-svg-icons": "^6.4.0", "@fortawesome/react-fontawesome": "^0.2.0", "@headlessui/react": "^1.7.13", + "@react-hook/resize-observer": "^1.2.6", "@tauri-apps/api": "^1.3.0", "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^13.0.0", @@ -23,6 +24,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-hot-toast": "^2.4.1", + "react-hotkeys-hook": "^4.4.1", "react-json-view": "^1.21.3", "react-modal-promise": "^1.0.2", "react-router-dom": "^6.14.2", diff --git a/src/App.tsx b/src/App.tsx index 86416a873..2969b2402 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -12,7 +12,6 @@ import { addLineHighlight, } from './editor/highlightextension' import { Selections, useStore } from './useStore' -import { Toolbar } from './Toolbar' import { Logs } from './components/Logs' import { PanelHeader } from './components/PanelHeader' import { MemoryPanel } from './components/MemoryPanel' @@ -262,7 +261,6 @@ export function App() { -
diff --git a/src/Auth.tsx b/src/Auth.tsx index e9a506cb8..a094e14c9 100644 --- a/src/Auth.tsx +++ b/src/Auth.tsx @@ -6,27 +6,46 @@ import { SetToken } from './components/TokenInput' import { useStore } from './useStore' import { createBrowserRouter, + redirect, RouterProvider, } from "react-router-dom" import { ErrorPage } from './components/ErrorPage' import { Settings } from './routes/Settings' +import Onboarding, { onboardingRoutes } from './routes/Onboarding' const router = createBrowserRouter([ { path: "/", element: , errorElement: , + loader: () => { + const store = localStorage.getItem('store') + if (store === null) { + return redirect('/onboarding') + } else { + const status = (JSON.parse(store)).state.onboardingStatus + if (status !== 'done' && status !== 'dismissed') { + return redirect('/onboarding/' + status) + } + } + return null + } }, { path: "/settings", element: , + }, + { + path: "/onboarding", + element: , + children: onboardingRoutes, } ]) export const Auth = () => { const { data: user } = useSWR(withBaseUrl('/user'), fetcher) as any const {token} = useStore((s) => ({ - token: s.token + token: s.token, })) const isLocalHost = diff --git a/src/components/Stream.tsx b/src/components/Stream.tsx index f9cc314a0..c3046ef9d 100644 --- a/src/components/Stream.tsx +++ b/src/components/Stream.tsx @@ -121,7 +121,7 @@ export const Stream = () => { } return ( -
+