Skip to content

Commit aae6d58

Browse files
committed
Add required option to array fields
1 parent 70bcd51 commit aae6d58

File tree

3 files changed

+32
-9
lines changed

3 files changed

+32
-9
lines changed

packages/data-widgets/lib/components/elements.tsx

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import {
88
Button,
99
HeadingProps,
1010
IconButtonProps,
11-
FlexProps
11+
FlexProps,
12+
Text
1213
} from '@chakra-ui/react';
1314
import {
1415
CollecticonTrashBin,
@@ -95,6 +96,7 @@ export const FieldsetDeleteBtn = forwardRef<IconButtonProps, 'button'>(
9596

9697
interface ArrayFieldsetProps {
9798
label: React.ReactNode;
99+
isRequired?: boolean;
98100
children: React.ReactNode;
99101
onRemove?: () => void;
100102
onAdd?: () => void;
@@ -103,16 +105,35 @@ interface ArrayFieldsetProps {
103105
}
104106

105107
export function ArrayFieldset(props: ArrayFieldsetProps) {
106-
const { label, children, onRemove, onAdd, addDisabled, removeDisabled } =
107-
props;
108+
const {
109+
label,
110+
isRequired,
111+
children,
112+
onRemove,
113+
onAdd,
114+
addDisabled,
115+
removeDisabled
116+
} = props;
108117

109118
return (
110119
<Fieldset className='widget--array'>
111120
{(label || onRemove) && (
112121
<FieldsetHeader>
113122
{label && (
114123
<Box>
115-
<FieldLabel>{label}</FieldLabel>
124+
<FieldLabel>
125+
{label}
126+
{isRequired && (
127+
<Text
128+
as='span'
129+
color='danger.500'
130+
role='presentation'
131+
aria-hidden='true'
132+
>
133+
*
134+
</Text>
135+
)}
136+
</FieldLabel>
116137
</Box>
117138
)}
118139
{onRemove && (

packages/data-widgets/lib/widgets/array-input.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { ArrayFieldset } from '../components/elements';
1313
import { WidgetInput } from './input';
1414

1515
export function WidgetArrayInput(props: WidgetProps) {
16-
const { pointer } = props;
16+
const { pointer, isRequired } = props;
1717
const field = props.field as SchemaFieldArray;
1818

1919
const { values } = useFormikContext();
@@ -28,6 +28,7 @@ export function WidgetArrayInput(props: WidgetProps) {
2828
name={pointer}
2929
render={({ remove, push }) => (
3030
<ArrayFieldset
31+
isRequired={isRequired}
3132
label={field.label}
3233
onAdd={
3334
isFixed

packages/data-widgets/lib/widgets/array.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,15 @@ import { getArrayLabel } from '../utils';
1212
import { ArrayFieldset } from '../components/elements';
1313

1414
export function WidgetArray(props: WidgetProps) {
15-
// const { pointer, isRequired } = props;
16-
const { pointer } = props;
15+
const { pointer, isRequired } = props;
1716
const field = props.field as SchemaFieldArray;
1817

1918
return (
2019
<ArrayItem
2120
label={field.label}
2221
pointer={pointer}
2322
field={field}
24-
// isRequired={isRequired}
23+
isRequired={isRequired}
2524
/>
2625
);
2726
}
@@ -30,12 +29,13 @@ interface ArrayItemProps {
3029
label: React.ReactNode;
3130
field: SchemaFieldArray;
3231
pointer: string;
32+
isRequired?: boolean;
3333
onRemove?: () => void;
3434
removeDisabled?: boolean;
3535
}
3636

3737
function ArrayItem(props: ArrayItemProps) {
38-
const { label, field, pointer, onRemove, removeDisabled } = props;
38+
const { label, field, pointer, onRemove, removeDisabled, isRequired } = props;
3939

4040
const { values } = useFormikContext();
4141
const fields: any[] = get(values, pointer) || [];
@@ -56,6 +56,7 @@ function ArrayItem(props: ArrayItemProps) {
5656
render={({ remove, push }) => (
5757
<ArrayFieldset
5858
label={label}
59+
isRequired={isRequired}
5960
onRemove={onRemove}
6061
onAdd={
6162
isFixedCount

0 commit comments

Comments
 (0)