Skip to content

Commit 5b46f16

Browse files
jenshenJbenax-se
authored andcommitted
feat(AsideHeader): preventUserRemoving prop for menu item and callbacks for AsideHeader (#314)
* feat: add preventUserRemoving prop for menu item and add callbacks for aside header
1 parent c79b52e commit 5b46f16

File tree

4 files changed

+20
-5
lines changed

4 files changed

+20
-5
lines changed

src/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const AllPagesListItem: React.FC<AllPagesListItemProps> = (props) => {
4242
<Icon className={b('icon')} data={item.icon} size={item.iconSize} />
4343
) : null}
4444
<span className={b('text')}>{item.title}</span>
45-
{editMode && (
45+
{editMode && !item.preventUserRemoving && (
4646
<Button
4747
onClick={onPinButtonClick}
4848
view={item.hidden ? 'flat-secondary' : 'flat-action'}

src/components/AllPagesPanel/AllPagesPanel.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ interface AllPagesPanelProps {
2424

2525
export const AllPagesPanel: React.FC<AllPagesPanelProps> = (props) => {
2626
const {startEditIcon, onEditModeChanged, className} = props;
27-
const {menuItems, onMenuItemsChanged} = useAsideHeaderInnerContext();
27+
const {menuItems, onMenuItemsChanged, editMenuProps} = useAsideHeaderInnerContext();
28+
2829
const menuItemsRef = useRef(menuItems);
2930
menuItemsRef.current = menuItems;
3031

@@ -37,7 +38,11 @@ export const AllPagesPanel: React.FC<AllPagesPanelProps> = (props) => {
3738

3839
useEffect(() => {
3940
onEditModeChanged?.(isEditMode);
40-
}, [isEditMode, onEditModeChanged]);
41+
42+
if (isEditMode) {
43+
editMenuProps?.onOpenEditMode?.();
44+
}
45+
}, [isEditMode, onEditModeChanged, editMenuProps]);
4146

4247
const onItemClick = useCallback((item: ListItemData<MenuItem>) => {
4348
//@ts-ignore TODO fix when @gravity-ui/uikit/List will provide event arg on item click
@@ -54,6 +59,7 @@ export const AllPagesPanel: React.FC<AllPagesPanelProps> = (props) => {
5459
const originItems = menuItemsRef.current.filter(
5560
(menuItem) => menuItem.id !== ALL_PAGES_ID,
5661
);
62+
editMenuProps?.onToggleMenuItem?.(changedItem);
5763
onMenuItemsChanged(
5864
originItems.map((menuItem) => {
5965
if (menuItem.id !== changedItem.id) {
@@ -63,7 +69,7 @@ export const AllPagesPanel: React.FC<AllPagesPanelProps> = (props) => {
6369
}),
6470
);
6571
},
66-
[onMenuItemsChanged],
72+
[onMenuItemsChanged, editMenuProps],
6773
);
6874

6975
const itemRender = useCallback(
@@ -81,14 +87,15 @@ export const AllPagesPanel: React.FC<AllPagesPanelProps> = (props) => {
8187
if (!onMenuItemsChanged) {
8288
return;
8389
}
90+
editMenuProps?.onResetSettingsToDefault?.();
8491
const originItems = menuItemsRef.current.filter((item) => item.id !== ALL_PAGES_ID);
8592
onMenuItemsChanged(
8693
originItems.map((item) => ({
8794
...item,
8895
hidden: false,
8996
})),
9097
);
91-
}, [onMenuItemsChanged]);
98+
}, [onMenuItemsChanged, editMenuProps]);
9299
return (
93100
<Flex className={b(null, className)} gap="5" direction="column">
94101
<Flex gap="4" alignItems="center" justifyContent="space-between">

src/components/AsideHeader/types.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ export interface LayoutProps {
1818
topAlert?: AsideHeaderTopAlertProps;
1919
}
2020

21+
export interface EditMenuProps {
22+
onOpenEditMode?: () => void;
23+
onToggleMenuItem?: (changedItem: MenuItem) => void;
24+
onResetSettingsToDefault?: () => void;
25+
}
26+
2127
export interface AsideHeaderGeneralProps extends QAProps {
2228
logo?: LogoProps;
2329
multipleTooltip?: boolean;
@@ -35,6 +41,7 @@ export interface AsideHeaderGeneralProps extends QAProps {
3541
compact: boolean;
3642
asideRef: React.RefObject<HTMLDivElement>;
3743
}) => React.ReactNode;
44+
editMenuProps?: EditMenuProps;
3845
onClosePanel?: () => void;
3946
onChangeCompact?: (compact: boolean) => void;
4047
openModalSubscriber?: (subscriber: OpenModalSubscriber) => void;

src/components/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export interface MenuItem extends QAProps {
3939
ref: React.RefObject<HTMLElement>;
4040
},
4141
) => React.ReactNode;
42+
preventUserRemoving?: boolean;
4243
rightAdornment?: React.ReactNode;
4344
type?: MenuItemType;
4445
afterMoreButton?: boolean;

0 commit comments

Comments
 (0)