Skip to content

[0.72] Add aria-required and aria-multiselectable to accessibilityState on win32 #12062

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "fix a11yState and add support for aria-required and -multiselectable",
"packageName": "@office-iss/react-native-win32",
"email": "[email protected]",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ class MultiSelectionExample extends React.Component<{}, IMultiSelectionExampleSt

public render() {
return (
<ViewWin32 accessible accessibilityRole="tablist" accessibilityState={{multiselectable: true}}>
<ViewWin32 accessible accessibilityRole="tablist" aria-required aria-multiselectable>
<SelectionItemComponent
value={1}
color="#aee8fcff"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,8 @@ type ButtonProps = $ReadOnly<{|
'aria-disabled'?: ?boolean,
'aria-expanded'?: ?boolean,
'aria-selected'?: ?boolean,
'aria-multiselectable'?: ?boolean, // Win32
'aria-required'?: ?boolean, // Win32

/**
* [Android] Controlling if a view fires accessibility events and if it is reported to accessibility services.
Expand Down Expand Up @@ -293,6 +295,8 @@ class Button extends React.Component<ButtonProps> {
'aria-disabled': ariaDisabled,
'aria-expanded': ariaExpanded,
'aria-label': ariaLabel,
'aria-multiselectable': ariaMultiselectable, // Win32
'aria-required': ariaRequired, // Win32
'aria-selected': ariaSelected,
importantForAccessibility,
color,
Expand Down Expand Up @@ -327,6 +331,9 @@ class Button extends React.Component<ButtonProps> {
checked: ariaChecked ?? accessibilityState?.checked,
disabled: ariaDisabled ?? accessibilityState?.disabled,
expanded: ariaExpanded ?? accessibilityState?.expanded,
multiselectable:
ariaMultiselectable ?? accessibilityState?.multiselectable, // Win32
required: ariaRequired ?? accessibilityState?.required, // Win32
selected: ariaSelected ?? accessibilityState?.selected,
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ type Props = $ReadOnly<{|
'aria-disabled'?: ?boolean,
'aria-expanded'?: ?boolean,
'aria-selected'?: ?boolean,
'aria-multiselectable'?: ?boolean, // Win32
'aria-required'?: ?boolean, // Win32
/**
* A value indicating whether the accessibility elements contained within
* this accessibility element are hidden.
Expand Down Expand Up @@ -257,6 +259,8 @@ function Pressable(props: Props, forwardedRef): React.Node {
'aria-disabled': ariaDisabled,
'aria-expanded': ariaExpanded,
'aria-label': ariaLabel,
'aria-multiselectable': ariaMultiselectable, // Win32
'aria-required': ariaRequired, // Win32
'aria-selected': ariaSelected,
cancelable,
children,
Expand Down Expand Up @@ -297,6 +301,8 @@ function Pressable(props: Props, forwardedRef): React.Node {
checked: ariaChecked ?? accessibilityState?.checked,
disabled: ariaDisabled ?? accessibilityState?.disabled,
expanded: ariaExpanded ?? accessibilityState?.expanded,
multiselectable: ariaMultiselectable ?? accessibilityState?.multiselectable, // Win32
required: ariaRequired ?? accessibilityState?.required, // Win32
selected: ariaSelected ?? accessibilityState?.selected,
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ const View: React.AbstractComponent<
'aria-label': ariaLabel,
'aria-labelledby': ariaLabelledBy,
'aria-live': ariaLive,
'aria-multiselectable': ariaMultiselectable, // Win32
'aria-required': ariaRequired, // Win32
'aria-selected': ariaSelected,
'aria-valuemax': ariaValueMax,
'aria-valuemin': ariaValueMin,
Expand All @@ -76,13 +78,18 @@ const View: React.AbstractComponent<
ariaChecked != null ||
ariaDisabled != null ||
ariaExpanded != null ||
ariaMultiselectable != null ||
ariaRequired != null ||
ariaSelected != null
) {
_accessibilityState = {
busy: ariaBusy ?? accessibilityState?.busy,
checked: ariaChecked ?? accessibilityState?.checked,
disabled: ariaDisabled ?? accessibilityState?.disabled,
expanded: ariaExpanded ?? accessibilityState?.expanded,
multiselectable:
ariaMultiselectable ?? accessibilityState?.multiselectable, // Win32
required: ariaRequired ?? accessibilityState?.required, // Win32
selected: ariaSelected ?? accessibilityState?.selected,
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ export interface AccessibilityProps
'aria-checked'?: boolean | 'mixed' | undefined;
'aria-disabled'?: boolean | undefined;
'aria-expanded'?: boolean | undefined;
'aria-multiselectable'?: boolean | undefined; // Win32
'aria-required'?: boolean | undefined; // Win32
'aria-selected'?: boolean | undefined;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ export type AccessibilityState = {
checked?: ?boolean | 'mixed',
busy?: boolean,
expanded?: boolean,
multiselectable?: boolean, // Win32
required?: boolean, // Win32
...
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,8 @@ type WindowsViewProps = $ReadOnly<{|

accessibilityPosInSet?: ?number,
accessibilitySetSize?: ?number,

'aria-multiselectable'?: ?boolean,
'aria-required'?: ?boolean,
/**
* Specifies if the control should show System focus visuals
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,8 @@ const BaseImage = (props: ImagePropsType, forwardedRef) => {
'aria-checked': ariaChecked,
'aria-disabled': ariaDisabled,
'aria-expanded': ariaExpanded,
'aria-multiselectable': ariaMultiselectable, // Win32
'aria-required': ariaRequired, // Win32
'aria-selected': ariaSelected,
height,
src,
Expand All @@ -185,6 +187,9 @@ const BaseImage = (props: ImagePropsType, forwardedRef) => {
checked: ariaChecked ?? props.accessibilityState?.checked,
disabled: ariaDisabled ?? props.accessibilityState?.disabled,
expanded: ariaExpanded ?? props.accessibilityState?.expanded,
multiselectable:
ariaMultiselectable ?? props.accessibilityState?.multiselectable, // Win32
required: ariaRequired ?? props.accessibilityState?.required, // Win32
selected: ariaSelected ?? props.accessibilityState?.selected,
};
const accessibilityLabel = props['aria-label'] ?? props.accessibilityLabel;
Expand Down