diff --git a/packages/@react-aria/checkbox/src/useCheckbox.ts b/packages/@react-aria/checkbox/src/useCheckbox.ts index 1b258eb0f8b..77e0a2bd97c 100644 --- a/packages/@react-aria/checkbox/src/useCheckbox.ts +++ b/packages/@react-aria/checkbox/src/useCheckbox.ts @@ -11,11 +11,12 @@ */ import {AriaCheckboxProps} from '@react-types/checkbox'; +import {FormValidationResult, useFormValidation} from '@react-aria/utils'; import {InputHTMLAttributes, RefObject, useEffect} from 'react'; import {ToggleState} from '@react-stately/toggle'; import {useToggle} from '@react-aria/toggle'; -export interface CheckboxAria { +export interface CheckboxAria extends FormValidationResult { /** Props for the input element. */ inputProps: InputHTMLAttributes, /** Whether the checkbox is selected. */ @@ -37,7 +38,11 @@ export interface CheckboxAria { * @param inputRef - A ref for the HTML input element. */ export function useCheckbox(props: AriaCheckboxProps, state: ToggleState, inputRef: RefObject): CheckboxAria { - let {inputProps, isSelected, isPressed, isDisabled, isReadOnly} = useToggle(props, state, inputRef); + let validation = useFormValidation(inputRef, props.validationState, '', props.validationBehavior, props.onValidationChange); + let {inputProps, isSelected, isPressed, isDisabled, isReadOnly} = useToggle({ + ...props, + validationState: validation.validationState + }, state, inputRef); let {isIndeterminate} = props; useEffect(() => { @@ -56,6 +61,7 @@ export function useCheckbox(props: AriaCheckboxProps, state: ToggleState, inputR isSelected, isPressed, isDisabled, - isReadOnly + isReadOnly, + ...validation }; } diff --git a/packages/@react-aria/checkbox/src/useCheckboxGroup.ts b/packages/@react-aria/checkbox/src/useCheckboxGroup.ts index 2d4cf119b2a..90f4f599ef6 100644 --- a/packages/@react-aria/checkbox/src/useCheckboxGroup.ts +++ b/packages/@react-aria/checkbox/src/useCheckboxGroup.ts @@ -11,7 +11,7 @@ */ import {AriaCheckboxGroupProps} from '@react-types/checkbox'; -import {checkboxGroupDescriptionIds, checkboxGroupErrorMessageIds, checkboxGroupNames} from './utils'; +import {checkboxGroupData} from './utils'; import {CheckboxGroupState} from '@react-stately/checkbox'; import {DOMAttributes} from '@react-types/shared'; import {filterDOMProps, mergeProps} from '@react-aria/utils'; @@ -35,7 +35,7 @@ export interface CheckboxGroupAria { * @param state - State for the checkbox group, as returned by `useCheckboxGroupState`. */ export function useCheckboxGroup(props: AriaCheckboxGroupProps, state: CheckboxGroupState): CheckboxGroupAria { - let {isDisabled, name} = props; + let {isDisabled, name, validationBehavior} = props; let {labelProps, fieldProps, descriptionProps, errorMessageProps} = useField({ ...props, @@ -43,14 +43,15 @@ export function useCheckboxGroup(props: AriaCheckboxGroupProps, state: CheckboxG // shouldn't be labeled by a