feat: implement session management in RootLayout and pass session data to EdgeProvider for enhanced state handling
This commit is contained in:
parent
2eacdda23e
commit
6cab9cdde3
@ -1,12 +1,16 @@
|
||||
import type { ReactNode } from 'react'
|
||||
import type { Metadata } from 'next'
|
||||
import type { SessionData } from '@/types/Auth'
|
||||
|
||||
import ReactQueryProviders from '@/providers/ReactQueryProvider'
|
||||
import EdgeProvider from '@/providers/EdgeProvider'
|
||||
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 = {
|
||||
title: 'Create Next App',
|
||||
@ -21,9 +25,14 @@ interface RootLayoutProps {
|
||||
}
|
||||
|
||||
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 (
|
||||
<ReactQueryProviders>
|
||||
<EdgeProvider>
|
||||
<EdgeProvider sessionData={sessionData}>
|
||||
<html lang="en">
|
||||
<body>
|
||||
<div className="wrap">
|
||||
|
||||
@ -5,12 +5,19 @@ import { usePopupController } from '@/store/popupController'
|
||||
import { useSideNavState } from '@/store/sideNavState'
|
||||
import { usePathname } from 'next/navigation'
|
||||
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 { setBackBtn } = useHeaderStore()
|
||||
const { reset } = useSideNavState()
|
||||
const { setAlertMsg, setAlertBtn, setAlert, setAlert2, setAlert2BtnYes, setAlert2BtnNo } = usePopupController()
|
||||
const { session, setSession } = useSessionStore()
|
||||
|
||||
/**
|
||||
* alert 함수 - window.alert 함수 대체
|
||||
@ -56,6 +63,10 @@ export default function EdgeProvider({ children }: React.PropsWithChildren) {
|
||||
)
|
||||
return false
|
||||
}
|
||||
setSession({
|
||||
...session,
|
||||
...JSON.parse(sessionData),
|
||||
})
|
||||
}, [])
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user