diff --git a/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx b/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx
index 84a7b7156..02ca347ff 100644
--- a/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx
+++ b/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx
@@ -208,17 +208,13 @@ const FormBaseComp = (function () {
);
})
.setPropertyViewFn((children) => {
- const editorContext = useContext(EditorContext);
- const isLogicMode = editorContext.editorModeStatus === "logic" || editorContext.editorModeStatus === "both";
- const isLayoutMode = editorContext.editorModeStatus === "layout" || editorContext.editorModeStatus === "both";
-
return (
<>
{children.resetAfterSubmit.propertyView({ label: trans("formComp.resetAfterSubmit") })}
- {isLogicMode && (
+ {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && (
<>
{children.onEvent.getPropertyView()}
{disabledPropertyView(children)}
@@ -229,7 +225,7 @@ const FormBaseComp = (function () {
>
)}
- {isLayoutMode && (
+ {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && (
<>
{children.container.getPropertyView()}
@@ -237,14 +233,14 @@ const FormBaseComp = (function () {
>
)}
- {isLogicMode && (
+ {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && (
{children.initialData.propertyView({ label: trans("formComp.initialData") })}
{children.invalidFormMessage.propertyView({ label: trans("formComp.invalidFormMessage") })}
)}
- {isLayoutMode && (
+ {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && (
<>
{children.container.stylePropertyView()}
@@ -289,7 +285,8 @@ let FormTmpComp = class extends FormBaseComp implements IForm {
}
traverseFormItems(consumer: (item: GridItemComp) => boolean) {
return traverseCompTree(this.getCompTree(), (item) => {
- return item.children.comp.children.formDataKey ? consumer(item as GridItemComp) : true;
+ const hasFormDataKey = item.children.comp.children.hasOwnProperty("formDataKey");
+ return hasFormDataKey ? consumer(item as GridItemComp) : true;
});
}
validateFormItems() {
@@ -333,12 +330,19 @@ let FormTmpComp = class extends FormBaseComp implements IForm {
// For the properties, first find in data, then initialData, subcomponent default value (resetValue), empty value (clearValue)
const newData = { ...(initialData ?? this.children.initialData.getView()), ...data };
+ // Only proceed if we have data to set
+ if (!Object.keys(newData).length) {
+ return Promise.resolve();
+ }
+
return this.runMethodOfItems(
{
name: "setValue",
getParams: (t) => {
// use component name when formDataKey is empty
- const key = t.children.comp.children.formDataKey?.getView() || t.children.name.getView();
+ const formDataKey = t.children.comp.children.formDataKey?.getView();
+ const componentName = t.children.name.getView();
+ const key = formDataKey || componentName;
const value = newData[key];
return value !== undefined ? [value as EvalParamType] : undefined;
},
@@ -347,7 +351,9 @@ let FormTmpComp = class extends FormBaseComp implements IForm {
name: "setRange",
getParams: (t) => {
// use component name when formDataKey is empty
- const key = t.children.comp.children.formDataKey?.getView() || t.children.name.getView();
+ const formDataKey = t.children.comp.children.formDataKey?.getView();
+ const componentName = t.children.name.getView();
+ const key = formDataKey || componentName;
const value = newData[key] ? newData[key] : undefined;
return value !== undefined ? [value as EvalParamType] : undefined;
},
@@ -387,7 +393,8 @@ let FormTmpComp = class extends FormBaseComp implements IForm {
case CompActionTypes.UPDATE_NODES_V2: {
const ret = super.reduce(action);
// When the initial value changes, update the form
- requestAnimationFrame(() => {
+ if (action.value["initialData"] !== undefined) {
+ queueMicrotask(() => {
this.dispatch(
customAction(
{
@@ -398,6 +405,7 @@ let FormTmpComp = class extends FormBaseComp implements IForm {
)
);
});
+ }
return ret;
}
case CompActionTypes.CUSTOM:
@@ -548,4 +556,4 @@ export function defaultFormData(compName: string, nameGenerator: NameGenerator):
showFooter: true,
},
};
-}
+}
\ No newline at end of file
diff --git a/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx b/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx
index 97af00711..2d1761f1d 100644
--- a/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx
+++ b/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx
@@ -183,6 +183,12 @@ export const useTextInputProps = (props: RecordConstructorToView {
+ if (!changeRef.current) {
+ setLocalInputValue(inputValue);
+ }
+ }, [inputValue]);
+
useEffect(() => {
if (!changeRef.current) return;
@@ -214,6 +220,7 @@ export const useTextInputProps = (props: RecordConstructorToView