From 5b5f29bdf0f3b03987ab412ddfcee9201b4d34ff Mon Sep 17 00:00:00 2001 From: Nathan Farmer Date: Mon, 20 May 2024 12:07:32 -0400 Subject: [PATCH] Narrow typing --- src/controls/BooleanControl.tsx | 4 ++-- src/controls/NumericControl.tsx | 5 ++--- src/controls/NumericSliderControl.tsx | 5 ++--- src/controls/ObjectArrayControl.tsx | 7 ++++++- src/controls/PrimitiveArrayControl.tsx | 4 ++-- src/controls/TextControl.tsx | 6 +++--- src/controls/combinators/AnyOfControl.tsx | 4 ++-- src/controls/combinators/OneOfControl.tsx | 4 ++-- 8 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/controls/BooleanControl.tsx b/src/controls/BooleanControl.tsx index 70a8156..e0b74f0 100644 --- a/src/controls/BooleanControl.tsx +++ b/src/controls/BooleanControl.tsx @@ -43,8 +43,8 @@ export function BooleanControl({ const showTooltip = !showDescription && !isDescriptionHidden(visible, description, true, true) - const uiSchema = uischema as ControlUISchema & ControlElement - const formItemProps = uiSchema.formItemProps ?? {} + const uiSchema = uischema as ControlUISchema | ControlElement + const formItemProps = "formItemProps" in uiSchema ? uiSchema.formItemProps : {} const tooltip = showTooltip && description ? description : undefined return ( diff --git a/src/controls/NumericControl.tsx b/src/controls/NumericControl.tsx index 7bf4b36..34b62b7 100644 --- a/src/controls/NumericControl.tsx +++ b/src/controls/NumericControl.tsx @@ -19,9 +19,8 @@ export const NumericControl = (props: ControlProps & RendererProps) => { { required: props.required, message: `${props.label} is required` }, ] - const uiSchema = props.uischema as ControlUISchema & - ControlElement - const formItemProps = uiSchema.formItemProps ?? {} + const uiSchema = props.uischema as ControlUISchema | ControlElement + const formItemProps = "formItemProps" in uiSchema ? uiSchema.formItemProps : {} return ( { { required: props.required, message: `${props.label} is required` }, ] - const uiSchema = props.uischema as ControlUISchema & - ControlElement - const formItemProps = uiSchema.formItemProps ?? {} + const uiSchema = props.uischema as ControlUISchema | ControlElement + const formItemProps = "formItemProps" in uiSchema ? uiSchema.formItemProps : {} return ( | ControlElement + const formItemProps = "formItemProps" in uiSchema ? uiSchema.formItemProps : {} + const labelDescription = Helpers.createLabelDescriptionFrom(uischema, schema) const label = labelDescription.show ? labelDescription.text : "" @@ -86,6 +90,7 @@ export function ObjectArrayControl({ required={required} rules={[{ required: required, message: `${label} is required` }]} validateTrigger={["onBlur"]} + {...formItemProps} > <>{label} diff --git a/src/controls/PrimitiveArrayControl.tsx b/src/controls/PrimitiveArrayControl.tsx index 9c66b05..5f09d1f 100644 --- a/src/controls/PrimitiveArrayControl.tsx +++ b/src/controls/PrimitiveArrayControl.tsx @@ -69,9 +69,9 @@ export function PrimitiveArrayControl({ const labelDescription = Helpers.createLabelDescriptionFrom(uischema, schema) const label = labelDescription.text || props.label // nullish coalescing doesn't work here because labelDescription.text can be an empty string =( - const uiSchema = uischema as ControlUISchema & ControlElement + const uiSchema = uischema as ControlUISchema | ControlElement const options: ArrayControlOptions = uiSchema.options ?? {} - const formItemProps = uiSchema.formItemProps ?? {} + const formItemProps = "formItemProps" in uiSchema ? uiSchema.formItemProps : {} return ( & ControlElement + const uiSchema = uischema as ControlUISchema | ControlElement const setInitialValue = useCallback( (value: unknown) => { if (typeof value !== "number") return value @@ -38,8 +38,8 @@ export function TextControl({ const ariaLabel = label || schema.description const options: TextControlOptions = (uiSchema.options as TextControlOptions) ?? {} - const formItemProps = uiSchema.formItemProps ?? {} - const tooltip = options.tooltip ? options.tooltip : formItemProps.tooltip + const formItemProps = "formItemProps" in uiSchema ? uiSchema.formItemProps : {} + const tooltip = options.tooltip ? options.tooltip : formItemProps?.tooltip const placeholderText = options.placeholderText const form = Form.useFormInstance() const rules: Rule[] = [ diff --git a/src/controls/combinators/AnyOfControl.tsx b/src/controls/combinators/AnyOfControl.tsx index 48e8d11..ff53710 100644 --- a/src/controls/combinators/AnyOfControl.tsx +++ b/src/controls/combinators/AnyOfControl.tsx @@ -75,8 +75,8 @@ export function AnyOfControl({ const labelDescription = Helpers.createLabelDescriptionFrom(uischema, schema) - const uiSchema = uischema as ControlUISchema & ControlElement - const formItemProps = uiSchema.formItemProps ?? {} + const uiSchema = uischema as ControlUISchema | ControlElement + const formItemProps = "formItemProps" in uiSchema ? uiSchema.formItemProps : {} return ( diff --git a/src/controls/combinators/OneOfControl.tsx b/src/controls/combinators/OneOfControl.tsx index 1b49e5d..d7a25ee 100644 --- a/src/controls/combinators/OneOfControl.tsx +++ b/src/controls/combinators/OneOfControl.tsx @@ -36,8 +36,8 @@ export function OneOfControl({ uischemas, ) - const uiSchema = uischema as ControlUISchema & ControlElement - const formItemProps = uiSchema.formItemProps ?? {} + const uiSchema = uischema as ControlUISchema | ControlElement + const formItemProps = "formItemProps" in uiSchema ? uiSchema.formItemProps : {} return (