summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/code-groups/page.tsx (renamed from app/[lng]/evcp/(evcp)/docu-list-rule/code-groups/page.tsx)35
-rw-r--r--app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/combo-box-settings/page.tsx (renamed from app/[lng]/evcp/(evcp)/docu-list-rule/combo-box-settings/page.tsx)33
-rw-r--r--app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/document-class/page.tsx (renamed from app/[lng]/evcp/(evcp)/docu-list-rule/document-class/page.tsx)31
-rw-r--r--app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/layout.tsx59
-rw-r--r--app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/number-type-configs/page.tsx (renamed from app/[lng]/evcp/(evcp)/docu-list-rule/number-type-configs/page.tsx)40
-rw-r--r--app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/number-types/page.tsx (renamed from app/[lng]/evcp/(evcp)/docu-list-rule/number-types/page.tsx)31
-rw-r--r--app/[lng]/evcp/(evcp)/docu-list-rule/[projectId]/page.tsx10
-rw-r--r--app/[lng]/evcp/(evcp)/docu-list-rule/layout.tsx70
-rw-r--r--app/[lng]/evcp/(evcp)/docu-list-rule/page.tsx22
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