From a42873419d14652d3639d2ae02d2ea54653b4749 Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Wed, 2 Jul 2025 04:46:24 +0000 Subject: (김준회) 견적프로젝트 해양 TOP - nonsap(견적물량관리시스템) 데이터 가져오기 추가 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bidding-projects/bid-projects-container.tsx | 107 +++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 components/bidding-projects/bid-projects-container.tsx (limited to 'components/bidding-projects') diff --git a/components/bidding-projects/bid-projects-container.tsx b/components/bidding-projects/bid-projects-container.tsx new file mode 100644 index 00000000..cae01b04 --- /dev/null +++ b/components/bidding-projects/bid-projects-container.tsx @@ -0,0 +1,107 @@ +"use client" + +import * as React from "react" +import { useRouter, usePathname, useSearchParams } from "next/navigation" +import { ChevronDown } from "lucide-react" + +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" +import { InformationButton } from "@/components/information/information-button" + +interface ProjectType { + id: string + name: string +} + +interface BidProjectsContainerProps { + projectTypes: ProjectType[] + children: React.ReactNode +} + +export function BidProjectsContainer({ + projectTypes, + children, +}: BidProjectsContainerProps) { + const router = useRouter() + const pathname = usePathname() + const searchParamsObj = useSearchParams() + + // useSearchParams를 메모이제이션하여 안정적인 참조 생성 + const searchParams = React.useMemo( + () => searchParamsObj || new URLSearchParams(), + [searchParamsObj] + ) + + // URL에서 현재 선택된 프로젝트 타입 가져오기 + const projectType = searchParams.get("type") || "all" + + // 선택한 프로젝트 타입에 해당하는 이름 찾기 + const selectedProject = projectTypes.find((project) => project.id === projectType)?.name || "전체" + + // 프로젝트 타입 변경 핸들러 + const handleProjectTypeChange = React.useCallback((value: string) => { + const params = new URLSearchParams(searchParams.toString()) + + if (value === "all") { + params.delete("type") + } else { + params.set("type", value) + } + + // 기존 필터를 제거하여 새로운 타입에 맞는 깨끗한 상태로 시작 + params.delete("filters") + + router.push(`${pathname}?${params.toString()}`) + }, [router, pathname, searchParams]) + + return ( + <> + {/* 상단 영역: 제목 왼쪽 / 프로젝트 타입 선택기 오른쪽 */} +
+ 데이터 출처 - SHIP/HULL: From ECC(S-ERP), TOP: From NONSAP +
+