From 611fe9f7888352f10eea1d73fcec681aa35c6f0a Mon Sep 17 00:00:00 2001 From: kjs Date: Wed, 26 Nov 2025 09:32:55 +0900 Subject: [PATCH] =?UTF-8?q?=EC=84=A0=ED=83=9D=EB=B0=95=EC=8A=A4=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SelectedItemsDetailInputConfigPanel.tsx | 78 ++++++++++++++++--- 1 file changed, 69 insertions(+), 9 deletions(-) diff --git a/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputConfigPanel.tsx b/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputConfigPanel.tsx index 8aba0a1b..7e024776 100644 --- a/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputConfigPanel.tsx +++ b/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputConfigPanel.tsx @@ -50,6 +50,9 @@ export const SelectedItemsDetailInputConfigPanel: React.FC(config.fieldGroups || []); + // ๐Ÿ†• ๊ทธ๋ฃน ์ž…๋ ฅ๊ฐ’์„ ์œ„ํ•œ ๋กœ์ปฌ ์ƒํƒœ (ํฌ์ปค์Šค ์œ ์ง€์šฉ) + const [localGroupInputs, setLocalGroupInputs] = useState>({}); + // ๐Ÿ†• ํ‘œ์‹œ ํ•ญ๋ชฉ์˜ ์ž…๋ ฅ๊ฐ’์„ ์œ„ํ•œ ๋กœ์ปฌ ์ƒํƒœ (ํฌ์ปค์Šค ์œ ์ง€์šฉ) const [localDisplayItemInputs, setLocalDisplayItemInputs] = useState>>({}); @@ -146,7 +149,22 @@ export const SelectedItemsDetailInputConfigPanel: React.FC { setLocalFieldGroups(config.fieldGroups || []); - // ๋กœ์ปฌ ์ž…๋ ฅ ์ƒํƒœ๋Š” ๊ธฐ์กด ๊ฐ’ ๋ณด์กด (์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅ ์ค‘์ธ ๊ฐ’ ์œ ์ง€) + + // ๋กœ์ปฌ ์ž…๋ ฅ ์ƒํƒœ๋Š” ๊ธฐ์กด ๊ฐ’ ๋ณด์กดํ•˜๋ฉด์„œ ์ƒˆ ๊ทธ๋ฃน๋งŒ ์ถ”๊ฐ€ + setLocalGroupInputs(prev => { + const newInputs = { ...prev }; + (config.fieldGroups || []).forEach(group => { + if (!(group.id in newInputs)) { + newInputs[group.id] = { + id: group.id, + title: group.title, + description: group.description, + order: group.order, + }; + } + }); + return newInputs; + }); }, [config.fieldGroups]); // ๐Ÿ†• ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์‹œ ๊ธฐ์กด ํ•„๋“œ๋“ค์˜ autoFillFromTable ์ปฌ๋Ÿผ ๋กœ๋“œ @@ -352,6 +370,13 @@ export const SelectedItemsDetailInputConfigPanel: React.FC { + // ๋กœ์ปฌ ์ž…๋ ฅ ์ƒํƒœ์—์„œ ํ•ด๋‹น ๊ทธ๋ฃน ์ œ๊ฑฐ + setLocalGroupInputs(prev => { + const newInputs = { ...prev }; + delete newInputs[groupId]; + return newInputs; + }); + // ๊ทธ๋ฃน ์‚ญ์ œ ์‹œ ํ•ด๋‹น ๊ทธ๋ฃน์— ์†ํ•œ ํ•„๋“œ๋“ค์˜ groupId๋„ ์ œ๊ฑฐ const updatedFields = localFields.map(field => field.groupId === groupId ? { ...field, groupId: undefined } : field @@ -362,6 +387,13 @@ export const SelectedItemsDetailInputConfigPanel: React.FC) => { + // 1. ๋กœ์ปฌ ์ž…๋ ฅ ์ƒํƒœ ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ (ํฌ์ปค์Šค ์œ ์ง€) + setLocalGroupInputs(prev => ({ + ...prev, + [groupId]: { ...prev[groupId], ...updates } + })); + + // 2. ์‹ค์ œ ๊ทธ๋ฃน ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ const newGroups = localFieldGroups.map(g => g.id === groupId ? { ...g, ...updates } : g ); @@ -1045,8 +1077,15 @@ export const SelectedItemsDetailInputConfigPanel: React.FC updateFieldGroup(group.id, { id: e.target.value })} + value={localGroupInputs[group.id]?.id !== undefined ? localGroupInputs[group.id].id : group.id} + onChange={(e) => { + const newValue = e.target.value; + setLocalGroupInputs(prev => ({ + ...prev, + [group.id]: { ...prev[group.id], id: newValue } + })); + updateFieldGroup(group.id, { id: newValue }); + }} className="h-7 text-xs sm:h-8 sm:text-sm" placeholder="group_customer" /> @@ -1056,8 +1095,15 @@ export const SelectedItemsDetailInputConfigPanel: React.FC updateFieldGroup(group.id, { title: e.target.value })} + value={localGroupInputs[group.id]?.title !== undefined ? localGroupInputs[group.id].title : group.title} + onChange={(e) => { + const newValue = e.target.value; + setLocalGroupInputs(prev => ({ + ...prev, + [group.id]: { ...prev[group.id], title: newValue } + })); + updateFieldGroup(group.id, { title: newValue }); + }} className="h-7 text-xs sm:h-8 sm:text-sm" placeholder="๊ฑฐ๋ž˜์ฒ˜ ์ •๋ณด" /> @@ -1067,8 +1113,15 @@ export const SelectedItemsDetailInputConfigPanel: React.FC updateFieldGroup(group.id, { description: e.target.value })} + value={localGroupInputs[group.id]?.description !== undefined ? localGroupInputs[group.id].description : (group.description || "")} + onChange={(e) => { + const newValue = e.target.value; + setLocalGroupInputs(prev => ({ + ...prev, + [group.id]: { ...prev[group.id], description: newValue } + })); + updateFieldGroup(group.id, { description: newValue }); + }} className="h-7 text-xs sm:h-8 sm:text-sm" placeholder="๊ฑฐ๋ž˜์ฒ˜ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค" /> @@ -1079,8 +1132,15 @@ export const SelectedItemsDetailInputConfigPanel: React.FCํ‘œ์‹œ ์ˆœ์„œ updateFieldGroup(group.id, { order: parseInt(e.target.value) || 0 })} + value={localGroupInputs[group.id]?.order !== undefined ? localGroupInputs[group.id].order : (group.order || 0)} + onChange={(e) => { + const newValue = parseInt(e.target.value) || 0; + setLocalGroupInputs(prev => ({ + ...prev, + [group.id]: { ...prev[group.id], order: newValue } + })); + updateFieldGroup(group.id, { order: newValue }); + }} className="h-7 text-xs sm:h-8 sm:text-sm" min="0" />