From ae38e0f249758da8b9fc5c8c2756db7e85863040 Mon Sep 17 00:00:00 2001 From: kjs Date: Wed, 17 Dec 2025 16:38:12 +0900 Subject: [PATCH] =?UTF-8?q?=EC=97=94=ED=8B=B0=ED=8B=B0=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20=EC=97=90=EB=9F=AC=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=EB=B0=B0=EC=A7=80=20=EC=83=89=EC=83=81=EC=97=86=EC=9D=8C=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/tableManagementController.ts | 9 +++++---- .../screen/InteractiveDataTable.tsx | 8 ++++---- .../components/webtypes/RepeaterInput.tsx | 6 +++--- frontend/lib/api/dynamicForm.ts | 19 ++++++++++++++++++- .../table-list/TableListComponent.tsx | 10 ++++++---- 5 files changed, 36 insertions(+), 16 deletions(-) diff --git a/backend-node/src/controllers/tableManagementController.ts b/backend-node/src/controllers/tableManagementController.ts index 66c70a77..0c6b805a 100644 --- a/backend-node/src/controllers/tableManagementController.ts +++ b/backend-node/src/controllers/tableManagementController.ts @@ -767,11 +767,12 @@ export async function getTableData( const tableManagementService = new TableManagementService(); - // ๐Ÿ†• ํ˜„์žฌ ์‚ฌ์šฉ์ž ํ•„ํ„ฐ ์ ์šฉ + // ๐Ÿ†• ํ˜„์žฌ ์‚ฌ์šฉ์ž ํ•„ํ„ฐ ์ ์šฉ (autoFilter๊ฐ€ ์—†๊ฑฐ๋‚˜ enabled๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ false๊ฐ€ ์•„๋‹ˆ๋ฉด ๊ธฐ๋ณธ ์ ์šฉ) let enhancedSearch = { ...search }; - if (autoFilter?.enabled && req.user) { - const filterColumn = autoFilter.filterColumn || "company_code"; - const userField = autoFilter.userField || "companyCode"; + const shouldApplyAutoFilter = autoFilter?.enabled !== false; // ๊ธฐ๋ณธ๊ฐ’: true + if (shouldApplyAutoFilter && req.user) { + const filterColumn = autoFilter?.filterColumn || "company_code"; + const userField = autoFilter?.userField || "companyCode"; const userValue = (req.user as any)[userField]; if (userValue) { diff --git a/frontend/components/screen/InteractiveDataTable.tsx b/frontend/components/screen/InteractiveDataTable.tsx index a1015ac6..5e4bda2e 100644 --- a/frontend/components/screen/InteractiveDataTable.tsx +++ b/frontend/components/screen/InteractiveDataTable.tsx @@ -2201,12 +2201,12 @@ export const InteractiveDataTable: React.FC = ({ const mapping = categoryMappings[column.columnName]; const categoryData = mapping?.[String(value)]; - // ๋งคํ•‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๋ผ๋ฒจ๊ณผ ์ƒ‰์ƒ ์‚ฌ์šฉ, ์—†์œผ๋ฉด ์ฝ”๋“œ๊ฐ’๊ณผ ๊ธฐ๋ณธ์ƒ‰์ƒ + // ๋งคํ•‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๋ผ๋ฒจ๊ณผ ์ƒ‰์ƒ ์‚ฌ์šฉ, ์—†์œผ๋ฉด ์ฝ”๋“œ๊ฐ’๋งŒ ํ…์ŠคํŠธ๋กœ ํ‘œ์‹œ const displayLabel = categoryData?.label || String(value); - const displayColor = categoryData?.color || "#64748b"; // ๊ธฐ๋ณธ slate ์ƒ‰์ƒ + const displayColor = categoryData?.color; - // ๋ฐฐ์ง€ ์—†์Œ ์˜ต์…˜: color๊ฐ€ "none"์ด๋ฉด ํ…์ŠคํŠธ๋งŒ ํ‘œ์‹œ - if (displayColor === "none") { + // ๋ฐฐ์ง€ ์—†์Œ ์˜ต์…˜: color๊ฐ€ ์—†๊ฑฐ๋‚˜, "none"์ด๊ฑฐ๋‚˜, ๋งคํ•‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ํ…์ŠคํŠธ๋งŒ ํ‘œ์‹œ + if (!displayColor || displayColor === "none" || !categoryData) { return {displayLabel}; } diff --git a/frontend/components/webtypes/RepeaterInput.tsx b/frontend/components/webtypes/RepeaterInput.tsx index 6118e073..db9e1d6b 100644 --- a/frontend/components/webtypes/RepeaterInput.tsx +++ b/frontend/components/webtypes/RepeaterInput.tsx @@ -418,7 +418,7 @@ export const RepeaterInput: React.FC = ({ const valueStr = String(value); // ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ const categoryData = mapping?.[valueStr]; const displayLabel = categoryData?.label || valueStr; - const displayColor = categoryData?.color || "#64748b"; // ๊ธฐ๋ณธ ์ƒ‰์ƒ (slate) + const displayColor = categoryData?.color; console.log(`๐Ÿท๏ธ [RepeaterInput] ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐฐ์ง€ ๋ Œ๋”๋ง:`, { fieldName: field.name, @@ -429,8 +429,8 @@ export const RepeaterInput: React.FC = ({ displayColor, }); - // ์ƒ‰์ƒ์ด "none"์ด๋ฉด ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ํ‘œ์‹œ - if (displayColor === "none") { + // ๋ฐฐ์ง€ ์—†์Œ ์˜ต์…˜: color๊ฐ€ ์—†๊ฑฐ๋‚˜, "none"์ด๊ฑฐ๋‚˜, ๋งคํ•‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ํ…์ŠคํŠธ๋งŒ ํ‘œ์‹œ + if (!displayColor || displayColor === "none" || !categoryData) { return {displayLabel}; } diff --git a/frontend/lib/api/dynamicForm.ts b/frontend/lib/api/dynamicForm.ts index a66d8f99..a5a3b2eb 100644 --- a/frontend/lib/api/dynamicForm.ts +++ b/frontend/lib/api/dynamicForm.ts @@ -426,12 +426,29 @@ export class DynamicFormApi { sortBy?: string; sortOrder?: "asc" | "desc"; filters?: Record; + autoFilter?: { + enabled: boolean; + filterColumn?: string; + userField?: string; + }; }, ): Promise> { try { console.log("๐Ÿ“Š ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์กฐํšŒ ์š”์ฒญ:", { tableName, params }); - const response = await apiClient.post(`/table-management/tables/${tableName}/data`, params || {}); + // autoFilter๊ฐ€ ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ฉ€ํ‹ฐํ…Œ๋„Œ์‹œ ํ•„ํ„ฐ ์ ์šฉ + // pageSize๋ฅผ size๋กœ ๋ณ€ํ™˜ (๋ฐฑ์—”๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช… ํ˜ธํ™˜) + const requestParams = { + ...params, + size: params?.pageSize || params?.size || 100, // ๊ธฐ๋ณธ๊ฐ’ 100 + autoFilter: params?.autoFilter ?? { + enabled: true, + filterColumn: "company_code", + userField: "companyCode", + }, + }; + + const response = await apiClient.post(`/table-management/tables/${tableName}/data`, requestParams); console.log("โœ… ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์กฐํšŒ ์„ฑ๊ณต (์›๋ณธ):", response.data); console.log("๐Ÿ” response.data ์ƒ์„ธ:", { diff --git a/frontend/lib/registry/components/table-list/TableListComponent.tsx b/frontend/lib/registry/components/table-list/TableListComponent.tsx index bed2b795..703bf2b0 100644 --- a/frontend/lib/registry/components/table-list/TableListComponent.tsx +++ b/frontend/lib/registry/components/table-list/TableListComponent.tsx @@ -4233,9 +4233,10 @@ export const TableListComponent: React.FC = ({ if (values.length === 1) { const categoryData = mapping?.[values[0]]; const displayLabel = categoryData?.label || values[0]; - const displayColor = categoryData?.color || "#64748b"; + const displayColor = categoryData?.color; - if (displayColor === "none") { + // ๋ฐฐ์ง€ ์—†์Œ ์˜ต์…˜: color๊ฐ€ ์—†๊ฑฐ๋‚˜, "none"์ด๊ฑฐ๋‚˜, ๋งคํ•‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ํ…์ŠคํŠธ๋งŒ ํ‘œ์‹œ + if (!displayColor || displayColor === "none" || !categoryData) { return {displayLabel}; } @@ -4258,9 +4259,10 @@ export const TableListComponent: React.FC = ({ {values.map((val, idx) => { const categoryData = mapping?.[val]; const displayLabel = categoryData?.label || val; - const displayColor = categoryData?.color || "#64748b"; + const displayColor = categoryData?.color; - if (displayColor === "none") { + // ๋ฐฐ์ง€ ์—†์Œ ์˜ต์…˜: color๊ฐ€ ์—†๊ฑฐ๋‚˜, "none"์ด๊ฑฐ๋‚˜, ๋งคํ•‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ํ…์ŠคํŠธ๋งŒ ํ‘œ์‹œ + if (!displayColor || displayColor === "none" || !categoryData) { return ( {displayLabel}