Skip to content

Commit e1ba8c7

Browse files
authored
Add aria-required and aria-multiselectable to accessibilityState on win32 (#12046) (#12062)
* add missing a11yState props on win32 * Change files * fix missing a11yState props for other components * minor fix * add aria- equivalent props * edit change file comment * Add win32 comment tags * lint fix * fix lint errors * add aria- props to textprops * remove unneeded props
1 parent 846fbbc commit e1ba8c7

File tree

9 files changed

+39
-2
lines changed

9 files changed

+39
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "prerelease",
3+
"comment": "fix a11yState and add support for aria-required and -multiselectable",
4+
"packageName": "@office-iss/react-native-win32",
5+
"email": "[email protected]",
6+
"dependentChangeType": "patch"
7+
}

packages/@office-iss/react-native-win32-tester/src/js/examples-win32/Accessibility/AccessibilityExampleWin32.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ class MultiSelectionExample extends React.Component<{}, IMultiSelectionExampleSt
181181

182182
public render() {
183183
return (
184-
<ViewWin32 accessible accessibilityRole="tablist" accessibilityState={{multiselectable: true}}>
184+
<ViewWin32 accessible accessibilityRole="tablist" aria-required aria-multiselectable>
185185
<SelectionItemComponent
186186
value={1}
187187
color="#aee8fcff"

packages/@office-iss/react-native-win32/src/Libraries/Components/Button.win32.js

+7
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ type ButtonProps = $ReadOnly<{|
163163
'aria-disabled'?: ?boolean,
164164
'aria-expanded'?: ?boolean,
165165
'aria-selected'?: ?boolean,
166+
'aria-multiselectable'?: ?boolean, // Win32
167+
'aria-required'?: ?boolean, // Win32
166168

167169
/**
168170
* [Android] Controlling if a view fires accessibility events and if it is reported to accessibility services.
@@ -293,6 +295,8 @@ class Button extends React.Component<ButtonProps> {
293295
'aria-disabled': ariaDisabled,
294296
'aria-expanded': ariaExpanded,
295297
'aria-label': ariaLabel,
298+
'aria-multiselectable': ariaMultiselectable, // Win32
299+
'aria-required': ariaRequired, // Win32
296300
'aria-selected': ariaSelected,
297301
importantForAccessibility,
298302
color,
@@ -327,6 +331,9 @@ class Button extends React.Component<ButtonProps> {
327331
checked: ariaChecked ?? accessibilityState?.checked,
328332
disabled: ariaDisabled ?? accessibilityState?.disabled,
329333
expanded: ariaExpanded ?? accessibilityState?.expanded,
334+
multiselectable:
335+
ariaMultiselectable ?? accessibilityState?.multiselectable, // Win32
336+
required: ariaRequired ?? accessibilityState?.required, // Win32
330337
selected: ariaSelected ?? accessibilityState?.selected,
331338
};
332339

packages/@office-iss/react-native-win32/src/Libraries/Components/Pressable/Pressable.win32.js

+6
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ type Props = $ReadOnly<{|
7474
'aria-disabled'?: ?boolean,
7575
'aria-expanded'?: ?boolean,
7676
'aria-selected'?: ?boolean,
77+
'aria-multiselectable'?: ?boolean, // Win32
78+
'aria-required'?: ?boolean, // Win32
7779
/**
7880
* A value indicating whether the accessibility elements contained within
7981
* this accessibility element are hidden.
@@ -257,6 +259,8 @@ function Pressable(props: Props, forwardedRef): React.Node {
257259
'aria-disabled': ariaDisabled,
258260
'aria-expanded': ariaExpanded,
259261
'aria-label': ariaLabel,
262+
'aria-multiselectable': ariaMultiselectable, // Win32
263+
'aria-required': ariaRequired, // Win32
260264
'aria-selected': ariaSelected,
261265
cancelable,
262266
children,
@@ -297,6 +301,8 @@ function Pressable(props: Props, forwardedRef): React.Node {
297301
checked: ariaChecked ?? accessibilityState?.checked,
298302
disabled: ariaDisabled ?? accessibilityState?.disabled,
299303
expanded: ariaExpanded ?? accessibilityState?.expanded,
304+
multiselectable: ariaMultiselectable ?? accessibilityState?.multiselectable, // Win32
305+
required: ariaRequired ?? accessibilityState?.required, // Win32
300306
selected: ariaSelected ?? accessibilityState?.selected,
301307
};
302308

packages/@office-iss/react-native-win32/src/Libraries/Components/View/View.win32.js

+7
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ const View: React.AbstractComponent<
5050
'aria-label': ariaLabel,
5151
'aria-labelledby': ariaLabelledBy,
5252
'aria-live': ariaLive,
53+
'aria-multiselectable': ariaMultiselectable, // Win32
54+
'aria-required': ariaRequired, // Win32
5355
'aria-selected': ariaSelected,
5456
'aria-valuemax': ariaValueMax,
5557
'aria-valuemin': ariaValueMin,
@@ -76,13 +78,18 @@ const View: React.AbstractComponent<
7678
ariaChecked != null ||
7779
ariaDisabled != null ||
7880
ariaExpanded != null ||
81+
ariaMultiselectable != null ||
82+
ariaRequired != null ||
7983
ariaSelected != null
8084
) {
8185
_accessibilityState = {
8286
busy: ariaBusy ?? accessibilityState?.busy,
8387
checked: ariaChecked ?? accessibilityState?.checked,
8488
disabled: ariaDisabled ?? accessibilityState?.disabled,
8589
expanded: ariaExpanded ?? accessibilityState?.expanded,
90+
multiselectable:
91+
ariaMultiselectable ?? accessibilityState?.multiselectable, // Win32
92+
required: ariaRequired ?? accessibilityState?.required, // Win32
8693
selected: ariaSelected ?? accessibilityState?.selected,
8794
};
8895
}

packages/@office-iss/react-native-win32/src/Libraries/Components/View/ViewAccessibility.d.ts

+2
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ export interface AccessibilityProps
5757
'aria-checked'?: boolean | 'mixed' | undefined;
5858
'aria-disabled'?: boolean | undefined;
5959
'aria-expanded'?: boolean | undefined;
60+
'aria-multiselectable'?: boolean | undefined; // Win32
61+
'aria-required'?: boolean | undefined; // Win32
6062
'aria-selected'?: boolean | undefined;
6163

6264
/**

packages/@office-iss/react-native-win32/src/Libraries/Components/View/ViewAccessibility.win32.js

+2
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ export type AccessibilityState = {
152152
checked?: ?boolean | 'mixed',
153153
busy?: boolean,
154154
expanded?: boolean,
155+
multiselectable?: boolean, // Win32
156+
required?: boolean, // Win32
155157
...
156158
};
157159

packages/@office-iss/react-native-win32/src/Libraries/Components/View/ViewPropTypes.win32.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,8 @@ type WindowsViewProps = $ReadOnly<{|
467467

468468
accessibilityPosInSet?: ?number,
469469
accessibilitySetSize?: ?number,
470-
470+
'aria-multiselectable'?: ?boolean,
471+
'aria-required'?: ?boolean,
471472
/**
472473
* Specifies if the control should show System focus visuals
473474
*/

packages/@office-iss/react-native-win32/src/Libraries/Image/Image.win32.js

+5
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ const BaseImage = (props: ImagePropsType, forwardedRef) => {
173173
'aria-checked': ariaChecked,
174174
'aria-disabled': ariaDisabled,
175175
'aria-expanded': ariaExpanded,
176+
'aria-multiselectable': ariaMultiselectable, // Win32
177+
'aria-required': ariaRequired, // Win32
176178
'aria-selected': ariaSelected,
177179
height,
178180
src,
@@ -185,6 +187,9 @@ const BaseImage = (props: ImagePropsType, forwardedRef) => {
185187
checked: ariaChecked ?? props.accessibilityState?.checked,
186188
disabled: ariaDisabled ?? props.accessibilityState?.disabled,
187189
expanded: ariaExpanded ?? props.accessibilityState?.expanded,
190+
multiselectable:
191+
ariaMultiselectable ?? props.accessibilityState?.multiselectable, // Win32
192+
required: ariaRequired ?? props.accessibilityState?.required, // Win32
188193
selected: ariaSelected ?? props.accessibilityState?.selected,
189194
};
190195
const accessibilityLabel = props['aria-label'] ?? props.accessibilityLabel;

0 commit comments

Comments
 (0)