"use client"; /** * pop-dashboard 디자이너 미리보기 컴포넌트 * * 실제 데이터 없이 더미 레이아웃으로 미리보기 표시 * 디자이너가 설정 변경 시 즉시 미리보기 확인 가능 */ import React from "react"; import { BarChart3, PieChart, Gauge, LayoutList } from "lucide-react"; import type { PopDashboardConfig, DashboardSubType } from "../types"; // ===== 서브타입별 아이콘 매핑 ===== const SUBTYPE_ICONS: Record = { "kpi-card": , chart: , gauge: , "stat-card": , }; const SUBTYPE_LABELS: Record = { "kpi-card": "KPI", chart: "차트", gauge: "게이지", "stat-card": "통계", }; // ===== 모드 라벨 ===== const MODE_LABELS: Record = { arrows: "좌우 버튼", "auto-slide": "자동 슬라이드", grid: "그리드", scroll: "스크롤", }; // ===== 더미 아이템 프리뷰 ===== function DummyItemPreview({ subType, label, }: { subType: DashboardSubType; label: string; }) { return (
{SUBTYPE_ICONS[subType]} {label || SUBTYPE_LABELS[subType]}
); } // ===== 메인 미리보기 ===== export function PopDashboardPreviewComponent({ config, }: { config?: PopDashboardConfig; }) { if (!config || !config.items.length) { return (
대시보드
); } const visibleItems = config.items.filter((i) => i.visible); const mode = config.displayMode; return (
{/* 모드 표시 */}
{MODE_LABELS[mode] ?? mode} {visibleItems.length}개
{/* 모드별 미리보기 */}
{mode === "grid" ? ( // 그리드: 셀 구조 시각화
{config.gridCells?.length ? config.gridCells.map((cell) => { const item = visibleItems.find( (i) => i.id === cell.itemId ); return (
{item ? ( ) : (
)}
); }) : // 셀 미설정: 아이템만 나열 visibleItems.slice(0, 4).map((item) => ( ))}
) : ( // 다른 모드: 첫 번째 아이템만 크게 표시
{visibleItems[0] && ( )} {/* 추가 아이템 수 뱃지 */} {visibleItems.length > 1 && (
+{visibleItems.length - 1}
)}
)}
); }