import { Accessibility } from '@fluentui/accessibility'; import { useAccessibility } from '@fluentui/react-bindings'; import { mount, shallow } from 'enzyme'; import { keyboardKey } from '@fluentui/keyboard-key'; import * as React from 'react'; type TestBehaviorProps = { disabled: boolean; }; type ChildBehaviorProps = { pressed: boolean; }; const testBehavior: Accessibility = props => ({ attributes: { root: { 'aria-disabled': props.disabled, tabIndex: 1, }, img: { 'aria-label': 'Pixel', role: 'presentation', }, }, keyActions: { root: { click: { keyCombinations: [{ keyCode: keyboardKey.ArrowDown }], }, }, }, }); const conditionalBehavior: Accessibility<{ disabled: boolean }> = props => ({ attributes: { root: { 'aria-label': 'Noop behavior', }, }, keyActions: { root: { ...((!props.disabled && { click: { keyCombinations: [{ keyCode: keyboardKey.ArrowDown }], }, }) as any), }, img: { click: { keyCombinations: [props.disabled ? { keyCode: keyboardKey.ArrowDown } : { keyCode: keyboardKey.ArrowUp }], }, }, }, }); const focusZoneBehavior: Accessibility = () => ({ focusZone: { props: { disabled: true, shouldFocusOnMount: true, }, }, }); const childOverriddenBehavior: Accessibility = props => ({ attributes: { root: { 'aria-pressed': props.pressed, 'aria-label': 'overridden', }, }, }); const childBehavior: Accessibility = props => ({ attributes: { root: { 'aria-pressed': props.pressed, }, }, }); const overriddenChildBehavior: Accessibility = props => ({ attributes: { root: { 'aria-disabled': props.disabled, tabIndex: 1, }, img: { 'aria-label': 'Pixel', role: 'presentation', }, }, keyActions: { root: { click: { keyCombinations: [{ keyCode: keyboardKey.ArrowDown }], }, }, }, childBehaviors: { child: childOverriddenBehavior, }, }); type TestComponentProps = { accessibility?: Accessibility; disabled?: boolean; onClick?: (e: React.KeyboardEvent, slotName: string) => void; onKeyDown?: React.KeyboardEventHandler; } & React.HTMLAttributes; type ChildComponentProps = { accessibility?: Accessibility; pressed?: boolean; onKeyDown?: React.KeyboardEventHandler; }; const TestComponent: React.FunctionComponent = props => { const { accessibility = testBehavior, disabled, onClick, onKeyDown, ...rest } = props; const getA11Props = useAccessibility(accessibility, { mapPropsToBehavior: () => ({ disabled, }), actionHandlers: { click: (e: React.KeyboardEvent) => { if (onClick) onClick(e, 'root'); }, }, }); return getA11Props.unstable_wrapWithFocusZone(
, ); }; const ChildComponent: React.FunctionComponent = props => { const { accessibility = childBehavior, pressed, onKeyDown, ...rest } = props; const getA11Props = useAccessibility(accessibility, { mapPropsToBehavior: () => ({ pressed, }), }); return