Skip to content

Commit 67681a1

Browse files
committed
chore(v0): use useAccessibilityBehavior() & useAccessibilitySlotProps() hooks
1 parent 96789d8 commit 67681a1

File tree

111 files changed

+1566
-1668
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

111 files changed

+1566
-1668
lines changed

packages/fluentui/accessibility/src/behaviors/Menu/menuItemBehavior.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ export const menuItemBehavior: Accessibility<MenuItemBehaviorProps> = props => (
7070
});
7171

7272
export type MenuItemBehaviorProps = {
73+
/** Indicates if tab is selected. */
74+
active?: boolean;
7375
/** Indicated if menu item has submenu. */
7476
hasMenu?: boolean | object;
7577
/** Defines if submenu is opened. */

packages/fluentui/react-northstar/src/components/Accordion/Accordion.tsx

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ import {
2424
} from '../../types';
2525
import { ContainerFocusHandler } from '../../utils/accessibility/FocusHandling/FocusContainer';
2626
import {
27-
useAccessibility,
27+
useAccessibilityBehavior,
28+
useAccessibilitySlotProps,
2829
useFluentContext,
2930
useUnhandledProps,
3031
getElementType,
@@ -134,28 +135,25 @@ export const Accordion = React.forwardRef<HTMLDListElement, AccordionProps>((pro
134135
initialState: exclusive ? alwaysActiveIndex : [alwaysActiveIndex],
135136
});
136137

137-
const actionHandlers = {
138-
moveNext: e => {
139-
e.preventDefault();
140-
focusHandler.moveNext();
138+
const a11yBehavior = useAccessibilityBehavior<AccordionBehaviorProps>(accessibility, {
139+
actionHandlers: {
140+
moveNext: e => {
141+
e.preventDefault();
142+
focusHandler.moveNext();
143+
},
144+
movePrevious: e => {
145+
e.preventDefault();
146+
focusHandler.movePrevious();
147+
},
148+
moveFirst: e => {
149+
e.preventDefault();
150+
focusHandler.moveFirst();
151+
},
152+
moveLast: e => {
153+
e.preventDefault();
154+
focusHandler.moveLast();
155+
},
141156
},
142-
movePrevious: e => {
143-
e.preventDefault();
144-
focusHandler.movePrevious();
145-
},
146-
moveFirst: e => {
147-
e.preventDefault();
148-
focusHandler.moveFirst();
149-
},
150-
moveLast: e => {
151-
e.preventDefault();
152-
focusHandler.moveLast();
153-
},
154-
};
155-
156-
const getA11yProps = useAccessibility<AccordionBehaviorProps>(accessibility, {
157-
debugName: Accordion.displayName,
158-
actionHandlers,
159157
rtl: context.rtl,
160158
});
161159

@@ -170,10 +168,10 @@ export const Accordion = React.forwardRef<HTMLDListElement, AccordionProps>((pro
170168
rtl: context.rtl,
171169
});
172170

173-
const [focusedIndex, setfocusedIndex] = React.useState<number>();
171+
const [focusedIndex, setFocusedIndex] = React.useState<number>();
174172

175173
const handleNavigationFocus = (index: number) => {
176-
setfocusedIndex(index);
174+
setFocusedIndex(index);
177175
};
178176

179177
const getNavigationItemsSize = () => props.panels.length;
@@ -218,15 +216,15 @@ export const Accordion = React.forwardRef<HTMLDListElement, AccordionProps>((pro
218216
const { index } = titleProps;
219217
const activeIndex = computeNewIndex(index);
220218
setActiveIndex(activeIndex);
221-
setfocusedIndex(index);
219+
setFocusedIndex(index);
222220

223221
_.invoke(props, 'onActiveIndexChange', e, { ...props, activeIndex });
224222
_.invoke(predefinedProps, 'onClick', e, titleProps);
225223
_.invoke(props, 'onTitleClick', e, titleProps);
226224
},
227225
onFocus: (e: React.SyntheticEvent, titleProps: AccordionTitleProps) => {
228226
_.invoke(predefinedProps, 'onFocus', e, titleProps);
229-
setfocusedIndex(predefinedProps.index);
227+
setFocusedIndex(predefinedProps.index);
230228
},
231229
});
232230

@@ -296,7 +294,7 @@ export const Accordion = React.forwardRef<HTMLDListElement, AccordionProps>((pro
296294

297295
const element = (
298296
<ElementType
299-
{...getA11yProps('root', {
297+
{...useAccessibilitySlotProps(a11yBehavior, 'root', {
300298
className: classes.root,
301299
...unhandledProps,
302300
ref,

packages/fluentui/react-northstar/src/components/Accordion/AccordionContent.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import { ComponentEventHandler, FluentComponentStaticProps } from '../../types';
1717
import {
1818
useFluentContext,
1919
getElementType,
20-
useAccessibility,
20+
useAccessibilityBehavior,
21+
useAccessibilitySlotProps,
2122
useUnhandledProps,
2223
useStyles,
2324
ForwardRefWithAs,
@@ -68,11 +69,8 @@ export const AccordionContent = React.forwardRef<HTMLDListElement, AccordionCont
6869
const ElementType = getElementType(props);
6970
const unhandledProps = useUnhandledProps(AccordionContent.handledProps, props);
7071

71-
const getA11yProps = useAccessibility(accessibility, {
72-
debugName: AccordionContent.displayName,
73-
mapPropsToBehavior: () => ({
74-
accordionTitleId,
75-
}),
72+
const a11yBehavior = useAccessibilityBehavior(accessibility, {
73+
behaviorProps: { accordionTitleId },
7674
rtl: context.rtl,
7775
});
7876
const handleClick = (e: React.SyntheticEvent) => {
@@ -95,7 +93,7 @@ export const AccordionContent = React.forwardRef<HTMLDListElement, AccordionCont
9593

9694
const element = (
9795
<ElementType
98-
{...getA11yProps('root', {
96+
{...useAccessibilitySlotProps(a11yBehavior, 'root', {
9997
className: classes.root,
10098
onClick: handleClick,
10199
ref,

packages/fluentui/react-northstar/src/components/Accordion/AccordionTitle.tsx

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ import {
2020
getElementType,
2121
useFluentContext,
2222
useUnhandledProps,
23-
useAccessibility,
23+
useAccessibilityBehavior,
24+
useAccessibilitySlotProps,
2425
useStyles,
2526
ForwardRefWithAs,
2627
} from '@fluentui/react-bindings';
@@ -103,7 +104,6 @@ export const AccordionTitle = React.forwardRef<HTMLDListElement, AccordionTitleP
103104
disabled,
104105
accessibility = accordionTitleBehavior,
105106
canBeCollapsed,
106-
as,
107107
active,
108108
accordionContentId,
109109
className,
@@ -114,23 +114,21 @@ export const AccordionTitle = React.forwardRef<HTMLDListElement, AccordionTitleP
114114
const ElementType = getElementType(props);
115115
const unhandledProps = useUnhandledProps(AccordionTitle.handledProps, props);
116116

117-
const getA11yProps = useAccessibility<AccordionTitleBehaviorProps>(accessibility, {
118-
debugName: AccordionTitle.displayName,
117+
const a11yBehavior = useAccessibilityBehavior<AccordionTitleBehaviorProps>(accessibility, {
119118
actionHandlers: {
120119
performClick: e => {
121120
e.preventDefault();
122121
e.stopPropagation();
123122
handleClick(e);
124123
},
125124
},
126-
mapPropsToBehavior: () => ({
127-
hasContent: !!content,
125+
behaviorProps: {
128126
canBeCollapsed,
129-
as: String(as),
127+
as: String(ElementType),
130128
active,
131129
disabled,
132130
accordionContentId,
133-
}),
131+
},
134132
rtl: context.rtl,
135133
});
136134

@@ -161,42 +159,38 @@ export const AccordionTitle = React.forwardRef<HTMLDListElement, AccordionTitleP
161159
_.invoke(props, 'onFocus', e, props);
162160
};
163161

164-
const handleWrapperOverrides = predefinedProps => ({
165-
onFocus: (e: React.FocusEvent) => {
166-
handleFocus(e);
167-
_.invoke(predefinedProps, 'onFocus', e, props);
168-
},
169-
onClick: (e: React.MouseEvent) => {
170-
handleClick(e);
171-
_.invoke(predefinedProps, 'onClick', e, props);
172-
},
162+
const indicatorElement = Box.create(indicator, {
163+
defaultProps: useAccessibilitySlotProps(a11yBehavior, 'indicator', {
164+
styles: resolvedStyles.indicator,
165+
}),
173166
});
174167

175168
const contentWrapperElement = (
176169
<Ref innerRef={contentRef}>
177170
{Box.create(contentWrapper, {
178-
defaultProps: () =>
179-
getA11yProps('content', {
180-
className: accordionTitleSlotClassNames.contentWrapper,
181-
styles: resolvedStyles.contentWrapper,
182-
}),
171+
defaultProps: useAccessibilitySlotProps(a11yBehavior, 'content', {
172+
className: accordionTitleSlotClassNames.contentWrapper,
173+
styles: resolvedStyles.contentWrapper,
174+
}),
183175
overrideProps: predefinedProps => ({
184176
children: (
185177
<>
186-
{Box.create(indicator, {
187-
defaultProps: () =>
188-
getA11yProps('indicator', {
189-
styles: resolvedStyles.indicator,
190-
}),
191-
})}
178+
{indicatorElement}
192179
{Box.create(content, {
193180
defaultProps: () => ({
194181
styles: resolvedStyles.content,
195182
}),
196183
})}
197184
</>
198185
),
199-
...handleWrapperOverrides(predefinedProps),
186+
onFocus: (e: React.FocusEvent) => {
187+
handleFocus(e);
188+
_.invoke(predefinedProps, 'onFocus', e, props);
189+
},
190+
onClick: (e: React.MouseEvent) => {
191+
handleClick(e);
192+
_.invoke(predefinedProps, 'onClick', e, props);
193+
},
200194
}),
201195
})}
202196
</Ref>
@@ -205,7 +199,7 @@ export const AccordionTitle = React.forwardRef<HTMLDListElement, AccordionTitleP
205199
const element = (
206200
<ElementType
207201
{...rtlTextContainer.getAttributes({ forElements: [children] })}
208-
{...getA11yProps('root', {
202+
{...useAccessibilitySlotProps(a11yBehavior, 'root', {
209203
className: classes.root,
210204
ref,
211205
...unhandledProps,

0 commit comments

Comments
 (0)