From 8425dece7f73a9a0d2691b374f463d69d0bcf201 Mon Sep 17 00:00:00 2001
From: dohyeons
Date: Mon, 15 Dec 2025 17:47:16 +0900
Subject: [PATCH] =?UTF-8?q?=EB=B6=84=ED=95=A0=20=ED=8C=A8=EB=84=90=20?=
=?UTF-8?q?=EC=A2=8C=EC=B8=A1=20=EC=84=A0=ED=83=9D=20=EC=8B=9C=20=EC=9A=B0?=
=?UTF-8?q?=EC=B8=A1=20=ED=8F=BC=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EA=B0=80=20?=
=?UTF-8?q?=EA=B0=B1=EC=8B=A0=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20?=
=?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../screen-embedding/EmbeddedScreen.tsx | 82 +++++----
.../button-primary/ButtonPrimaryComponent.tsx | 18 +-
.../text-input/TextInputComponent.tsx | 165 ++++++++++--------
3 files changed, 156 insertions(+), 109 deletions(-)
diff --git a/frontend/components/screen-embedding/EmbeddedScreen.tsx b/frontend/components/screen-embedding/EmbeddedScreen.tsx
index d8e62c00..17cd240f 100644
--- a/frontend/components/screen-embedding/EmbeddedScreen.tsx
+++ b/frontend/components/screen-embedding/EmbeddedScreen.tsx
@@ -40,32 +40,33 @@ export const EmbeddedScreen = forwardRef(null);
const [screenInfo, setScreenInfo] = useState(null);
const [formData, setFormData] = useState>(initialFormData || {}); // ๐ ์ด๊ธฐ ๋ฐ์ดํฐ๋ก ์์
+ const [formDataVersion, setFormDataVersion] = useState(0); // ๐ ํผ ๋ฐ์ดํฐ ๋ฒ์ (๊ฐ์ ๋ฆฌ๋ ๋๋ง์ฉ)
// ์ปดํฌ๋ํธ ์ฐธ์กฐ ๋งต
const componentRefs = useRef
) : (
-
{layout.map((component) => {
const { position: compPosition = { x: 0, y: 0, z: 1 }, size = { width: 200, height: 40 } } = component;
-
+
// ์ปดํฌ๋ํธ๊ฐ ์ปจํ
์ด๋ ๋๋น๋ฅผ ์ด๊ณผํ์ง ์๋๋ก ๋๋น ์กฐ์
// ๋ถ๋ชจ ์ปจํ
์ด๋์ 100%๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐ
const componentStyle: React.CSSProperties = {
@@ -397,13 +421,9 @@ export const EmbeddedScreen = forwardRef
+
= ({
}
}
- // ๐ ๋ถํ ํจ๋ ์ฐ์ธก์ด๋ฉด screenContext.formData์ props.formData๋ฅผ ๋ณํฉ
- // screenContext.formData: RepeaterFieldGroup ๋ฑ ์ปดํฌ๋ํธ๊ฐ ์ง์ ์
๋ฐ์ดํธํ ๋ฐ์ดํฐ
- // props.formData: ๋ถ๋ชจ์์ ์ ๋ฌ๋ ํผ ๋ฐ์ดํฐ
+ // ๐ ๋ถํ ํจ๋ ์ฐ์ธก์ด๋ฉด ์ฌ๋ฌ ์์ค์์ formData๋ฅผ ๋ณํฉ
+ // ์ฐ์ ์์: props.formData > screenContext.formData > splitPanelParentData
const screenContextFormData = screenContext?.formData || {};
const propsFormData = formData || {};
- // ๋ณํฉ: props.formData๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๊ณ , screenContext.formData๋ก ์ค๋ฒ๋ผ์ด๋
- // (RepeaterFieldGroup ๋ฐ์ดํฐ๋ screenContext์๋ง ์์)
- const effectiveFormData = { ...propsFormData, ...screenContextFormData };
+ // ๋ณํฉ: splitPanelParentData๋ฅผ ๊ธฐ๋ณธ์ผ๋ก, props.formData, screenContext.formData ์์ผ๋ก ์ค๋ฒ๋ผ์ด๋
+ // (์ผ๋ฐ ํผ ํ๋๋ props.formData, RepeaterFieldGroup์ screenContext.formData์ ์์)
+ let effectiveFormData = { ...propsFormData, ...screenContextFormData };
+
+ // ๐ ๋ถํ ํจ๋ ์ฐ์ธก์ด๊ณ formData๊ฐ ๋น์ด์์ผ๋ฉด splitPanelParentData ์ฌ์ฉ
+ if (splitPanelPosition === "right" && Object.keys(effectiveFormData).length === 0 && splitPanelParentData) {
+ effectiveFormData = { ...splitPanelParentData };
+ console.log("๐ [ButtonPrimary] ๋ถํ ํจ๋ ์ฐ์ธก - splitPanelParentData ์ฌ์ฉ:", Object.keys(effectiveFormData));
+ }
console.log("๐ [ButtonPrimary] formData ์ ํ:", {
hasScreenContextFormData: Object.keys(screenContextFormData).length > 0,
screenContextKeys: Object.keys(screenContextFormData),
hasPropsFormData: Object.keys(propsFormData).length > 0,
propsFormDataKeys: Object.keys(propsFormData),
+ hasSplitPanelParentData: !!splitPanelParentData && Object.keys(splitPanelParentData).length > 0,
splitPanelPosition,
effectiveFormDataKeys: Object.keys(effectiveFormData),
});
diff --git a/frontend/lib/registry/components/text-input/TextInputComponent.tsx b/frontend/lib/registry/components/text-input/TextInputComponent.tsx
index ad37f19f..8ffa8afe 100644
--- a/frontend/lib/registry/components/text-input/TextInputComponent.tsx
+++ b/frontend/lib/registry/components/text-input/TextInputComponent.tsx
@@ -53,7 +53,7 @@ export const TextInputComponent: React.FC = ({
// ์๋์์ฑ๋ ๊ฐ ์ํ
const [autoGeneratedValue, setAutoGeneratedValue] = useState("");
-
+
// API ํธ์ถ ์ค๋ณต ๋ฐฉ์ง๋ฅผ ์ํ ref
const isGeneratingRef = React.useRef(false);
const hasGeneratedRef = React.useRef(false);
@@ -104,7 +104,6 @@ export const TextInputComponent: React.FC = ({
const currentFormValue = formData?.[component.columnName];
const currentComponentValue = component.value;
-
// ์๋์์ฑ๋ ๊ฐ์ด ์๊ณ , ํ์ฌ ๊ฐ๋ ์์ ๋๋ง ์์ฑ
if (!autoGeneratedValue && !currentFormValue && !currentComponentValue) {
isGeneratingRef.current = true; // ์์ฑ ์์ ํ๋๊ทธ
@@ -145,7 +144,7 @@ export const TextInputComponent: React.FC = ({
if (isInteractive && onFormDataChange && component.columnName) {
console.log("๐ formData ์
๋ฐ์ดํธ:", component.columnName, generatedValue);
onFormDataChange(component.columnName, generatedValue);
-
+
// ์ฑ๋ฒ ๊ท์น ID๋ ํจ๊ป ์ ์ฅ (์ ์ฅ ์์ ์ ์ค์ ํ ๋นํ๊ธฐ ์ํจ)
if (testAutoGeneration.type === "numbering_rule" && testAutoGeneration.options?.numberingRuleId) {
const ruleIdKey = `${component.columnName}_numberingRuleId`;
@@ -181,12 +180,12 @@ export const TextInputComponent: React.FC = ({
// width๋ ํญ์ 100%๋ก ๊ณ ์ (๋ถ๋ชจ ์ปจํ
์ด๋๊ฐ gridColumns๋ก ํฌ๊ธฐ ์ ์ด)
width: "100%",
// ์จ๊น ๊ธฐ๋ฅ: ํธ์ง ๋ชจ๋์์๋ง ์ฐํ๊ฒ ํ์
- ...(isHidden &&
- isDesignMode && {
- opacity: 0.4,
- backgroundColor: "hsl(var(--muted))",
- pointerEvents: "auto",
- }),
+ ...(isHidden &&
+ isDesignMode && {
+ opacity: 0.4,
+ backgroundColor: "hsl(var(--muted))",
+ pointerEvents: "auto",
+ }),
};
// ๋์์ธ ๋ชจ๋ ์คํ์ผ
@@ -361,7 +360,7 @@ export const TextInputComponent: React.FC = ({
{/* ๋ผ๋ฒจ ๋ ๋๋ง */}
{component.label && component.style?.labelDisplay !== false && (
-