This is an automated email from the ASF dual-hosted git repository.

thiagoelg pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git


The following commit(s) were added to refs/heads/main by this push:
     new 20af0bbc49e NO-ISSUE: Fix missing reference to editor envelope and 
defaultProps + spread props with key errors (#3617)
20af0bbc49e is described below

commit 20af0bbc49e41fc559b26939a6defe241a2148d9
Author: Thiago Lugli <[email protected]>
AuthorDate: Sun Jun 7 22:33:07 2026 -0300

    NO-ISSUE: Fix missing reference to editor envelope and defaultProps + 
spread props with key errors (#3617)
---
 .../src/embedded/embedded/EmbeddedEditor.tsx       | 19 ++++++-
 .../editor/src/envelope/KogitoEditorEnvelope.tsx   | 58 ++++++++++++----------
 packages/uniforms-patternfly/src/BaseForm.tsx      |  3 +-
 packages/uniforms-patternfly/src/BoolField.tsx     | 14 ++++--
 packages/uniforms-patternfly/src/ErrorField.tsx    | 24 +++++----
 packages/uniforms-patternfly/src/ErrorsField.tsx   | 24 ++++-----
 packages/uniforms-patternfly/src/SubmitField.tsx   |  4 +-
 packages/uniforms-patternfly/src/wrapField.tsx     |  4 +-
 8 files changed, 90 insertions(+), 60 deletions(-)

diff --git a/packages/editor/src/embedded/embedded/EmbeddedEditor.tsx 
b/packages/editor/src/embedded/embedded/EmbeddedEditor.tsx
index 0d19034d22c..dc079a88a0f 100644
--- a/packages/editor/src/embedded/embedded/EmbeddedEditor.tsx
+++ b/packages/editor/src/embedded/embedded/EmbeddedEditor.tsx
@@ -196,6 +196,19 @@ const RefForwardingEmbeddedEditor: 
React.ForwardRefRenderFunction<EmbeddedEditor
     };
   }, [props.isReady, isReady, stateControl, envelopeServer, onKeyDown]);
 
+  const editorIframeProps = useMemo(() => {
+    if (!envelopeMapping) {
+      return undefined;
+    }
+    const props = getEditorIframeProps(envelopeMapping);
+    return {
+      key: undefined,
+      src: undefined,
+      srcDoc: undefined,
+      ...props,
+    };
+  }, [envelopeMapping]);
+
   return (
     <>
       {!envelopeMapping && (
@@ -203,7 +216,7 @@ const RefForwardingEmbeddedEditor: 
React.ForwardRefRenderFunction<EmbeddedEditor
           <span>{i18n.editorNotAvailable(props.file.fileExtension)}</span>
         </>
       )}
-      {envelopeMapping && (
+      {envelopeMapping && editorIframeProps && (
         <iframe
           ref={iframeRef}
           id={"kogito-iframe"}
@@ -211,7 +224,9 @@ const RefForwardingEmbeddedEditor: 
React.ForwardRefRenderFunction<EmbeddedEditor
           title={i18n.kogitoEditor}
           style={containerStyles}
           data-envelope-channel={props.channelType}
-          {...getEditorIframeProps(envelopeMapping)}
+          key={editorIframeProps.key}
+          src={editorIframeProps.src}
+          srcDoc={editorIframeProps.srcDoc}
         />
       )}
     </>
diff --git a/packages/editor/src/envelope/KogitoEditorEnvelope.tsx 
b/packages/editor/src/envelope/KogitoEditorEnvelope.tsx
index 31c38b389d1..527f4c096b0 100644
--- a/packages/editor/src/envelope/KogitoEditorEnvelope.tsx
+++ b/packages/editor/src/envelope/KogitoEditorEnvelope.tsx
@@ -26,6 +26,7 @@ import {
 } from "../api";
 import { EditorEnvelopeView, EditorEnvelopeViewApi } from 
"./EditorEnvelopeView";
 import { createRoot } from "react-dom/client";
+import { flushSync } from "react-dom";
 import * as React from "react";
 import { Envelope, EnvelopeApiFactory } from "@kie-tools-core/envelope";
 import { I18nService } from "@kie-tools-core/i18n/dist/envelope";
@@ -72,35 +73,38 @@ export class KogitoEditorEnvelope<
   }
 
   private renderView(container: HTMLElement) {
-    return new Promise<() => EditorEnvelopeViewApi<E>>((res) => {
-      const editorEnvelopeViewRef = (ref: EditorEnvelopeViewApi<E> | null) => {
-        if (ref) {
-          res(() => ref);
-        }
-      };
+    const editorEnvelopeViewRef = React.createRef<EditorEnvelopeViewApi<E>>();
 
-      const app = (
-        <KogitoEditorEnvelopeContext.Provider value={this.context}>
-          <I18nDictionariesProvider
-            defaults={editorEnvelopeI18nDefaults}
-            dictionaries={editorEnvelopeI18nDictionaries}
-            ctx={EditorEnvelopeI18nContext}
-            initialLocale={navigator.language}
-          >
-            <EditorEnvelopeI18nContext.Consumer>
-              {({ setLocale }) => (
-                <EditorEnvelopeView
-                  ref={editorEnvelopeViewRef}
-                  setLocale={setLocale}
-                  
showKeyBindingsOverlay={this.keyboardShortcutsService.isEnabled()}
-                />
-              )}
-            </EditorEnvelopeI18nContext.Consumer>
-          </I18nDictionariesProvider>
-        </KogitoEditorEnvelopeContext.Provider>
-      );
+    const app = (
+      <KogitoEditorEnvelopeContext.Provider value={this.context}>
+        <I18nDictionariesProvider
+          defaults={editorEnvelopeI18nDefaults}
+          dictionaries={editorEnvelopeI18nDictionaries}
+          ctx={EditorEnvelopeI18nContext}
+          initialLocale={navigator.language}
+        >
+          <EditorEnvelopeI18nContext.Consumer>
+            {({ setLocale }) => (
+              <EditorEnvelopeView
+                ref={editorEnvelopeViewRef}
+                setLocale={setLocale}
+                
showKeyBindingsOverlay={this.keyboardShortcutsService.isEnabled()}
+              />
+            )}
+          </EditorEnvelopeI18nContext.Consumer>
+        </I18nDictionariesProvider>
+      </KogitoEditorEnvelopeContext.Provider>
+    );
 
-      createRoot(container).render(app);
+    return new Promise<() => EditorEnvelopeViewApi<E>>((res) => {
+      setTimeout(() => {
+        const root = createRoot(container);
+        // Force `render` to be synchronous to avoid race conditions with the 
`envelopeServer` initialization.
+        flushSync(() => {
+          root.render(app);
+        });
+        res(() => editorEnvelopeViewRef.current!);
+      }, 0);
     });
   }
 }
diff --git a/packages/uniforms-patternfly/src/BaseForm.tsx 
b/packages/uniforms-patternfly/src/BaseForm.tsx
index 0cf6271a1b5..f34d37b945f 100644
--- a/packages/uniforms-patternfly/src/BaseForm.tsx
+++ b/packages/uniforms-patternfly/src/BaseForm.tsx
@@ -28,9 +28,10 @@ function Patternfly(parent: any): any {
     static displayName = `Patternfly${parent.displayName}`;
 
     render() {
+      const { key, ...propsWithoutKey } = this.getNativeFormProps();
       return (
         <context.Provider value={this.getContext()}>
-          <Form data-testid="base-form" {...this.getNativeFormProps()} />
+          <Form data-testid="base-form" key={key} {...propsWithoutKey} />
         </context.Provider>
       );
     }
diff --git a/packages/uniforms-patternfly/src/BoolField.tsx 
b/packages/uniforms-patternfly/src/BoolField.tsx
index 4315e0d8a52..d2b2251afb0 100644
--- a/packages/uniforms-patternfly/src/BoolField.tsx
+++ b/packages/uniforms-patternfly/src/BoolField.tsx
@@ -37,7 +37,17 @@ export type BoolFieldProps = FieldProps<
   }
 >;
 
-function BoolField({ appearance, disabled, id, inputRef, label, name, 
onChange, value, ...props }: BoolFieldProps) {
+function BoolField({
+  appearance = ComponentType.checkbox,
+  disabled,
+  id,
+  inputRef,
+  label,
+  name,
+  onChange,
+  value,
+  ...props
+}: BoolFieldProps) {
   const Component = appearance === ComponentType.switch ? Switch : Checkbox;
   return wrapField(
     { id, ...props },
@@ -54,6 +64,4 @@ function BoolField({ appearance, disabled, id, inputRef, 
label, name, onChange,
   );
 }
 
-BoolField.defaultProps = { appearance: ComponentType.checkbox };
-
 export default connectField(BoolField);
diff --git a/packages/uniforms-patternfly/src/ErrorField.tsx 
b/packages/uniforms-patternfly/src/ErrorField.tsx
index 26ffaacc12d..51fc55fc9fc 100644
--- a/packages/uniforms-patternfly/src/ErrorField.tsx
+++ b/packages/uniforms-patternfly/src/ErrorField.tsx
@@ -29,22 +29,24 @@ export type ErrorFieldProps = Override<
   }
 >;
 
-function ErrorField({ children, error, errorMessage, ...props }: 
ErrorFieldProps) {
-  return !error ? null : (
-    <div data-testid={"error-field"} {...filterDOMProps(props)}>
-      {children ? children : <div style={{ margin: "3px" 
}}>{errorMessage}</div>}
-    </div>
-  );
-}
-
-ErrorField.defaultProps = {
-  style: {
+function ErrorField({
+  children,
+  error,
+  errorMessage,
+  style = {
     backgroundColor: "rgba(255, 85, 0, 0.2)",
     border: "1px solid rgb(255, 85, 0)",
     borderRadius: "7px",
     margin: "20px 0px",
     padding: "10px",
   },
-};
+  ...props
+}: ErrorFieldProps) {
+  return !error ? null : (
+    <div data-testid={"error-field"} {...filterDOMProps(props)} style={style}>
+      {children ? children : <div style={{ margin: "3px" 
}}>{errorMessage}</div>}
+    </div>
+  );
+}
 
 export default connectField<ErrorFieldProps>(ErrorField, { initialValue: false 
});
diff --git a/packages/uniforms-patternfly/src/ErrorsField.tsx 
b/packages/uniforms-patternfly/src/ErrorsField.tsx
index d28151897c9..b5f6e5b8cc8 100644
--- a/packages/uniforms-patternfly/src/ErrorsField.tsx
+++ b/packages/uniforms-patternfly/src/ErrorsField.tsx
@@ -23,11 +23,21 @@ import { useForm, filterDOMProps } from "uniforms";
 
 export type ErrorsFieldProps = HTMLProps<HTMLDivElement>;
 
-function ErrorsField({ children, ...props }: ErrorsFieldProps) {
+function ErrorsField({
+  children,
+  style = {
+    backgroundColor: "rgba(255, 85, 0, 0.2)",
+    border: "1px solid rgb(255, 85, 0)",
+    borderRadius: "7px",
+    margin: "20px 0px",
+    padding: "10px",
+  },
+  ...props
+}: ErrorsFieldProps) {
   const { error, schema } = useForm();
 
   return !error && !children ? null : (
-    <div data-testid={"errors-field"} {...filterDOMProps(props)}>
+    <div data-testid={"errors-field"} {...filterDOMProps(props)} style={style}>
       {children}
       <ul>
         {schema.getErrorMessages(error).map((message, index) => (
@@ -40,14 +50,4 @@ function ErrorsField({ children, ...props }: 
ErrorsFieldProps) {
   );
 }
 
-ErrorsField.defaultProps = {
-  style: {
-    backgroundColor: "rgba(255, 85, 0, 0.2)",
-    border: "1px solid rgb(255, 85, 0)",
-    borderRadius: "7px",
-    margin: "20px 0px",
-    padding: "10px",
-  },
-};
-
 export default ErrorsField;
diff --git a/packages/uniforms-patternfly/src/SubmitField.tsx 
b/packages/uniforms-patternfly/src/SubmitField.tsx
index 717ff504348..071ef9d120c 100644
--- a/packages/uniforms-patternfly/src/SubmitField.tsx
+++ b/packages/uniforms-patternfly/src/SubmitField.tsx
@@ -23,7 +23,7 @@ import { Override, useForm } from "uniforms";
 
 export type SubmitFieldProps = Override<ButtonProps, { inputRef?: 
React.RefObject<HTMLButtonElement> }>;
 
-function SubmitField({ disabled, inputRef, value, ...props }: 
SubmitFieldProps) {
+function SubmitField({ disabled, inputRef, value = "Submit", ...props }: 
SubmitFieldProps) {
   const { error, state } = useForm();
 
   return (
@@ -39,6 +39,4 @@ function SubmitField({ disabled, inputRef, value, ...props }: 
SubmitFieldProps)
   );
 }
 
-SubmitField.defaultProps = { value: "Submit" };
-
 export default SubmitField;
diff --git a/packages/uniforms-patternfly/src/wrapField.tsx 
b/packages/uniforms-patternfly/src/wrapField.tsx
index d639093cec6..7b1deffe8e4 100644
--- a/packages/uniforms-patternfly/src/wrapField.tsx
+++ b/packages/uniforms-patternfly/src/wrapField.tsx
@@ -82,6 +82,7 @@ export default function wrapField(
   }: WrapperProps,
   children: React.ReactNode
 ) {
+  const { key, ...propsWithoutKey } = filterDOMProps(props);
   return (
     <FormGroup
       data-testid={"wrapper-field"}
@@ -105,7 +106,8 @@ export default function wrapField(
       }
       isRequired={required}
       type={type}
-      {...filterDOMProps(props)}
+      key={key}
+      {...propsWithoutKey}
     >
       {children}
       {error ? (


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to