feat: implement session management in RootLayout and pass session data to EdgeProvider for enhanced state handling

This commit is contained in:
yoosangwook 2025-05-12 11:01:07 +09:00
parent 2eacdda23e
commit 6cab9cdde3
2 changed files with 24 additions and 4 deletions

View File

@ -1,12 +1,16 @@
import type { ReactNode } from 'react'
import type { Metadata } from 'next' import type { Metadata } from 'next'
import type { SessionData } from '@/types/Auth'
import ReactQueryProviders from '@/providers/ReactQueryProvider' import ReactQueryProviders from '@/providers/ReactQueryProvider'
import EdgeProvider from '@/providers/EdgeProvider' import EdgeProvider from '@/providers/EdgeProvider'
import PopupController from '@/components/ui/PopupController' import PopupController from '@/components/ui/PopupController'
import '@/styles/style.scss' import { cookies } from 'next/headers'
import { getIronSession } from 'iron-session'
import { sessionOptions } from '@/libs/session'
import type { ReactNode } from 'react' import '@/styles/style.scss'
export const metadata: Metadata = { export const metadata: Metadata = {
title: 'Create Next App', title: 'Create Next App',
@ -21,9 +25,14 @@ interface RootLayoutProps {
} }
export default async function RootLayout({ children, header, footer, floatBtn }: RootLayoutProps): Promise<ReactNode> { export default async function RootLayout({ children, header, footer, floatBtn }: RootLayoutProps): Promise<ReactNode> {
const cookieStore = await cookies()
const session = await getIronSession<SessionData>(cookieStore, sessionOptions)
const sessionData = JSON.stringify(session)
return ( return (
<ReactQueryProviders> <ReactQueryProviders>
<EdgeProvider> <EdgeProvider sessionData={sessionData}>
<html lang="en"> <html lang="en">
<body> <body>
<div className="wrap"> <div className="wrap">

View File

@ -5,12 +5,19 @@ import { usePopupController } from '@/store/popupController'
import { useSideNavState } from '@/store/sideNavState' import { useSideNavState } from '@/store/sideNavState'
import { usePathname } from 'next/navigation' import { usePathname } from 'next/navigation'
import { useEffect } from 'react' import { useEffect } from 'react'
import { useSessionStore } from '@/store/session'
export default function EdgeProvider({ children }: React.PropsWithChildren) { interface EdgeProviderProps {
children: React.ReactNode
sessionData: string
}
export default function EdgeProvider({ children, sessionData }: EdgeProviderProps) {
const pathname = usePathname() const pathname = usePathname()
const { setBackBtn } = useHeaderStore() const { setBackBtn } = useHeaderStore()
const { reset } = useSideNavState() const { reset } = useSideNavState()
const { setAlertMsg, setAlertBtn, setAlert, setAlert2, setAlert2BtnYes, setAlert2BtnNo } = usePopupController() const { setAlertMsg, setAlertBtn, setAlert, setAlert2, setAlert2BtnYes, setAlert2BtnNo } = usePopupController()
const { session, setSession } = useSessionStore()
/** /**
* alert - window.alert * alert - window.alert
@ -56,6 +63,10 @@ export default function EdgeProvider({ children }: React.PropsWithChildren) {
) )
return false return false
} }
setSession({
...session,
...JSON.parse(sessionData),
})
}, []) }, [])
/** /**