66 lines
2.0 KiB
TypeScript
66 lines
2.0 KiB
TypeScript
/**
|
|
* ➡️ 경로 : I/I분석, 유지관리 정보 모든 페이지
|
|
*
|
|
* 📄 With Base Layout
|
|
* Next.js App Router (app/) 기반 분석 페이지 기본 레이아웃 컴포넌트
|
|
*
|
|
* - 메뉴 클릭 이벤트 처리 및 라우팅
|
|
* - 현재 메뉴 정보 Zustand를 통한 상태 관리
|
|
* - 시도/시군구/사업 구분/사업 유형 데이터 초기 로드
|
|
* - BaseLayout을 통한 공통 레이아웃 적용
|
|
* - QueryClient를 통한 데이터 캐싱 및 관리
|
|
* - 경로 변경 시 메뉴 정보 동기화
|
|
*/
|
|
"use client";
|
|
|
|
import React, { useEffect } from "react";
|
|
import { usePathname, useRouter } from "next/navigation";
|
|
import { useQueryClient } from "@tanstack/react-query";
|
|
import { BaseLayout } from "@common/components/ui/layout/base";
|
|
import type { MenuItem } from "@/entities/menu";
|
|
import { useMenuStore } from "@/shared/lib";
|
|
import { PageLayout } from "@/shared/ui/page-layout";
|
|
import useStore from "../store/useStore";
|
|
import { authService } from "@/entities/auth";
|
|
import { GlobalAnalysisCompletionWatcher } from "./ii/useAnalysisCompletionWatcher";
|
|
|
|
export default function WithBaseLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
const router = useRouter();
|
|
const pathname = usePathname();
|
|
const queryClient = useQueryClient();
|
|
|
|
const setCurrentMenuInfo = useMenuStore((state) => state.setCurrentMenuInfo);
|
|
|
|
const { fetchCtpv, fetchSgg, fetchBIZ_SE_CD, fetchBIZ_TY_CD } = useStore();
|
|
|
|
useEffect(() => {
|
|
fetchCtpv();
|
|
fetchSgg();
|
|
fetchBIZ_SE_CD();
|
|
fetchBIZ_TY_CD();
|
|
}, []);
|
|
|
|
const handleMenuClick = (item: MenuItem) => {
|
|
setCurrentMenuInfo(item);
|
|
router.push(item.urlPath);
|
|
};
|
|
|
|
return (
|
|
<div className="sn-base-layout w-full min-w-0 max-w-full">
|
|
<BaseLayout
|
|
queryClient={queryClient}
|
|
authService={authService}
|
|
currentPath={pathname ?? ""}
|
|
handleMenuClick={handleMenuClick}
|
|
>
|
|
<GlobalAnalysisCompletionWatcher />
|
|
<PageLayout>{children}</PageLayout>
|
|
</BaseLayout>
|
|
</div>
|
|
);
|
|
}
|