From 2eacdda23ebdedbb54d474fc26ee0742085f84db Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Mon, 12 May 2025 10:37:58 +0900 Subject: [PATCH 1/4] refactor: remove alertSwitch store and simplify alert handling in EdgeProvider --- src/providers/EdgeProvider.tsx | 41 +++++++++++++++++++--------------- src/store/alertSwitch.ts | 21 ----------------- 2 files changed, 23 insertions(+), 39 deletions(-) delete mode 100644 src/store/alertSwitch.ts diff --git a/src/providers/EdgeProvider.tsx b/src/providers/EdgeProvider.tsx index 3d8ea42..176cf06 100644 --- a/src/providers/EdgeProvider.tsx +++ b/src/providers/EdgeProvider.tsx @@ -1,25 +1,22 @@ 'use client' -import { useAlertSwitch } from '@/store/alertSwitch' import { useHeaderStore } from '@/store/header' import { usePopupController } from '@/store/popupController' import { useSideNavState } from '@/store/sideNavState' import { usePathname } from 'next/navigation' import { useEffect } from 'react' -declare global { - interface Window { - alert2: (msg: string, alert2BtnYes?: () => void, alert2BtnNo?: () => void) => void - } -} - export default function EdgeProvider({ children }: React.PropsWithChildren) { const pathname = usePathname() const { setBackBtn } = useHeaderStore() const { reset } = useSideNavState() const { setAlertMsg, setAlertBtn, setAlert, setAlert2, setAlert2BtnYes, setAlert2BtnNo } = usePopupController() - const { alertKind } = useAlertSwitch() + /** + * alert 함수 - window.alert 함수 대체 + * @param msg + * @param alertBtn + */ const alertFunc = (msg: string, alertBtn: Function) => { console.log('🚀 ~ alertFunc ~ msg:', msg) setAlertMsg(msg) @@ -27,7 +24,7 @@ export default function EdgeProvider({ children }: React.PropsWithChildren) { setAlert(true) } /** - * alert2 함수 + * alert2 함수 - window.confirm 함수 대체 * @param msg alert 메시지 * @param alertBtn2Yes alert 확인 버튼 클릭시 실행되는 함수 * @param alertBtn2No alert 취소 버튼 클릭시 실행되는 함수 @@ -42,16 +39,24 @@ export default function EdgeProvider({ children }: React.PropsWithChildren) { //alert 함수 변경해서 바인딩 useEffect(() => { - if (alertKind === 'single') { - window.alert = function (msg, alertBtn = () => setAlert(false)) { - alertFunc(msg, alertBtn) - } - } else if (alertKind === 'multi') { - window.alert = function (msg, alert2BtnYes = () => setAlert2(false), alert2BtnNo = () => setAlert2(false)) { - alertFunc2(msg, alert2BtnYes, alert2BtnNo) - } + window.alert = function (msg, alertBtn = () => setAlert(false)) { + alertFunc(msg, alertBtn) } - }, [alertKind]) + window.confirm = function (msg = '', alert2BtnYes = () => setAlert2(false), alert2BtnNo = () => setAlert2(false)) { + alertFunc2( + msg, + () => { + alert2BtnYes() + return true + }, + () => { + alert2BtnNo() + return false + }, + ) + return false + } + }, []) /** * 헤더 뒤로가기 버튼 컨트롤 diff --git a/src/store/alertSwitch.ts b/src/store/alertSwitch.ts deleted file mode 100644 index 54c9d00..0000000 --- a/src/store/alertSwitch.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { create } from 'zustand' - -type AlertSwitchState = { - alertKind: string - setAlertKind: (value: string) => void - reset: () => void -} - -type InitialState = { - alertKind: string -} - -const initialState: InitialState = { - alertKind: 'single', -} - -export const useAlertSwitch = create((set) => ({ - ...initialState, - setAlertKind: (value: string) => set((state) => ({ ...state, alertKind: value })), - reset: () => set(initialState), -})) From 6cab9cdde3d623ae640187cdf761b214de3ae196 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Mon, 12 May 2025 11:01:07 +0900 Subject: [PATCH 2/4] feat: implement session management in RootLayout and pass session data to EdgeProvider for enhanced state handling --- src/app/layout.tsx | 15 ++++++++++++--- src/providers/EdgeProvider.tsx | 13 ++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index e7fbcf6..cc67df2 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -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 { + const cookieStore = await cookies() + const session = await getIronSession(cookieStore, sessionOptions) + + const sessionData = JSON.stringify(session) + return ( - +
diff --git a/src/providers/EdgeProvider.tsx b/src/providers/EdgeProvider.tsx index 176cf06..4d789f3 100644 --- a/src/providers/EdgeProvider.tsx +++ b/src/providers/EdgeProvider.tsx @@ -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), + }) }, []) /** From e84ef1b7a02d9ecd368525f63b23f91296212888 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Mon, 12 May 2025 11:24:32 +0900 Subject: [PATCH 3/4] fix: update session data handling in RootLayout to conditionally stringify session based on login status --- src/app/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index cc67df2..093dbec 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -28,7 +28,7 @@ export default async function RootLayout({ children, header, footer, floatBtn }: const cookieStore = await cookies() const session = await getIronSession(cookieStore, sessionOptions) - const sessionData = JSON.stringify(session) + const sessionData = session.isLoggedIn ? JSON.stringify(session) : '' return ( From 69d81d892dea416bb426518222675a921f473c85 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Mon, 12 May 2025 13:34:14 +0900 Subject: [PATCH 4/4] fix: conditionally update session state in EdgeProvider based on presence of sessionData --- src/providers/EdgeProvider.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/providers/EdgeProvider.tsx b/src/providers/EdgeProvider.tsx index 4d789f3..9caa71d 100644 --- a/src/providers/EdgeProvider.tsx +++ b/src/providers/EdgeProvider.tsx @@ -63,10 +63,12 @@ export default function EdgeProvider({ children, sessionData }: EdgeProviderProp ) return false } - setSession({ - ...session, - ...JSON.parse(sessionData), - }) + if (sessionData && sessionData !== '') { + setSession({ + ...session, + ...JSON.parse(sessionData), + }) + } }, []) /**