Skip to content

Commit 3ebf561

Browse files
authored
fix: clear selection when using form reset in RAC CheckboxGroup (#8316)
1 parent 8bd53e9 commit 3ebf561

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

packages/react-aria-components/src/Checkbox.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {filterDOMProps, mergeRefs, useObjectRef} from '@react-aria/utils';
1818
import {FormContext} from './Form';
1919
import {forwardRefType, RefObject} from '@react-types/shared';
2020
import {LabelContext} from './Label';
21-
import React, {createContext, ForwardedRef, forwardRef, useContext} from 'react';
21+
import React, {createContext, ForwardedRef, forwardRef, useContext, useMemo} from 'react';
2222
import {TextContext} from './Text';
2323

2424
export interface CheckboxGroupProps extends Omit<AriaCheckboxGroupProps, 'children' | 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, RenderProps<CheckboxGroupRenderProps>, SlotProps {}
@@ -185,7 +185,7 @@ export const Checkbox = /*#__PURE__*/ (forwardRef as forwardRefType)(function Ch
185185
let {validationBehavior: formValidationBehavior} = useSlottedContext(FormContext) || {};
186186
let validationBehavior = props.validationBehavior ?? formValidationBehavior ?? 'native';
187187
let groupState = useContext(CheckboxGroupStateContext);
188-
let inputRef = useObjectRef(mergeRefs(userProvidedInputRef, props.inputRef !== undefined ? props.inputRef : null));
188+
let inputRef = useObjectRef(useMemo(() => mergeRefs(userProvidedInputRef, props.inputRef !== undefined ? props.inputRef : null), [userProvidedInputRef, props.inputRef]));
189189
let {labelProps, inputProps, isSelected, isDisabled, isReadOnly, isPressed, isInvalid} = groupState
190190
// eslint-disable-next-line react-hooks/rules-of-hooks
191191
? useCheckboxGroupItem({

packages/react-aria-components/stories/CheckboxGroup.stories.tsx

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import {Checkbox, CheckboxGroup, Label} from 'react-aria-components';
1+
import {Button, Checkbox, CheckboxGroup, FieldError, Form, Label} from 'react-aria-components';
22
import React from 'react';
33
import './styles.css';
4+
import styles from '../example/index.css';
45

56

67
export default {
@@ -29,6 +30,37 @@ export const CheckboxGroupExample = () => {
2930
</div>
3031
Basketball
3132
</Checkbox>
33+
<FieldError className={styles.errorMessage} />
3234
</CheckboxGroup>
3335
);
3436
};
37+
38+
export const CheckboxGroupSubmitExample = () => {
39+
return (
40+
<Form>
41+
<CheckboxGroup isRequired>
42+
<Label>Favorite sports</Label>
43+
<Checkbox value="soccer">
44+
<div className="checkbox" aria-hidden="true">
45+
<svg viewBox="0 0 18 18"><polyline points="1 9 7 14 15 4" /></svg>
46+
</div>
47+
Soccer
48+
</Checkbox>
49+
<Checkbox value="baseball">
50+
<div className="checkbox" aria-hidden="true">
51+
<svg viewBox="0 0 18 18"><polyline points="1 9 7 14 15 4" /></svg>
52+
</div>
53+
Baseball
54+
</Checkbox>
55+
<Checkbox value="basketball">
56+
<div className="checkbox" aria-hidden="true">
57+
<svg viewBox="0 0 18 18"><polyline points="1 9 7 14 15 4" /></svg>
58+
</div>
59+
Basketball
60+
</Checkbox>
61+
</CheckboxGroup>
62+
<Button type="submit">Submit</Button>
63+
<Button type="reset">Reset</Button>
64+
</Form>
65+
);
66+
};

0 commit comments

Comments
 (0)