From 85519e302fd99de8fab4308ccf104a77c79e8d01 Mon Sep 17 00:00:00 2001 From: kjs Date: Mon, 5 Jan 2026 13:54:41 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=ED=96=89=EC=84=A0=ED=83=9D=EC=8B=9C?= =?UTF-8?q?=EC=97=90=EB=A7=8C=20=EB=B2=84=ED=8A=BC=20=ED=99=9C=EC=84=B1?= =?UTF-8?q?=ED=99=94=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../button-primary/ButtonPrimaryComponent.tsx | 22 +++++-- .../table-list/TableListComponent.tsx | 64 +++++++++---------- 2 files changed, 49 insertions(+), 37 deletions(-) diff --git a/frontend/lib/registry/components/button-primary/ButtonPrimaryComponent.tsx b/frontend/lib/registry/components/button-primary/ButtonPrimaryComponent.tsx index f311c035..a71f6e03 100644 --- a/frontend/lib/registry/components/button-primary/ButtonPrimaryComponent.tsx +++ b/frontend/lib/registry/components/button-primary/ButtonPrimaryComponent.tsx @@ -299,6 +299,20 @@ export const ButtonPrimaryComponent: React.FC = ({ // ๐Ÿ†• modalDataStore์—์„œ ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ ํ™•์ธ (๋ถ„ํ•  ํŒจ๋„ ๋“ฑ์—์„œ ์ €์žฅ๋จ) const [modalStoreData, setModalStoreData] = useState>({}); + // ๐Ÿ†• splitPanelContext?.selectedLeftData๋ฅผ ๋กœ์ปฌ ์ƒํƒœ๋กœ ์ถ”์  (๋ฆฌ๋ Œ๋”๋ง ๋ณด์žฅ) + const [trackedSelectedLeftData, setTrackedSelectedLeftData] = useState | null>(null); + + // splitPanelContext?.selectedLeftData ๋ณ€๊ฒฝ ๊ฐ์ง€ ๋ฐ ๋กœ์ปฌ ์ƒํƒœ ๋™๊ธฐํ™” + useEffect(() => { + const newData = splitPanelContext?.selectedLeftData ?? null; + setTrackedSelectedLeftData(newData); + console.log("๐Ÿ”„ [ButtonPrimary] selectedLeftData ๋ณ€๊ฒฝ ๊ฐ์ง€:", { + label: component.label, + hasData: !!newData, + dataKeys: newData ? Object.keys(newData) : [], + }); + }, [splitPanelContext?.selectedLeftData, component.label]); + // modalDataStore ์ƒํƒœ ๊ตฌ๋… (์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ) useEffect(() => { const actionConfig = component.componentConfig?.action; @@ -357,8 +371,8 @@ export const ButtonPrimaryComponent: React.FC = ({ // 2. ๋ถ„ํ•  ํŒจ๋„ ์ขŒ์ธก ์„ ํƒ ๋ฐ์ดํ„ฐ ํ™•์ธ if (rowSelectionSource === "auto" || rowSelectionSource === "splitPanelLeft") { - // SplitPanelContext์—์„œ ํ™•์ธ - if (splitPanelContext?.selectedLeftData && Object.keys(splitPanelContext.selectedLeftData).length > 0) { + // SplitPanelContext์—์„œ ํ™•์ธ (trackedSelectedLeftData ์‚ฌ์šฉ์œผ๋กœ ๋ฆฌ๋ Œ๋”๋ง ๋ณด์žฅ) + if (trackedSelectedLeftData && Object.keys(trackedSelectedLeftData).length > 0) { if (!hasSelection) { hasSelection = true; selectionCount = 1; @@ -397,7 +411,7 @@ export const ButtonPrimaryComponent: React.FC = ({ selectionCount, selectionSource, hasSplitPanelContext: !!splitPanelContext, - selectedLeftData: splitPanelContext?.selectedLeftData, + trackedSelectedLeftData: trackedSelectedLeftData, selectedRowsData: selectedRowsData?.length, selectedRows: selectedRows?.length, flowSelectedData: flowSelectedData?.length, @@ -429,7 +443,7 @@ export const ButtonPrimaryComponent: React.FC = ({ component.label, selectedRows, selectedRowsData, - splitPanelContext?.selectedLeftData, + trackedSelectedLeftData, flowSelectedData, splitPanelContext, modalStoreData, diff --git a/frontend/lib/registry/components/table-list/TableListComponent.tsx b/frontend/lib/registry/components/table-list/TableListComponent.tsx index 7ac521af..7a787ed3 100644 --- a/frontend/lib/registry/components/table-list/TableListComponent.tsx +++ b/frontend/lib/registry/components/table-list/TableListComponent.tsx @@ -2043,7 +2043,7 @@ export const TableListComponent: React.FC = ({ return row.id || row.uuid || `row-${index}`; }; - const handleRowSelection = (rowKey: string, checked: boolean) => { + const handleRowSelection = (rowKey: string, checked: boolean, rowData?: any) => { const newSelectedRows = new Set(selectedRows); if (checked) { newSelectedRows.add(rowKey); @@ -2086,6 +2086,31 @@ export const TableListComponent: React.FC = ({ }); } + // ๐Ÿ†• ๋ถ„ํ•  ํŒจ๋„ ์ปจํ…์ŠคํŠธ์— ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ ์ €์žฅ/ํ•ด์ œ (์ฒดํฌ๋ฐ•์Šค ์„ ํƒ ์‹œ์—๋„ ์ž‘๋™) + const effectiveSplitPosition = splitPanelPosition || currentSplitPosition; + if (splitPanelContext && effectiveSplitPosition === "left" && !splitPanelContext.disableAutoDataTransfer) { + if (checked && selectedRowsData.length > 0) { + // ์„ ํƒ๋œ ๊ฒฝ์šฐ: ์ฒซ ๋ฒˆ์งธ ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ ์ €์žฅ (๋˜๋Š” ์ „๋‹ฌ๋œ rowData) + const dataToStore = rowData || selectedRowsData[selectedRowsData.length - 1]; + splitPanelContext.setSelectedLeftData(dataToStore); + console.log("๐Ÿ”— [TableList] handleRowSelection - ๋ถ„ํ•  ํŒจ๋„ ์ขŒ์ธก ๋ฐ์ดํ„ฐ ์ €์žฅ:", { + rowKey, + dataToStore, + }); + } else if (!checked && selectedRowsData.length === 0) { + // ๋ชจ๋“  ์„ ํƒ์ด ํ•ด์ œ๋œ ๊ฒฝ์šฐ: ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” + splitPanelContext.setSelectedLeftData(null); + console.log("๐Ÿ”— [TableList] handleRowSelection - ๋ถ„ํ•  ํŒจ๋„ ์ขŒ์ธก ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™”"); + } else if (selectedRowsData.length > 0) { + // ์ผ๋ถ€ ์„ ํƒ ํ•ด์ œ๋œ ๊ฒฝ์šฐ: ๋‚จ์€ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋กœ ์—…๋ฐ์ดํŠธ + splitPanelContext.setSelectedLeftData(selectedRowsData[0]); + console.log("๐Ÿ”— [TableList] handleRowSelection - ๋ถ„ํ•  ํŒจ๋„ ์ขŒ์ธก ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ:", { + remainingCount: selectedRowsData.length, + firstData: selectedRowsData[0], + }); + } + } + const allRowsSelected = filteredData.every((row, index) => newSelectedRows.has(getRowKey(row, index))); setIsAllSelected(allRowsSelected && filteredData.length > 0); }; @@ -2155,35 +2180,8 @@ export const TableListComponent: React.FC = ({ const rowKey = getRowKey(row, index); const isCurrentlySelected = selectedRows.has(rowKey); - handleRowSelection(rowKey, !isCurrentlySelected); - - // ๐Ÿ†• ๋ถ„ํ•  ํŒจ๋„ ์ปจํ…์ŠคํŠธ์— ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ ์ €์žฅ (์ขŒ์ธก ํ™”๋ฉด์ธ ๊ฒฝ์šฐ) - // disableAutoDataTransfer๊ฐ€ true์ด๋ฉด ์ž๋™ ์ „๋‹ฌ ๋น„ํ™œ์„ฑํ™” (๋ฒ„ํŠผ ํด๋ฆญ์œผ๋กœ๋งŒ ์ „๋‹ฌ) - // currentSplitPosition์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •ํ™•ํ•œ ์œ„์น˜ ํ™•์ธ (splitPanelPosition์ด ์—†์„ ์ˆ˜ ์žˆ์Œ) - const effectiveSplitPosition = splitPanelPosition || currentSplitPosition; - - console.log("๐Ÿ”— [TableList] ํ–‰ ํด๋ฆญ - ๋ถ„ํ•  ํŒจ๋„ ์œ„์น˜ ํ™•์ธ:", { - splitPanelPosition, - currentSplitPosition, - effectiveSplitPosition, - hasSplitPanelContext: !!splitPanelContext, - disableAutoDataTransfer: splitPanelContext?.disableAutoDataTransfer, - }); - - if (splitPanelContext && effectiveSplitPosition === "left" && !splitPanelContext.disableAutoDataTransfer) { - if (!isCurrentlySelected) { - // ์„ ํƒ๋œ ๊ฒฝ์šฐ: ๋ฐ์ดํ„ฐ ์ €์žฅ - splitPanelContext.setSelectedLeftData(row); - console.log("๐Ÿ”— [TableList] ๋ถ„ํ•  ํŒจ๋„ ์ขŒ์ธก ๋ฐ์ดํ„ฐ ์ €์žฅ:", { - row, - parentDataMapping: splitPanelContext.parentDataMapping, - }); - } else { - // ์„ ํƒ ํ•ด์ œ๋œ ๊ฒฝ์šฐ: ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” - splitPanelContext.setSelectedLeftData(null); - console.log("๐Ÿ”— [TableList] ๋ถ„ํ•  ํŒจ๋„ ์ขŒ์ธก ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™”"); - } - } + // handleRowSelection์—์„œ ๋ถ„ํ•  ํŒจ๋„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋„ ํ•จ๊ป˜ ์ˆ˜ํ–‰๋จ + handleRowSelection(rowKey, !isCurrentlySelected, row); console.log("ํ–‰ ํด๋ฆญ:", { row, index, isSelected: !isCurrentlySelected }); }; @@ -3918,7 +3916,7 @@ export const TableListComponent: React.FC = ({ if (enterRow) { const rowKey = getRowKey(enterRow, rowIndex); const isCurrentlySelected = selectedRows.has(rowKey); - handleRowSelection(rowKey, !isCurrentlySelected); + handleRowSelection(rowKey, !isCurrentlySelected, enterRow); } break; case " ": // Space @@ -3928,7 +3926,7 @@ export const TableListComponent: React.FC = ({ if (spaceRow) { const currentRowKey = getRowKey(spaceRow, rowIndex); const isChecked = selectedRows.has(currentRowKey); - handleRowSelection(currentRowKey, !isChecked); + handleRowSelection(currentRowKey, !isChecked, spaceRow); } break; case "F2": @@ -4142,7 +4140,7 @@ export const TableListComponent: React.FC = ({ return ( handleRowSelection(rowKey, checked as boolean)} + onCheckedChange={(checked) => handleRowSelection(rowKey, checked as boolean, row)} aria-label={`ํ–‰ ${index + 1} ์„ ํƒ`} /> ); From 4f77c382077ca2a499f76d1badf8417dcacb79ad Mon Sep 17 00:00:00 2001 From: kjs Date: Tue, 6 Jan 2026 10:27:54 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EA=B6=8C=ED=95=9C=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=9E=84=EC=8B=9C=20=EB=B9=84=ED=99=9C=EC=84=B1=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/routes/cascadingAutoFillRoutes.ts | 1 + .../src/routes/cascadingConditionRoutes.ts | 1 + .../src/routes/cascadingHierarchyRoutes.ts | 1 + .../routes/cascadingMutualExclusionRoutes.ts | 1 + backend-node/src/services/adminService.ts | 18 ++++++++++++++++++ docs/๋…ธ๋“œํ”Œ๋กœ์šฐ_๊ฐœ์„ ์‚ฌํ•ญ.md | 1 + docs/๋ฉ”์ผ๋ฐœ์†ก_๊ธฐ๋Šฅ_์‚ฌ์šฉ_๊ฐ€์ด๋“œ.md | 1 + docs/์ฆ‰์‹œ์ €์žฅ_๋ฒ„ํŠผ_์•ก์…˜_๊ตฌํ˜„_๊ณ„ํš์„œ.md | 1 + .../admin/screenMng/screenMngList/page.tsx | 1 + frontend/contexts/ActiveTabContext.tsx | 1 + frontend/hooks/useAutoFill.ts | 1 + ...ด_์ž„๋ฒ ๋”ฉ_๋ฐ_๋ฐ์ดํ„ฐ_์ „๋‹ฌ_์‹œ์Šคํ…œ_๊ตฌํ˜„_๊ณ„ํš์„œ.md | 1 + ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_์‹œ์Šคํ…œ_Phase1-4_๊ตฌํ˜„_์™„๋ฃŒ.md | 1 + ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_์‹œ์Šคํ…œ_์ถฉ๋Œ_๋ถ„์„_๋ณด๊ณ ์„œ.md | 1 + 14 files changed, 31 insertions(+) diff --git a/backend-node/src/routes/cascadingAutoFillRoutes.ts b/backend-node/src/routes/cascadingAutoFillRoutes.ts index a5107448..c1d69e9f 100644 --- a/backend-node/src/routes/cascadingAutoFillRoutes.ts +++ b/backend-node/src/routes/cascadingAutoFillRoutes.ts @@ -55,3 +55,4 @@ export default router; + diff --git a/backend-node/src/routes/cascadingConditionRoutes.ts b/backend-node/src/routes/cascadingConditionRoutes.ts index 22cd2d2b..bbc9384d 100644 --- a/backend-node/src/routes/cascadingConditionRoutes.ts +++ b/backend-node/src/routes/cascadingConditionRoutes.ts @@ -51,3 +51,4 @@ export default router; + diff --git a/backend-node/src/routes/cascadingHierarchyRoutes.ts b/backend-node/src/routes/cascadingHierarchyRoutes.ts index 79a1c6e8..35ced071 100644 --- a/backend-node/src/routes/cascadingHierarchyRoutes.ts +++ b/backend-node/src/routes/cascadingHierarchyRoutes.ts @@ -67,3 +67,4 @@ export default router; + diff --git a/backend-node/src/routes/cascadingMutualExclusionRoutes.ts b/backend-node/src/routes/cascadingMutualExclusionRoutes.ts index 352a05b5..29ac8ee4 100644 --- a/backend-node/src/routes/cascadingMutualExclusionRoutes.ts +++ b/backend-node/src/routes/cascadingMutualExclusionRoutes.ts @@ -55,3 +55,4 @@ export default router; + diff --git a/backend-node/src/services/adminService.ts b/backend-node/src/services/adminService.ts index 1b9280db..95d8befa 100644 --- a/backend-node/src/services/adminService.ts +++ b/backend-node/src/services/adminService.ts @@ -65,6 +65,13 @@ export class AdminService { } ); + // [์ž„์‹œ ๋น„ํ™œ์„ฑํ™”] ๋ฉ”๋‰ด ๊ถŒํ•œ ๊ทธ๋ฃน ์ฒดํฌ - ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „์ฒด ๋ฉ”๋‰ด ํ‘œ์‹œ + // TODO: ๊ถŒํ•œ ์ฒดํฌ ๋‹ค์‹œ ํ™œ์„ฑํ™” ํ•„์š” + logger.info( + `โš ๏ธ [์ž„์‹œ ๋น„ํ™œ์„ฑํ™”] ๊ถŒํ•œ ๊ทธ๋ฃน ์ฒดํฌ ์Šคํ‚ต - ์‚ฌ์šฉ์ž ${userId}(${userType})์—๊ฒŒ ์ „์ฒด ๋ฉ”๋‰ด ํ‘œ์‹œ` + ); + + /* [์›๋ณธ ์ฝ”๋“œ - ๊ถŒํ•œ ๊ทธ๋ฃน ์ฒดํฌ] if (userType === "COMPANY_ADMIN") { // ํšŒ์‚ฌ ๊ด€๋ฆฌ์ž: ๊ถŒํ•œ ๊ทธ๋ฃน ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ๋ง ์ ์šฉ if (userRoleGroups.length > 0) { @@ -141,6 +148,7 @@ export class AdminService { return []; } } + */ } else if ( menuType !== undefined && userType === "SUPER_ADMIN" && @@ -412,6 +420,15 @@ export class AdminService { let queryParams: any[] = [userLang]; let paramIndex = 2; + // [์ž„์‹œ ๋น„ํ™œ์„ฑํ™”] ๋ฉ”๋‰ด ๊ถŒํ•œ ๊ทธ๋ฃน ์ฒดํฌ - ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „์ฒด ๋ฉ”๋‰ด ํ‘œ์‹œ + // TODO: ๊ถŒํ•œ ์ฒดํฌ ๋‹ค์‹œ ํ™œ์„ฑํ™” ํ•„์š” + logger.info( + `โš ๏ธ [์ž„์‹œ ๋น„ํ™œ์„ฑํ™”] getUserMenuList ๊ถŒํ•œ ๊ทธ๋ฃน ์ฒดํฌ ์Šคํ‚ต - ์‚ฌ์šฉ์ž ${userId}(${userType})์—๊ฒŒ ์ „์ฒด ๋ฉ”๋‰ด ํ‘œ์‹œ` + ); + authFilter = ""; + unionFilter = ""; + + /* [์›๋ณธ ์ฝ”๋“œ - getUserMenuList ๊ถŒํ•œ ๊ทธ๋ฃน ์ฒดํฌ] if (userType === "SUPER_ADMIN") { // SUPER_ADMIN: ๊ถŒํ•œ ๊ทธ๋ฃน ์ฒดํฌ ์—†์ด ํ•ด๋‹น ํšŒ์‚ฌ์˜ ๋ชจ๋“  ๋ฉ”๋‰ด ํ‘œ์‹œ logger.info(`โœ… ์ขŒ์ธก ์‚ฌ์ด๋“œ๋ฐ” (SUPER_ADMIN): ํšŒ์‚ฌ ${userCompanyCode}์˜ ๋ชจ๋“  ๋ฉ”๋‰ด ํ‘œ์‹œ`); @@ -471,6 +488,7 @@ export class AdminService { return []; } } + */ // 2. ํšŒ์‚ฌ๋ณ„ ํ•„ํ„ฐ๋ง ์กฐ๊ฑด ์ƒ์„ฑ let companyFilter = ""; diff --git a/docs/๋…ธ๋“œํ”Œ๋กœ์šฐ_๊ฐœ์„ ์‚ฌํ•ญ.md b/docs/๋…ธ๋“œํ”Œ๋กœ์šฐ_๊ฐœ์„ ์‚ฌํ•ญ.md index c9349b94..32757807 100644 --- a/docs/๋…ธ๋“œํ”Œ๋กœ์šฐ_๊ฐœ์„ ์‚ฌํ•ญ.md +++ b/docs/๋…ธ๋“œํ”Œ๋กœ์šฐ_๊ฐœ์„ ์‚ฌํ•ญ.md @@ -587,3 +587,4 @@ const result = await executeNodeFlow(flowId, { + diff --git a/docs/๋ฉ”์ผ๋ฐœ์†ก_๊ธฐ๋Šฅ_์‚ฌ์šฉ_๊ฐ€์ด๋“œ.md b/docs/๋ฉ”์ผ๋ฐœ์†ก_๊ธฐ๋Šฅ_์‚ฌ์šฉ_๊ฐ€์ด๋“œ.md index 42900211..8bfe484e 100644 --- a/docs/๋ฉ”์ผ๋ฐœ์†ก_๊ธฐ๋Šฅ_์‚ฌ์šฉ_๊ฐ€์ด๋“œ.md +++ b/docs/๋ฉ”์ผ๋ฐœ์†ก_๊ธฐ๋Šฅ_์‚ฌ์šฉ_๊ฐ€์ด๋“œ.md @@ -360,3 +360,4 @@ + diff --git a/docs/์ฆ‰์‹œ์ €์žฅ_๋ฒ„ํŠผ_์•ก์…˜_๊ตฌํ˜„_๊ณ„ํš์„œ.md b/docs/์ฆ‰์‹œ์ €์žฅ_๋ฒ„ํŠผ_์•ก์…˜_๊ตฌํ˜„_๊ณ„ํš์„œ.md index c392eece..8d8fb497 100644 --- a/docs/์ฆ‰์‹œ์ €์žฅ_๋ฒ„ํŠผ_์•ก์…˜_๊ตฌํ˜„_๊ณ„ํš์„œ.md +++ b/docs/์ฆ‰์‹œ์ €์žฅ_๋ฒ„ํŠผ_์•ก์…˜_๊ตฌํ˜„_๊ณ„ํš์„œ.md @@ -346,3 +346,4 @@ const getComponentValue = (componentId: string) => { + diff --git a/frontend/app/(main)/admin/screenMng/screenMngList/page.tsx b/frontend/app/(main)/admin/screenMng/screenMngList/page.tsx index 3145d9d3..0327e122 100644 --- a/frontend/app/(main)/admin/screenMng/screenMngList/page.tsx +++ b/frontend/app/(main)/admin/screenMng/screenMngList/page.tsx @@ -127,3 +127,4 @@ export default function ScreenManagementPage() { ); } + diff --git a/frontend/contexts/ActiveTabContext.tsx b/frontend/contexts/ActiveTabContext.tsx index 228dc990..35081225 100644 --- a/frontend/contexts/ActiveTabContext.tsx +++ b/frontend/contexts/ActiveTabContext.tsx @@ -140,3 +140,4 @@ export const useActiveTabOptional = () => { + diff --git a/frontend/hooks/useAutoFill.ts b/frontend/hooks/useAutoFill.ts index caa1e826..7d78322b 100644 --- a/frontend/hooks/useAutoFill.ts +++ b/frontend/hooks/useAutoFill.ts @@ -197,3 +197,4 @@ export function applyAutoFillToFormData( + diff --git a/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_๋ฐ_๋ฐ์ดํ„ฐ_์ „๋‹ฌ_์‹œ์Šคํ…œ_๊ตฌํ˜„_๊ณ„ํš์„œ.md b/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_๋ฐ_๋ฐ์ดํ„ฐ_์ „๋‹ฌ_์‹œ์Šคํ…œ_๊ตฌํ˜„_๊ณ„ํš์„œ.md index f61ab2fb..1108475c 100644 --- a/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_๋ฐ_๋ฐ์ดํ„ฐ_์ „๋‹ฌ_์‹œ์Šคํ…œ_๊ตฌํ˜„_๊ณ„ํš์„œ.md +++ b/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_๋ฐ_๋ฐ์ดํ„ฐ_์ „๋‹ฌ_์‹œ์Šคํ…œ_๊ตฌํ˜„_๊ณ„ํš์„œ.md @@ -1689,3 +1689,4 @@ const ์ถœ๊ณ ๋“ฑ๋ก_์„ค์ •: ScreenSplitPanel = { + diff --git a/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_์‹œ์Šคํ…œ_Phase1-4_๊ตฌํ˜„_์™„๋ฃŒ.md b/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_์‹œ์Šคํ…œ_Phase1-4_๊ตฌํ˜„_์™„๋ฃŒ.md index 0596216f..c20a94bc 100644 --- a/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_์‹œ์Šคํ…œ_Phase1-4_๊ตฌํ˜„_์™„๋ฃŒ.md +++ b/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_์‹œ์Šคํ…œ_Phase1-4_๊ตฌํ˜„_์™„๋ฃŒ.md @@ -536,3 +536,4 @@ const { data: config } = await getScreenSplitPanel(screenId); + diff --git a/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_์‹œ์Šคํ…œ_์ถฉ๋Œ_๋ถ„์„_๋ณด๊ณ ์„œ.md b/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_์‹œ์Šคํ…œ_์ถฉ๋Œ_๋ถ„์„_๋ณด๊ณ ์„œ.md index 4f0bfabb..77ad05b2 100644 --- a/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_์‹œ์Šคํ…œ_์ถฉ๋Œ_๋ถ„์„_๋ณด๊ณ ์„œ.md +++ b/ํ™”๋ฉด_์ž„๋ฒ ๋”ฉ_์‹œ์Šคํ…œ_์ถฉ๋Œ_๋ถ„์„_๋ณด๊ณ ์„œ.md @@ -523,3 +523,4 @@ function ScreenViewPage() { +