import { Search, Plus, ChevronDown, ChevronUp } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { UserSearchFilter } from "@/types/user"; import { useState } from "react"; interface UserToolbarProps { searchFilter: UserSearchFilter; totalCount: number; isSearching?: boolean; onSearchChange: (searchFilter: Partial) => void; onCreateClick: () => void; t?: (key: string, params?: Record) => string; } /** * 사용자 관리 툴바 컴포넌트 * 통합 검색 + 고급 검색 옵션 지원 */ export function UserToolbar({ searchFilter, totalCount, isSearching = false, onSearchChange, onCreateClick, t: tProp, }: UserToolbarProps) { // 다국어 함수 (prop이 없으면 한국어 기본값 사용) const _t = tProp || ((key: string) => { const defaults: Record = { "toolbar.search.placeholder": "통합 검색...", "toolbar.searching": "검색 중...", "toolbar.advanced.search": "고급 검색", "toolbar.advanced.search.title": "고급 검색 옵션", "toolbar.advanced.search.desc": "각 필드별로 개별 검색 조건을 설정할 수 있습니다", "toolbar.advanced.mode.warning": "고급 검색 모드가 활성화되어 있습니다. 통합 검색을 사용하려면 고급 검색 조건을 초기화하세요.", "toolbar.advanced.reset": "고급 검색 조건 초기화", "toolbar.total.count": "총", "toolbar.total.unit": "명", "toolbar.create.user": "사용자 등록", "toolbar.search.company": "회사명 검색", "toolbar.search.dept": "부서명 검색", "toolbar.search.position": "직책 검색", "toolbar.search.userId": "사용자 ID 검색", "toolbar.search.userName": "사용자명 검색", "toolbar.search.tel": "전화번호/휴대폰 검색", "toolbar.search.email": "이메일 검색", }; return defaults[key] || key; }); const [showAdvancedSearch, setShowAdvancedSearch] = useState(false); // 통합 검색어 변경 const handleV2SearchChange = (value: string) => { onSearchChange({ searchValue: value, // 통합 검색 시 고급 검색 필드들 클리어 searchType: undefined, search_sabun: undefined, search_companyName: undefined, search_deptName: undefined, search_positionName: undefined, search_userId: undefined, search_userName: undefined, search_tel: undefined, search_email: undefined, }); }; // 고급 검색 필드 변경 const handleAdvancedSearchChange = (field: string, value: string) => { onSearchChange({ [field]: value, // 고급 검색 시 통합 검색어 클리어 searchValue: undefined, }); }; // 고급 검색 모드인지 확인 const isAdvancedSearchMode = !!( searchFilter.search_sabun || searchFilter.search_companyName || searchFilter.search_deptName || searchFilter.search_positionName || searchFilter.search_userId || searchFilter.search_userName || searchFilter.search_tel || searchFilter.search_email ); return (
{/* 검색 및 액션 영역 */}
{/* 검색 영역 */}
handleV2SearchChange(e.target.value)} disabled={isAdvancedSearchMode} autoComplete="off" className={`h-10 pl-10 text-sm ${ isSearching ? "border-primary ring-2 ring-primary/20" : "" } ${isAdvancedSearchMode ? "cursor-not-allowed bg-muted text-muted-foreground" : ""}`} />
{isSearching &&

{_t("toolbar.searching")}

} {isAdvancedSearchMode && (

{_t("toolbar.advanced.mode.warning")}

)}
{/* 고급 검색 토글 버튼 */}
{/* 액션 버튼 영역 */}
{/* 조회 결과 정보 */}
{_t("toolbar.total.count")} {totalCount.toLocaleString()} {_t("toolbar.total.unit")}
{/* 사용자 등록 버튼 */}
{/* 고급 검색 옵션 */} {showAdvancedSearch && (

{_t("toolbar.advanced.search.title")}

{_t("toolbar.advanced.search.desc")}

{/* 고급 검색 필드들 */}
handleAdvancedSearchChange("search_companyName", e.target.value)} className="h-10 text-sm" /> handleAdvancedSearchChange("search_deptName", e.target.value)} className="h-10 text-sm" /> handleAdvancedSearchChange("search_positionName", e.target.value)} className="h-10 text-sm" /> handleAdvancedSearchChange("search_userId", e.target.value)} className="h-10 text-sm" /> handleAdvancedSearchChange("search_userName", e.target.value)} className="h-10 text-sm" /> handleAdvancedSearchChange("search_tel", e.target.value)} className="h-10 text-sm" /> handleAdvancedSearchChange("search_email", e.target.value)} className="h-10 text-sm" />
{/* 고급 검색 초기화 버튼 */} {isAdvancedSearchMode && (
)}
)}
); }