From 9b22d102e185e28c5384fd3de224e422c9dfa8bd Mon Sep 17 00:00:00 2001 From: Biz Melesse Date: Thu, 30 Jan 2025 16:22:04 -0600 Subject: [PATCH 01/26] Fix linter error --- packages/connect-react/src/components/Description.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/connect-react/src/components/Description.tsx b/packages/connect-react/src/components/Description.tsx index b8b2f8d376c5e..66cd507167799 100644 --- a/packages/connect-react/src/components/Description.tsx +++ b/packages/connect-react/src/components/Description.tsx @@ -1,6 +1,8 @@ import type { CSSProperties } from "react"; import Markdown from "react-markdown"; -import { ConfigurableProp, ConfigurableProps } from "@pipedream/sdk"; +import { + ConfigurableProp, ConfigurableProps, +} from "@pipedream/sdk"; import { useCustomize } from "../hooks/customization-context"; import { FormFieldContext } from "../hooks/form-field-context"; import { FormContext } from "../hooks/form-context"; From 26fc774d851e59fb762db2cea11fc9e4f1b15ea3 Mon Sep 17 00:00:00 2001 From: Biz Melesse Date: Fri, 31 Jan 2025 18:10:52 -0600 Subject: [PATCH 02/26] Surface configuration and sdk errors --- .../examples/nextjs/package-lock.json | 2 +- .../examples/nextjs/src/app/page.tsx | 16 +++-- .../src/components/ComponentForm.tsx | 1 + .../connect-react/src/components/Errors.tsx | 59 +++++++++++++------ .../connect-react/src/components/Field.tsx | 5 +- .../src/components/InternalField.tsx | 3 +- .../connect-react/src/hooks/form-context.tsx | 35 ++++++++++- .../src/hooks/form-field-context.tsx | 1 + pnpm-lock.yaml | 8 +-- 9 files changed, 99 insertions(+), 31 deletions(-) diff --git a/packages/connect-react/examples/nextjs/package-lock.json b/packages/connect-react/examples/nextjs/package-lock.json index a68badecb0ec5..4286bd9281628 100644 --- a/packages/connect-react/examples/nextjs/package-lock.json +++ b/packages/connect-react/examples/nextjs/package-lock.json @@ -23,7 +23,7 @@ }, "../..": { "name": "@pipedream/connect-react", - "version": "1.0.0-preview.25", + "version": "1.0.0-preview.26", "license": "MIT", "dependencies": { "@pipedream/sdk": "workspace:^", diff --git a/packages/connect-react/examples/nextjs/src/app/page.tsx b/packages/connect-react/examples/nextjs/src/app/page.tsx index d3b1e1702bff8..dbe7bd518758b 100644 --- a/packages/connect-react/examples/nextjs/src/app/page.tsx +++ b/packages/connect-react/examples/nextjs/src/app/page.tsx @@ -8,7 +8,7 @@ import { import { fetchToken } from "./actions"; export default function Home() { - const userId = "my-authed-user-id"; + const userId = "demo-32aaf9cd-5df0-4ffe-86b5-db43a61a842c"; //gmail-new-email-received const client = createFrontendClient({ environment: "development", externalUserId: userId, @@ -26,6 +26,11 @@ export default function Home() { setDynamicPropsId, ] = useState(); + const [ + errors, + setErrors, + ] = useState(undefined); + const handleDynamicProps = (dynamicProps: { id: string | undefined }) => { setDynamicPropsId(dynamicProps.id) } @@ -36,19 +41,22 @@ export default function Home() { { try { - await client.actionRun({ + const result = await client.actionRun({ userId, - actionId: "slack-send-message", + actionId: "gmail-new-email-received", configuredProps, dynamicPropsId, }); + setErrors(result?.os) } catch (error) { + setErrors(error as unknown) console.error("Action run failed:", error); } }} diff --git a/packages/connect-react/src/components/ComponentForm.tsx b/packages/connect-react/src/components/ComponentForm.tsx index e796c34c414f4..220ac81c9ba86 100644 --- a/packages/connect-react/src/components/ComponentForm.tsx +++ b/packages/connect-react/src/components/ComponentForm.tsx @@ -20,6 +20,7 @@ export type ComponentFormProps void; // XXX onChange? onUpdateDynamicProps?: (dp: DynamicProps) => void; hideOptionalProps?: boolean; + sdkErrors?: unknown[] | unknown | undefined; }; export function ComponentForm(props: ComponentFormProps) { diff --git a/packages/connect-react/src/components/Errors.tsx b/packages/connect-react/src/components/Errors.tsx index 1596a9480d304..ce42d20032cad 100644 --- a/packages/connect-react/src/components/Errors.tsx +++ b/packages/connect-react/src/components/Errors.tsx @@ -1,38 +1,63 @@ import { FormContext } from "../hooks/form-context"; import type { FormFieldContext } from "../hooks/form-field-context"; import { - ConfigurableProp, ConfigurableProps, + ConfigurableProp, ConfigurablePropAlert, ConfigurableProps, } from "@pipedream/sdk"; -import { useCustomize } from "../hooks/customization-context"; -import type { CSSProperties } from "react"; +import { Alert } from "./Alert"; export type ErrorsProps = { - errors: string[]; field: FormFieldContext; form: FormContext; }; export function Errors(props: ErrorsProps) { - const { errors } = props; - + const { field } = props; const { - getProps, theme, - } = useCustomize(); - - const baseStyles: CSSProperties = { - color: theme.colors.danger, - gridArea: "errors", - }; + errors, prop, + } = field - if (!errors.length) { + if (!Object.keys(errors || {}).length) { return null; } + if (!errors[prop.name]) { + return null + } + // TODO depending on type does different shit... we might need async loader around the label, etc.? // maybe that should just be handled by FormFieldContext instead of container? + + const formattedErrors: ConfigurablePropAlert[] = [] + // for (const key in fieldErrors) { + const key = "xxx" + if (key === "sdkErrors") { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + formattedErrors.push(...errors[key].map((e) => { + const o = JSON.parse(e) + return { + type: "alert", + alertType: "error", + content: `#${o.name}\n${o.message}`, + } + })) + } else { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + formattedErrors.push(...errors[prop.name].map((e) => { + return { + type: "alert", + alertType: "error", + content: e, + } + })) + } + // } + return ( -
    - {errors.map((msg) =>
  • {msg}
  • )} -
+ //
    + // {errors.map((msg) =>
  • {msg}
  • )} + //
+ <>{formattedErrors.map((fe, idx: number) => )} ); } diff --git a/packages/connect-react/src/components/Field.tsx b/packages/connect-react/src/components/Field.tsx index 31a553bb9946e..284055797c86f 100644 --- a/packages/connect-react/src/components/Field.tsx +++ b/packages/connect-react/src/components/Field.tsx @@ -40,8 +40,6 @@ export function Field(props: FieldProps) { Label, Description, Errors, } = getComponents(); - const errors: string[] = []; // TODO get from field context, can be added or removed by Control, etc. - const app = "app" in field.extra ? field.extra.app : undefined; @@ -59,12 +57,13 @@ export function Field(props: FieldProps) { // maybe that should just be handled by FormFieldContext instead of container? // XXX rename to FieldErrors + add FormErrors (to ComponentFormInternal) // XXX use similar pattern as app below for boolean and checkboxing DOM re-ordering? + return (
); } diff --git a/packages/connect-react/src/components/InternalField.tsx b/packages/connect-react/src/components/InternalField.tsx index 047d714914891..e003833819266 100644 --- a/packages/connect-react/src/components/InternalField.tsx +++ b/packages/connect-react/src/components/InternalField.tsx @@ -15,7 +15,7 @@ export function InternalField({ }: FieldInternalProps) { const formCtx = useFormContext(); const { - id: formId, configuredProps, registerField, setConfiguredProp, + id: formId, configuredProps, registerField, setConfiguredProp, errors, } = formCtx; const appSlug = prop.type === "app" && "app" in prop @@ -44,6 +44,7 @@ export function InternalField({ extra: { app, // XXX fix ts }, + errors, }; useEffect(() => registerField(fieldCtx), [ fieldCtx, diff --git a/packages/connect-react/src/hooks/form-context.tsx b/packages/connect-react/src/hooks/form-context.tsx index 2f26376e4b3dc..0ef460f74c4a1 100644 --- a/packages/connect-react/src/hooks/form-context.tsx +++ b/packages/connect-react/src/hooks/form-context.tsx @@ -73,7 +73,7 @@ export const FormContextProvider = ({ const id = useId(); const { - component, configuredProps: __configuredProps, propNames, userId, + component, configuredProps: __configuredProps, propNames, userId, sdkErrors, } = formProps; const componentId = component.key; @@ -94,6 +94,11 @@ export const FormContextProvider = ({ setErrors, ] = useState>({}); + const [ + configurationErrors, + setConfigurationErrors, + ] = useState([]); + const [ enabledOptionalProps, setEnabledOptionalProps, @@ -264,6 +269,12 @@ export const FormContextProvider = ({ _configuredProps, ]); + useEffect(() => { + handleSdkErrors(sdkErrors) + }, [ + sdkErrors, + ]); + useEffect(() => { const newConfiguredProps: ConfiguredProps = {}; for (const prop of configurableProps) { @@ -395,6 +406,28 @@ export const FormContextProvider = ({ checkPropsNeedConfiguring() }; + const handleSdkErrors = (o: unknown[] | unknown | undefined) => { + if (!o) return + const os = o + if (Array.isArray(os) && os.length > 0) { + const newErrors = os.map((it) => { + const name = it.err?.name + const message = it.err?.message + if (name && message) return JSON.stringify({ + name, + message, + }) + return undefined + }).filter((e) => e !== undefined) + if (newErrors) setErrors({ + ...errors, + sdkErrors: newErrors, + }) + } else if (typeof o === "object") { + // TODO: handle rails api errors here + } + } + // console.log("***", configurableProps, configuredProps) const value: FormContext = { id, diff --git a/packages/connect-react/src/hooks/form-field-context.tsx b/packages/connect-react/src/hooks/form-field-context.tsx index bb05d46d3ddcb..cffd1a6cecb71 100644 --- a/packages/connect-react/src/hooks/form-field-context.tsx +++ b/packages/connect-react/src/hooks/form-field-context.tsx @@ -16,6 +16,7 @@ export type FormFieldContext = { value: PropValue | undefined; onChange: (value: PropValue | undefined) => void; extra: FormFieldContextExtra; + errors: Record; }; export const FormFieldContext = createContext | undefined>(undefined); // eslint-disable-line @typescript-eslint/no-explicit-any diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f5858a965ed2..15b4cebcd9e9e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -292,8 +292,7 @@ importers: specifier: ^3.0.1 version: 3.0.3 - components/adobe_document_generation_api: - specifiers: {} + components/adobe_document_generation_api: {} components/adobe_pdf_services: dependencies: @@ -10501,8 +10500,7 @@ importers: components/syncro: {} - components/synthflow: - specifiers: {} + components/synthflow: {} components/t2m_url_shortener: {} @@ -31754,6 +31752,8 @@ snapshots: '@putout/operator-filesystem': 5.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3)) '@putout/operator-json': 2.2.0 putout: 36.13.1(eslint@8.57.1)(typescript@5.6.3) + transitivePeerDependencies: + - supports-color '@putout/operator-regexp@1.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3))': dependencies: From b5374a3c6b3e9429314ae7751a086a8e03bbfff9 Mon Sep 17 00:00:00 2001 From: Biz Melesse Date: Fri, 31 Jan 2025 18:24:11 -0600 Subject: [PATCH 03/26] Update pnpm lock --- packages/connect-react/src/components/Alert.tsx | 3 ++- pnpm-lock.yaml | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/connect-react/src/components/Alert.tsx b/packages/connect-react/src/components/Alert.tsx index 3d7bc2db3c6fc..968a177250dc7 100644 --- a/packages/connect-react/src/components/Alert.tsx +++ b/packages/connect-react/src/components/Alert.tsx @@ -7,8 +7,9 @@ type AlertProps = { export function Alert({ prop }: AlertProps) { const baseStyles = { + width: "100%", background: "#e2e3e5", - borderRadius: "10px", + borderRadius: "5px", paddingTop: "2px", paddingLeft: "10px", paddingRight: "10px", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 43f090da3544a..6c9868944a0be 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10285,8 +10285,7 @@ importers: specifier: ^3.0.1 version: 3.0.3 - components/storerocket: - specifiers: {} + components/storerocket: {} components/stormboard: {} From 915b0c771cf0a7d5eb263407b64de5f7f6613f3f Mon Sep 17 00:00:00 2001 From: Biz Melesse Date: Mon, 3 Feb 2025 14:24:03 -0600 Subject: [PATCH 04/26] Render SDK errors in an alert --- .../connect-react/src/components/Errors.tsx | 41 ++++++------------- .../src/components/InternalComponentForm.tsx | 31 +++++++++++++- .../connect-react/src/hooks/form-context.tsx | 27 ++++++------ 3 files changed, 55 insertions(+), 44 deletions(-) diff --git a/packages/connect-react/src/components/Errors.tsx b/packages/connect-react/src/components/Errors.tsx index ce42d20032cad..071c02e62264d 100644 --- a/packages/connect-react/src/components/Errors.tsx +++ b/packages/connect-react/src/components/Errors.tsx @@ -27,37 +27,20 @@ export function Errors( // TODO depending on type does different shit... we might need async loader around the label, etc.? // maybe that should just be handled by FormFieldContext instead of container? - const formattedErrors: ConfigurablePropAlert[] = [] - // for (const key in fieldErrors) { - const key = "xxx" - if (key === "sdkErrors") { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - formattedErrors.push(...errors[key].map((e) => { - const o = JSON.parse(e) - return { - type: "alert", - alertType: "error", - content: `#${o.name}\n${o.message}`, - } - })) - } else { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - formattedErrors.push(...errors[prop.name].map((e) => { - return { - type: "alert", - alertType: "error", - content: e, - } - })) + const formattedErrors: ConfigurablePropAlert[] = errors[prop.name].map((e) => { + return { + type: "alert", + alertType: "error", + content: e, + } + }) + + const baseStyles = { + display: "grid", + gridTemplateColumns: "max-content", } - // } return ( - //
    - // {errors.map((msg) =>
  • {msg}
  • )} - //
- <>{formattedErrors.map((fe, idx: number) => )} +
{formattedErrors.map((fe, idx: number) => )}
); } diff --git a/packages/connect-react/src/components/InternalComponentForm.tsx b/packages/connect-react/src/components/InternalComponentForm.tsx index e890b79adc869..de77fb4fc8ccf 100644 --- a/packages/connect-react/src/components/InternalComponentForm.tsx +++ b/packages/connect-react/src/components/InternalComponentForm.tsx @@ -1,4 +1,6 @@ -import { Suspense } from "react"; +import { + Suspense, useEffect, useState, +} from "react"; import type { CSSProperties, FormEventHandler, } from "react"; @@ -23,12 +25,37 @@ export function InternalComponentForm() { optionalPropSetEnabled, props: formContextProps, setSubmitting, + sdkErrors: __sdkErrors, + submitting, } = formContext; const { hideOptionalProps, onSubmit, } = formContextProps; + const [ + sdkErrors, + setSdkErrors, + ] = useState([]) + + useEffect(() => { + if (submitting) setSdkErrors([]) + else { + if (__sdkErrors && __sdkErrors.length) { + setSdkErrors(__sdkErrors.map((e) => { + return { + type: "alert", + alertType: "error", + content: `# ${e.name}\n${e.message}`, + } + })) + } + } + }, [ + __sdkErrors, + submitting, + ]); + const { getComponents, getProps, theme, } = useCustomize(); @@ -96,6 +123,7 @@ export function InternalComponentForm() { } // TODO improve the error boundary thing (use default Alert component maybe) + return (

: null} + { sdkErrors?.map((e, idx) => )} {onSubmit && } diff --git a/packages/connect-react/src/hooks/form-context.tsx b/packages/connect-react/src/hooks/form-context.tsx index 0ef460f74c4a1..c3d0fde48ce8f 100644 --- a/packages/connect-react/src/hooks/form-context.tsx +++ b/packages/connect-react/src/hooks/form-context.tsx @@ -24,6 +24,7 @@ export type FormContext = { dynamicProps?: DynamicProps; // lots of calls require dynamicProps?.id, so need to expose dynamicPropsQueryIsFetching?: boolean; errors: Record; + sdkErrors: Record[]; fields: Record>; id: string; isValid: boolean; @@ -73,7 +74,7 @@ export const FormContextProvider = ({ const id = useId(); const { - component, configuredProps: __configuredProps, propNames, userId, sdkErrors, + component, configuredProps: __configuredProps, propNames, userId, sdkErrors: __sdkErrors, } = formProps; const componentId = component.key; @@ -95,9 +96,9 @@ export const FormContextProvider = ({ ] = useState>({}); const [ - configurationErrors, - setConfigurationErrors, - ] = useState([]); + sdkErrors, + setSdkErrors, + ] = useState[]>([]) const [ enabledOptionalProps, @@ -270,9 +271,9 @@ export const FormContextProvider = ({ ]); useEffect(() => { - handleSdkErrors(sdkErrors) + handleSdkErrors(__sdkErrors) }, [ - sdkErrors, + __sdkErrors, ]); useEffect(() => { @@ -411,18 +412,15 @@ export const FormContextProvider = ({ const os = o if (Array.isArray(os) && os.length > 0) { const newErrors = os.map((it) => { - const name = it.err?.name - const message = it.err?.message - if (name && message) return JSON.stringify({ + const name: string = it.err?.name + const message: string = it.err?.message + if (name && message) return { name, message, - }) + } as Record return undefined }).filter((e) => e !== undefined) - if (newErrors) setErrors({ - ...errors, - sdkErrors: newErrors, - }) + setSdkErrors(newErrors) } else if (typeof o === "object") { // TODO: handle rails api errors here } @@ -449,6 +447,7 @@ export const FormContextProvider = ({ setConfiguredProp, setSubmitting, submitting, + sdkErrors, }; return {children}; }; From 506f70e0855c514b3065cab7df6b3effc1663bea Mon Sep 17 00:00:00 2001 From: Biz Melesse Date: Mon, 3 Feb 2025 14:54:10 -0600 Subject: [PATCH 05/26] Add getEnvironment to BaseClient --- packages/sdk/CHANGELOG.md | 6 ++++++ packages/sdk/package.json | 2 +- packages/sdk/src/shared/index.ts | 8 ++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index 453f666b98c9e..3bc01d2347fab 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -2,6 +2,12 @@ # Changelog +## [1.3.2] - 2025-02-3 + +### Changed + +- Add getEnvironment function to BaseClient + ## [1.3.1] - 2025-01-30 ### Changed diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 8a0657e7989f6..309b91cf8607f 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,7 +1,7 @@ { "name": "@pipedream/sdk", "type": "module", - "version": "1.3.1", + "version": "1.3.2", "description": "Pipedream SDK", "main": "./dist/server.js", "module": "./dist/server.js", diff --git a/packages/sdk/src/shared/index.ts b/packages/sdk/src/shared/index.ts index 2ee4ebdf31b87..7fcf185e742d0 100644 --- a/packages/sdk/src/shared/index.ts +++ b/packages/sdk/src/shared/index.ts @@ -871,6 +871,14 @@ export abstract class BaseClient { this.workflowDomain = workflowDomain; } + /** + * Retrieves the current environment the client is configured to use. + * @returns {string} The current environment. + */ + public getEnvironment(): string { + return this.environment; + } + /** * Makes an HTTP request * From 7e7076e0e63326e93032bf95d7187e88c23c22b1 Mon Sep 17 00:00:00 2001 From: Biz Melesse Date: Mon, 3 Feb 2025 15:57:21 -0600 Subject: [PATCH 06/26] Add isDevelopment flag to context --- packages/connect-react/examples/nextjs/package.json | 2 +- .../connect-react/examples/nextjs/src/app/page.tsx | 13 +++++++------ .../connect-react/src/components/ComponentForm.tsx | 1 + packages/connect-react/src/components/Field.tsx | 6 ++++-- .../src/components/InternalComponentForm.tsx | 3 ++- .../connect-react/src/components/InternalField.tsx | 3 ++- packages/connect-react/src/hooks/form-context.tsx | 9 ++++++++- .../connect-react/src/hooks/form-field-context.tsx | 1 + 8 files changed, 26 insertions(+), 12 deletions(-) diff --git a/packages/connect-react/examples/nextjs/package.json b/packages/connect-react/examples/nextjs/package.json index 02aa363bb7538..c520feccd93dd 100644 --- a/packages/connect-react/examples/nextjs/package.json +++ b/packages/connect-react/examples/nextjs/package.json @@ -7,7 +7,7 @@ }, "dependencies": { "@pipedream/connect-react": "file:../..", - "@pipedream/sdk": "^1.1.4", + "@pipedream/sdk": "^1.3.2", "next": "15.0.3", "react": "19.0.0-rc-66855b96-20241106", "react-dom": "19.0.0-rc-66855b96-20241106" diff --git a/packages/connect-react/examples/nextjs/src/app/page.tsx b/packages/connect-react/examples/nextjs/src/app/page.tsx index dbe7bd518758b..fe21ffd15c75d 100644 --- a/packages/connect-react/examples/nextjs/src/app/page.tsx +++ b/packages/connect-react/examples/nextjs/src/app/page.tsx @@ -27,8 +27,8 @@ export default function Home() { ] = useState(); const [ - errors, - setErrors, + sdkErrors, + setSdkErrors, ] = useState(undefined); const handleDynamicProps = (dynamicProps: { id: string | undefined }) => { @@ -45,18 +45,19 @@ export default function Home() { configuredProps={configuredProps} onUpdateDynamicProps={handleDynamicProps} onUpdateConfiguredProps={setConfiguredProps} - sdkErrors={errors} + sdkErrors={sdkErrors} + environment={client.getEnvironment()} onSubmit={async () => { try { - const result = await client.actionRun({ + const result = await client.runAction({ userId, actionId: "gmail-new-email-received", configuredProps, dynamicPropsId, }); - setErrors(result?.os) + setSdkErrors(result?.os) } catch (error) { - setErrors(error as unknown) + setSdkErrors(error as unknown) console.error("Action run failed:", error); } }} diff --git a/packages/connect-react/src/components/ComponentForm.tsx b/packages/connect-react/src/components/ComponentForm.tsx index 220ac81c9ba86..65a941c6f87a4 100644 --- a/packages/connect-react/src/components/ComponentForm.tsx +++ b/packages/connect-react/src/components/ComponentForm.tsx @@ -21,6 +21,7 @@ export type ComponentFormProps) => void; hideOptionalProps?: boolean; sdkErrors?: unknown[] | unknown | undefined; + environment?: string; }; export function ComponentForm(props: ComponentFormProps) { diff --git a/packages/connect-react/src/components/Field.tsx b/packages/connect-react/src/components/Field.tsx index 284055797c86f..6ffa8161910d1 100644 --- a/packages/connect-react/src/components/Field.tsx +++ b/packages/connect-react/src/components/Field.tsx @@ -21,7 +21,9 @@ export function Field(props: FieldProps) { const { form, field, } = props; - const { prop } = field; + const { + prop, isDevelopment, + } = field; const { getProps, getComponents, } = useCustomize(); @@ -63,7 +65,7 @@ export function Field(props: FieldProps) {

{formattedErrors.map((fe, idx: number) => )}
+
); } From 83daf26ee062f554c55ab2d9f104abe7c5f67b44 Mon Sep 17 00:00:00 2001 From: Biz Melesse Date: Thu, 6 Feb 2025 16:02:49 -0600 Subject: [PATCH 26/26] Always show ConfigurationError --- packages/connect-react/src/components/Errors.tsx | 6 +++++- packages/connect-react/src/components/Field.tsx | 6 ++---- .../src/components/InternalComponentForm.tsx | 8 +++++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/connect-react/src/components/Errors.tsx b/packages/connect-react/src/components/Errors.tsx index 8d21fb0f4fddb..0ebf460ffa3af 100644 --- a/packages/connect-react/src/components/Errors.tsx +++ b/packages/connect-react/src/components/Errors.tsx @@ -13,9 +13,13 @@ export type ErrorsProps export function Errors(props: ErrorsProps) { const { field } = props; const { - errors = {}, prop = {}, + errors = {}, prop = {}, enableDebugging, } = field + if (!enableDebugging) { + return null + } + if (!errors[prop.name]) { return null } diff --git a/packages/connect-react/src/components/Field.tsx b/packages/connect-react/src/components/Field.tsx index 90265ea7a6ad2..284055797c86f 100644 --- a/packages/connect-react/src/components/Field.tsx +++ b/packages/connect-react/src/components/Field.tsx @@ -21,9 +21,7 @@ export function Field(props: FieldProps) { const { form, field, } = props; - const { - prop, enableDebugging, - } = field; + const { prop } = field; const { getProps, getComponents, } = useCustomize(); @@ -65,7 +63,7 @@ export function Field(props: FieldProps) {