"use client"; import React, { useState, useEffect, useMemo } from "react"; import { apiClient } from "@/lib/api/client"; interface Company { company_code: string; company_name: string; status: string; } interface CompanySwitchModalProps { open: boolean; onClose: () => void; onSelect: (companyCode: string) => void; currentCompanyCode?: string; } export function CompanySwitchModal({ open, onClose, onSelect, currentCompanyCode, }: CompanySwitchModalProps) { const [companies, setCompanies] = useState([]); const [search, setSearch] = useState(""); const [loading, setLoading] = useState(false); useEffect(() => { if (open) { fetchCompanies(); setSearch(""); } }, [open]); const fetchCompanies = async () => { try { setLoading(true); const response = await apiClient.get("/admin/companies/db"); if (response.data.success) { const activeCompanies = response.data.data .filter((c: Company) => c.company_code !== "*") .filter((c: Company) => c.status === "active" || !c.status) .sort((a: Company, b: Company) => a.company_name.localeCompare(b.company_name, "ko") ); const companiesWithWace: Company[] = [ { company_code: "*", company_name: "WACE (최고 관리자)", status: "active", }, ...activeCompanies, ]; setCompanies(companiesWithWace); } } catch { setCompanies([]); } finally { setLoading(false); } }; const filtered = useMemo(() => { if (!search.trim()) return companies; const q = search.toLowerCase(); return companies.filter( (c) => c.company_name.toLowerCase().includes(q) || c.company_code.toLowerCase().includes(q) ); }, [companies, search]); const handleSelect = (companyCode: string) => { onSelect(companyCode); onClose(); }; if (!open) return null; return (
{/* Overlay */}
{/* Modal */}
{/* Header */}

회사 전환

{/* Search */}
setSearch(e.target.value)} placeholder="회사명 또는 코드 검색..." className="w-full pl-10 pr-4 py-2.5 rounded-xl text-sm outline-none transition-all bg-[var(--pop-input-bg,#0f172a)] border border-[var(--pop-border,#334155)] focus:border-blue-400 focus:ring-2 focus:ring-blue-400/20 text-[var(--pop-text,#e2e8f0)] placeholder:opacity-50" />
{/* Company List */}
{loading ? (
불러오는 중...
) : filtered.length === 0 ? (
{search ? "검색 결과가 없습니다" : "회사 목록이 없습니다"}
) : ( filtered.map((company) => { const isCurrent = company.company_code === currentCompanyCode; return ( ); }) )}
); }