From 2ce8d44664488b946bbdcaa8bb9e89ac88b210d3 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Mon, 20 Nov 2023 18:15:34 -0800 Subject: [PATCH] WIP onboarding flow skeleton --- frontend/src/App.tsx | 8 + frontend/src/images/undraws/onboarding.png | Bin 0 -> 46470 bytes .../Steps/ConnectVectorDB/index.tsx | 7 + .../Steps/CreateOrganization/index.tsx | 7 + .../Steps/CustomLogin/index.tsx | 7 + .../Steps/SecuritySettings/index.tsx | 7 + .../Steps/SyncVectorDB/index.tsx | 7 + .../OnboardingFlow/Steps/Welcome/index.tsx | 7 + frontend/src/pages/OnboardingFlow/index.tsx | 270 ++++++++++++++++++ 9 files changed, 320 insertions(+) create mode 100644 frontend/src/images/undraws/onboarding.png create mode 100644 frontend/src/pages/OnboardingFlow/Steps/ConnectVectorDB/index.tsx create mode 100644 frontend/src/pages/OnboardingFlow/Steps/CreateOrganization/index.tsx create mode 100644 frontend/src/pages/OnboardingFlow/Steps/CustomLogin/index.tsx create mode 100644 frontend/src/pages/OnboardingFlow/Steps/SecuritySettings/index.tsx create mode 100644 frontend/src/pages/OnboardingFlow/Steps/SyncVectorDB/index.tsx create mode 100644 frontend/src/pages/OnboardingFlow/Steps/Welcome/index.tsx create mode 100644 frontend/src/pages/OnboardingFlow/index.tsx diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 41d81db..040e2d3 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -21,6 +21,10 @@ const SystemSetup = lazy(() => import('./pages/Authentication/SystemSetup')); const OnboardingSecuritySetup = lazy( () => import('./pages/Onboarding/security') ); + +// Onboarding v2 +const OnboardingFlow = lazy(() => import('./pages/OnboardingFlow')); + const OrganizationJobsView = lazy(() => import('./pages/Jobs')); const OrganizationToolsView = lazy(() => import('./pages/Tools')); const SystemSettingsView = lazy(() => import('./pages/SystemSettings')); @@ -75,6 +79,10 @@ function App() { element={} /> + } + /> } diff --git a/frontend/src/images/undraws/onboarding.png b/frontend/src/images/undraws/onboarding.png new file mode 100644 index 0000000000000000000000000000000000000000..837a8b0833ba154070b508fff0138b32720836d7 GIT binary patch literal 46470 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 Tk*!oT)aRwDmP)0PRmA@XL1^#= literal 0 HcmV?d00001 diff --git a/frontend/src/pages/OnboardingFlow/Steps/ConnectVectorDB/index.tsx b/frontend/src/pages/OnboardingFlow/Steps/ConnectVectorDB/index.tsx new file mode 100644 index 0000000..82e62a7 --- /dev/null +++ b/frontend/src/pages/OnboardingFlow/Steps/ConnectVectorDB/index.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +function ConnectVectorDB() { + return
ConnectVectorDB
; +} + +export default ConnectVectorDB; diff --git a/frontend/src/pages/OnboardingFlow/Steps/CreateOrganization/index.tsx b/frontend/src/pages/OnboardingFlow/Steps/CreateOrganization/index.tsx new file mode 100644 index 0000000..4eee811 --- /dev/null +++ b/frontend/src/pages/OnboardingFlow/Steps/CreateOrganization/index.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +function CreateOrganization() { + return
CreateOrganization
; +} + +export default CreateOrganization; diff --git a/frontend/src/pages/OnboardingFlow/Steps/CustomLogin/index.tsx b/frontend/src/pages/OnboardingFlow/Steps/CustomLogin/index.tsx new file mode 100644 index 0000000..104faa4 --- /dev/null +++ b/frontend/src/pages/OnboardingFlow/Steps/CustomLogin/index.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +function CustomLogin() { + return
CustomLogin
; +} + +export default CustomLogin; diff --git a/frontend/src/pages/OnboardingFlow/Steps/SecuritySettings/index.tsx b/frontend/src/pages/OnboardingFlow/Steps/SecuritySettings/index.tsx new file mode 100644 index 0000000..c56c234 --- /dev/null +++ b/frontend/src/pages/OnboardingFlow/Steps/SecuritySettings/index.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +function SecuritySettings() { + return
SecuritySettings
; +} + +export default SecuritySettings; diff --git a/frontend/src/pages/OnboardingFlow/Steps/SyncVectorDB/index.tsx b/frontend/src/pages/OnboardingFlow/Steps/SyncVectorDB/index.tsx new file mode 100644 index 0000000..3375b01 --- /dev/null +++ b/frontend/src/pages/OnboardingFlow/Steps/SyncVectorDB/index.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +function SyncVectorDB() { + return
SyncVectorDB
; +} + +export default SyncVectorDB; diff --git a/frontend/src/pages/OnboardingFlow/Steps/Welcome/index.tsx b/frontend/src/pages/OnboardingFlow/Steps/Welcome/index.tsx new file mode 100644 index 0000000..6a9f5fd --- /dev/null +++ b/frontend/src/pages/OnboardingFlow/Steps/Welcome/index.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +function Welcome() { + return
Welcome
; +} + +export default Welcome; diff --git a/frontend/src/pages/OnboardingFlow/index.tsx b/frontend/src/pages/OnboardingFlow/index.tsx new file mode 100644 index 0000000..4fd64d8 --- /dev/null +++ b/frontend/src/pages/OnboardingFlow/index.tsx @@ -0,0 +1,270 @@ +import { Link } from 'react-router-dom'; +import DefaultLayout from '../../layout/DefaultLayout'; +import Onboarding from '../../images/undraws/onboarding.png'; +import PreLoader from '../../components/Preloader'; +import { useEffect, useState } from 'react'; +import { CheckCircle, XCircle } from 'react-feather'; +import User from '../../models/user'; +import { APP_NAME, STORE_TOKEN, STORE_USER } from '../../utils/constants'; +import paths from '../../utils/paths'; +import validateSessionTokenForUser from '../../utils/session'; + +import CustomLogin from './Steps/CustomLogin'; +import SecuritySettings from './Steps/SecuritySettings'; +import CreateOrganization from './Steps/CreateOrganization'; +import ConnectVectorDB from './Steps/ConnectVectorDB'; +import SyncVectorDB from './Steps/SyncVectorDB'; + +type IStages = 'loading' | 'failed' | 'success' | 'ready'; +type FormTypes = { + target: { + email: { + value: string; + }; + password: { + value: string; + }; + }; +}; + +type IResult = { + user: any; + token: string | null; + error?: string | null; +}; + +const STEPS = { + custom_login: { + title: 'Create your custom login', + description: + 'This will be your account login information moving forward. The previous default login will become obsolete.', + component: CustomLogin, + }, + security_settings: { + title: 'Security Settings', + description: + 'You can limit your VectorAdmin installation to only allow sign ups from specific domains, or disable them totally and users must first be created by an admin user.', + component: SecuritySettings, + }, + create_organization: { + title: 'Create an organization', + description: + 'Organizations are where all your documents are stored. You can have multiple organizations, but you need at least one.', + component: CreateOrganization, + }, + connect_vector_db: { + title: 'Connect your vector database', + description: '', + component: ConnectVectorDB, + }, + sync_vector_db: { + title: 'Sync your vector database', + description: + 'VDMS can automatically sync existing information in your Pinecone namespaces so you can manage it easily. This process can take a long time to complete depending on how much data you already have embedded.', + component: SyncVectorDB, + }, +}; + +const SignIn = () => { + const [stage, setStage] = useState('ready'); + const [results, setResults] = useState({ + user: null, + token: null, + error: null, + }); + const resetStage = () => { + setResults({ user: null, token: null, error: null }); + setStage('ready'); + }; + const handleSubmit = async (e: React.FormEvent & FormTypes) => { + e.preventDefault(); + setStage('loading'); + const { user, token, error } = await User.login( + e.target.email.value, + e.target.password.value + ); + if (!token || !user) setStage('failed'); + if (!!token && !!user) setStage('success'); + setResults({ user, token, error }); + + if (!!token && !!user) { + window.localStorage.setItem(STORE_USER, JSON.stringify(user)); + window.localStorage.setItem(STORE_TOKEN, token); + window.location.replace( + user.role === 'root' ? paths.systemSetup() : paths.dashboard() + ); + } + }; + + // useEffect(() => { + // async function checkAuth() { + // const currentToken = window.localStorage.getItem(STORE_TOKEN); + // if (!currentToken) return false; + // const success = await validateSessionTokenForUser(); + // if (!success) { + // window.localStorage.removeItem(STORE_USER); + // window.localStorage.removeItem(STORE_TOKEN); + // return false; + // } + // window.location.replace(paths.dashboard()); + // } + // checkAuth(); + // }, []); + + return ( + +
+
+
+
+ Sign In +
+
+ +
+
+ {stage !== 'ready' ? ( + + ) : ( + + )} +
+
+
+
+
+ ); +}; + +function ShowStatus({ + stage, + results, + resetForm, +}: { + stage: IStages; + results: IResult; + resetForm: any; +}) { + if (stage === 'loading') { + return ( +
+ +

logging you in...

+
+ ); + } + + if (stage === 'failed') { + return ( +
+ +

+ We could not log you in - contact an admin. +

+

{results?.error}

+ +
+ ); + } + + if (stage === 'success') { + return ( +
+ +

Login was successful!

+

+ Redirecting you to the right place. +

+
+ ); + } + + return null; +} + +function LoginForm({ handleSubmit }: { handleSubmit: any }) { + return ( + <> +
+ {/* Render each step dynamically here */} + {/*
+
+ Login to + VectorAdmin +
+
+ + Welcome back, please login to your account. + +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+

+ Don't have a {APP_NAME} account?{' '} + + Sign Up + +

+
+
+
*/} + + ); +} + +export default SignIn;