diff --git a/frontend/components/admin/dashboard/WidgetConfigSidebar.tsx b/frontend/components/admin/dashboard/WidgetConfigSidebar.tsx index d126d8d9..a18abf9a 100644 --- a/frontend/components/admin/dashboard/WidgetConfigSidebar.tsx +++ b/frontend/components/admin/dashboard/WidgetConfigSidebar.tsx @@ -352,6 +352,10 @@ export function WidgetConfigSidebar({ element, isOpen, onClose, onApply }: Widge console.log("๐ง [WidgetConfigSidebar] handleApply ํธ์ถ:", { subtype: element.subtype, + isMultiDataSourceWidget, + dataSources, + listConfig, + finalChartConfig, customMetricConfig, updatedElement, }); diff --git a/frontend/components/dashboard/widgets/ListTestWidget.tsx b/frontend/components/dashboard/widgets/ListTestWidget.tsx index fdddb234..c46244b1 100644 --- a/frontend/components/dashboard/widgets/ListTestWidget.tsx +++ b/frontend/components/dashboard/widgets/ListTestWidget.tsx @@ -37,8 +37,19 @@ export function ListTestWidget({ element }: ListTestWidgetProps) { // // console.log("๐งช ListTestWidget ๋ ๋๋ง!", element); const dataSources = useMemo(() => { - return element?.dataSources || element?.chartConfig?.dataSources; - }, [element?.dataSources, element?.chartConfig?.dataSources]); + // ๋ค์ค ๋ฐ์ดํฐ ์์ค ์ฐ์ + const multiSources = element?.dataSources || element?.chartConfig?.dataSources; + if (multiSources && multiSources.length > 0) { + return multiSources; + } + + // ๋จ์ผ ๋ฐ์ดํฐ ์์ค fallback (๋ฐฐ์ด๋ก ๋ณํ) + if (element?.dataSource) { + return [element.dataSource]; + } + + return []; + }, [element?.dataSources, element?.chartConfig?.dataSources, element?.dataSource]); // // console.log("๐ dataSources ํ์ธ:", { // hasDataSources: !!dataSources, @@ -58,6 +69,27 @@ export function ListTestWidget({ element }: ListTestWidgetProps) { cardColumns: 3, }; + // visible ์ปฌ๋ผ ์ค์ ๊ฐ์ฒด ๋ฐฐ์ด (field + label) + const visibleColumnConfigs = useMemo(() => { + if (config.columns && config.columns.length > 0 && typeof config.columns[0] === "object") { + return config.columns.filter((col: any) => col.visible !== false); + } + return []; + }, [config.columns]); + + // ํ์ํ ์ปฌ๋ผ ํ๋๋ช (๋ฐ์ดํฐ ์ ๊ทผ์ฉ) + const displayColumns = useMemo(() => { + if (!data?.columns) return []; + + // ์ปฌ๋ผ ์ค์ ์ด ์์ผ๋ฉด field ์ฌ์ฉ + if (visibleColumnConfigs.length > 0) { + return visibleColumnConfigs.map((col: any) => col.field); + } + + // ์๋ ๋ชจ๋: ๋ชจ๋ ์ปฌ๋ผ ํ์ + return data.columns; + }, [data?.columns, visibleColumnConfigs]); + // ๋ค์ค ๋ฐ์ดํฐ ์์ค ๋ก๋ฉ const loadMultipleDataSources = useCallback(async () => { if (!dataSources || dataSources.length === 0) { @@ -313,50 +345,66 @@ export function ListTestWidget({ element }: ListTestWidgetProps) { const paginatedRows = data?.rows.slice(startIndex, endIndex) || []; // ํ ์ด๋ธ ๋ทฐ - const renderTable = () => ( -
{error}
๋ฐ์ดํฐ ์์ค๋ฅผ ์ฐ๊ฒฐํด์ฃผ์ธ์