diff options
Diffstat (limited to 'app')
9 files changed, 171 insertions, 160 deletions
diff --git a/app/[lng]/evcp/(evcp)/docu-list-rule/code-groups/page.tsx b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/code-groups/page.tsx index 5aebf15d..c75bf6b9 100644 --- a/app/[lng]/evcp/(evcp)/docu-list-rule/code-groups/page.tsx +++ b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/code-groups/page.tsx @@ -1,20 +1,27 @@ import * as React from "react"; import { type SearchParams } from "@/types/table"; -import { Shell } from "@/components/shell"; -import { Skeleton } from "@/components/ui/skeleton"; import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"; import { getCodeGroups } from "@/lib/docu-list-rule/code-groups/service"; import { CodeGroupsTable } from "@/lib/docu-list-rule/code-groups/table/code-groups-table"; import { searchParamsCodeGroupsCache } from "@/lib/docu-list-rule/code-groups/validation"; -import { InformationButton } from "@/components/information/information-button"; + interface IndexPageProps { searchParams: Promise<SearchParams>; + params: Promise<{ lng: string; projectId: string }>; } export default async function IndexPage(props: IndexPageProps) { const searchParams = await props.searchParams; - const search = searchParamsCodeGroupsCache.parse(searchParams); + const { projectId } = await props.params; + + // 프로젝트 ID를 필터에 추가 + const searchParamsWithProject = { + ...searchParams, + projectId: projectId + }; + + const search = searchParamsCodeGroupsCache.parse(searchParamsWithProject); const promises = Promise.all([ getCodeGroups({ @@ -23,19 +30,9 @@ export default async function IndexPage(props: IndexPageProps) { ]); return ( - <Shell className="gap-2"> - <div className="flex items-center justify-between space-y-2"> - <div> - <div className="flex items-center gap-2"> - <h2 className="text-2xl font-bold tracking-tight">Code Group 정의</h2> - <InformationButton pagePath="evcp/docu-list-rule/code-groups" /> - </div> - {/* <p className="text-muted-foreground"> - 문서 번호에 사용될 수 있는 다양한 코드 그룹의 정의를 관리하는 페이지입니다. - </p> */} - </div> - </div> - <React.Suspense fallback={<Skeleton className="h-7 w-52" />}></React.Suspense> + <> + + <React.Suspense fallback={ <DataTableSkeleton @@ -49,6 +46,6 @@ export default async function IndexPage(props: IndexPageProps) { > <CodeGroupsTable promises={promises} /> </React.Suspense> - </Shell> + </> ); -}
\ No newline at end of file +}
\ No newline at end of file diff --git a/app/[lng]/evcp/(evcp)/docu-list-rule/combo-box-settings/page.tsx b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/combo-box-settings/page.tsx index 194449a7..ffe30710 100644 --- a/app/[lng]/evcp/(evcp)/docu-list-rule/combo-box-settings/page.tsx +++ b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/combo-box-settings/page.tsx @@ -1,39 +1,36 @@ import * as React from "react"; import { type SearchParams } from "@/types/table"; -import { Shell } from "@/components/shell"; import { Skeleton } from "@/components/ui/skeleton"; import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"; import { getComboBoxCodeGroups } from "@/lib/docu-list-rule/combo-box-settings/service"; import { ComboBoxSettingsTable } from "@/lib/docu-list-rule/combo-box-settings/table/combo-box-settings-table"; import { searchParamsComboBoxSettingsCache } from "@/lib/docu-list-rule/combo-box-settings/validation"; -import { InformationButton } from "@/components/information/information-button"; + interface IndexPageProps { searchParams: Promise<SearchParams>; + params: Promise<{ lng: string; projectId: string }>; } export default async function IndexPage(props: IndexPageProps) { const searchParams = await props.searchParams; - const search = searchParamsComboBoxSettingsCache.parse(searchParams); + const { projectId } = await props.params; + + // 프로젝트 ID를 필터에 추가 + const searchParamsWithProject = { + ...searchParams, + projectId: projectId + }; + + const search = searchParamsComboBoxSettingsCache.parse(searchParamsWithProject); const promises = Promise.all([ getComboBoxCodeGroups(search), ]); return ( - <Shell className="gap-2"> - <div className="flex items-center justify-between space-y-2"> - <div> - <div className="flex items-center gap-2"> - <h2 className="text-2xl font-bold tracking-tight">Combo Box 설정</h2> - <InformationButton pagePath="evcp/docu-list-rule/combo-box-settings" /> - </div> - {/* <p className="text-muted-foreground"> - Combo Box 옵션을 관리하는 페이지입니다. - 각 Code Group별로 Combo Box에 표시될 옵션들을 설정할 수 있습니다. - </p> */} - </div> - </div> + <> + <React.Suspense fallback={<Skeleton className="h-7 w-52" />}></React.Suspense> <React.Suspense fallback={ @@ -48,6 +45,6 @@ export default async function IndexPage(props: IndexPageProps) { > <ComboBoxSettingsTable promises={promises} /> </React.Suspense> - </Shell> + </> ); -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/docu-list-rule/document-class/page.tsx b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/document-class/page.tsx index 5c2c600e..8a0f1bd7 100644 --- a/app/[lng]/evcp/(evcp)/docu-list-rule/document-class/page.tsx +++ b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/document-class/page.tsx @@ -1,38 +1,35 @@ import * as React from "react"; -import { Shell } from "@/components/shell"; import { Skeleton } from "@/components/ui/skeleton"; import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"; import { getDocumentClassCodeGroups } from "@/lib/docu-list-rule/document-class/service"; import { DocumentClassTable } from "@/lib/docu-list-rule/document-class/table/document-class-table"; -import { InformationButton } from "@/components/information/information-button"; + import { searchParamsDocumentClassCache } from "@/lib/docu-list-rule/document-class/validation"; interface IndexPageProps { searchParams: Promise<any>; + params: Promise<{ lng: string; projectId: string }>; } export default async function IndexPage(props: IndexPageProps) { const searchParams = await props.searchParams; + const { projectId } = await props.params; + + // 프로젝트 ID를 필터에 추가 + const searchParamsWithProject = { + ...searchParams, + projectId: projectId + }; const promises = Promise.all([ getDocumentClassCodeGroups( - searchParamsDocumentClassCache.parse(searchParams) + searchParamsDocumentClassCache.parse(searchParamsWithProject) ), ]); return ( - <Shell className="gap-2"> - <div className="flex items-center justify-between space-y-2"> - <div> - <div className="flex items-center gap-2"> - <h2 className="text-2xl font-bold tracking-tight">Document Class 관리</h2> - <InformationButton pagePath="evcp/docu-list-rule/document-class" /> - </div> - {/* <p className="text-muted-foreground"> - Document Class를 관리합니다. - </p> */} - </div> - </div> + <> + <React.Suspense fallback={<Skeleton className="h-7 w-52" />}></React.Suspense> <React.Suspense fallback={ @@ -47,6 +44,6 @@ export default async function IndexPage(props: IndexPageProps) { > <DocumentClassTable promises={promises} /> </React.Suspense> - </Shell> + </> ); -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/layout.tsx b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/layout.tsx new file mode 100644 index 00000000..197c35b2 --- /dev/null +++ b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/layout.tsx @@ -0,0 +1,59 @@ +import { Metadata } from "next" +import { Separator } from "@/components/ui/separator" +import { SidebarNav } from "@/components/layout/sidebar-nav" +import { DynamicTitleClient } from "@/components/docu-list-rule/dynamic-title-client" + +export const metadata: Metadata = { + title: "Document Numbering Rule", +} + +export default async function ProjectDocuListRuleLayout({ + children, + params, +}: { + children: React.ReactNode + params: Promise<{ lng: string; projectId: string }> +}) { + const { lng, projectId } = await params + + const sidebarNavItems = [ + { + title: "Document Class 관리", + href: `/${lng}/evcp/docu-list-rule/${projectId}/document-class`, + }, + { + title: "Code Group 정의", + href: `/${lng}/evcp/docu-list-rule/${projectId}/code-groups`, + }, + { + title: "Combo Box 설정", + href: `/${lng}/evcp/docu-list-rule/${projectId}/combo-box-settings`, + }, + { + title: "Number Type 관리", + href: `/${lng}/evcp/docu-list-rule/${projectId}/number-types`, + }, + { + title: "Number Type별 설정", + href: `/${lng}/evcp/docu-list-rule/${projectId}/number-type-configs`, + }, + ] + + return ( + <> + <div className="hidden space-y-6 p-5 pb-16 md:block"> + <DynamicTitleClient /> + + <Separator className="my-6" /> + <div className="flex flex-col space-y-8 lg:flex-row lg:space-x-12 lg:space-y-0"> + <aside className="-mx-4 lg:w-1/5"> + <SidebarNav items={sidebarNavItems} /> + </aside> + <div className="flex-1 ">{children}</div> + </div> + </div> + + + </> + ) +} diff --git a/app/[lng]/evcp/(evcp)/docu-list-rule/number-type-configs/page.tsx b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/number-type-configs/page.tsx index c3556fb7..78714dae 100644 --- a/app/[lng]/evcp/(evcp)/docu-list-rule/number-type-configs/page.tsx +++ b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/number-type-configs/page.tsx @@ -1,11 +1,10 @@ import * as React from "react"; -import { Shell } from "@/components/shell"; import { Skeleton } from "@/components/ui/skeleton"; import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"; import { NumberTypeConfigsTable } from "@/lib/docu-list-rule/number-type-configs/table/number-type-configs-table"; import { getNumberTypes } from "@/lib/docu-list-rule/number-types/service"; import { getNumberTypeConfigs } from "@/lib/docu-list-rule/number-type-configs/service"; -import { InformationButton } from "@/components/information/information-button"; + import { searchParamsNumberTypeConfigsCache } from "@/lib/docu-list-rule/number-type-configs/validation"; // Number Type with project info type @@ -23,11 +22,20 @@ type NumberTypeWithProject = { interface IndexPageProps { searchParams: Promise<any>; + params: Promise<{ lng: string; projectId: string }>; } export default async function IndexPage(props: IndexPageProps) { const searchParams = await props.searchParams; - const parsedSearchParams = await searchParamsNumberTypeConfigsCache.parse(searchParams); + const { projectId } = await props.params; + + // 프로젝트 ID를 필터에 추가 + const searchParamsWithProject = { + ...searchParams, + projectId: projectId + }; + + const parsedSearchParams = await searchParamsNumberTypeConfigsCache.parse(searchParamsWithProject); const promises = Promise.all([ getNumberTypes({ @@ -40,25 +48,19 @@ export default async function IndexPage(props: IndexPageProps) { flags: ["advancedTable"], numberTypeId: "", description: "", - isActive: "" + isActive: "", + projectId: projectId // 프로젝트 ID 추가 }) as Promise<{ data: NumberTypeWithProject[]; pageCount: number }>, // Number Type Configs도 서버 사이드에서 가져오기 - parsedSearchParams.numberTypeId > 0 ? getNumberTypeConfigs(parsedSearchParams) : Promise.resolve({ success: true, data: [], pageCount: 0 }), + parsedSearchParams.numberTypeId > 0 ? getNumberTypeConfigs({ + ...parsedSearchParams, + projectId: projectId + }) : Promise.resolve({ success: true, data: [], pageCount: 0 }), ]); return ( - <Shell className="gap-2"> - <div className="flex items-center justify-between space-y-2"> - <div> - <div className="flex items-center gap-2"> - <h2 className="text-2xl font-bold tracking-tight">Number Type별 설정</h2> - <InformationButton pagePath="evcp/docu-list-rule/number-type-configs" /> - </div> - {/* <p className="text-muted-foreground"> - 각 문서 번호 유형별로 어떤 코드 그룹들을 어떤 순서로 사용할지 설정하는 페이지입니다. - </p> */} - </div> - </div> + <> + <React.Suspense fallback={<Skeleton className="h-7 w-52" />}></React.Suspense> <React.Suspense fallback={ @@ -73,6 +75,6 @@ export default async function IndexPage(props: IndexPageProps) { > <NumberTypeConfigsTable promises={promises} searchParams={parsedSearchParams} /> </React.Suspense> - </Shell> + </> ); -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/docu-list-rule/number-types/page.tsx b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/number-types/page.tsx index 58af176f..e18d536d 100644 --- a/app/[lng]/evcp/(evcp)/docu-list-rule/number-types/page.tsx +++ b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/number-types/page.tsx @@ -1,38 +1,35 @@ import * as React from "react"; -import { Shell } from "@/components/shell"; import { Skeleton } from "@/components/ui/skeleton"; import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"; import { NumberTypesTable } from "@/lib/docu-list-rule/number-types/table/number-types-table"; import { getNumberTypesWithConfigs } from "@/lib/docu-list-rule/number-types/service"; -import { InformationButton } from "@/components/information/information-button"; + import { searchParamsNumberTypesCache } from "@/lib/docu-list-rule/number-types/validation"; interface IndexPageProps { searchParams: Promise<any>; + params: Promise<{ lng: string; projectId: string }>; } export default async function IndexPage(props: IndexPageProps) { const searchParams = await props.searchParams; + const { projectId } = await props.params; + + // 프로젝트 ID를 필터에 추가 + const searchParamsWithProject = { + ...searchParams, + projectId: projectId + }; const promises = Promise.all([ getNumberTypesWithConfigs( - searchParamsNumberTypesCache.parse(searchParams) + searchParamsNumberTypesCache.parse(searchParamsWithProject) ), ]); return ( - <Shell className="gap-2"> - <div className="flex items-center justify-between space-y-2"> - <div> - <div className="flex items-center gap-2"> - <h2 className="text-2xl font-bold tracking-tight">Number Type 관리</h2> - <InformationButton pagePath="evcp/docu-list-rule/number-types" /> - </div> - {/* <p className="text-muted-foreground"> - 문서 번호 유형을 추가, 수정, 삭제할 수 있는 페이지입니다. - </p> */} - </div> - </div> + <> + <React.Suspense fallback={<Skeleton className="h-7 w-52" />}></React.Suspense> <React.Suspense fallback={ @@ -47,6 +44,6 @@ export default async function IndexPage(props: IndexPageProps) { > <NumberTypesTable promises={promises} /> </React.Suspense> - </Shell> + </> ); -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/page.tsx b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/page.tsx new file mode 100644 index 00000000..59bec55a --- /dev/null +++ b/app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/page.tsx @@ -0,0 +1,10 @@ +import { redirect } from "next/navigation" + +export default async function ProjectDocuListRulePage({ + params, +}: { + params: Promise<{ lng: string; projectId: string }> +}) { + const { lng, projectId } = await params + redirect(`/${lng}/evcp/docu-list-rule/${projectId}/document-class`) +} diff --git a/app/[lng]/evcp/(evcp)/docu-list-rule/layout.tsx b/app/[lng]/evcp/(evcp)/docu-list-rule/layout.tsx index 03473293..05231bf1 100644 --- a/app/[lng]/evcp/(evcp)/docu-list-rule/layout.tsx +++ b/app/[lng]/evcp/(evcp)/docu-list-rule/layout.tsx @@ -1,69 +1,17 @@ -import { Metadata } from "next" +import { Shell } from "@/components/shell" +import DocuListRuleClient from "@/components/docu-list-rule/docu-list-rule-client" -import { Separator } from "@/components/ui/separator" -import { SidebarNav } from "@/components/layout/sidebar-nav" - -export const metadata: Metadata = { - title: "Document Numbering Rule", -} - - - -export default async function DocumentNumberingLayout({ +// Layout 컴포넌트는 서버 컴포넌트입니다 +export default async function VendorDocuments({ children, - params, }: { children: React.ReactNode - params: { lng: string } }) { - const resolvedParams = await params - const lng = resolvedParams.lng - - const sidebarNavItems = [ - { - title: "Document Class 관리", - href: `/${lng}/evcp/docu-list-rule/document-class`, - }, - { - title: "Code Group 정의", - href: `/${lng}/evcp/docu-list-rule/code-groups`, - }, - { - title: "Combo Box 설정", - href: `/${lng}/evcp/docu-list-rule/combo-box-settings`, - }, - { - title: "Number Type 관리", - href: `/${lng}/evcp/docu-list-rule/number-types`, - }, - { - title: "Number Type별 설정", - href: `/${lng}/evcp/docu-list-rule/number-type-configs`, - }, - ] - return ( - <> - <div className="container py-6"> - <section className="overflow-hidden rounded-[0.5rem] border bg-background shadow"> - <div className="hidden space-y-6 p-10 pb-16 md:block"> - <div className="space-y-0.5"> - <h2 className="text-2xl font-bold tracking-tight">Document Numbering Rule (해양)</h2> - <p className="text-muted-foreground"> - 벤더 제출 문서 리스트 작성 시에 사용되는 넘버링 - </p> - </div> - - <Separator className="my-6" /> - <div className="flex flex-col space-y-8 lg:flex-row lg:space-x-12 lg:space-y-0"> - <aside className="-mx-4 lg:w-1/5"> - <SidebarNav items={sidebarNavItems} /> - </aside> - <div className="flex-1 ">{children}</div> - </div> - </div> - </section> - </div> - </> + <Shell className="gap-2"> + <DocuListRuleClient> + {children} + </DocuListRuleClient> + </Shell> ) }
\ No newline at end of file diff --git a/app/[lng]/evcp/(evcp)/docu-list-rule/page.tsx b/app/[lng]/evcp/(evcp)/docu-list-rule/page.tsx index 8735e3d6..fb36b3b8 100644 --- a/app/[lng]/evcp/(evcp)/docu-list-rule/page.tsx +++ b/app/[lng]/evcp/(evcp)/docu-list-rule/page.tsx @@ -1,11 +1,15 @@ -import { redirect } from "next/navigation" +export default async function IndexPage() { + return ( + <div className="space-y-6"> - -export default async function DocumentNumberingPage({ - params, -}: { - params: Promise<{ lng: string }> -}) { - const { lng } = await params - redirect(`/${lng}/evcp/docu-list-rule/document-class`) + <div className="grid gap-4"> + <div className="rounded-lg border p-4"> + <h4 className="text-sm font-medium">시작하는 방법</h4> + <p className="text-sm text-muted-foreground mt-1"> + 오른쪽 상단에서 프로젝트/계약을 선택하세요. + </p> + </div> + </div> + </div> + ) }
\ No newline at end of file |
