some changes
All checks were successful
Deploy / deploy (ubuntu-latest, 2.44.0) (push) Successful in 1m23s

This commit is contained in:
Braydon 2024-09-19 10:03:02 -04:00
parent cd15266740
commit e376dbf8d2
6 changed files with 56 additions and 6 deletions

@ -1,13 +1,13 @@
"use client"; "use client";
import { ReactElement } from "react"; import { ReactElement } from "react";
import OnboardingForm from "@/components/dashboard/onboarding/onboarding-form"; import OnboardingForm from "@/components/dashboard/user/onboarding/onboarding-form";
import { useUserContext } from "@/app/provider/user-provider"; import { useUserContext } from "@/app/provider/user-provider";
import { UserState } from "@/app/store/user-store"; import { UserState } from "@/app/store/user-store";
import { User } from "@/app/types/user/user"; import { User } from "@/app/types/user/user";
import { hasFlag } from "@/lib/user"; import { hasFlag } from "@/lib/user";
import { UserFlag } from "@/app/types/user/user-flag"; import { UserFlag } from "@/app/types/user/user-flag";
import CompletedOnboarding from "@/components/dashboard/onboarding/completed-onboarding"; import CompletedOnboarding from "@/components/dashboard/user/onboarding/completed-onboarding";
const OnboardingPage = (): ReactElement => { const OnboardingPage = (): ReactElement => {
const user: User | undefined = useUserContext( const user: User | undefined = useUserContext(

@ -23,6 +23,7 @@ import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.share
import DashboardLoader from "@/components/dashboard/loader"; import DashboardLoader from "@/components/dashboard/loader";
import { hasFlag } from "@/lib/user"; import { hasFlag } from "@/lib/user";
import { UserFlag } from "@/app/types/user/user-flag"; import { UserFlag } from "@/app/types/user/user-flag";
import EmailVerificationScreen from "@/components/dashboard/user/email-verification-screen";
/** /**
* The provider that will provide user context to children. * The provider that will provide user context to children.
@ -33,9 +34,11 @@ import { UserFlag } from "@/app/types/user/user-flag";
const UserProvider = ({ children }: { children: ReactNode }) => { const UserProvider = ({ children }: { children: ReactNode }) => {
const storeRef = useRef<UserStore>(); const storeRef = useRef<UserStore>();
const [authorized, setAuthorized] = useState<boolean>(false); const [authorized, setAuthorized] = useState<boolean>(false);
const [emailVerified, setEmailVerified] = useState<boolean>(false);
const cookies: Cookies = useCookies(); const cookies: Cookies = useCookies();
const router: AppRouterInstance = useRouter(); const router: AppRouterInstance = useRouter();
const path: string = usePathname(); const path: string = usePathname();
if (!storeRef.current) { if (!storeRef.current) {
storeRef.current = createUserStore(); storeRef.current = createUserStore();
} }
@ -66,6 +69,7 @@ const UserProvider = ({ children }: { children: ReactNode }) => {
const user: User = data as User; const user: User = data as User;
storeRef.current?.getState().authorize(session, user); storeRef.current?.getState().authorize(session, user);
setAuthorized(true); setAuthorized(true);
setEmailVerified(hasFlag(user, UserFlag.EMAIL_VERIFIED));
// User has not yet completed onboarding // User has not yet completed onboarding
if ( if (
@ -82,6 +86,13 @@ const UserProvider = ({ children }: { children: ReactNode }) => {
return ( return (
<UserContext.Provider value={storeRef.current}> <UserContext.Provider value={storeRef.current}>
{/*{authorized && emailVerified ? (*/}
{/* children*/}
{/*) : !authorized ? (*/}
{/* <DashboardLoader />*/}
{/*) : (*/}
{/* <EmailVerificationScreen />*/}
{/*)}*/}
{authorized ? children : <DashboardLoader />} {authorized ? children : <DashboardLoader />}
</UserContext.Provider> </UserContext.Provider>
); );

@ -5,20 +5,25 @@ export enum UserFlag {
/** /**
* The user is disabled. * The user is disabled.
*/ */
DISABLED = 0, DISABLED = 1 << 0,
/**
* The user's email has been verified.
*/
EMAIL_VERIFIED = 1 << 1,
/** /**
* The user completed the onboarding process. * The user completed the onboarding process.
*/ */
COMPLETED_ONBOARDING = 1, COMPLETED_ONBOARDING = 1 << 2,
/** /**
* The user has two-factor auth enabled. * The user has two-factor auth enabled.
*/ */
TFA_ENABLED = 2, TFA_ENABLED = 1 << 3,
/** /**
* The user is an administrator. * The user is an administrator.
*/ */
ADMINISTRATOR = 3, ADMINISTRATOR = 1 << 4,
} }

@ -0,0 +1,34 @@
"use client";
import { ReactElement, useState } from "react";
import { User } from "@/app/types/user/user";
import { useUserContext } from "@/app/provider/user-provider";
import { UserState } from "@/app/store/user-store";
/**
* The screen to verify your email.
*
* @return the screen jsx
*/
const EmailVerificationScreen = (): ReactElement => {
const user: User | undefined = useUserContext(
(state: UserState) => state.user
);
const [lastEmailSent, setLastEmailSent] = useState<Date>(new Date());
return (
<div className="min-h-screen flex justify-center items-center">
{/* Header */}
<div className="flex flex-col gap-1 text-center items-center select-none pointer-events-none">
<h1 className="text-3xl font-bold">Email Verification</h1>
<p className="max-w-[25rem]">
<span className="opacity-65">
We have sent your verification code to the email
</span>{" "}
<span>{user?.email}</span>
</p>
</div>
</div>
);
};
export default EmailVerificationScreen;