From 977b2b360bb4f0ea2e642460a9dfa390f097939e Mon Sep 17 00:00:00 2001 From: Bhargav Ponnapalli Date: Mon, 15 Jul 2024 14:39:42 +0530 Subject: [PATCH] improve login speed --- .DS_Store | Bin 8196 -> 8196 bytes .../(authenticated-pages)/dashboard/page.tsx | 85 +++++---- .../(login-pages)/login/Login.tsx | 22 ++- .../(login-pages)/login/NewLogin.tsx | 169 ++++++++++++++++++ src/app/favicon.ico | Bin 0 -> 285478 bytes src/app/layout.tsx | 3 +- .../Auth/RedirectingPleaseWaitCard.tsx | 2 - src/data/user/organizations.ts | 37 ++++ 8 files changed, 277 insertions(+), 41 deletions(-) create mode 100644 src/app/(dynamic-pages)/(login-pages)/login/NewLogin.tsx create mode 100644 src/app/favicon.ico diff --git a/.DS_Store b/.DS_Store index 3671182fa5a662853ed21cc83670fd0b67dc582c..4115d15be8bcd965e1b9b45be74111e8a07a06a6 100644 GIT binary patch delta 32 mcmZp1XmOa}&nUhzU^hRb_+}n~ova(noR~JVOY8$O?3n5ZC<&1E2^411DTBM13+tHkyu~2pt;>Z!&IXm)J*FE3YvE0Hj|? AY5)KL diff --git a/src/app/(dynamic-pages)/(authenticated-pages)/dashboard/page.tsx b/src/app/(dynamic-pages)/(authenticated-pages)/dashboard/page.tsx index e385c1cd..494fafb5 100644 --- a/src/app/(dynamic-pages)/(authenticated-pages)/dashboard/page.tsx +++ b/src/app/(dynamic-pages)/(authenticated-pages)/dashboard/page.tsx @@ -1,39 +1,54 @@ -import { - fetchSlimOrganizations, - getDefaultOrganization, - getOrganizationSlugByOrganizationId, -} from '@/data/user/organizations'; -import { notFound, redirect } from 'next/navigation'; +'use client' + +import { getInitialOrganizationToRedirectTo } from '@/data/user/organizations'; +import { useSAToastMutation } from '@/hooks/useSAToastMutation'; +import { motion } from 'framer-motion'; +import { useRouter } from 'next/navigation'; +import { useDidMount } from 'rooks'; + +const containerVariants = { + hidden: { opacity: 0 }, + visible: { opacity: 1, transition: { duration: 0.5 } }, + exit: { opacity: 0, transition: { duration: 0.5 } }, +}; + +export default function DashboardPage() { + const router = useRouter(); + + const initialOrgRedirectMutation = useSAToastMutation(getInitialOrganizationToRedirectTo, { + loadingMessage: 'Loading your dashboard...', + errorMessage: 'Failed to load dashboard', + successMessage: 'Redirecting to your dashboard...', + onSuccess: (successPayload) => { + router.push(`/${successPayload.data}`); + }, + onError: (errorPayload) => { + console.error(errorPayload); + }, + }); + + useDidMount(() => { + initialOrgRedirectMutation.mutate(); + }); -async function getOrganizationToRedirectTo(): Promise { - const [slimOrganizations, defaultOrganizationId] = await Promise.all([ - fetchSlimOrganizations(), - getDefaultOrganization(), - ]); - - const firstOrganization = slimOrganizations[0]; - - if (defaultOrganizationId) { - return await getOrganizationSlugByOrganizationId(defaultOrganizationId); - } - - // this condition is unreachable as the parent ../layout component ensures at least - // one organization exists - if (!firstOrganization) { - return notFound(); - } - - - return firstOrganization.slug; -} - -async function RedirectToDefaultOrg() { - const firstOrganizationId = await getOrganizationToRedirectTo(); - return redirect(`/${firstOrganizationId}`); -} - -export default async function DashboardPage() { return ( - + + {initialOrgRedirectMutation.isLoading && ( + + Loading your dashboard... + + )} + ); } diff --git a/src/app/(dynamic-pages)/(login-pages)/login/Login.tsx b/src/app/(dynamic-pages)/(login-pages)/login/Login.tsx index 5087186f..920257a0 100644 --- a/src/app/(dynamic-pages)/(login-pages)/login/Login.tsx +++ b/src/app/(dynamic-pages)/(login-pages)/login/Login.tsx @@ -17,8 +17,10 @@ import { signInWithPassword, signInWithProvider, } from '@/data/auth/auth'; +import { getInitialOrganizationToRedirectTo } from '@/data/user/organizations'; import { useSAToastMutation } from '@/hooks/useSAToastMutation'; import type { AuthProvider } from '@/types'; +import { PrefetchKind } from 'next/dist/client/components/router-reducer/router-reducer-types'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import { useDidMount } from 'rooks'; @@ -37,15 +39,29 @@ export function Login({ useDidMount(() => { console.log('prefetching dashboard') - router.prefetch('/dashboard') + router.prefetch('/dashboard', { + kind: PrefetchKind.AUTO + }) }) + const initialOrgRedirectMutation = useSAToastMutation(getInitialOrganizationToRedirectTo, { + loadingMessage: 'Loading your dashboard...', + errorMessage: 'Failed to load dashboard', + successMessage: 'Redirecting to your dashboard...', + onSuccess: (successPayload) => { + router.push(`/${successPayload.data}`); + }, + onError: (errorPayload) => { + console.error(errorPayload); + }, + }); + + function redirectToDashboard() { - router.refresh(); if (next) { router.push(`/auth/callback?next=${next}`); } else { - router.push('/auth/callback'); + initialOrgRedirectMutation.mutate(); } } const magicLinkMutation = useSAToastMutation( diff --git a/src/app/(dynamic-pages)/(login-pages)/login/NewLogin.tsx b/src/app/(dynamic-pages)/(login-pages)/login/NewLogin.tsx new file mode 100644 index 00000000..c7dfa40f --- /dev/null +++ b/src/app/(dynamic-pages)/(login-pages)/login/NewLogin.tsx @@ -0,0 +1,169 @@ + +import { Button } from "@/components/ui/button" +import { Card } from "@/components/ui/card" +import { Input } from "@/components/ui/input" +import { Label } from "@/components/ui/label" +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" +import Link from "next/link" + +export function NewLoginPage() { + return ( +
+
+ +
+

Welcome Back

+

Please log in to your account

+
+ + + Magic Link + Email & Password + + +
+
+ + +
+ +
+
+ +
+
+ + +
+
+ + +
+ +
+
+
+
+
Or login with
+
+ + + +
+
+
+ + Already have an account? + + + Forgot password? + +
+
+
+
+ Background Image +
+
+ ) +} + +function ChromeIcon(props) { + return ( + + + + + + + + ) +} + + +function GithubIcon(props) { + return ( + + + + + ) +} + + +function TwitterIcon(props) { + return ( + + + + ) +} + + +function XIcon(props) { + return ( + + + + + ) +} diff --git a/src/app/favicon.ico b/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7a9c7834be86626952db867e311c093128a5f40e GIT binary patch literal 285478 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 literal 0 HcmV?d00001 diff --git a/src/app/layout.tsx b/src/app/layout.tsx index bb136544..6998ca25 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,10 +1,11 @@ import '@/styles/globals.css'; import '@/styles/prosemirror.css'; import { GeistSans } from 'geist/font/sans'; +import { Metadata } from 'next'; import 'server-only'; import { AppProviders } from './AppProviders'; -export const metadata = { +export const metadata: Metadata = { icons: { icon: '/images/logo-black-main.ico', }, diff --git a/src/components/Auth/RedirectingPleaseWaitCard.tsx b/src/components/Auth/RedirectingPleaseWaitCard.tsx index ab546c4a..becd4ff6 100644 --- a/src/components/Auth/RedirectingPleaseWaitCard.tsx +++ b/src/components/Auth/RedirectingPleaseWaitCard.tsx @@ -26,9 +26,7 @@ export function RedirectingPleaseWaitCard({ {heading} {message} - - ); } diff --git a/src/data/user/organizations.ts b/src/data/user/organizations.ts index 28864903..9b3aee9e 100644 --- a/src/data/user/organizations.ts +++ b/src/data/user/organizations.ts @@ -566,3 +566,40 @@ export const updateOrganizationSlug = async ( revalidatePath("/[organizationSlug]", 'layout'); return { status: 'success', data: `Slug updated to ${newSlug}` }; }; + + + +/** + * This is the organization that the user will be redirected to once they login + * or when they go to the /dashboard page + */ +export async function getInitialOrganizationToRedirectTo(): Promise> { + const [slimOrganizations, defaultOrganizationId] = await Promise.all([ + fetchSlimOrganizations(), + getDefaultOrganization(), + ]); + + const firstOrganization = slimOrganizations[0]; + + if (defaultOrganizationId) { + const slug = await getOrganizationSlugByOrganizationId(defaultOrganizationId); + return { + data: slug, + status: 'success', + }; + } + + // this condition is unreachable as the parent ../layout component ensures at least + // one organization exists + if (!firstOrganization) { + return { + message: 'No organizations found', + status: 'error', + }; + } + + return { + data: firstOrganization.slug, + status: 'success', + }; +}