Skip to content

Commit 7833841

Browse files
authored
Fix: required attribute not passed to select element (#2944)
* fix: required atribute not passed to select element * changeset
1 parent ba132fc commit 7833841

File tree

8 files changed

+34
-6
lines changed

8 files changed

+34
-6
lines changed

.changeset/dirty-lizards-thank.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@adyen/adyen-web': patch
3+
---
4+
5+
Fix bug where Country field and State field where not showing the correct required attribute.

packages/lib/src/components/internal/Address/components/CountryField.tsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const formatCountries = (countries: Array<CountryFieldItem>, allowedCountries: s
1919
};
2020

2121
export default function CountryField(props: CountryFieldProps) {
22-
const { allowedCountries = [], classNameModifiers = [], errorMessage, onDropdownChange, value } = props;
22+
const { allowedCountries = [], classNameModifiers = [], errorMessage, onDropdownChange, value, required } = props;
2323
const { i18n, loadingContext } = useCoreContext();
2424
const [countries, setCountries] = useState<CountryFieldItem[]>([]);
2525
const [loaded, setLoaded] = useState<boolean>(false);
@@ -53,7 +53,14 @@ export default function CountryField(props: CountryFieldProps) {
5353
i18n={i18n}
5454
readOnly={readOnly && !!value}
5555
>
56-
<Select onChange={onDropdownChange} name={'country'} selectedValue={value} items={countries} readonly={readOnly && !!value} />
56+
<Select
57+
onChange={onDropdownChange}
58+
name={'country'}
59+
selectedValue={value}
60+
items={countries}
61+
readonly={readOnly && !!value}
62+
required={required}
63+
/>
5764
</Field>
5865
);
5966
}

packages/lib/src/components/internal/Address/components/FieldContainer.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ function FieldContainer(props: FieldContainerProps) {
4545
errorMessage={errorMessage}
4646
onDropdownChange={props.onDropdownChange}
4747
value={value}
48+
required={!isOptional}
4849
/>
4950
);
5051
case 'stateOrProvince':
@@ -57,6 +58,7 @@ function FieldContainer(props: FieldContainerProps) {
5758
selectedCountry={selectedCountry}
5859
specifications={props.specifications}
5960
value={value}
61+
required={!isOptional}
6062
/>
6163
);
6264
default:

packages/lib/src/components/internal/Address/components/StateField.tsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { StateFieldItem, StateFieldProps } from '../types';
77
import Select from '../../FormFields/Select';
88

99
export default function StateField(props: StateFieldProps) {
10-
const { classNameModifiers, label, onDropdownChange, readOnly, selectedCountry, specifications, value } = props;
10+
const { classNameModifiers, label, onDropdownChange, readOnly, selectedCountry, specifications, value, required } = props;
1111
const { i18n, loadingContext } = useCoreContext();
1212
const [states, setStates] = useState<StateFieldItem[]>([]);
1313
const [loaded, setLoaded] = useState<boolean>(false);
@@ -44,7 +44,14 @@ export default function StateField(props: StateFieldProps) {
4444
i18n={i18n}
4545
readOnly={readOnly && !!value}
4646
>
47-
<Select name={'stateOrProvince'} onChange={onDropdownChange} selectedValue={value} items={states} readonly={readOnly && !!value} />
47+
<Select
48+
name={'stateOrProvince'}
49+
onChange={onDropdownChange}
50+
selectedValue={value}
51+
items={states}
52+
required={required}
53+
readonly={readOnly && !!value}
54+
/>
4855
</Field>
4956
);
5057
}

packages/lib/src/components/internal/Address/types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ export interface CountryFieldProps {
7979
errorMessage: boolean | string;
8080
onDropdownChange: (e: { target: SelectTargetObject }) => void;
8181
readOnly?: boolean;
82+
required?: boolean;
8283
value: string;
8384
}
8485

@@ -93,6 +94,7 @@ export interface StateFieldProps {
9394
errorMessage: boolean | string;
9495
onDropdownChange: (e: { target: SelectTargetObject }) => void;
9596
readOnly?: boolean;
97+
required?: boolean;
9698
selectedCountry: string;
9799
specifications: Specifications;
98100
value: string;

packages/lib/src/components/internal/FormFields/Select/Select.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ function Select({
2929
clearOnSelect,
3030
blurOnClose,
3131
onListToggle,
32-
allowIdOnButton = false
32+
allowIdOnButton = false,
33+
required
3334
}: SelectProps) {
3435
const filterInputRef = useRef(null);
3536
const selectContainerRef = useRef(null);
@@ -288,6 +289,7 @@ function Select({
288289
disabled={disabled}
289290
ariaDescribedBy={ariaDescribedBy}
290291
allowIdOnButton={allowIdOnButton}
292+
required={required}
291293
/>
292294
<SelectList
293295
active={activeOption}

packages/lib/src/components/internal/FormFields/Select/components/SelectButton.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ function SelectButtonElement({ filterable, toggleButtonRef, ...props }) {
1414
}
1515

1616
function SelectButton(props: Readonly<SelectButtonProps>) {
17-
const { active, selected, inputText, readonly, showList } = props;
17+
const { active, selected, inputText, readonly, showList, required } = props;
1818

1919
// display fallback order
2020
const displayText = selected.selectedOptionName || selected.name || props.placeholder || '';
@@ -88,6 +88,7 @@ function SelectButton(props: Readonly<SelectButtonProps>) {
8888
readOnly={props.readonly}
8989
id={props.id}
9090
aria-describedby={props.ariaDescribedBy}
91+
required={required}
9192
/>
9293
{!showList && selected.secondaryText && (
9394
<span className="adyen-checkout__dropdown__button__secondary-text">{selected.secondaryText}</span>

packages/lib/src/components/internal/FormFields/Select/types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export interface SelectProps {
3232
onInput?: (value: string) => void;
3333
placeholder?: string;
3434
readonly: boolean;
35+
required?: boolean;
3536
selectedValue?: string | number;
3637
uniqueId?: string;
3738
disabled?: boolean;
@@ -55,6 +56,7 @@ export interface SelectButtonProps {
5556
onInput: (e: Event) => void;
5657
placeholder: string;
5758
readonly: boolean;
59+
required: boolean;
5860
selectListId: string;
5961
showList: boolean;
6062
toggleButtonRef;

0 commit comments

Comments
 (0)