"use client"; import React, { useState, useEffect } from "react"; import { DashboardElement, DriverManagementConfig, DriverInfo } from "../types"; import { DriverListView } from "./DriverListView"; import { DriverManagementSettings } from "./DriverManagementSettings"; import { MOCK_DRIVERS } from "./driverMockData"; import { filterDrivers, sortDrivers, DEFAULT_VISIBLE_COLUMNS } from "./driverUtils"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Settings, Search, RefreshCw } from "lucide-react"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; interface DriverManagementWidgetProps { element: DashboardElement; onConfigUpdate?: (config: DriverManagementConfig) => void; } export function DriverManagementWidget({ element, onConfigUpdate }: DriverManagementWidgetProps) { const [drivers, setDrivers] = useState(MOCK_DRIVERS); const [searchTerm, setSearchTerm] = useState(""); const [settingsOpen, setSettingsOpen] = useState(false); const [lastRefresh, setLastRefresh] = useState(new Date()); // 기본 설정 const config = element.driverManagementConfig || { viewType: "list", autoRefreshInterval: 30, visibleColumns: DEFAULT_VISIBLE_COLUMNS, theme: "light", statusFilter: "all", sortBy: "name", sortOrder: "asc", }; // 자동 새로고침 useEffect(() => { if (config.autoRefreshInterval <= 0) return; const interval = setInterval(() => { // 실제 환경에서는 API 호출 setDrivers(MOCK_DRIVERS); setLastRefresh(new Date()); }, config.autoRefreshInterval * 1000); return () => clearInterval(interval); }, [config.autoRefreshInterval]); // 수동 새로고침 const handleRefresh = () => { setDrivers(MOCK_DRIVERS); setLastRefresh(new Date()); }; // 설정 저장 const handleSaveSettings = (newConfig: DriverManagementConfig) => { onConfigUpdate?.(newConfig); setSettingsOpen(false); }; // 필터링 및 정렬 const filteredDrivers = sortDrivers( filterDrivers(drivers, config.statusFilter, searchTerm), config.sortBy, config.sortOrder, ); // 컴팩트 모드 판단 (위젯 크기가 작을 때) const isCompact = element.size.width < 400 || element.size.height < 300; return (
{/* 헤더 - 컴팩트 모드가 아닐 때만 표시 */} {!isCompact && (
{/* 검색 */}
setSearchTerm(e.target.value)} className="h-8 pl-8 text-xs" />
{/* 상태 필터 */} {/* 새로고침 버튼 */} {/* 설정 버튼 */} setSettingsOpen(false)} />
{/* 통계 정보 */}
전체 {filteredDrivers.length} | 운행중{" "} {filteredDrivers.filter((d) => d.status === "driving").length} | 최근 업데이트: {lastRefresh.toLocaleTimeString("ko-KR")}
)} {/* 리스트 뷰 */}
); }