Skip to content

Commit eb16944

Browse files
authored
Merge branch 'main' into release-please--branches--main--components--navigation
2 parents f30b2c8 + bfaa84b commit eb16944

File tree

3 files changed

+48
-21
lines changed

3 files changed

+48
-21
lines changed

src/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
padding: 0 var(--g-spacing-6);
1313
column-gap: var(--g-spacing-4);
1414

15+
cursor: pointer;
16+
1517
&__text {
1618
flex: 1;
1719
text-align: initial;

src/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.tsx

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import React, {MouseEvent, useCallback} from 'react';
1+
import React, {MouseEvent, useCallback, useRef} from 'react';
22

33
import {Pin, PinFill} from '@gravity-ui/icons';
44
import {Button, Icon} from '@gravity-ui/uikit';
55

6-
import {MenuItem} from '../../types';
6+
import {MakeItemParams, MenuItem} from '../../types';
77
import {block} from '../../utils/cn';
88

99
import './AllPagesListItem.scss';
@@ -21,6 +21,8 @@ interface AllPagesListItemProps {
2121

2222
export const AllPagesListItem: React.FC<AllPagesListItemProps> = (props) => {
2323
const {item, editMode, onToggle} = props;
24+
const ref = useRef<HTMLAnchorElement & HTMLButtonElement>(null);
25+
2426
const onPinButtonClick = useCallback(
2527
(e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {
2628
e.stopPropagation();
@@ -39,20 +41,36 @@ export const AllPagesListItem: React.FC<AllPagesListItemProps> = (props) => {
3941

4042
const [Tag, tagProps] = item.link ? ['a' as const, {href: item.link}] : ['button' as const, {}];
4143

42-
return (
43-
<Tag {...tagProps} className={b()} onClick={onItemClick}>
44-
{item.icon ? (
45-
<Icon className={b('icon')} data={item.icon} size={item.iconSize} />
46-
) : null}
47-
<span className={b('text')}>{item.title}</span>
48-
{editMode && !item.preventUserRemoving && (
49-
<Button
50-
onClick={onPinButtonClick}
51-
view={item.hidden ? 'flat-secondary' : 'flat-action'}
52-
>
53-
<Button.Icon>{item.hidden ? <Pin /> : <PinFill />}</Button.Icon>
54-
</Button>
55-
)}
56-
</Tag>
44+
const makeNode = useCallback(
45+
(params: MakeItemParams) => {
46+
return (
47+
<Tag {...tagProps} className={b()} onClick={onItemClick} ref={ref}>
48+
{params.icon}
49+
<span className={b('text')}>{params.title}</span>
50+
{editMode && !item.preventUserRemoving && (
51+
<Button
52+
onClick={onPinButtonClick}
53+
view={item.hidden ? 'flat-secondary' : 'flat-action'}
54+
>
55+
<Button.Icon>{item.hidden ? <Pin /> : <PinFill />}</Button.Icon>
56+
</Button>
57+
)}
58+
</Tag>
59+
);
60+
},
61+
[Tag, tagProps, onItemClick, editMode, item, onPinButtonClick],
5762
);
63+
64+
const iconNode = item.icon ? (
65+
<Icon className={b('icon')} data={item.icon} size={item.iconSize} />
66+
) : null;
67+
const titleNode = item.title;
68+
const params: MakeItemParams = {icon: iconNode, title: titleNode};
69+
const opts = {collapsed: false, compact: false, item, ref};
70+
71+
if (typeof item.itemWrapper === 'function') {
72+
return item.itemWrapper(params, makeNode, opts) as React.ReactElement;
73+
}
74+
75+
return makeNode(params);
5876
};

src/components/AllPagesPanel/AllPagesPanel.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,17 @@ export const AllPagesPanel: React.FC<AllPagesPanelProps> = (props) => {
4848
}
4949
}, [isEditMode, onEditModeChanged, editMenuProps]);
5050

51-
const onItemClick = useCallback((item: ListItemData<MenuItem>) => {
52-
//@ts-ignore TODO fix when @gravity-ui/uikit/List will provide event arg on item click
53-
item.onItemClick?.(item, false);
54-
}, []);
51+
const onItemClick = useCallback(
52+
(
53+
item: ListItemData<MenuItem>,
54+
_index: number,
55+
_fromKeyboard?: boolean,
56+
event?: React.MouseEvent<HTMLDivElement, MouseEvent> | React.KeyboardEvent<HTMLElement>,
57+
) => {
58+
item.onItemClick?.(item, false, event as React.MouseEvent<HTMLDivElement, MouseEvent>);
59+
},
60+
[],
61+
);
5562

5663
const togglePageVisibility = useCallback(
5764
(item: MenuItem) => {

0 commit comments

Comments
 (0)