summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/[lng]/partners/(partners)/cbe-tech/page.tsx89
-rw-r--r--app/[lng]/partners/(partners)/rfq-tech/page.tsx136
-rw-r--r--app/[lng]/partners/(partners)/tbe-tech/page.tsx88
3 files changed, 0 insertions, 313 deletions
diff --git a/app/[lng]/partners/(partners)/cbe-tech/page.tsx b/app/[lng]/partners/(partners)/cbe-tech/page.tsx
deleted file mode 100644
index b8afd1df..00000000
--- a/app/[lng]/partners/(partners)/cbe-tech/page.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import { type SearchParams } from "@/types/table"
-import { getValidFilters } from "@/lib/data-table"
-import { getCBEbyVendorId, } from "@/lib/rfqs-tech/service"
-import { searchParamsCBECache } from "@/lib/rfqs-tech/validations"
-import { getServerSession } from "next-auth"
-import { authOptions } from "@/app/api/auth/[...nextauth]/route"
-import { TbeVendorTable } from "@/lib/tech-vendor-rfq-response/vendor-tbe-table/tbe-table"
-import * as React from "react"
-import { Skeleton } from "@/components/ui/skeleton"
-import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"
-import { Shell } from "@/components/shell"
-import { CbeVendorTable } from "@/lib/tech-vendor-rfq-response/vendor-cbe-table/cbe-table"
-import { InformationButton } from "@/components/information/information-button"
-interface IndexPageProps {
- // Next.js 13 App Router에서 기본으로 주어지는 객체들
- params: {
- lng: string
- id: string
- }
- searchParams: Promise<SearchParams>
-}
-
-export default async function CBEPage(props: IndexPageProps) {
- const resolvedParams = await props.params
- const lng = resolvedParams.lng
-
- // 2) SearchParams 파싱 (Zod)
- // - "filters", "page", "perPage", "sort" 등 contact 전용 컬럼
- const searchParams = await props.searchParams
- const search = searchParamsCBECache.parse(searchParams)
- const validFilters = getValidFilters(search.filters)
-
- const session = await getServerSession(authOptions)
- const vendorId = session?.user.companyId
- // const vendorId = "17"
-
- const idAsNumber = Number(vendorId)
-
- const promises = Promise.all([
- getCBEbyVendorId({
- ...search,
- filters: validFilters,
- },
- idAsNumber)
- ])
-
-
- return (
- <Shell className="gap-2">
- <div className="flex items-center justify-between space-y-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">
- CBE 관리
- </h2>
- <InformationButton pagePath="partners/cbe-tech" />
- </div>
- {/* <p className="text-sm text-muted-foreground">
- CBE에 응답하고 커뮤니케이션을 할 수 있습니다.{" "}
- </p> */}
- </div>
- </div>
- </div>
-
- <React.Suspense fallback={<Skeleton className="h-7 w-52" />}>
- {/* <DateRangePicker
- triggerSize="sm"
- triggerClassName="ml-auto w-56 sm:w-60"
- align="end"
- shallow={false}
- /> */}
- </React.Suspense>
- <React.Suspense
- fallback={
- <DataTableSkeleton
- columnCount={6}
- searchableColumnCount={1}
- filterableColumnCount={2}
- cellWidths={["10rem", "40rem", "12rem", "12rem", "8rem", "8rem"]}
- shrinkZero
- />
- }
- >
- <CbeVendorTable promises={promises} />
- </React.Suspense>
- </Shell>
- )
-}
diff --git a/app/[lng]/partners/(partners)/rfq-tech/page.tsx b/app/[lng]/partners/(partners)/rfq-tech/page.tsx
deleted file mode 100644
index a41a7f0c..00000000
--- a/app/[lng]/partners/(partners)/rfq-tech/page.tsx
+++ /dev/null
@@ -1,136 +0,0 @@
-import * as React from "react"
-import { type SearchParams } from "@/types/table"
-import { getValidFilters } from "@/lib/data-table"
-import { Skeleton } from "@/components/ui/skeleton"
-import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"
-import { Shell } from "@/components/shell"
-import { searchParamsRfqsForVendorsCache } from "@/lib/rfqs-tech/validations"
-import { RfqsVendorTable } from "@/lib/tech-vendor-rfq-response/vendor-rfq-table/rfqs-table"
-import { getServerSession } from "next-auth"
-import { authOptions } from "@/app/api/auth/[...nextauth]/route"
-import Link from "next/link"
-import { Button } from "@/components/ui/button"
-import { LogIn } from "lucide-react"
-import { getRfqResponsesForVendor } from "@/lib/tech-vendor-rfq-response/service"
-import { InformationButton } from "@/components/information/information-button"
-interface IndexPageProps {
- searchParams: Promise<SearchParams>
-}
-
-export default async function IndexPage(props: IndexPageProps) {
- const searchParams = await props.searchParams
- const search = searchParamsRfqsForVendorsCache.parse(searchParams)
- const validFilters = getValidFilters(search.filters)
-
- // Get session
- const session = await getServerSession(authOptions)
-
- // Check if user is logged in
- if (!session || !session.user) {
- // Return login required UI instead of redirecting
- return (
- <Shell className="gap-6">
- <div className="flex items-center justify-between">
- <div>
- <div className="flex items-center gap-2">
- <h2 className="text-2xl font-bold tracking-tight">
- RFQ
- </h2>
- <InformationButton pagePath="partners/rfq-tech" />
- </div>
- {/* <p className="text-muted-foreground">
- RFQ를 응답하고 커뮤니케이션을 할 수 있습니다.
- </p> */}
- </div>
- </div>
-
- <div className="flex flex-col items-center justify-center py-12 text-center">
- <div className="rounded-lg border border-dashed p-10 shadow-sm">
- <h3 className="mb-2 text-xl font-semibold">로그인이 필요합니다</h3>
- <p className="mb-6 text-muted-foreground">
- RFQ를 확인하려면 먼저 로그인하세요.
- </p>
- <Button size="lg" asChild>
- <Link href="/partners">
- <LogIn className="mr-2 h-4 w-4" />
- 로그인하기
- </Link>
- </Button>
- </div>
- </div>
- </Shell>
- )
- }
-
- // User is logged in, proceed with vendor ID
- const vendorId = session.user.companyId
-
- // Validate vendorId (should be a number)
- const idAsNumber = Number(vendorId)
-
- if (isNaN(idAsNumber)) {
- // Handle invalid vendor ID (this shouldn't happen if authentication is working properly)
- return (
- <Shell className="gap-6">
- <div className="flex items-center justify-between">
- <div>
- <h2 className="text-2xl font-bold tracking-tight">
- RFQ
- </h2>
- </div>
- </div>
- <div className="flex flex-col items-center justify-center py-12 text-center">
- <div className="rounded-lg border border-dashed p-10 shadow-sm">
- <h3 className="mb-2 text-xl font-semibold">계정 오류</h3>
- <p className="mb-6 text-muted-foreground">
- 업체 정보가 올바르게 설정되지 않았습니다. 관리자에게 문의하세요.
- </p>
- </div>
- </div>
- </Shell>
- )
- }
-
- // If we got here, we have a valid vendor ID
- const promises = Promise.all([
- getRfqResponsesForVendor({
- ...search,
- filters: validFilters,
- }, idAsNumber)
- ])
-
- return (
- <Shell className="gap-2">
- <div className="flex items-center justify-between space-y-2">
- <div className="flex items-center justify-between space-y-2">
- <div>
- <h2 className="text-2xl font-bold tracking-tight">
- RFQ
- </h2>
- <p className="text-muted-foreground">
- RFQ를 응답하고 커뮤니케이션을 할 수 있습니다.
- </p>
- </div>
- </div>
- </div>
-
- <React.Suspense fallback={<Skeleton className="h-7 w-52" />}>
- {/* DateRangePicker can go here */}
- </React.Suspense>
-
- <React.Suspense
- fallback={
- <DataTableSkeleton
- columnCount={6}
- searchableColumnCount={1}
- filterableColumnCount={2}
- cellWidths={["10rem", "40rem", "12rem", "12rem", "8rem", "8rem"]}
- shrinkZero
- />
- }
- >
- <RfqsVendorTable promises={promises} />
- </React.Suspense>
- </Shell>
- )
-} \ No newline at end of file
diff --git a/app/[lng]/partners/(partners)/tbe-tech/page.tsx b/app/[lng]/partners/(partners)/tbe-tech/page.tsx
deleted file mode 100644
index 2085ca36..00000000
--- a/app/[lng]/partners/(partners)/tbe-tech/page.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { type SearchParams } from "@/types/table"
-import { getValidFilters } from "@/lib/data-table"
-import { getTBEforVendor } from "@/lib/rfqs-tech/service"
-import { searchParamsTBECache } from "@/lib/rfqs-tech/validations"
-import { getServerSession } from "next-auth"
-import { authOptions } from "@/app/api/auth/[...nextauth]/route"
-import { TbeVendorTable } from "@/lib/tech-vendor-rfq-response/vendor-tbe-table/tbe-table"
-import * as React from "react"
-import { Skeleton } from "@/components/ui/skeleton"
-import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"
-import { Shell } from "@/components/shell"
-import { InformationButton } from "@/components/information/information-button"
-interface IndexPageProps {
- // Next.js 13 App Router에서 기본으로 주어지는 객체들
- params: {
- lng: string
- id: string
- }
- searchParams: Promise<SearchParams>
-}
-
-export default async function RfqTBEPage(props: IndexPageProps) {
- const resolvedParams = await props.params
- const lng = resolvedParams.lng
-
- // 2) SearchParams 파싱 (Zod)
- // - "filters", "page", "perPage", "sort" 등 contact 전용 컬럼
- const searchParams = await props.searchParams
- const search = searchParamsTBECache.parse(searchParams)
- const validFilters = getValidFilters(search.filters)
-
- const session = await getServerSession(authOptions)
- const vendorId = session?.user.companyId
- // const vendorId = "17"
-
- const idAsNumber = Number(vendorId)
-
- const promises = Promise.all([
- getTBEforVendor({
- ...search,
- filters: validFilters,
- },
- idAsNumber)
- ])
-
-
- return (
- <Shell className="gap-2">
- <div className="flex items-center justify-between space-y-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">
- Technical Bid Evaluation
- </h2>
- <InformationButton pagePath="partners/tbe-tech" />
- </div>
- <p className="text-sm text-muted-foreground">
- TBE에 응답하고 커뮤니케이션을 할 수 있습니다.{" "}
- </p>
- </div>
- </div>
- </div>
-
- <React.Suspense fallback={<Skeleton className="h-7 w-52" />}>
- {/* <DateRangePicker
- triggerSize="sm"
- triggerClassName="ml-auto w-56 sm:w-60"
- align="end"
- shallow={false}
- /> */}
- </React.Suspense>
- <React.Suspense
- fallback={
- <DataTableSkeleton
- columnCount={6}
- searchableColumnCount={1}
- filterableColumnCount={2}
- cellWidths={["10rem", "40rem", "12rem", "12rem", "8rem", "8rem"]}
- shrinkZero
- />
- }
- >
- <TbeVendorTable promises={promises} />
- </React.Suspense>
- </Shell>
- )
-}