Skip to content

Commit

Permalink
change header to client, move pages, fix mfa
Browse files Browse the repository at this point in the history
  • Loading branch information
docimin committed Sep 26, 2024
1 parent 1de52db commit 44af254
Show file tree
Hide file tree
Showing 12 changed files with 64 additions and 52 deletions.
10 changes: 10 additions & 0 deletions src/app/[locale]/(account)/account/verify/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
'use client'
import PageLayout from '@/components/pageLayout'

export default function Page() {
return (
<PageLayout title={'Verify your email'}>
Hi, please verify your email.
</PageLayout>
)
}
3 changes: 0 additions & 3 deletions src/app/[locale]/(account)/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import { getUser } from '@/utils/server-api/account/user'
import { redirect } from '@/navigation'
import { createSessionServerClient } from '@/app/appwrite-session'

export default async function Layout({ children }) {
const { account } = await createSessionServerClient()

try {
await getUser()
return children
Expand Down
3 changes: 0 additions & 3 deletions src/app/[locale]/(auth)/layout.tsx

This file was deleted.

2 changes: 1 addition & 1 deletion src/app/[locale]/(auth)/login/mfa/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Button } from '@/components/ui/button'
import { Link } from '@/navigation'
import MfaPageClient from '@/app/[locale]/(auth)/login/mfa/page.client'
import MfaPageClient from './page.client'

export const metadata = {
title: 'Login',
Expand Down
6 changes: 6 additions & 0 deletions src/app/[locale]/(auth)/login/page.client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import { createUser } from '@/utils/actions/login-actions'
import { Link } from '@/navigation'
import { account, client } from '@/app/appwrite-client'
import PageLayout from '@/components/pageLayout'
import { useUser } from '@/components/contexts/UserContext'

export default function Login() {
const [data, setData] = useState({
Expand All @@ -36,6 +37,7 @@ export default function Login() {
const [acceptedTerms, setAcceptedTerms] = useState(false)
const [isRegistering, setIsRegistering] = useState(false)
const { toast } = useToast()
const { setUser } = useUser()

Check warning on line 40 in src/app/[locale]/(auth)/login/page.client.tsx

View workflow job for this annotation

GitHub Actions / Qodana for JS

Unused local symbol

Unused constant setUser

const handleEmailLogin = async (e: any) => {
e.preventDefault()
Expand Down Expand Up @@ -70,6 +72,7 @@ export default function Login() {

const dataResponse = await signIn()
client.setSession(dataResponse.secret)
await account.createVerification('https://headpat.place/i/verify-email')
window.location.href = '/account'
} else {
const dataResponse = await signIn()
Expand Down Expand Up @@ -201,6 +204,9 @@ export default function Login() {
>
{isRegistering ? 'Register' : 'Login'}
</Button>
<Button variant={'link'} className={'w-full'}>
Forgot password?
</Button>
</div>
</div>
</form>
Expand Down
2 changes: 1 addition & 1 deletion src/components/contexts/UserContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { account } from '@/app/appwrite-client'
import { ID } from 'node-appwrite'

interface UserContextValue {
current: Account.AccountType | null
current: Account.AccountPrefs | null
setUser: React.Dispatch<React.SetStateAction<Account.AccountType | null>>
login: (email: string, password: string) => Promise<void>
loginOAuth: (userId: string, secret: string) => Promise<void>
Expand Down
50 changes: 39 additions & 11 deletions src/components/header/header-resizable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { TooltipProvider } from '@/components/ui/tooltip'
import { Nav } from '@/components/header/header-nav'
import { ScrollArea } from '@/components/ui/scroll-area'
import { Nav1, Nav2, Nav3, NavFooter } from '@/components/header/data'
import React, { useState } from 'react'
import React, { useEffect, useState } from 'react'
import Image from 'next/image'
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'
import { ChevronUpIcon } from 'lucide-react'
Expand All @@ -22,30 +22,58 @@ import {
DropdownMenuSeparator,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu'
import { Account, UserData } from '@/utils/types/models'
import { UserData } from '@/utils/types/models'
import { Link, useRouter } from '@/navigation'
import { useUser } from '@/components/contexts/UserContext'
import { databases } from '@/app/appwrite-client'
import { toast } from 'sonner'

const getAvatar = (id: string) => {
if (!id) return

return `${process.env.NEXT_PUBLIC_API_URL}/v1/storage/buckets/avatars/files/${id}/preview?project=${process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID}&width=250&height=250&quality=50`
}

export default function SidebarResizable({
defaultLayout = [265, 440, 655],
defaultCollapsed = false,
navCollapsedSize,
accountData,
userData,
userImage,
translations,
children,
}: {
defaultLayout: number[]
defaultCollapsed: boolean
navCollapsedSize: number
accountData: Account.AccountPrefs
userData: UserData.UserDataDocumentsType
userImage: string
translations: any
children: React.ReactNode
}) {
const [isCollapsed, setIsCollapsed] = useState<boolean>(defaultCollapsed)
const [userData, setUserData] =
useState<UserData.UserDataDocumentsType | null>(null)
const [userImage, setUserImage] = useState<string | null>(null)
const router = useRouter()
const { current } = useUser()

useEffect(() => {
const fetchData = async () => {
if (current) {
try {
await databases
.getDocument('hp_db', 'userdata', `${current.$id}`)
.then((data: UserData.UserDataDocumentsType) => {
setUserData(data)
const image = getAvatar(data.avatarId)
setUserImage(image)
})
} catch (error) {
toast.error('Failed to fetch user data')
}
}
}

fetchData().then()
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [current])

return (
<TooltipProvider delayDuration={0}>
Expand Down Expand Up @@ -118,7 +146,7 @@ export default function SidebarResizable({
<Separator />
<Nav
isCollapsed={isCollapsed}
links={Nav2(accountData, translations)}
links={Nav2(current, translations)}
translations={translations}
/>
<Separator />
Expand All @@ -130,7 +158,7 @@ export default function SidebarResizable({
</div>
</ScrollArea>
<div className={'mt-auto relative bottom-0 block'}>
{accountData ? (
{current ? (
<>
<Separator />
<DropdownMenu>
Expand Down Expand Up @@ -199,7 +227,7 @@ export default function SidebarResizable({
<Separator />
<Nav
isCollapsed={isCollapsed}
links={NavFooter(accountData, translations)}
links={NavFooter(current, translations)}
translations={translations}
/>
</div>
Expand Down
31 changes: 1 addition & 30 deletions src/components/header/header-server.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
import { cookies } from 'next/headers'
import SidebarResizable from '@/components/header/header-resizable'
import MobileNav from '@/components/header/mobile-nav'
import { getUserDataSingle } from '@/utils/server-api/user/getUserData'
import { getUser } from '@/utils/server-api/account/user'

export const dynamic = 'force-dynamic'

export default async function HeaderServer({
children,
Expand All @@ -18,42 +14,17 @@ export default async function HeaderServer({
const defaultCollapsed = collapsed ? JSON.parse(collapsed.value) : undefined
const navCollapsedSize = 4

const getAvatar = (id: string) => {
if (!id) return

return `${process.env.NEXT_PUBLIC_API_URL}/v1/storage/buckets/avatars/files/${id}/preview?project=${process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID}&width=250&height=250&quality=50`
}

let accountData = null
let userData = null
let userImage = null
try {
accountData = await getUser()
userData = await getUserDataSingle(accountData.$id)
userImage = getAvatar(userData.avatarId)
} catch (error) {
// do nothing
}

return (
<>
<div className={'min-h-full'}>
<div className="md:hidden">
<MobileNav
accountData={accountData || null}
translations={translations}
>
{children}
</MobileNav>
<MobileNav translations={translations}>{children}</MobileNav>
</div>
<div className="hidden flex-col md:flex">
<SidebarResizable
defaultLayout={defaultLayout}
defaultCollapsed={defaultCollapsed}
navCollapsedSize={navCollapsedSize}
accountData={accountData || null}
userData={userData || null}
userImage={userImage}
translations={translations}
>
{children}
Expand Down
8 changes: 5 additions & 3 deletions src/components/header/mobile-nav.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@ import Image from 'next/image'
import { useRouter } from '@/navigation'
import ChangeLanguage from '@/components/system/changeLanguage'
import { ThemeToggle } from '@/components/ThemeToggle'
import { useUser } from '@/components/contexts/UserContext'

export default function MobileNav({ accountData, translations, children }) {
export default function MobileNav({ translations, children }) {
const router = useRouter()
const [isOpen, setIsOpen] = React.useState(false)
const { current } = useUser()

return (
<>
Expand Down Expand Up @@ -77,7 +79,7 @@ export default function MobileNav({ accountData, translations, children }) {
<Separator />
<Nav
isCollapsed={false}
links={Nav2(accountData, translations)}
links={Nav2(current, translations)}
setIsOpen={setIsOpen}
translations={translations}
/>
Expand All @@ -95,7 +97,7 @@ export default function MobileNav({ accountData, translations, children }) {
<Separator className={'mb-2'} />
<Nav
isCollapsed={false}
links={NavFooter(accountData, translations)}
links={NavFooter(current, translations)}
setIsOpen={setIsOpen}
translations={translations}
/>
Expand Down
1 change: 1 addition & 0 deletions src/navigation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export const pathnames = {
'/announcements': '/announcements',
'/announcements/[announcementId]': '/announcements/[announcementId]',
'/account': '/account',
'/account/verify': '/account/verify',
'/account/gallery': '/account/gallery',
'/account/gallery/upload': '/account/gallery/upload',
'/account/gallery/[galleryId]': '/account/gallery/[galleryId]',
Expand Down

0 comments on commit 44af254

Please sign in to comment.