diff --git a/.changeset/dirty-lizards-thank.md b/.changeset/dirty-lizards-thank.md new file mode 100644 index 0000000000..6540cfdece --- /dev/null +++ b/.changeset/dirty-lizards-thank.md @@ -0,0 +1,5 @@ +--- +'@adyen/adyen-web': patch +--- + +Fix bug where Country field and State field where not showing the correct required attribute. diff --git a/packages/lib/src/components/internal/Address/components/CountryField.tsx b/packages/lib/src/components/internal/Address/components/CountryField.tsx index 78cd890b8e..ac7c8ed085 100644 --- a/packages/lib/src/components/internal/Address/components/CountryField.tsx +++ b/packages/lib/src/components/internal/Address/components/CountryField.tsx @@ -19,7 +19,7 @@ const formatCountries = (countries: Array, allowedCountries: s }; export default function CountryField(props: CountryFieldProps) { - const { allowedCountries = [], classNameModifiers = [], errorMessage, onDropdownChange, value } = props; + const { allowedCountries = [], classNameModifiers = [], errorMessage, onDropdownChange, value, required } = props; const { i18n, loadingContext } = useCoreContext(); const [countries, setCountries] = useState([]); const [loaded, setLoaded] = useState(false); @@ -53,7 +53,14 @@ export default function CountryField(props: CountryFieldProps) { i18n={i18n} readOnly={readOnly && !!value} > - ); } diff --git a/packages/lib/src/components/internal/Address/components/FieldContainer.tsx b/packages/lib/src/components/internal/Address/components/FieldContainer.tsx index 6e0cecce18..b5e8bd04f6 100644 --- a/packages/lib/src/components/internal/Address/components/FieldContainer.tsx +++ b/packages/lib/src/components/internal/Address/components/FieldContainer.tsx @@ -45,6 +45,7 @@ function FieldContainer(props: FieldContainerProps) { errorMessage={errorMessage} onDropdownChange={props.onDropdownChange} value={value} + required={!isOptional} /> ); case 'stateOrProvince': @@ -57,6 +58,7 @@ function FieldContainer(props: FieldContainerProps) { selectedCountry={selectedCountry} specifications={props.specifications} value={value} + required={!isOptional} /> ); default: diff --git a/packages/lib/src/components/internal/Address/components/StateField.tsx b/packages/lib/src/components/internal/Address/components/StateField.tsx index 6fb60b032c..6a7d0c083f 100644 --- a/packages/lib/src/components/internal/Address/components/StateField.tsx +++ b/packages/lib/src/components/internal/Address/components/StateField.tsx @@ -7,7 +7,7 @@ import { StateFieldItem, StateFieldProps } from '../types'; import Select from '../../FormFields/Select'; export default function StateField(props: StateFieldProps) { - const { classNameModifiers, label, onDropdownChange, readOnly, selectedCountry, specifications, value } = props; + const { classNameModifiers, label, onDropdownChange, readOnly, selectedCountry, specifications, value, required } = props; const { i18n, loadingContext } = useCoreContext(); const [states, setStates] = useState([]); const [loaded, setLoaded] = useState(false); @@ -44,7 +44,14 @@ export default function StateField(props: StateFieldProps) { i18n={i18n} readOnly={readOnly && !!value} > - ); } diff --git a/packages/lib/src/components/internal/Address/types.ts b/packages/lib/src/components/internal/Address/types.ts index bc4457d758..e5a96648f5 100644 --- a/packages/lib/src/components/internal/Address/types.ts +++ b/packages/lib/src/components/internal/Address/types.ts @@ -79,6 +79,7 @@ export interface CountryFieldProps { errorMessage: boolean | string; onDropdownChange: (e: { target: SelectTargetObject }) => void; readOnly?: boolean; + required?: boolean; value: string; } @@ -93,6 +94,7 @@ export interface StateFieldProps { errorMessage: boolean | string; onDropdownChange: (e: { target: SelectTargetObject }) => void; readOnly?: boolean; + required?: boolean; selectedCountry: string; specifications: Specifications; value: string; diff --git a/packages/lib/src/components/internal/FormFields/Select/Select.tsx b/packages/lib/src/components/internal/FormFields/Select/Select.tsx index 9fe6c2fbb8..98e327f429 100644 --- a/packages/lib/src/components/internal/FormFields/Select/Select.tsx +++ b/packages/lib/src/components/internal/FormFields/Select/Select.tsx @@ -29,7 +29,8 @@ function Select({ clearOnSelect, blurOnClose, onListToggle, - allowIdOnButton = false + allowIdOnButton = false, + required }: SelectProps) { const filterInputRef = useRef(null); const selectContainerRef = useRef(null); @@ -288,6 +289,7 @@ function Select({ disabled={disabled} ariaDescribedBy={ariaDescribedBy} allowIdOnButton={allowIdOnButton} + required={required} /> ) { - const { active, selected, inputText, readonly, showList } = props; + const { active, selected, inputText, readonly, showList, required } = props; // display fallback order const displayText = selected.selectedOptionName || selected.name || props.placeholder || ''; @@ -88,6 +88,7 @@ function SelectButton(props: Readonly) { readOnly={props.readonly} id={props.id} aria-describedby={props.ariaDescribedBy} + required={required} /> {!showList && selected.secondaryText && ( {selected.secondaryText} diff --git a/packages/lib/src/components/internal/FormFields/Select/types.ts b/packages/lib/src/components/internal/FormFields/Select/types.ts index 43aca5fcf1..bd7794863f 100644 --- a/packages/lib/src/components/internal/FormFields/Select/types.ts +++ b/packages/lib/src/components/internal/FormFields/Select/types.ts @@ -32,6 +32,7 @@ export interface SelectProps { onInput?: (value: string) => void; placeholder?: string; readonly: boolean; + required?: boolean; selectedValue?: string | number; uniqueId?: string; disabled?: boolean; @@ -55,6 +56,7 @@ export interface SelectButtonProps { onInput: (e: Event) => void; placeholder: string; readonly: boolean; + required: boolean; selectListId: string; showList: boolean; toggleButtonRef;