"use client"; import { AutoRegisteringComponentRenderer } from "../../AutoRegisteringComponentRenderer"; import { ComponentCategory } from "@/types/component"; import MapComponent from "./MapComponent"; import MapPreviewComponent from "./MapPreviewComponent"; import MapConfigPanel from "./MapConfigPanel"; /** * Map 컴포넌트 렌더러 (자동 등록) */ export class MapRenderer extends AutoRegisteringComponentRenderer { static definition = { id: "map", name: "지도", nameEng: "Map Component", description: "외부/내부 DB 데이터를 지도에 마커로 표시합니다 (위도/경도 필요)", category: ComponentCategory.DISPLAY, webType: "text" as const, component: MapComponent, previewComponent: MapPreviewComponent, defaultConfig: { // 데이터 소스 설정 dataSource: { type: "internal", // "internal" | "external" connectionId: null, // 외부 DB 연결 ID tableName: "", latColumn: "latitude", // 위도 컬럼명 lngColumn: "longitude", // 경도 컬럼명 labelColumn: "", // 마커 라벨 컬럼명 statusColumn: "", // 상태 컬럼명 (마커 색상용) additionalColumns: [], // 추가 표시할 컬럼들 whereClause: "", // WHERE 조건절 }, // 지도 설정 mapConfig: { center: { lat: 36.5, lng: 127.5, }, zoom: 7, minZoom: 5, maxZoom: 18, }, // 마커 설정 markerConfig: { showLabel: true, showPopup: true, clusterMarkers: false, // 마커 클러스터링 statusColors: { default: "#3b82f6", // 기본 파란색 active: "#22c55e", // 활성 녹색 inactive: "#94a3b8", // 비활성 회색 warning: "#f59e0b", // 경고 주황색 danger: "#ef4444", // 위험 빨간색 }, }, // 새로고침 설정 refreshInterval: 30000, // 30초 (0이면 자동 새로고침 없음) }, defaultSize: { width: 800, height: 600 }, configPanel: MapConfigPanel, icon: "Map", tags: ["map", "location", "gps", "marker", "leaflet"], version: "1.0.0", author: "개발팀", documentation: "외부/내부 DB 데이터를 지도에 표시하는 컴포넌트입니다. 위도/경도 컬럼이 있는 테이블이면 어떤 데이터든 지도에 마커로 표시할 수 있습니다.", }; } // 자동 등록 실행 new MapRenderer();