From 8a865ac1f487185677bc7a38f9d1a6fc47ccde27 Mon Sep 17 00:00:00 2001 From: leeheejin Date: Fri, 16 Jan 2026 14:29:19 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=B4=EC=83=81=ED=95=9C=20=EB=B6=80?= =?UTF-8?q?=EB=B6=84=20=EC=88=98=EC=A0=95=20=ED=94=BC=EB=B2=97=EA=B7=B8?= =?UTF-8?q?=EB=A6=AC=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pivot-grid/PivotGridComponent.tsx | 77 ++++++++++++++----- 1 file changed, 56 insertions(+), 21 deletions(-) diff --git a/frontend/lib/registry/components/pivot-grid/PivotGridComponent.tsx b/frontend/lib/registry/components/pivot-grid/PivotGridComponent.tsx index bdc00019..ccfbde88 100644 --- a/frontend/lib/registry/components/pivot-grid/PivotGridComponent.tsx +++ b/frontend/lib/registry/components/pivot-grid/PivotGridComponent.tsx @@ -526,11 +526,16 @@ export const PivotGridComponent: React.FC = ({ }); return result; - }, [filteredData, fields, pivotState.expandedRowPaths, pivotState.expandedColumnPaths]); + }, [ + filteredData, + fields, + JSON.stringify(pivotState.expandedRowPaths), + JSON.stringify(pivotState.expandedColumnPaths) + ]); // ๐Ÿ†• ์ดˆ๊ธฐ ๋กœ๋“œ ์‹œ ์ฒซ ๋ ˆ๋ฒจ ์ž๋™ ํ™•์žฅ useEffect(() => { - if (pivotResult && pivotResult.flatRows.length > 0) { + if (pivotResult && pivotResult.flatRows.length > 0 && !isInitialExpanded) { console.log("๐Ÿ”ถ ํ”ผ๋ฒ— ๊ฒฐ๊ณผ ์ƒ์„ฑ๋จ:", { flatRowsCount: pivotResult.flatRows.length, expandedRowPaths: pivotState.expandedRowPaths.length, @@ -542,10 +547,10 @@ export const PivotGridComponent: React.FC = ({ console.log("๐Ÿ”ถ ์ฒซ ๋ ˆ๋ฒจ ํ–‰ (level 0, hasChildren):", firstLevelRows.map(r => ({ path: r.path, caption: r.caption }))); - // ์ดˆ๊ธฐ ํ™•์žฅ์ด ์•ˆ ๋˜์–ด ์žˆ๊ณ , ์ฒซ ๋ ˆ๋ฒจ ํ–‰์ด ์žˆ์œผ๋ฉด ์ž๋™ ํ™•์žฅ - if (!isInitialExpanded && firstLevelRows.length > 0) { + // ์ฒซ ๋ ˆ๋ฒจ ํ–‰์ด ์žˆ์œผ๋ฉด ์ž๋™ ํ™•์žฅ + if (firstLevelRows.length > 0) { const firstLevelPaths = firstLevelRows.map(row => row.path); - console.log("๐Ÿ”ถ ์ดˆ๊ธฐ ์ž๋™ ํ™•์žฅ ์‹คํ–‰:", firstLevelPaths); + console.log("๐Ÿ”ถ ์ดˆ๊ธฐ ์ž๋™ ํ™•์žฅ ์‹คํ–‰ (ํ•œ ๋ฒˆ๋งŒ):", firstLevelPaths); setPivotState(prev => ({ ...prev, expandedRowPaths: firstLevelPaths, @@ -553,7 +558,7 @@ export const PivotGridComponent: React.FC = ({ setIsInitialExpanded(true); } } - }, [pivotResult, isInitialExpanded, pivotState.expandedRowPaths.length]); + }, [pivotResult, isInitialExpanded]); // ์กฐ๊ฑด๋ถ€ ์„œ์‹์šฉ ์ „์ฒด ๊ฐ’ ์ˆ˜์ง‘ const allCellValues = useMemo(() => { @@ -749,31 +754,61 @@ export const PivotGridComponent: React.FC = ({ [onExpandChange] ); - // ์ „์ฒด ํ™•์žฅ + // ์ „์ฒด ํ™•์žฅ (์žฌ๊ท€์ ์œผ๋กœ ๋ชจ๋“  ๋ ˆ๋ฒจ ํ™•์žฅ) const handleExpandAll = useCallback(() => { - if (!pivotResult) return; + if (!pivotResult) { + console.log("โŒ [handleExpandAll] pivotResult๊ฐ€ ์—†์Œ"); + return; + } + // ๐Ÿ†• ์žฌ๊ท€์ ์œผ๋กœ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ ์ƒ์„ฑ const allRowPaths: string[][] = []; - pivotResult.flatRows.forEach((row) => { - if (row.hasChildren) { - allRowPaths.push(row.path); + const rowFields = fields.filter((f) => f.area === "row" && f.visible !== false); + + // ๋ฐ์ดํ„ฐ์—์„œ ๋ชจ๋“  ๊ณ ์œ ํ•œ ๊ฒฝ๋กœ ์ถ”์ถœ + const pathSet = new Set(); + filteredData.forEach((item) => { + for (let depth = 1; depth <= rowFields.length; depth++) { + const path = rowFields.slice(0, depth).map((f) => String(item[f.field] ?? "")); + const pathKey = JSON.stringify(path); + pathSet.add(pathKey); } }); + // Set์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ + pathSet.forEach((pathKey) => { + allRowPaths.push(JSON.parse(pathKey)); + }); + + console.log("๐Ÿ”ท [handleExpandAll] ํ™•์žฅํ•  ํ–‰:", { + totalRows: pivotResult.flatRows.length, + rowsWithChildren: allRowPaths.length, + paths: allRowPaths.slice(0, 5), // ์ฒ˜์Œ 5๊ฐœ๋งŒ ๋กœ๊ทธ + }); + setPivotState((prev) => ({ ...prev, expandedRowPaths: allRowPaths, expandedColumnPaths: [], })); - }, [pivotResult]); + }, [pivotResult, fields, filteredData]); // ์ „์ฒด ์ถ•์†Œ const handleCollapseAll = useCallback(() => { - setPivotState((prev) => ({ - ...prev, - expandedRowPaths: [], - expandedColumnPaths: [], - })); + console.log("๐Ÿ”ท [handleCollapseAll] ์ „์ฒด ์ถ•์†Œ ์‹คํ–‰"); + + setPivotState((prev) => { + console.log("๐Ÿ”ท [handleCollapseAll] ์ด์ „ ์ƒํƒœ:", { + expandedRowPaths: prev.expandedRowPaths.length, + expandedColumnPaths: prev.expandedColumnPaths.length, + }); + + return { + ...prev, + expandedRowPaths: [], + expandedColumnPaths: [], + }; + }); }, []); // ์…€ ํด๋ฆญ @@ -1391,8 +1426,8 @@ export const PivotGridComponent: React.FC = ({ variant="ghost" size="sm" className="h-7 px-2" - onClick={handleExpandAll} - title="์ „์ฒด ํ™•์žฅ" + onClick={handleCollapseAll} + title="์ „์ฒด ์ถ•์†Œ" > @@ -1401,8 +1436,8 @@ export const PivotGridComponent: React.FC = ({ variant="ghost" size="sm" className="h-7 px-2" - onClick={handleCollapseAll} - title="์ „์ฒด ์ถ•์†Œ" + onClick={handleExpandAll} + title="์ „์ฒด ํ™•์žฅ" >