diff --git a/docs/styles.md b/docs/styles.md index 6ad63ba3..782edea2 100644 --- a/docs/styles.md +++ b/docs/styles.md @@ -191,11 +191,12 @@ Variables for customizing the Toggler Card component: Variables for the Array Base input component: -| Variable | Default Value | Description | -| :--------------------------------------------- | :------------: | :---------------------------------------------- | -| `--df-array-base-items-primitive-min-width` | `100%` | Minimum width for primitive array items | -| `--df-array-base-item-prefix-margin` | `-8px 0px 8px` | Margin for the item prefix (top, right, bottom) | -| `--df-array-base-add-button-right-margin-left` | `4px` | Left margin for the "Add" button on the right | +| Variable | Default Value | Description | +| :----------------------------------------------------- | :------------: | :----------------------------------------------------------------------- | +| `--df-array-base-items-primitive-min-width` | `100%` | Minimum width for primitive array items | +| `--df-array-base-item-prefix-margin` | `-8px 0px 8px` | Margin for the item prefix (top, right, bottom) | +| `--df-array-base-add-button-right-margin-left` | `4px` | Left margin for the "Add" button on the right | +| `--df-array-base-add-button-right-error-margin-bottom` | `18px` | Bottom margin for the "Add" button on the right for last item error case | --- diff --git a/src/lib/kit/components/Inputs/ArrayBase/ArrayBase.scss b/src/lib/kit/components/Inputs/ArrayBase/ArrayBase.scss index 1fc4f8bd..a968649a 100644 --- a/src/lib/kit/components/Inputs/ArrayBase/ArrayBase.scss +++ b/src/lib/kit/components/Inputs/ArrayBase/ArrayBase.scss @@ -36,4 +36,14 @@ margin-left: var(--df-array-base-add-button-right-margin-left, var(--g-spacing-1)); } } + + &_add-button-right { + > div:last-child { + transition: margin-bottom 0.2s ease-in-out; + } + } + + &_add-button-right_error { + margin-bottom: var(--df-array-base-add-button-right-error-margin-bottom, 18px); + } } diff --git a/src/lib/kit/components/Inputs/ArrayBase/ArrayBase.tsx b/src/lib/kit/components/Inputs/ArrayBase/ArrayBase.tsx index c5668025..d92a0372 100644 --- a/src/lib/kit/components/Inputs/ArrayBase/ArrayBase.tsx +++ b/src/lib/kit/components/Inputs/ArrayBase/ArrayBase.tsx @@ -28,7 +28,7 @@ import './ArrayBase.scss'; const b = block('array-base'); -export const ArrayBase: ArrayInput = ({spec, name, arrayInput, input}) => { +export const ArrayBase: ArrayInput = ({spec, name, arrayInput, input, meta}) => { const keys = React.useMemo( () => Object.keys(arrayInput.value || {}) @@ -150,6 +150,15 @@ export const ArrayBase: ArrayInput = ({spec, name, arrayInput, input}) => { ], ); + const hasErrorInLastItem = React.useMemo(() => { + if (keys.length === 0) { + return false; + } + const lastKey = keys[keys.length - 1]; + const lastItemName = `${name}.<${lastKey}>`; + return Boolean(meta.childErrors[lastItemName]); + }, [keys, name, meta.childErrors]); + if (!itemSpecCorrect) { return null; } @@ -165,7 +174,14 @@ export const ArrayBase: ArrayInput = ({spec, name, arrayInput, input}) => { > {items} - +
+ +
); };