"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" interface VendorType { id: string; name: string; value: string; } interface TechVendorPossibleItemsContainerProps { vendorTypes: VendorType[]; children: React.ReactNode; } export function TechVendorPossibleItemsContainer({ vendorTypes, children, }: TechVendorPossibleItemsContainerProps) { const router = useRouter(); const pathname = usePathname(); const searchParamsObj = useSearchParams(); // useSearchParams를 메모이제이션하여 안정적인 참조 생성 const searchParams = React.useMemo( () => searchParamsObj || new URLSearchParams(), [searchParamsObj] ); // URL에서 현재 선택된 벤더 타입 가져오기 const vendorType = searchParams.get("vendorType") || "all"; // 선택한 벤더 타입에 해당하는 이름 찾기 const selectedVendor = vendorTypes.find((vendor) => vendor.id === vendorType)?.name || "전체"; // 벤더 타입 변경 핸들러 const handleVendorTypeChange = React.useCallback((value: string) => { const params = new URLSearchParams(searchParams.toString()); if (value === "all") { params.delete("vendorType"); } else { params.set("vendorType", value); } router.push(`${pathname}?${params.toString()}`); }, [router, pathname, searchParams]); return ( <> {/* 상단 영역: 제목 왼쪽 / 벤더 타입 선택기 오른쪽 */}
{/* 왼쪽: 타이틀 & 설명 */}

기술영업 벤더 아이템 관리

기술영업 벤더별 가능 아이템을 관리합니다.

{/* 오른쪽: 벤더 타입 드롭다운 */} {vendorTypes.map((vendor) => ( handleVendorTypeChange(vendor.id)} className={vendor.id === vendorType ? "bg-muted" : ""} > {vendor.name} ))}
{/* 컨텐츠 영역 */}
{children}
); }