리스트 뷰/편집 모드에서 동일한 레이아웃 제공

This commit is contained in:
dohyeons 2025-10-16 11:49:06 +09:00
parent 8e0ef82de7
commit a8c1b4b5e5
1 changed files with 22 additions and 16 deletions

View File

@ -25,7 +25,18 @@ const DocumentWidget = dynamic(() => import("./widgets/DocumentWidget"), { ssr:
const BookingAlertWidget = dynamic(() => import("./widgets/BookingAlertWidget"), { ssr: false }); const BookingAlertWidget = dynamic(() => import("./widgets/BookingAlertWidget"), { ssr: false });
const MaintenanceWidget = dynamic(() => import("./widgets/MaintenanceWidget"), { ssr: false }); const MaintenanceWidget = dynamic(() => import("./widgets/MaintenanceWidget"), { ssr: false });
const CalculatorWidget = dynamic(() => import("./widgets/CalculatorWidget"), { ssr: false }); const CalculatorWidget = dynamic(() => import("./widgets/CalculatorWidget"), { ssr: false });
const CalendarWidget = dynamic(() => import("@/components/admin/dashboard/widgets/CalendarWidget").then(mod => ({ default: mod.CalendarWidget })), { ssr: false }); const CalendarWidget = dynamic(
() => import("@/components/admin/dashboard/widgets/CalendarWidget").then((mod) => ({ default: mod.CalendarWidget })),
{ ssr: false },
);
const ClockWidget = dynamic(
() => import("@/components/admin/dashboard/widgets/ClockWidget").then((mod) => ({ default: mod.ClockWidget })),
{ ssr: false },
);
const ListWidget = dynamic(
() => import("@/components/admin/dashboard/widgets/ListWidget").then((mod) => ({ default: mod.ListWidget })),
{ ssr: false },
);
/** /**
* - DashboardSidebar의 subtype * - DashboardSidebar의 subtype
@ -34,7 +45,7 @@ const CalendarWidget = dynamic(() => import("@/components/admin/dashboard/widget
function renderWidget(element: DashboardElement) { function renderWidget(element: DashboardElement) {
switch (element.subtype) { switch (element.subtype) {
// 차트는 ChartRenderer에서 처리됨 (이 함수 호출 안됨) // 차트는 ChartRenderer에서 처리됨 (이 함수 호출 안됨)
// === 위젯 종류 === // === 위젯 종류 ===
case "exchange": case "exchange":
return <ExchangeWidget element={element} />; return <ExchangeWidget element={element} />;
@ -43,14 +54,7 @@ function renderWidget(element: DashboardElement) {
case "calculator": case "calculator":
return <CalculatorWidget element={element} />; return <CalculatorWidget element={element} />;
case "clock": case "clock":
return ( return <ClockWidget element={element} />;
<div className="flex h-full w-full items-center justify-center bg-gradient-to-br from-blue-400 to-purple-600 p-4 text-white">
<div className="text-center">
<div className="mb-2 text-3xl"></div>
<div className="text-sm"> ( )</div>
</div>
</div>
);
case "map-summary": case "map-summary":
return <MapSummaryWidget element={element} />; return <MapSummaryWidget element={element} />;
case "list-summary": case "list-summary":
@ -61,7 +65,7 @@ function renderWidget(element: DashboardElement) {
return <CalendarWidget element={element} />; return <CalendarWidget element={element} />;
case "status-summary": case "status-summary":
return <StatusSummaryWidget element={element} />; return <StatusSummaryWidget element={element} />;
// === 운영/작업 지원 === // === 운영/작업 지원 ===
case "todo": case "todo":
return <TodoWidget element={element} />; return <TodoWidget element={element} />;
@ -72,8 +76,8 @@ function renderWidget(element: DashboardElement) {
case "document": case "document":
return <DocumentWidget element={element} />; return <DocumentWidget element={element} />;
case "list": case "list":
return <ListSummaryWidget element={element} />; return <ListWidget element={element} />;
// === 차량 관련 (추가 위젯) === // === 차량 관련 (추가 위젯) ===
case "vehicle-status": case "vehicle-status":
return <VehicleStatusWidget />; return <VehicleStatusWidget />;
@ -81,7 +85,7 @@ function renderWidget(element: DashboardElement) {
return <VehicleListWidget />; return <VehicleListWidget />;
case "vehicle-map": case "vehicle-map":
return <VehicleMapOnlyWidget element={element} />; return <VehicleMapOnlyWidget element={element} />;
// === 배송 관련 (추가 위젯) === // === 배송 관련 (추가 위젯) ===
case "delivery-status": case "delivery-status":
return <DeliveryStatusWidget />; return <DeliveryStatusWidget />;
@ -93,7 +97,7 @@ function renderWidget(element: DashboardElement) {
return <CargoListWidget />; return <CargoListWidget />;
case "customer-issues": case "customer-issues":
return <CustomerIssuesWidget />; return <CustomerIssuesWidget />;
// === 기본 fallback === // === 기본 fallback ===
default: default:
return ( return (
@ -301,7 +305,9 @@ function ViewerElement({ element, data, isLoading, onRefresh }: ViewerElementPro
<div className="h-[calc(100%-57px)]"> <div className="h-[calc(100%-57px)]">
{element.type === "chart" ? ( {element.type === "chart" ? (
<ChartRenderer element={element} data={data} width={element.size.width} height={element.size.height - 57} /> <ChartRenderer element={element} data={data} width={element.size.width} height={element.size.height - 57} />
) : renderWidget(element)} ) : (
renderWidget(element)
)}
</div> </div>
{/* 로딩 오버레이 */} {/* 로딩 오버레이 */}