summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-17 12:06:56 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-17 12:06:56 +0900
commitb9ce61033c2f5bc6ec8eb3db200b96058f013bf8 (patch)
tree2366c08f7120fcf49ca3f36c290a2f97d3b0a551
parent182dfce1ba5381389a0df05cd9d4a2ea541b229d (diff)
(김준회) 오류 수정: params and searchParams: Nextjs 15부터 Promise 타입으로 변경됨: 서버 컴포넌트에서는 await으로 resolve 하도록 처리, Promise 타입 명시적으로 추가(Generic)
-rw-r--r--app/[lng]/auth/reset-password/page.tsx5
-rw-r--r--app/[lng]/engineering/(engineering)/docu-list-rule/page.tsx5
-rw-r--r--app/[lng]/evcp/(evcp)/(master-data)/basic-contract-template/[id]/page.tsx16
-rw-r--r--app/[lng]/evcp/(evcp)/(procurement)/rfq-last/[id]/compare/page.tsx8
-rw-r--r--app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx5
-rw-r--r--app/[lng]/evcp/(evcp)/(system)/approval/template/page.tsx5
-rw-r--r--app/[lng]/evcp/(evcp)/(system)/email-log/page.tsx2
-rw-r--r--app/[lng]/evcp/(evcp)/(system)/email-template/page.tsx3
-rw-r--r--app/[lng]/evcp/(evcp)/(system)/qna/[id]/page.tsx5
-rw-r--r--app/[lng]/evcp/data-room/[projectId]/page.tsx7
-rw-r--r--app/[lng]/evcp/data-room/owner-companies/[id]/page.tsx5
-rw-r--r--app/[lng]/evcp/data-room/owner-companies/[id]/users/new/page.tsx5
-rw-r--r--app/[lng]/evcp/data-room/owner-companies/[id]/users/page.tsx5
-rw-r--r--app/[lng]/partners/(partners)/rfq-last/[id]/page.tsx9
-rw-r--r--app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx10
-rw-r--r--app/[lng]/partners/data-room/[projectId]/page.tsx7
-rw-r--r--app/[lng]/shared/[token]/page.tsx7
17 files changed, 60 insertions, 49 deletions
diff --git a/app/[lng]/auth/reset-password/page.tsx b/app/[lng]/auth/reset-password/page.tsx
index f49e5d86..1900f7b9 100644
--- a/app/[lng]/auth/reset-password/page.tsx
+++ b/app/[lng]/auth/reset-password/page.tsx
@@ -7,10 +7,11 @@ import ResetPasswordForm from '@/components/login/reset-password';
import { getPasswordPolicy } from '@/lib/users/auth/passwordUtil';
interface Props {
- searchParams: { token?: string };
+ searchParams: Promise<{ token?: string }>;
}
-export default async function ResetPasswordPage({ searchParams }: Props) {
+export default async function ResetPasswordPage(props: Props) {
+ const searchParams = await props.searchParams;
const token = searchParams.token;
// 토큰이 없는 경우 로그인 페이지로 리다이렉트
diff --git a/app/[lng]/engineering/(engineering)/docu-list-rule/page.tsx b/app/[lng]/engineering/(engineering)/docu-list-rule/page.tsx
index fed49256..b8d3559f 100644
--- a/app/[lng]/engineering/(engineering)/docu-list-rule/page.tsx
+++ b/app/[lng]/engineering/(engineering)/docu-list-rule/page.tsx
@@ -4,8 +4,9 @@ import { redirect } from "next/navigation"
export default async function DocumentNumberingPage({
params,
}: {
- params: { lng: string }
+ params: Promise<{ lng: string }>
}) {
+ const resolvedParams = await params;
// Code Group 페이지로 리다이렉트
- redirect(`/${params.lng}/engineering/docu-list-rule/document-class`)
+ redirect(`/${resolvedParams.lng}/engineering/docu-list-rule/document-class`)
} \ No newline at end of file
diff --git a/app/[lng]/evcp/(evcp)/(master-data)/basic-contract-template/[id]/page.tsx b/app/[lng]/evcp/(evcp)/(master-data)/basic-contract-template/[id]/page.tsx
index bcf3e1f4..65d8a56f 100644
--- a/app/[lng]/evcp/(evcp)/(master-data)/basic-contract-template/[id]/page.tsx
+++ b/app/[lng]/evcp/(evcp)/(master-data)/basic-contract-template/[id]/page.tsx
@@ -13,15 +13,14 @@ import { getBasicContractTemplateByIdService, refreshTemplatePage } from "@/lib/
import { TemplateEditorWrapper } from "@/lib/basic-contract/template/template-editor-wrapper"
interface BasicContractTemplateDetailPageProps {
- params: {
+ params: Promise<{
id: string
- }
+ }>
}
// 메타데이터 생성
-export async function generateMetadata({
- params
-}: BasicContractTemplateDetailPageProps): Promise<Metadata> {
+export async function generateMetadata(props: BasicContractTemplateDetailPageProps): Promise<Metadata> {
+ const params = await props.params;
const template = await getBasicContractTemplateByIdService(params.id);
if (!template) {
@@ -37,9 +36,8 @@ export async function generateMetadata({
};
}
-export default async function BasicContractTemplateDetailPage({
- params
-}: BasicContractTemplateDetailPageProps) {
+export default async function BasicContractTemplateDetailPage(props: BasicContractTemplateDetailPageProps) {
+ const params = await props.params;
const template = await getBasicContractTemplateByIdService(params.id);
if (!template) {
@@ -49,7 +47,7 @@ export default async function BasicContractTemplateDetailPage({
// 페이지 새로고침 서버 액션
const handleRefresh = async () => {
"use server"
- await refreshTemplatePage(params.id);
+ await refreshTemplatePage(template.id.toString());
};
return (
diff --git a/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/[id]/compare/page.tsx b/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/[id]/compare/page.tsx
index 461a0863..792640b9 100644
--- a/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/[id]/compare/page.tsx
+++ b/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/[id]/compare/page.tsx
@@ -17,13 +17,15 @@ export default async function ComparePage({
params,
searchParams
}: ComparePageProps) {
- const rfqId = parseInt(params.id);
+ const resolvedParams = await params;
+ const resolvedSearchParams = await searchParams;
+ const rfqId = parseInt(resolvedParams.id);
console.log(rfqId,"rfqId")
- console.log(searchParams.vendors,"searchParams.vendors")
+ console.log(resolvedSearchParams.vendors,"searchParams.vendors")
// URL에서 벤더 ID들 파싱
- const vendorIds = searchParams.vendors
+ const vendorIds = resolvedSearchParams.vendors
?.split(',')
.map(id => parseInt(id))
.filter(id => !isNaN(id)) || [];
diff --git a/app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx b/app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx
index 38b43680..2e96b434 100644
--- a/app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx
+++ b/app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx
@@ -15,10 +15,11 @@ export const metadata: Metadata = {
};
interface PageProps {
- searchParams: SearchParams;
+ searchParams: Promise<SearchParams>;
}
-export default async function ApprovalLinePage({ searchParams }: PageProps) {
+export default async function ApprovalLinePage(props: PageProps) {
+ const searchParams = await props.searchParams;
const search = SearchParamsApprovalLineCache.parse(searchParams);
// getValidFilters 반환값이 undefined 인 경우 폴백
const validFilters = getValidFilters(search.filters) ?? [];
diff --git a/app/[lng]/evcp/(evcp)/(system)/approval/template/page.tsx b/app/[lng]/evcp/(evcp)/(system)/approval/template/page.tsx
index f475099c..c5834b05 100644
--- a/app/[lng]/evcp/(evcp)/(system)/approval/template/page.tsx
+++ b/app/[lng]/evcp/(evcp)/(system)/approval/template/page.tsx
@@ -15,10 +15,11 @@ export const metadata: Metadata = {
};
interface PageProps {
- searchParams: SearchParams;
+ searchParams: Promise<SearchParams>;
}
-export default async function ApprovalTemplatePage({ searchParams }: PageProps) {
+export default async function ApprovalTemplatePage(props: PageProps) {
+ const searchParams = await props.searchParams;
const search = SearchParamsApprovalTemplateCache.parse(searchParams);
// getValidFilters 반환값이 undefined 인 경우 폴백
const validFilters = getValidFilters(search.filters) ?? [];
diff --git a/app/[lng]/evcp/(evcp)/(system)/email-log/page.tsx b/app/[lng]/evcp/(evcp)/(system)/email-log/page.tsx
index b73674e4..41001cc7 100644
--- a/app/[lng]/evcp/(evcp)/(system)/email-log/page.tsx
+++ b/app/[lng]/evcp/(evcp)/(system)/email-log/page.tsx
@@ -14,7 +14,7 @@ export const metadata: Metadata = {
}
interface EmailLogPageProps {
- searchParams: SearchParams
+ searchParams: Promise<SearchParams>
}
export default async function EmailLogPage(props: EmailLogPageProps) {
diff --git a/app/[lng]/evcp/(evcp)/(system)/email-template/page.tsx b/app/[lng]/evcp/(evcp)/(system)/email-template/page.tsx
index 7f4de341..16c75dab 100644
--- a/app/[lng]/evcp/(evcp)/(system)/email-template/page.tsx
+++ b/app/[lng]/evcp/(evcp)/(system)/email-template/page.tsx
@@ -22,11 +22,10 @@ export const metadata: Metadata = {
}
interface TemplatePageProps {
- searchParams: SearchParams
+ searchParams: Promise<SearchParams>
}
export default async function TemplatePage(props: TemplatePageProps) {
-
const searchParams = await props.searchParams
const search = SearchParamsEmailTemplateCache.parse(searchParams)
diff --git a/app/[lng]/evcp/(evcp)/(system)/qna/[id]/page.tsx b/app/[lng]/evcp/(evcp)/(system)/qna/[id]/page.tsx
index 93b948c6..ebd4cbb3 100644
--- a/app/[lng]/evcp/(evcp)/(system)/qna/[id]/page.tsx
+++ b/app/[lng]/evcp/(evcp)/(system)/qna/[id]/page.tsx
@@ -2,8 +2,9 @@ import { getQnaById } from "@/lib/qna/service";
import QnaDetail from "@/lib/qna/table/qna-detail";
import { notFound } from "next/navigation";
-export default async function QnaDetailPage({ params }: { params: { id: string } }) {
- const question = await getQnaById(params.id);
+export default async function QnaDetailPage({ params }: { params: Promise<{ id: string }> }) {
+ const resolvedParams = await params;
+ const question = await getQnaById(resolvedParams.id);
if (!question) {
notFound();
diff --git a/app/[lng]/evcp/data-room/[projectId]/page.tsx b/app/[lng]/evcp/data-room/[projectId]/page.tsx
index d54a8cab..24f3a124 100644
--- a/app/[lng]/evcp/data-room/[projectId]/page.tsx
+++ b/app/[lng]/evcp/data-room/[projectId]/page.tsx
@@ -1,10 +1,11 @@
// app/projects/[projectId]/page.tsx
import { ProjectDashboard } from '@/components/project/ProjectDashboard';
-export default function ProjectPage({
+export default async function ProjectPage({
params,
}: {
- params: { projectId: string };
+ params: Promise<{ projectId: string }>;
}) {
- return <ProjectDashboard projectId={params.projectId} />;
+ const resolvedParams = await params;
+ return <ProjectDashboard projectId={resolvedParams.projectId} />;
}
diff --git a/app/[lng]/evcp/data-room/owner-companies/[id]/page.tsx b/app/[lng]/evcp/data-room/owner-companies/[id]/page.tsx
index 7793fb71..3ac10172 100644
--- a/app/[lng]/evcp/data-room/owner-companies/[id]/page.tsx
+++ b/app/[lng]/evcp/data-room/owner-companies/[id]/page.tsx
@@ -10,9 +10,10 @@ import {getTargetOwnerCompany, getOwnerCompanyUsers} from "@/lib/owner-companies
export default async function EditOwnerCompanyPage({
params,
}: {
- params: { id: string };
+ params: Promise<{ id: string }>;
}) {
- const companyId = parseInt(params.id);
+ const resolvedParams = await params;
+ const companyId = parseInt(resolvedParams.id);
const company = await getTargetOwnerCompany(companyId)
diff --git a/app/[lng]/evcp/data-room/owner-companies/[id]/users/new/page.tsx b/app/[lng]/evcp/data-room/owner-companies/[id]/users/new/page.tsx
index 58bcca2f..2335faf3 100644
--- a/app/[lng]/evcp/data-room/owner-companies/[id]/users/new/page.tsx
+++ b/app/[lng]/evcp/data-room/owner-companies/[id]/users/new/page.tsx
@@ -8,9 +8,10 @@ import {getTargetOwnerCompany} from "@/lib/owner-companies/service"
export default async function NewOwnerCompanyUserPage({
params,
}: {
- params: { id: string };
+ params: Promise<{ id: string }>;
}) {
- const companyId = parseInt(params.id);
+ const resolvedParams = await params;
+ const companyId = parseInt(resolvedParams.id);
const company = await getTargetOwnerCompany(companyId)
diff --git a/app/[lng]/evcp/data-room/owner-companies/[id]/users/page.tsx b/app/[lng]/evcp/data-room/owner-companies/[id]/users/page.tsx
index e3682cd7..52dde8bb 100644
--- a/app/[lng]/evcp/data-room/owner-companies/[id]/users/page.tsx
+++ b/app/[lng]/evcp/data-room/owner-companies/[id]/users/page.tsx
@@ -11,9 +11,10 @@ import {getTargetOwnerCompany, getOwnerCompanyUsers} from "@/lib/owner-companies
export default async function OwnerCompanyUsersPage({
params,
}: {
- params: { id: string };
+ params: Promise<{ id: string }>;
}) {
- const companyId = parseInt(params.id);
+ const resolvedParams = await params;
+ const companyId = parseInt(resolvedParams.id);
const company = await getTargetOwnerCompany(companyId)
diff --git a/app/[lng]/partners/(partners)/rfq-last/[id]/page.tsx b/app/[lng]/partners/(partners)/rfq-last/[id]/page.tsx
index 9052de6f..74677666 100644
--- a/app/[lng]/partners/(partners)/rfq-last/[id]/page.tsx
+++ b/app/[lng]/partners/(partners)/rfq-last/[id]/page.tsx
@@ -15,19 +15,20 @@ import { authOptions } from "@/app/api/auth/[...nextauth]/route"
import VendorResponseEditor from "@/lib/rfq-last/vendor-response/editor/vendor-response-editor"
interface PageProps {
- params: {
+ params: Promise<{
id: string
- }
+ }>
}
-export async function generateMetadata({ params }: PageProps): Promise<Metadata> {
+export async function generateMetadata(props: PageProps): Promise<Metadata> {
return {
title: "견적서 작성",
description: "RFQ에 대한 견적서 작성 및 제출",
}
}
-export default async function VendorResponsePage({ params }: PageProps) {
+export default async function VendorResponsePage(props: PageProps) {
+ const params = await props.params
const rfqId = parseInt(params.id)
if (isNaN(rfqId)) {
diff --git a/app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx b/app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx
index 7f5400f3..5b52e4a4 100644
--- a/app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx
+++ b/app/[lng]/partners/(partners)/rfq-ship/[id]/page.tsx
@@ -10,20 +10,20 @@ import VendorQuotationEditor from "@/lib/procurement-rfqs/vendor-response/quotat
interface PageProps {
- params: {
+ params: Promise<{
id: string
- }
+ }>
}
-export async function generateMetadata({ params }: PageProps): Promise<Metadata> {
+export async function generateMetadata(props: PageProps): Promise<Metadata> {
return {
title: "견적서 응답",
description: "RFQ에 대한 견적서 작성 및 제출",
}
}
-export default async function VendorQuotationPage({ params }: PageProps) {
-
+export default async function VendorQuotationPage(props: PageProps) {
+ const params = await props.params
const quotationId = parseInt(params.id)
if (isNaN(quotationId)) {
diff --git a/app/[lng]/partners/data-room/[projectId]/page.tsx b/app/[lng]/partners/data-room/[projectId]/page.tsx
index d54a8cab..24f3a124 100644
--- a/app/[lng]/partners/data-room/[projectId]/page.tsx
+++ b/app/[lng]/partners/data-room/[projectId]/page.tsx
@@ -1,10 +1,11 @@
// app/projects/[projectId]/page.tsx
import { ProjectDashboard } from '@/components/project/ProjectDashboard';
-export default function ProjectPage({
+export default async function ProjectPage({
params,
}: {
- params: { projectId: string };
+ params: Promise<{ projectId: string }>;
}) {
- return <ProjectDashboard projectId={params.projectId} />;
+ const resolvedParams = await params;
+ return <ProjectDashboard projectId={resolvedParams.projectId} />;
}
diff --git a/app/[lng]/shared/[token]/page.tsx b/app/[lng]/shared/[token]/page.tsx
index db7f5d7a..14168b71 100644
--- a/app/[lng]/shared/[token]/page.tsx
+++ b/app/[lng]/shared/[token]/page.tsx
@@ -2,14 +2,15 @@
import { SharedFileViewer } from "@/components/file-manager/SharedFileViewer";
-export default function SharedFilePage({
+export default async function SharedFilePage({
params,
}: {
- params: { token: string };
+ params: Promise<{ token: string }>;
}) {
+ const resolvedParams = await params;
return (
<div className="min-h-screen bg-gray-50">
- <SharedFileViewer token={params.token} />
+ <SharedFileViewer token={resolvedParams.token} />
</div>
);
}