'use client'; import React, { useState, useCallback } from 'react'; import { ChartConfig, QueryResult } from './types'; interface VehicleMapConfigPanelProps { config?: ChartConfig; queryResult?: QueryResult; onConfigChange: (config: ChartConfig) => void; } /** * 차량 위치 지도 설정 패널 * - 위도/경도 컬럼 매핑 * - 라벨/상태 컬럼 설정 */ export function VehicleMapConfigPanel({ config, queryResult, onConfigChange }: VehicleMapConfigPanelProps) { const [currentConfig, setCurrentConfig] = useState(config || {}); // 설정 업데이트 const updateConfig = useCallback((updates: Partial) => { const newConfig = { ...currentConfig, ...updates }; setCurrentConfig(newConfig); onConfigChange(newConfig); }, [currentConfig, onConfigChange]); // 사용 가능한 컬럼 목록 const availableColumns = queryResult?.columns || []; const sampleData = queryResult?.rows?.[0] || {}; return (

🗺️ 지도 설정

{/* 쿼리 결과가 없을 때 */} {!queryResult && (
💡 먼저 SQL 쿼리를 실행하여 데이터를 가져온 후 지도를 설정할 수 있습니다.
)} {/* 데이터 필드 매핑 */} {queryResult && ( <> {/* 지도 제목 */}
updateConfig({ title: e.target.value })} placeholder="차량 위치 지도" className="w-full px-2 py-1.5 border border-gray-300 rounded-lg text-xs" />
{/* 위도 컬럼 설정 */}
{/* 경도 컬럼 설정 */}
{/* 라벨 컬럼 (선택사항) */}
{/* 상태 컬럼 (선택사항) */}
{/* 날씨 정보 표시 옵션 */}

마커 팝업에 해당 위치의 날씨 정보를 함께 표시합니다

현재 발효 중인 기상특보(주의보/경보)를 지도에 색상 영역으로 표시합니다

{/* 설정 미리보기 */}
📋 설정 미리보기
위도: {currentConfig.latitudeColumn || '미설정'}
경도: {currentConfig.longitudeColumn || '미설정'}
라벨: {currentConfig.labelColumn || '없음'}
상태: {currentConfig.statusColumn || '없음'}
날씨 표시: {currentConfig.showWeather ? '활성화' : '비활성화'}
기상특보 표시: {currentConfig.showWeatherAlerts ? '활성화' : '비활성화'}
데이터 개수: {queryResult.rows.length}개
{/* 필수 필드 확인 */} {(!currentConfig.latitudeColumn || !currentConfig.longitudeColumn) && (
⚠️ 위도와 경도 컬럼을 반드시 선택해야 지도에 표시할 수 있습니다.
)} )}
); }