Skip to content

Commit 6373a0d

Browse files
authored
feat: blog filters a11y (#224)
1 parent 4695d6f commit 6373a0d

File tree

4 files changed

+40
-21
lines changed

4 files changed

+40
-21
lines changed

package-lock.json

Lines changed: 6 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
"peerDependencies": {
8080
"@diplodoc/transform": "^4.10.7",
8181
"@gravity-ui/page-constructor": "^5.0.0",
82-
"@gravity-ui/uikit": "^6.1.1",
82+
"@gravity-ui/uikit": "^6.26.0",
8383
"react": "^16.0.0 || ^17.0.0 || ^18.0.0"
8484
},
8585
"devDependencies": {
@@ -93,7 +93,7 @@
9393
"@gravity-ui/prettier-config": "^1.1.0",
9494
"@gravity-ui/stylelint-config": "^4.0.1",
9595
"@gravity-ui/tsconfig": "^1.0.0",
96-
"@gravity-ui/uikit": "^6.22.0",
96+
"@gravity-ui/uikit": "^6.26.0",
9797
"@jest/environment": "^29.7.0",
9898
"@playwright/experimental-ct-react": "^1.45.3",
9999
"@playwright/test": "^1.45.3",

src/components/FeedHeader/components/Controls/customRenders.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,33 +24,41 @@ type RenderSwitcherType = ({
2424
defaultLabel: string;
2525
}) => SelectProps['renderControl'];
2626

27+
type RenderFilterType = SelectProps['renderFilter'];
28+
2729
export const renderSwitcher: RenderSwitcherType =
2830
({initial, list, defaultLabel}) =>
2931
// eslint-disable-next-line react/display-name
30-
({onClick, ref, onKeyDown, open, renderClear, popupId, activeIndex}) => (
32+
({ref, renderClear, triggerProps: {id, disabled, type, onClick, onKeyDown, ...a11yProps}}) => (
3133
<CustomSwitcher
34+
id={id}
35+
disabled={disabled}
36+
type={type}
3237
initial={initial}
3338
defaultLabel={defaultLabel}
3439
list={list}
3540
controlRef={ref}
3641
onClick={onClick}
3742
onKeyDown={onKeyDown}
3843
renderClear={renderClear}
39-
open={open}
40-
popupId={popupId}
41-
activeIndex={activeIndex}
44+
a11yProps={a11yProps}
4245
/>
4346
);
4447

45-
export const renderFilter: SelectProps['renderFilter'] = ({value, onChange, onKeyDown}) => (
48+
export const renderFilter: RenderFilterType = ({
49+
ref,
50+
onChange,
51+
inputProps: {value, onKeyDown, onChange: _, size: __, placeholder: ___, ...a11yProps},
52+
}) => (
4653
<TextInput
47-
controlProps={{size: 1}}
4854
value={value}
4955
view="clear"
5056
placeholder={i18n(Keyset.Search)}
5157
onUpdate={onChange}
5258
onKeyDown={onKeyDown}
5359
className={b('popup-filter')}
60+
controlRef={ref}
61+
controlProps={{size: 1, ...a11yProps}}
5462
/>
5563
);
5664

src/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.tsx

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,38 @@ import './CustomSwitcher.scss';
1212
const b = block('feed-custom-switcher');
1313

1414
type RenderControlParameters = Partial<Parameters<Required<SelectProps>['renderControl']>[0]>;
15+
type TriggerProps = Required<RenderControlParameters>['triggerProps'];
16+
17+
type A11yKeys = {
18+
[K in keyof TriggerProps]-?: K extends `aria-${string}` | 'role' ? K : never;
19+
}[keyof TriggerProps];
20+
21+
type RenderControlA11yProps = Pick<TriggerProps, A11yKeys>;
1522

1623
export type CustomSwitcherProps = {
1724
initial: (string | number | null)[];
1825
defaultLabel: string;
1926
list: SelectItem[];
2027
controlRef: RenderControlParameters['ref'];
21-
} & Omit<RenderControlParameters, 'ref'>;
28+
a11yProps: RenderControlA11yProps;
29+
} & Omit<RenderControlParameters, 'ref'> &
30+
Pick<TriggerProps, 'id' | 'disabled' | 'type'>;
2231

2332
const ICON_SIZE = 12;
2433
const CLEAR_ICON_SIZE = 11;
2534

2635
export const CustomSwitcher = ({
36+
id,
37+
disabled,
38+
type,
2739
initial,
2840
defaultLabel,
2941
list,
3042
onClick,
3143
controlRef,
3244
onKeyDown,
33-
open,
3445
renderClear,
35-
popupId,
36-
activeIndex,
46+
a11yProps,
3747
}: CustomSwitcherProps) => {
3848
const itemsNames = useMemo(() => {
3949
const items = list
@@ -50,14 +60,14 @@ export const CustomSwitcher = ({
5060
<div className={b('custom-switcher')} ref={controlRef as LegacyRef<HTMLDivElement>}>
5161
{/* eslint-disable-next-line jsx-a11y/role-supports-aria-props */}
5262
<button
63+
id={id}
64+
disabled={disabled}
65+
type={type}
5366
onClick={onClick}
5467
className={b('custom-switcher-element', {overlay: true})}
5568
onKeyDown={onKeyDown}
56-
aria-expanded={open}
69+
{...a11yProps}
5770
aria-labelledby={contentElementId}
58-
aria-activedescendant={
59-
activeIndex === undefined ? undefined : `${popupId}-item-${activeIndex}`
60-
}
6171
/>
6272
<div
6373
id={contentElementId}

0 commit comments

Comments
 (0)