@gravity-ui/navigation 6.0.0-beta.0 → 6.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/components/AsideHeader/AsideHeader.css +1 -1
- package/build/cjs/components/AsideHeader/AsideHeader.module.scss.js +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js +52 -16
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.d.ts +20 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.js +56 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/allPagesSortable.d.ts +7 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/allPagesSortable.js +26 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/allPagesSortable.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/constants.d.ts +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/constants.js +3 -3
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/constants.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.d.ts +10 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js +28 -6
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.css +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +9 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.js +99 -28
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.module.scss.js +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.js +27 -10
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.types.d.ts +8 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js +20 -7
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.d.ts +6 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.js +8 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.css +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.d.ts +12 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js +24 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js +8 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/index.d.ts +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.d.ts +28 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js +172 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/constants.d.ts +2 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/constants.js +3 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/constants.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/grouping.d.ts +27 -8
- package/build/cjs/components/AsideHeader/components/CompositeBar/grouping.js +53 -24
- package/build/cjs/components/AsideHeader/components/CompositeBar/grouping.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.d.ts +14 -3
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.js +119 -35
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/FirstPanel.js +4 -3
- package/build/cjs/components/AsideHeader/components/FirstPanel.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.css +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.css +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.css +1 -1
- package/build/cjs/components/AsideHeader/types.d.ts +40 -0
- package/build/cjs/components/AsideHeader/types.js +4 -0
- package/build/cjs/components/AsideHeader/types.js.map +1 -1
- package/build/esm/components/AsideHeader/AsideHeader.css +1 -1
- package/build/esm/components/AsideHeader/AsideHeader.module.scss.js +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js +50 -14
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.d.ts +20 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.js +50 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.js.map +1 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/allPagesSortable.d.ts +7 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/allPagesSortable.js +23 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/allPagesSortable.js.map +1 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/constants.d.ts +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/constants.js +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/constants.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.d.ts +10 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js +28 -6
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.css +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +9 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js +102 -31
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.module.scss.js +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.js +28 -11
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.types.d.ts +8 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js +20 -7
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.d.ts +6 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.js +6 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.css +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.d.ts +12 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js +22 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js +4 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/index.d.ts +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.d.ts +28 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js +170 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/constants.d.ts +2 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/constants.js +3 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/constants.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/grouping.d.ts +27 -8
- package/build/esm/components/AsideHeader/components/CompositeBar/grouping.js +52 -23
- package/build/esm/components/AsideHeader/components/CompositeBar/grouping.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.d.ts +14 -3
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.js +110 -29
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.js.map +1 -1
- package/build/esm/components/AsideHeader/components/FirstPanel.js +4 -3
- package/build/esm/components/AsideHeader/components/FirstPanel.js.map +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.css +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.css +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.css +1 -1
- package/build/esm/components/AsideHeader/types.d.ts +40 -0
- package/build/esm/components/AsideHeader/types.js +3 -1
- package/build/esm/components/AsideHeader/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,8 +4,11 @@ import { Gear } from '@gravity-ui/icons';
|
|
|
4
4
|
import { Flex, Text, Tooltip, Button, Icon, List } from '@gravity-ui/uikit';
|
|
5
5
|
import { createBlock } from '../../../utils/cn.js';
|
|
6
6
|
import { useAsideHeaderInnerContext } from '../../AsideHeaderContext.js';
|
|
7
|
+
import { buildCompositeBarRows } from '../CompositeBar/grouping.js';
|
|
7
8
|
import { AllPagesListItem } from './AllPagesListItem/AllPagesListItem.js';
|
|
8
|
-
import {
|
|
9
|
+
import { getCompositeBarHeaderGroupId, rowsToAllPagesDisplayItems, reorderMenuItemsByCompositeBarRows, getAllPagesEditModeFlatItems, ALL_PAGES_PANEL_ROW_BUILD_OPTIONS } from './allPagesEditDisplay.js';
|
|
10
|
+
import { isAllPagesSortableItem, reorderAllPagesSortableItems } from './allPagesSortable.js';
|
|
11
|
+
import { ALL_PAGES_ID } from '../../types.js';
|
|
9
12
|
import i18n from './i18n/index.js';
|
|
10
13
|
import { useGroupedMenuItems } from './useGroupedMenuItems.js';
|
|
11
14
|
import styles from './AllPagesPanel.module.scss.js';
|
|
@@ -13,7 +16,7 @@ import styles from './AllPagesPanel.module.scss.js';
|
|
|
13
16
|
const b = createBlock('all-pages-panel', styles);
|
|
14
17
|
const AllPagesPanel = (props) => {
|
|
15
18
|
const { startEditIcon, onEditModeChanged, className } = props;
|
|
16
|
-
const { menuItems, defaultMenuItems, onMenuItemsChanged, editMenuProps } = useAsideHeaderInnerContext();
|
|
19
|
+
const { menuItems, defaultMenuItems, onMenuItemsChanged, editMenuProps, menuGroups, onMenuGroupsChanged, } = useAsideHeaderInnerContext();
|
|
17
20
|
const menuItemsRef = useRef(menuItems);
|
|
18
21
|
menuItemsRef.current = menuItems;
|
|
19
22
|
const [isEditMode, setIsEditMode] = useState(false);
|
|
@@ -21,7 +24,7 @@ const AllPagesPanel = (props) => {
|
|
|
21
24
|
const toggleEditMode = useCallback(() => {
|
|
22
25
|
setIsEditMode((prev) => !prev);
|
|
23
26
|
}, []);
|
|
24
|
-
const groupedItems = useGroupedMenuItems(menuItems);
|
|
27
|
+
const groupedItems = useGroupedMenuItems(menuItems, isEditMode, menuGroups, onMenuGroupsChanged);
|
|
25
28
|
useEffect(() => {
|
|
26
29
|
var _a;
|
|
27
30
|
onEditModeChanged === null || onEditModeChanged === undefined ? undefined : onEditModeChanged(isEditMode);
|
|
@@ -35,20 +38,31 @@ const AllPagesPanel = (props) => {
|
|
|
35
38
|
(_a = item.onItemClick) === null || _a === undefined ? undefined : _a.call(item, item, false, event);
|
|
36
39
|
}, []);
|
|
37
40
|
const togglePageVisibility = useCallback((item) => {
|
|
38
|
-
var _a;
|
|
41
|
+
var _a, _b;
|
|
42
|
+
const groupIdFromHeader = getCompositeBarHeaderGroupId(item.id);
|
|
43
|
+
if (groupIdFromHeader && menuGroups && onMenuGroupsChanged) {
|
|
44
|
+
const previousGroup = menuGroups.find((g) => g.id === groupIdFromHeader);
|
|
45
|
+
if (!previousGroup) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const changedGroup = Object.assign(Object.assign({}, previousGroup), { hidden: !previousGroup.hidden });
|
|
49
|
+
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onToggleMenuGroup) === null || _a === undefined ? undefined : _a.call(editMenuProps, changedGroup);
|
|
50
|
+
onMenuGroupsChanged(menuGroups.map((g) => (g.id === groupIdFromHeader ? changedGroup : g)));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
39
53
|
if (!onMenuItemsChanged) {
|
|
40
54
|
return;
|
|
41
55
|
}
|
|
42
56
|
const changedItem = Object.assign(Object.assign({}, item), { hidden: !item.hidden });
|
|
43
57
|
const originItems = menuItemsRef.current.filter((menuItem) => menuItem.id !== ALL_PAGES_ID);
|
|
44
|
-
(
|
|
58
|
+
(_b = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onToggleMenuItem) === null || _b === undefined ? undefined : _b.call(editMenuProps, changedItem);
|
|
45
59
|
onMenuItemsChanged(originItems.map((menuItem) => {
|
|
46
60
|
if (menuItem.id !== changedItem.id) {
|
|
47
61
|
return menuItem;
|
|
48
62
|
}
|
|
49
63
|
return changedItem;
|
|
50
64
|
}));
|
|
51
|
-
}, [onMenuItemsChanged, editMenuProps]);
|
|
65
|
+
}, [onMenuItemsChanged, editMenuProps, menuGroups, onMenuGroupsChanged]);
|
|
52
66
|
const onDragEnd = useCallback(() => {
|
|
53
67
|
setDraggingItemTitle(null);
|
|
54
68
|
}, [setDraggingItemTitle]);
|
|
@@ -71,16 +85,38 @@ const AllPagesPanel = (props) => {
|
|
|
71
85
|
}, [onMenuItemsChanged, editMenuProps, defaultMenuItems]);
|
|
72
86
|
const changeItemsOrder = useCallback(({ oldIndex, newIndex }) => {
|
|
73
87
|
var _a;
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
88
|
+
const withoutAllPages = menuItemsRef.current.filter(({ id, type }) => id !== ALL_PAGES_ID && type !== 'divider');
|
|
89
|
+
let element;
|
|
90
|
+
let reordered;
|
|
91
|
+
if (menuGroups === null || menuGroups === undefined ? undefined : menuGroups.length) {
|
|
92
|
+
const rows = buildCompositeBarRows(withoutAllPages, menuGroups, ALL_PAGES_PANEL_ROW_BUILD_OPTIONS);
|
|
93
|
+
const display = rowsToAllPagesDisplayItems(rows, {
|
|
94
|
+
enableGroupHeaderPins: Boolean(onMenuGroupsChanged),
|
|
95
|
+
});
|
|
96
|
+
element = display[oldIndex];
|
|
97
|
+
reordered = reorderMenuItemsByCompositeBarRows(withoutAllPages, menuGroups, oldIndex, newIndex);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const sortableBefore = withoutAllPages.filter(isAllPagesSortableItem);
|
|
101
|
+
element = sortableBefore[oldIndex];
|
|
102
|
+
reordered = reorderAllPagesSortableItems(withoutAllPages, oldIndex, newIndex);
|
|
103
|
+
}
|
|
104
|
+
onMenuItemsChanged === null || onMenuItemsChanged === undefined ? undefined : onMenuItemsChanged(reordered);
|
|
78
105
|
setDraggingItemTitle(null);
|
|
79
|
-
|
|
80
|
-
|
|
106
|
+
if (element) {
|
|
107
|
+
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onChangeItemsOrder) === null || _a === undefined ? undefined : _a.call(editMenuProps, element, oldIndex, newIndex);
|
|
108
|
+
}
|
|
109
|
+
}, [onMenuItemsChanged, editMenuProps, menuGroups, onMenuGroupsChanged]);
|
|
81
110
|
const sortableItems = useMemo(() => {
|
|
82
|
-
|
|
83
|
-
|
|
111
|
+
const without = menuItems.filter(({ id, type }) => id !== ALL_PAGES_ID && type !== 'divider');
|
|
112
|
+
const pinHeaders = Boolean(onMenuGroupsChanged);
|
|
113
|
+
if (menuGroups === null || menuGroups === undefined ? undefined : menuGroups.length) {
|
|
114
|
+
return getAllPagesEditModeFlatItems(without, menuGroups, {
|
|
115
|
+
enableGroupHeaderPins: pinHeaders,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return without.filter(isAllPagesSortableItem);
|
|
119
|
+
}, [menuItems, menuGroups, onMenuGroupsChanged]);
|
|
84
120
|
return (React__default.createElement(Flex, { className: b(null, className), gap: "5", direction: "column" },
|
|
85
121
|
React__default.createElement(Flex, { gap: "4", alignItems: "center", justifyContent: "space-between" },
|
|
86
122
|
React__default.createElement(Text, { variant: "subheader-2" }, isEditMode ? i18n('all-panel.title.editing') : i18n('all-panel.title.main')),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AllPagesPanel.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.tsx"],"sourcesContent":["import React, {ReactNode, useCallback, useEffect, useMemo, useRef, useState} from 'react';\n\nimport {Gear} from '@gravity-ui/icons';\nimport {Button, Flex, Icon, List, ListItemData, ListProps, Text, Tooltip} from '@gravity-ui/uikit';\n\nimport {createBlock} from '../../../utils/cn';\nimport {useAsideHeaderInnerContext} from '../../AsideHeaderContext';\nimport {AsideHeaderItem} from '../../types';\n\nimport {AllPagesListItem} from './AllPagesListItem';\nimport {ALL_PAGES_ID} from './constants';\nimport i18n from './i18n';\nimport {useGroupedMenuItems} from './useGroupedMenuItems';\n\nimport styles from './AllPagesPanel.module.scss';\n\nconst b = createBlock('all-pages-panel', styles);\n\ninterface AllPagesPanelProps {\n className?: string;\n startEditIcon?: React.ReactNode;\n onEditModeChanged?: (isEditMode: boolean) => void;\n}\n\nexport const AllPagesPanel: React.FC<AllPagesPanelProps> = (props) => {\n const {startEditIcon, onEditModeChanged, className} = props;\n const {menuItems, defaultMenuItems, onMenuItemsChanged, editMenuProps} =\n useAsideHeaderInnerContext();\n\n const menuItemsRef = useRef(menuItems);\n menuItemsRef.current = menuItems;\n\n const [isEditMode, setIsEditMode] = useState(false);\n\n const [draggingItemTitle, setDraggingItemTitle] = useState<ReactNode | null>(null);\n\n const toggleEditMode = useCallback(() => {\n setIsEditMode((prev) => !prev);\n }, []);\n\n const groupedItems = useGroupedMenuItems(menuItems);\n\n useEffect(() => {\n onEditModeChanged?.(isEditMode);\n\n if (isEditMode) {\n editMenuProps?.onOpenEditMode?.();\n }\n }, [isEditMode, onEditModeChanged, editMenuProps]);\n\n const onItemClick = useCallback<NonNullable<ListProps<AsideHeaderItem>['onItemClick']>>(\n (item, _index, _forwardKey, event) => {\n // TODO: make event an optional argument\n item.onItemClick?.(item, false, event as React.MouseEvent<HTMLElement, MouseEvent>);\n },\n [],\n );\n\n const togglePageVisibility = useCallback(\n (item: AsideHeaderItem) => {\n if (!onMenuItemsChanged) {\n return;\n }\n const changedItem: AsideHeaderItem = {\n ...item,\n hidden: !item.hidden,\n };\n\n const originItems = menuItemsRef.current.filter(\n (menuItem) => menuItem.id !== ALL_PAGES_ID,\n );\n editMenuProps?.onToggleMenuItem?.(changedItem);\n onMenuItemsChanged(\n originItems.map((menuItem) => {\n if (menuItem.id !== changedItem.id) {\n return menuItem;\n }\n return changedItem;\n }),\n );\n },\n [onMenuItemsChanged, editMenuProps],\n );\n\n const onDragEnd = useCallback(() => {\n setDraggingItemTitle(null);\n }, [setDraggingItemTitle]);\n\n const itemRender = useCallback(\n (\n asideHeaderItem: ListItemData<AsideHeaderItem>,\n _isActive: boolean,\n _itemIndex: number,\n ) => {\n const onDragStart = () => {\n setDraggingItemTitle(asideHeaderItem.title);\n };\n\n return (\n <AllPagesListItem\n item={asideHeaderItem}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n editMode={isEditMode}\n onToggle={() => togglePageVisibility(asideHeaderItem)}\n enableSorting={editMenuProps?.enableSorting}\n />\n );\n },\n [isEditMode, togglePageVisibility, onDragEnd, setDraggingItemTitle, editMenuProps],\n );\n\n const onResetToDefaultClick = useCallback(() => {\n if (!onMenuItemsChanged) {\n return;\n }\n editMenuProps?.onResetSettingsToDefault?.();\n const originItems = defaultMenuItems?.filter(({id}) => id !== ALL_PAGES_ID);\n\n if (originItems) {\n onMenuItemsChanged(originItems);\n }\n }, [onMenuItemsChanged, editMenuProps, defaultMenuItems]);\n\n const changeItemsOrder = useCallback(\n ({oldIndex, newIndex}: {oldIndex: number; newIndex: number}) => {\n const newItems = menuItemsRef.current.filter(({id}) => id !== ALL_PAGES_ID);\n\n const element = newItems.splice(oldIndex, 1)[0];\n newItems.splice(newIndex, 0, element);\n\n onMenuItemsChanged?.(newItems.filter(({type}) => type !== 'divider'));\n\n setDraggingItemTitle(null);\n editMenuProps?.onChangeItemsOrder?.(element, oldIndex, newIndex);\n },\n [onMenuItemsChanged, editMenuProps],\n );\n\n const sortableItems = useMemo(() => {\n return menuItems.filter(\n ({id, afterMoreButton, type}) =>\n id !== ALL_PAGES_ID && !afterMoreButton && type !== 'divider',\n );\n }, [menuItems]);\n\n return (\n <Flex className={b(null, className)} gap=\"5\" direction=\"column\">\n <Flex gap=\"4\" alignItems=\"center\" justifyContent=\"space-between\">\n <Text variant=\"subheader-2\">\n {isEditMode ? i18n('all-panel.title.editing') : i18n('all-panel.title.main')}\n </Text>\n <Tooltip content={i18n('all-panel.title.editing')}>\n <Button selected={isEditMode} view=\"normal\" onClick={toggleEditMode}>\n {startEditIcon ? startEditIcon : <Icon data={Gear} />}\n </Button>\n </Tooltip>\n </Flex>\n <Flex className={b('content', {editMode: isEditMode})} gap=\"5\" direction=\"column\">\n {isEditMode && editMenuProps?.enableSorting ? (\n <div>\n <List\n itemClassName={b('item', {editMode: true})}\n itemHeight={40}\n onSortEnd={changeItemsOrder}\n sortable\n virtualized={false}\n filterable={false}\n items={sortableItems}\n onItemClick={onItemClick}\n renderItem={itemRender}\n />\n\n {draggingItemTitle && (\n <div className={b('drag-placeholder')}>{draggingItemTitle}</div>\n )}\n </div>\n ) : (\n Object.keys(groupedItems).map((category) => {\n return (\n <Flex key={category} direction=\"column\" gap=\"3\">\n <Text className={b('category')} variant=\"body-1\" color=\"secondary\">\n {category}\n </Text>\n <List\n virtualized={false}\n filterable={false}\n items={groupedItems[category]}\n onItemClick={onItemClick}\n renderItem={itemRender}\n />\n </Flex>\n );\n })\n )}\n </Flex>\n {isEditMode && (\n <Button onClick={onResetToDefaultClick}>{i18n('all-panel.resetToDefault')}</Button>\n )}\n </Flex>\n );\n};\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AllPagesPanel.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.tsx"],"sourcesContent":["import React, {ReactNode, useCallback, useEffect, useMemo, useRef, useState} from 'react';\n\nimport {Gear} from '@gravity-ui/icons';\nimport {Button, Flex, Icon, List, ListItemData, ListProps, Text, Tooltip} from '@gravity-ui/uikit';\n\nimport type {MenuGroup} from '../../../types';\nimport {createBlock} from '../../../utils/cn';\nimport {useAsideHeaderInnerContext} from '../../AsideHeaderContext';\nimport {AsideHeaderItem} from '../../types';\nimport {buildCompositeBarRows} from '../CompositeBar/grouping';\n\nimport {AllPagesListItem} from './AllPagesListItem';\nimport {\n ALL_PAGES_PANEL_ROW_BUILD_OPTIONS,\n getAllPagesEditModeFlatItems,\n getCompositeBarHeaderGroupId,\n reorderMenuItemsByCompositeBarRows,\n rowsToAllPagesDisplayItems,\n} from './allPagesEditDisplay';\nimport {isAllPagesSortableItem, reorderAllPagesSortableItems} from './allPagesSortable';\nimport {ALL_PAGES_ID} from './constants';\nimport i18n from './i18n';\nimport {useGroupedMenuItems} from './useGroupedMenuItems';\n\nimport styles from './AllPagesPanel.module.scss';\n\nconst b = createBlock('all-pages-panel', styles);\n\ninterface AllPagesPanelProps {\n className?: string;\n startEditIcon?: React.ReactNode;\n onEditModeChanged?: (isEditMode: boolean) => void;\n}\n\nexport const AllPagesPanel: React.FC<AllPagesPanelProps> = (props) => {\n const {startEditIcon, onEditModeChanged, className} = props;\n const {\n menuItems,\n defaultMenuItems,\n onMenuItemsChanged,\n editMenuProps,\n menuGroups,\n onMenuGroupsChanged,\n } = useAsideHeaderInnerContext();\n\n const menuItemsRef = useRef(menuItems);\n menuItemsRef.current = menuItems;\n\n const [isEditMode, setIsEditMode] = useState(false);\n\n const [draggingItemTitle, setDraggingItemTitle] = useState<ReactNode | null>(null);\n\n const toggleEditMode = useCallback(() => {\n setIsEditMode((prev) => !prev);\n }, []);\n\n const groupedItems = useGroupedMenuItems(\n menuItems,\n isEditMode,\n menuGroups,\n onMenuGroupsChanged,\n );\n\n useEffect(() => {\n onEditModeChanged?.(isEditMode);\n\n if (isEditMode) {\n editMenuProps?.onOpenEditMode?.();\n }\n }, [isEditMode, onEditModeChanged, editMenuProps]);\n\n const onItemClick = useCallback<NonNullable<ListProps<AsideHeaderItem>['onItemClick']>>(\n (item, _index, _forwardKey, event) => {\n // TODO: make event an optional argument\n item.onItemClick?.(item, false, event as React.MouseEvent<HTMLElement, MouseEvent>);\n },\n [],\n );\n\n const togglePageVisibility = useCallback(\n (item: AsideHeaderItem) => {\n const groupIdFromHeader = getCompositeBarHeaderGroupId(item.id);\n if (groupIdFromHeader && menuGroups && onMenuGroupsChanged) {\n const previousGroup = menuGroups.find((g) => g.id === groupIdFromHeader);\n if (!previousGroup) {\n return;\n }\n const changedGroup: MenuGroup = {\n ...previousGroup,\n hidden: !previousGroup.hidden,\n };\n editMenuProps?.onToggleMenuGroup?.(changedGroup);\n onMenuGroupsChanged(\n menuGroups.map((g) => (g.id === groupIdFromHeader ? changedGroup : g)),\n );\n return;\n }\n\n if (!onMenuItemsChanged) {\n return;\n }\n\n const changedItem: AsideHeaderItem = {\n ...item,\n hidden: !item.hidden,\n };\n\n const originItems = menuItemsRef.current.filter(\n (menuItem) => menuItem.id !== ALL_PAGES_ID,\n );\n editMenuProps?.onToggleMenuItem?.(changedItem);\n onMenuItemsChanged(\n originItems.map((menuItem) => {\n if (menuItem.id !== changedItem.id) {\n return menuItem;\n }\n return changedItem;\n }),\n );\n },\n [onMenuItemsChanged, editMenuProps, menuGroups, onMenuGroupsChanged],\n );\n\n const onDragEnd = useCallback(() => {\n setDraggingItemTitle(null);\n }, [setDraggingItemTitle]);\n\n const itemRender = useCallback(\n (\n asideHeaderItem: ListItemData<AsideHeaderItem>,\n _isActive: boolean,\n _itemIndex: number,\n ) => {\n const onDragStart = () => {\n setDraggingItemTitle(asideHeaderItem.title);\n };\n\n return (\n <AllPagesListItem\n item={asideHeaderItem}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n editMode={isEditMode}\n onToggle={() => togglePageVisibility(asideHeaderItem)}\n enableSorting={editMenuProps?.enableSorting}\n />\n );\n },\n [isEditMode, togglePageVisibility, onDragEnd, setDraggingItemTitle, editMenuProps],\n );\n\n const onResetToDefaultClick = useCallback(() => {\n if (!onMenuItemsChanged) {\n return;\n }\n editMenuProps?.onResetSettingsToDefault?.();\n const originItems = defaultMenuItems?.filter(({id}) => id !== ALL_PAGES_ID);\n\n if (originItems) {\n onMenuItemsChanged(originItems);\n }\n }, [onMenuItemsChanged, editMenuProps, defaultMenuItems]);\n\n const changeItemsOrder = useCallback(\n ({oldIndex, newIndex}: {oldIndex: number; newIndex: number}) => {\n const withoutAllPages = menuItemsRef.current.filter(\n ({id, type}) => id !== ALL_PAGES_ID && type !== 'divider',\n );\n\n let element: AsideHeaderItem | undefined;\n let reordered: AsideHeaderItem[];\n\n if (menuGroups?.length) {\n const rows = buildCompositeBarRows(\n withoutAllPages,\n menuGroups,\n ALL_PAGES_PANEL_ROW_BUILD_OPTIONS,\n );\n const display = rowsToAllPagesDisplayItems(rows, {\n enableGroupHeaderPins: Boolean(onMenuGroupsChanged),\n });\n element = display[oldIndex];\n reordered = reorderMenuItemsByCompositeBarRows(\n withoutAllPages,\n menuGroups,\n oldIndex,\n newIndex,\n );\n } else {\n const sortableBefore = withoutAllPages.filter(isAllPagesSortableItem);\n element = sortableBefore[oldIndex];\n reordered = reorderAllPagesSortableItems(withoutAllPages, oldIndex, newIndex);\n }\n\n onMenuItemsChanged?.(reordered);\n\n setDraggingItemTitle(null);\n if (element) {\n editMenuProps?.onChangeItemsOrder?.(element, oldIndex, newIndex);\n }\n },\n [onMenuItemsChanged, editMenuProps, menuGroups, onMenuGroupsChanged],\n );\n\n const sortableItems = useMemo(() => {\n const without = menuItems.filter(({id, type}) => id !== ALL_PAGES_ID && type !== 'divider');\n const pinHeaders = Boolean(onMenuGroupsChanged);\n if (menuGroups?.length) {\n return getAllPagesEditModeFlatItems(without, menuGroups, {\n enableGroupHeaderPins: pinHeaders,\n });\n }\n return without.filter(isAllPagesSortableItem);\n }, [menuItems, menuGroups, onMenuGroupsChanged]);\n\n return (\n <Flex className={b(null, className)} gap=\"5\" direction=\"column\">\n <Flex gap=\"4\" alignItems=\"center\" justifyContent=\"space-between\">\n <Text variant=\"subheader-2\">\n {isEditMode ? i18n('all-panel.title.editing') : i18n('all-panel.title.main')}\n </Text>\n <Tooltip content={i18n('all-panel.title.editing')}>\n <Button selected={isEditMode} view=\"normal\" onClick={toggleEditMode}>\n {startEditIcon ? startEditIcon : <Icon data={Gear} />}\n </Button>\n </Tooltip>\n </Flex>\n <Flex className={b('content', {editMode: isEditMode})} gap=\"5\" direction=\"column\">\n {isEditMode && editMenuProps?.enableSorting ? (\n <div>\n <List\n itemClassName={b('item', {editMode: true})}\n itemHeight={40}\n onSortEnd={changeItemsOrder}\n sortable\n virtualized={false}\n filterable={false}\n items={sortableItems}\n onItemClick={onItemClick}\n renderItem={itemRender}\n />\n\n {draggingItemTitle && (\n <div className={b('drag-placeholder')}>{draggingItemTitle}</div>\n )}\n </div>\n ) : (\n Object.keys(groupedItems).map((category) => {\n return (\n <Flex key={category} direction=\"column\" gap=\"3\">\n <Text className={b('category')} variant=\"body-1\" color=\"secondary\">\n {category}\n </Text>\n <List\n virtualized={false}\n filterable={false}\n items={groupedItems[category]}\n onItemClick={onItemClick}\n renderItem={itemRender}\n />\n </Flex>\n );\n })\n )}\n </Flex>\n {isEditMode && (\n <Button onClick={onResetToDefaultClick}>{i18n('all-panel.resetToDefault')}</Button>\n )}\n </Flex>\n );\n};\n"],"names":["React"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { MenuGroup } from '../../../types';
|
|
2
|
+
import { AsideHeaderItem } from '../../types';
|
|
3
|
+
import { type CompositeBarRow } from '../CompositeBar/grouping';
|
|
4
|
+
/** Options passed to {@link buildCompositeBarRows} for All pages panel (edit-mode rows). */
|
|
5
|
+
export declare const ALL_PAGES_PANEL_ROW_BUILD_OPTIONS: {
|
|
6
|
+
readonly includeHidden: true;
|
|
7
|
+
readonly includeHiddenGroups: true;
|
|
8
|
+
};
|
|
9
|
+
export declare function isCompositeBarGroupHeaderItem(item: AsideHeaderItem): boolean;
|
|
10
|
+
export declare function getCompositeBarHeaderGroupId(itemId: string): string | undefined;
|
|
11
|
+
export declare function rowsToAllPagesDisplayItems(rows: CompositeBarRow[], options?: {
|
|
12
|
+
enableGroupHeaderPins?: boolean;
|
|
13
|
+
}): AsideHeaderItem[];
|
|
14
|
+
/**
|
|
15
|
+
* Edit-mode list: top-level items + one row per menu group (header only), same order as CompositeBar.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getAllPagesEditModeFlatItems(asideHeaderItems: AsideHeaderItem[], menuGroups: MenuGroup[] | undefined, options?: {
|
|
18
|
+
enableGroupHeaderPins?: boolean;
|
|
19
|
+
}): AsideHeaderItem[];
|
|
20
|
+
export declare function reorderMenuItemsByCompositeBarRows(withoutAllPagesNoDividers: AsideHeaderItem[], menuGroups: MenuGroup[], oldIndex: number, newIndex: number): AsideHeaderItem[];
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX } from '../CompositeBar/constants.js';
|
|
2
|
+
import { buildCompositeBarRows, flattenCompositeBarRows } from '../CompositeBar/grouping.js';
|
|
3
|
+
import { makeGroupHeaderAsideItem } from '../CompositeBar/utils.js';
|
|
4
|
+
|
|
5
|
+
/** Options passed to {@link buildCompositeBarRows} for All pages panel (edit-mode rows). */
|
|
6
|
+
const ALL_PAGES_PANEL_ROW_BUILD_OPTIONS = {
|
|
7
|
+
includeHidden: true,
|
|
8
|
+
includeHiddenGroups: true,
|
|
9
|
+
};
|
|
10
|
+
function getCompositeBarHeaderGroupId(itemId) {
|
|
11
|
+
if (!itemId.startsWith(COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX)) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
return itemId.slice(COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX.length);
|
|
15
|
+
}
|
|
16
|
+
function rowsToAllPagesDisplayItems(rows, options) {
|
|
17
|
+
const showPins = Boolean(options === null || options === undefined ? undefined : options.enableGroupHeaderPins);
|
|
18
|
+
return rows.map((row) => {
|
|
19
|
+
var _a;
|
|
20
|
+
if (row.kind === 'item') {
|
|
21
|
+
return row.item;
|
|
22
|
+
}
|
|
23
|
+
const header = makeGroupHeaderAsideItem(row.group);
|
|
24
|
+
const firstCategory = (_a = row.items[0]) === null || _a === undefined ? undefined : _a.category;
|
|
25
|
+
return Object.assign(Object.assign({}, header), { category: firstCategory !== null && firstCategory !== undefined ? firstCategory : row.group.title, hidden: Boolean(row.group.hidden), preventUserRemoving: !showPins });
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Edit-mode list: top-level items + one row per menu group (header only), same order as CompositeBar.
|
|
30
|
+
*/
|
|
31
|
+
function getAllPagesEditModeFlatItems(asideHeaderItems, menuGroups, options) {
|
|
32
|
+
if (!(menuGroups === null || menuGroups === undefined ? undefined : menuGroups.length)) {
|
|
33
|
+
return asideHeaderItems.filter((item) => !item.groupId);
|
|
34
|
+
}
|
|
35
|
+
const rows = buildCompositeBarRows(asideHeaderItems, menuGroups, ALL_PAGES_PANEL_ROW_BUILD_OPTIONS);
|
|
36
|
+
return rowsToAllPagesDisplayItems(rows, options);
|
|
37
|
+
}
|
|
38
|
+
function reorderMenuItemsByCompositeBarRows(withoutAllPagesNoDividers, menuGroups, oldIndex, newIndex) {
|
|
39
|
+
const rows = buildCompositeBarRows(withoutAllPagesNoDividers, menuGroups, ALL_PAGES_PANEL_ROW_BUILD_OPTIONS);
|
|
40
|
+
const reordered = [...rows];
|
|
41
|
+
const [moved] = reordered.splice(oldIndex, 1);
|
|
42
|
+
if (moved === undefined) {
|
|
43
|
+
return flattenCompositeBarRows(rows);
|
|
44
|
+
}
|
|
45
|
+
reordered.splice(newIndex, 0, moved);
|
|
46
|
+
return flattenCompositeBarRows(reordered);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { ALL_PAGES_PANEL_ROW_BUILD_OPTIONS, getAllPagesEditModeFlatItems, getCompositeBarHeaderGroupId, reorderMenuItemsByCompositeBarRows, rowsToAllPagesDisplayItems };
|
|
50
|
+
//# sourceMappingURL=allPagesEditDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allPagesEditDisplay.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.ts"],"sourcesContent":["import type {MenuGroup} from '../../../types';\nimport {AsideHeaderItem} from '../../types';\nimport {COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX} from '../CompositeBar/constants';\nimport {\n type CompositeBarRow,\n buildCompositeBarRows,\n flattenCompositeBarRows,\n} from '../CompositeBar/grouping';\nimport {makeGroupHeaderAsideItem} from '../CompositeBar/utils';\n\n/** Options passed to {@link buildCompositeBarRows} for All pages panel (edit-mode rows). */\nexport const ALL_PAGES_PANEL_ROW_BUILD_OPTIONS = {\n includeHidden: true,\n includeHiddenGroups: true,\n} as const;\n\nexport function isCompositeBarGroupHeaderItem(item: AsideHeaderItem): boolean {\n return item.id.startsWith(COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX);\n}\n\nexport function getCompositeBarHeaderGroupId(itemId: string): string | undefined {\n if (!itemId.startsWith(COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX)) {\n return undefined;\n }\n return itemId.slice(COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX.length);\n}\n\nexport function rowsToAllPagesDisplayItems(\n rows: CompositeBarRow[],\n options?: {enableGroupHeaderPins?: boolean},\n): AsideHeaderItem[] {\n const showPins = Boolean(options?.enableGroupHeaderPins);\n return rows.map((row) => {\n if (row.kind === 'item') {\n return row.item;\n }\n const header = makeGroupHeaderAsideItem(row.group);\n const firstCategory = row.items[0]?.category;\n return {\n ...header,\n category: firstCategory ?? row.group.title,\n hidden: Boolean(row.group.hidden),\n preventUserRemoving: !showPins,\n };\n });\n}\n\n/**\n * Edit-mode list: top-level items + one row per menu group (header only), same order as CompositeBar.\n */\nexport function getAllPagesEditModeFlatItems(\n asideHeaderItems: AsideHeaderItem[],\n menuGroups: MenuGroup[] | undefined,\n options?: {enableGroupHeaderPins?: boolean},\n): AsideHeaderItem[] {\n if (!menuGroups?.length) {\n return asideHeaderItems.filter((item) => !item.groupId);\n }\n const rows = buildCompositeBarRows(\n asideHeaderItems,\n menuGroups,\n ALL_PAGES_PANEL_ROW_BUILD_OPTIONS,\n );\n return rowsToAllPagesDisplayItems(rows, options);\n}\n\nexport function reorderMenuItemsByCompositeBarRows(\n withoutAllPagesNoDividers: AsideHeaderItem[],\n menuGroups: MenuGroup[],\n oldIndex: number,\n newIndex: number,\n): AsideHeaderItem[] {\n const rows = buildCompositeBarRows(\n withoutAllPagesNoDividers,\n menuGroups,\n ALL_PAGES_PANEL_ROW_BUILD_OPTIONS,\n );\n const reordered = [...rows];\n const [moved] = reordered.splice(oldIndex, 1);\n\n if (moved === undefined) {\n return flattenCompositeBarRows(rows);\n }\n\n reordered.splice(newIndex, 0, moved);\n\n return flattenCompositeBarRows(reordered);\n}\n"],"names":[],"mappings":";;;;AAUA;AACa,MAAA,iCAAiC,GAAG;AAC7C,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,mBAAmB,EAAE,IAAI;;AAOvB,SAAU,4BAA4B,CAAC,MAAc,EAAA;IACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oCAAoC,CAAC,EAAE;AAC1D,QAAA,OAAO,SAAS;;IAEpB,OAAO,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,MAAM,CAAC;AACpE;AAEgB,SAAA,0BAA0B,CACtC,IAAuB,EACvB,OAA2C,EAAA;AAE3C,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,SAAA,GAAA,SAAA,GAAP,OAAO,CAAE,qBAAqB,CAAC;AACxD,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;;AACpB,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;YACrB,OAAO,GAAG,CAAC,IAAI;;QAEnB,MAAM,MAAM,GAAG,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC;QAClD,MAAM,aAAa,GAAG,CAAA,EAAA,GAAA,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,SAAA,GAAA,EAAA,CAAA,QAAQ;AAC5C,QAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACO,MAAM,CAAA,EAAA,EACT,QAAQ,EAAE,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,SAAA,GAAb,aAAa,GAAI,GAAG,CAAC,KAAK,CAAC,KAAK,EAC1C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EACjC,mBAAmB,EAAE,CAAC,QAAQ,EAChC,CAAA;AACN,KAAC,CAAC;AACN;AAEA;;AAEG;SACa,4BAA4B,CACxC,gBAAmC,EACnC,UAAmC,EACnC,OAA2C,EAAA;IAE3C,IAAI,EAAC,UAAU,KAAV,IAAA,IAAA,UAAU,KAAV,SAAA,GAAA,SAAA,GAAA,UAAU,CAAE,MAAM,CAAA,EAAE;AACrB,QAAA,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;IAE3D,MAAM,IAAI,GAAG,qBAAqB,CAC9B,gBAAgB,EAChB,UAAU,EACV,iCAAiC,CACpC;AACD,IAAA,OAAO,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC;AACpD;AAEM,SAAU,kCAAkC,CAC9C,yBAA4C,EAC5C,UAAuB,EACvB,QAAgB,EAChB,QAAgB,EAAA;IAEhB,MAAM,IAAI,GAAG,qBAAqB,CAC9B,yBAAyB,EACzB,UAAU,EACV,iCAAiC,CACpC;AACD,IAAA,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC;AAC3B,IAAA,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAE7C,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,QAAA,OAAO,uBAAuB,CAAC,IAAI,CAAC;;IAGxC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC;AAEpC,IAAA,OAAO,uBAAuB,CAAC,SAAS,CAAC;AAC7C;;;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AsideHeaderItem } from '../../types';
|
|
2
|
+
export declare function isAllPagesSortableItem(item: AsideHeaderItem): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Reorders only {@link isAllPagesSortableItem} entries; every other row stays in place.
|
|
5
|
+
* Indices refer to the contiguous sortable subset (same order as in the drag-and-drop list).
|
|
6
|
+
*/
|
|
7
|
+
export declare function reorderAllPagesSortableItems(withoutAllPagesItem: AsideHeaderItem[], oldIndex: number, newIndex: number): AsideHeaderItem[];
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ALL_PAGES_ID } from '../../types.js';
|
|
2
|
+
|
|
3
|
+
function isAllPagesSortableItem(item) {
|
|
4
|
+
return (item.id !== ALL_PAGES_ID &&
|
|
5
|
+
!item.afterMoreButton &&
|
|
6
|
+
item.type !== 'divider' &&
|
|
7
|
+
!item.groupId);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Reorders only {@link isAllPagesSortableItem} entries; every other row stays in place.
|
|
11
|
+
* Indices refer to the contiguous sortable subset (same order as in the drag-and-drop list).
|
|
12
|
+
*/
|
|
13
|
+
function reorderAllPagesSortableItems(withoutAllPagesItem, oldIndex, newIndex) {
|
|
14
|
+
const sortable = withoutAllPagesItem.filter(isAllPagesSortableItem);
|
|
15
|
+
const reordered = [...sortable];
|
|
16
|
+
const [moved] = reordered.splice(oldIndex, 1);
|
|
17
|
+
reordered.splice(newIndex, 0, moved);
|
|
18
|
+
let i = 0;
|
|
19
|
+
return withoutAllPagesItem.map((item) => isAllPagesSortableItem(item) ? reordered[i++] : item);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { isAllPagesSortableItem, reorderAllPagesSortableItems };
|
|
23
|
+
//# sourceMappingURL=allPagesSortable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allPagesSortable.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/allPagesSortable.ts"],"sourcesContent":["import {ALL_PAGES_ID, AsideHeaderItem} from '../../types';\n\nexport function isAllPagesSortableItem(item: AsideHeaderItem): boolean {\n return (\n item.id !== ALL_PAGES_ID &&\n !item.afterMoreButton &&\n item.type !== 'divider' &&\n !item.groupId\n );\n}\n\n/**\n * Reorders only {@link isAllPagesSortableItem} entries; every other row stays in place.\n * Indices refer to the contiguous sortable subset (same order as in the drag-and-drop list).\n */\nexport function reorderAllPagesSortableItems(\n withoutAllPagesItem: AsideHeaderItem[],\n oldIndex: number,\n newIndex: number,\n): AsideHeaderItem[] {\n const sortable = withoutAllPagesItem.filter(isAllPagesSortableItem);\n const reordered = [...sortable];\n const [moved] = reordered.splice(oldIndex, 1);\n reordered.splice(newIndex, 0, moved);\n\n let i = 0;\n return withoutAllPagesItem.map((item) =>\n isAllPagesSortableItem(item) ? reordered[i++]! : item,\n );\n}\n"],"names":[],"mappings":";;AAEM,SAAU,sBAAsB,CAAC,IAAqB,EAAA;AACxD,IAAA,QACI,IAAI,CAAC,EAAE,KAAK,YAAY;QACxB,CAAC,IAAI,CAAC,eAAe;QACrB,IAAI,CAAC,IAAI,KAAK,SAAS;AACvB,QAAA,CAAC,IAAI,CAAC,OAAO;AAErB;AAEA;;;AAGG;SACa,4BAA4B,CACxC,mBAAsC,EACtC,QAAgB,EAChB,QAAgB,EAAA;IAEhB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,sBAAsB,CAAC;AACnE,IAAA,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC;AAC/B,IAAA,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7C,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC;IAEpC,IAAI,CAAC,GAAG,CAAC;IACT,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,KAChC,sBAAsB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAE,GAAG,IAAI,CACxD;AACL;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/constants.ts"],"sourcesContent":["import {Ellipsis} from '@gravity-ui/icons';\n\nimport {AsideHeaderItem} from '../../types';\n\nimport i18n from './i18n';\n\nexport
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/constants.ts"],"sourcesContent":["import {Ellipsis} from '@gravity-ui/icons';\n\nimport {ALL_PAGES_ID, AsideHeaderItem} from '../../types';\n\nimport i18n from './i18n';\n\nexport {ALL_PAGES_ID} from '../../types';\n\nexport function getAllPagesMenuItem(): AsideHeaderItem {\n return {\n id: ALL_PAGES_ID,\n title: i18n('menu-item.all-pages.title'),\n tooltipText: i18n('menu-item.all-pages.title'),\n icon: Ellipsis,\n };\n}\n"],"names":[],"mappings":";;;;SAQgB,mBAAmB,GAAA;IAC/B,OAAO;AACH,QAAA,EAAE,EAAE,YAAY;AAChB,QAAA,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC;AACxC,QAAA,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAAC;AAC9C,QAAA,IAAI,EAAE,QAAQ;KACjB;AACL;;;;"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
+
import type { MenuGroup } from '../../../types';
|
|
1
2
|
import { AsideHeaderItem } from '../../types';
|
|
2
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Group menu items by category for the All pages panel.
|
|
5
|
+
*
|
|
6
|
+
* @param asideHeaderItems — items from context (includes synthetic All pages row).
|
|
7
|
+
* @param editMode — when true, applies edit-mode row selection (headers when `menuGroups` is set).
|
|
8
|
+
* @param menuGroups — when provided with edit mode, inserts one CompositeBar-style header per group.
|
|
9
|
+
* @returns Items grouped by `category` key for rendering sections.
|
|
10
|
+
*/
|
|
11
|
+
export declare const useGroupedMenuItems: (asideHeaderItems: AsideHeaderItem[], editMode?: boolean, menuGroups?: MenuGroup[], onMenuGroupsChanged?: (menuGroups: MenuGroup[]) => void) => {
|
|
3
12
|
[key: string]: AsideHeaderItem[];
|
|
4
13
|
};
|
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
import { useMemo } from 'react';
|
|
2
|
-
import { ALL_PAGES_ID } from '
|
|
2
|
+
import { ALL_PAGES_ID } from '../../types.js';
|
|
3
|
+
import { getAllPagesEditModeFlatItems } from './allPagesEditDisplay.js';
|
|
3
4
|
import i18n from './i18n/index.js';
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Group menu items by category for the All pages panel.
|
|
8
|
+
*
|
|
9
|
+
* @param asideHeaderItems — items from context (includes synthetic All pages row).
|
|
10
|
+
* @param editMode — when true, applies edit-mode row selection (headers when `menuGroups` is set).
|
|
11
|
+
* @param menuGroups — when provided with edit mode, inserts one CompositeBar-style header per group.
|
|
12
|
+
* @returns Items grouped by `category` key for rendering sections.
|
|
13
|
+
*/
|
|
14
|
+
const useGroupedMenuItems = (asideHeaderItems, editMode, menuGroups, onMenuGroupsChanged) => {
|
|
6
15
|
const allPagesMenuItems = useMemo(() => {
|
|
7
|
-
const
|
|
8
|
-
|
|
16
|
+
const base = asideHeaderItems.filter(({ id, type }) => type !== 'divider' && id !== ALL_PAGES_ID);
|
|
17
|
+
const groupHeaderPins = Boolean(onMenuGroupsChanged);
|
|
18
|
+
let flatForGrouping;
|
|
19
|
+
if (!editMode) {
|
|
20
|
+
flatForGrouping = base;
|
|
21
|
+
}
|
|
22
|
+
else if (menuGroups === null || menuGroups === undefined ? undefined : menuGroups.length) {
|
|
23
|
+
flatForGrouping = getAllPagesEditModeFlatItems(base, menuGroups, {
|
|
24
|
+
enableGroupHeaderPins: groupHeaderPins,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
flatForGrouping = base.filter((item) => !item.groupId);
|
|
29
|
+
}
|
|
30
|
+
flatForGrouping.sort(({ type: typeA }, { type: typeB }) => {
|
|
9
31
|
if (typeA === 'action') {
|
|
10
32
|
return 1;
|
|
11
33
|
}
|
|
@@ -14,7 +36,7 @@ const useGroupedMenuItems = (asideHeaderItems) => {
|
|
|
14
36
|
}
|
|
15
37
|
return 0;
|
|
16
38
|
});
|
|
17
|
-
const groupedItems =
|
|
39
|
+
const groupedItems = flatForGrouping.reduce((acc, asideHeaderItem) => {
|
|
18
40
|
const category = asideHeaderItem.category || i18n('all-panel.menu.category.allOther');
|
|
19
41
|
if (!acc[category]) {
|
|
20
42
|
acc[category] = [];
|
|
@@ -23,7 +45,7 @@ const useGroupedMenuItems = (asideHeaderItems) => {
|
|
|
23
45
|
return acc;
|
|
24
46
|
}, {});
|
|
25
47
|
return groupedItems;
|
|
26
|
-
}, [asideHeaderItems]);
|
|
48
|
+
}, [asideHeaderItems, editMode, menuGroups, onMenuGroupsChanged]);
|
|
27
49
|
return allPagesMenuItems;
|
|
28
50
|
};
|
|
29
51
|
|
package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGroupedMenuItems.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.ts"],"sourcesContent":["import {useMemo} from 'react';\n\nimport {AsideHeaderItem} from '../../types';\n\nimport {
|
|
1
|
+
{"version":3,"file":"useGroupedMenuItems.js","sources":["../../../../../../../src/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.ts"],"sourcesContent":["import {useMemo} from 'react';\n\nimport type {MenuGroup} from '../../../types';\nimport {ALL_PAGES_ID, AsideHeaderItem} from '../../types';\n\nimport {getAllPagesEditModeFlatItems} from './allPagesEditDisplay';\nimport i18n from './i18n';\n\n/**\n * Group menu items by category for the All pages panel.\n *\n * @param asideHeaderItems — items from context (includes synthetic All pages row).\n * @param editMode — when true, applies edit-mode row selection (headers when `menuGroups` is set).\n * @param menuGroups — when provided with edit mode, inserts one CompositeBar-style header per group.\n * @returns Items grouped by `category` key for rendering sections.\n */\nexport const useGroupedMenuItems = (\n asideHeaderItems: AsideHeaderItem[],\n editMode?: boolean,\n menuGroups?: MenuGroup[],\n onMenuGroupsChanged?: (menuGroups: MenuGroup[]) => void,\n) => {\n const allPagesMenuItems = useMemo(() => {\n const base = asideHeaderItems.filter(\n ({id, type}) => type !== 'divider' && id !== ALL_PAGES_ID,\n );\n\n const groupHeaderPins = Boolean(onMenuGroupsChanged);\n\n let flatForGrouping: AsideHeaderItem[];\n\n if (!editMode) {\n flatForGrouping = base;\n } else if (menuGroups?.length) {\n flatForGrouping = getAllPagesEditModeFlatItems(base, menuGroups, {\n enableGroupHeaderPins: groupHeaderPins,\n });\n } else {\n flatForGrouping = base.filter((item) => !item.groupId);\n }\n\n flatForGrouping.sort(({type: typeA}, {type: typeB}) => {\n if (typeA === 'action') {\n return 1;\n }\n if (typeB === 'action') {\n return -1;\n }\n return 0;\n });\n const groupedItems = flatForGrouping.reduce(\n (acc, asideHeaderItem) => {\n const category =\n asideHeaderItem.category || i18n('all-panel.menu.category.allOther');\n if (!acc[category]) {\n acc[category] = [];\n }\n acc[category].push(asideHeaderItem);\n return acc;\n },\n {} as {[key: string]: AsideHeaderItem[]},\n );\n return groupedItems;\n }, [asideHeaderItems, editMode, menuGroups, onMenuGroupsChanged]);\n\n return allPagesMenuItems;\n};\n"],"names":[],"mappings":";;;;;AAQA;;;;;;;AAOG;AACI,MAAM,mBAAmB,GAAG,CAC/B,gBAAmC,EACnC,QAAkB,EAClB,UAAwB,EACxB,mBAAuD,KACvD;AACA,IAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAK;QACnC,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAChC,CAAC,EAAC,EAAE,EAAE,IAAI,EAAC,KAAK,IAAI,KAAK,SAAS,IAAI,EAAE,KAAK,YAAY,CAC5D;AAED,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAEpD,QAAA,IAAI,eAAkC;QAEtC,IAAI,CAAC,QAAQ,EAAE;YACX,eAAe,GAAG,IAAI;;aACnB,IAAI,UAAU,aAAV,UAAU,KAAA,SAAA,GAAA,SAAA,GAAV,UAAU,CAAE,MAAM,EAAE;AAC3B,YAAA,eAAe,GAAG,4BAA4B,CAAC,IAAI,EAAE,UAAU,EAAE;AAC7D,gBAAA,qBAAqB,EAAE,eAAe;AACzC,aAAA,CAAC;;aACC;AACH,YAAA,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;AAG1D,QAAA,eAAe,CAAC,IAAI,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,EAAE,EAAC,IAAI,EAAE,KAAK,EAAC,KAAI;AAClD,YAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACpB,gBAAA,OAAO,CAAC;;AAEZ,YAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;gBACpB,OAAO,EAAE;;AAEb,YAAA,OAAO,CAAC;AACZ,SAAC,CAAC;QACF,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,eAAe,KAAI;YACrB,MAAM,QAAQ,GACV,eAAe,CAAC,QAAQ,IAAI,IAAI,CAAC,kCAAkC,CAAC;AACxE,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAChB,gBAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;;YAEtB,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;AACnC,YAAA,OAAO,GAAG;SACb,EACD,EAAwC,CAC3C;AACD,QAAA,OAAO,YAAY;KACtB,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;AAEjE,IAAA,OAAO,iBAAiB;AAC5B;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.CompositeBar-module__gn-composite-bar___WoCDY{flex:1 0 auto;min-height:40px;width:100%}.CompositeBar-module__gn-composite-bar___WoCDY .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class]{background-color:transparent}
|
|
1
|
+
.CompositeBar-module__gn-composite-bar___WoCDY{flex:1 0 auto;min-height:40px;width:100%}.CompositeBar-module__gn-composite-bar___WoCDY .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class]{background-color:transparent}.CompositeBar-module__gn-composite-bar__menu-group___3hCzS{display:flex;flex-direction:column;width:100%}.CompositeBar-module__gn-composite-bar__menu-group-header___Yvr21[class]{box-sizing:border-box;flex:0 0 auto;min-height:40px;width:100%}.CompositeBar-module__gn-composite-bar__menu-group-nested-item___9gea-[class]{padding-inline-start:var(--g-spacing-3);position:relative}.CompositeBar-module__gn-composite-bar__menu-group-nested-list-item___-IygH[class]{background-color:transparent;overflow:visible;position:relative}.CompositeBar-module__gn-composite-bar__menu-group-nested-connector___uiegb{box-sizing:content-box;display:flex;pointer-events:none;position:relative;width:16px}.CompositeBar-module__gn-composite-bar__menu-group-nested-connector___uiegb:before{background:var(--gn-aside-header-menu-group-tree-line-color,#c1c3c7);bottom:0;content:"";height:100%;inset-inline-start:calc(50% - .5px);pointer-events:none;position:absolute;top:0;width:1px}.CompositeBar-module__gn-composite-bar__menu-group-nested-connector_spine-active___qVoAX:before{background:var(--gn-aside-header-menu-group-tree-line-active-color,var(--g-color-base-brand));z-index:1}.CompositeBar-module__gn-composite-bar__menu-group-nested-list-item___-IygH:last-child .CompositeBar-module__gn-composite-bar__menu-group-nested-connector___uiegb:before{display:none}.CompositeBar-module__gn-composite-bar__menu-group-nested-tree-svg___FJny7{fill:none;stroke:var(--gn-aside-header-menu-group-tree-line-color,#c1c3c7);display:block;flex-shrink:0;height:40px;max-width:16px;min-width:16px;position:relative}.CompositeBar-module__gn-composite-bar__menu-group-nested-tree-svg_active___Gmthf{stroke:var(--gn-aside-header-menu-group-tree-line-active-color,var(--g-color-base-brand))}.CompositeBar-module__gn-composite-bar__menu-group-nested-row-inner___jJLTe{height:100%;min-width:0;width:100%}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React, { FC } from 'react';
|
|
2
2
|
import { MenuGroup } from '../../../types';
|
|
3
|
-
import { AsideHeaderItem } from '../../types';
|
|
3
|
+
import { AsideHeaderItem, AsideHeaderMenuOverflow } from '../../types';
|
|
4
4
|
type CompositeBarProps = {
|
|
5
5
|
type: 'menu' | 'subheader';
|
|
6
6
|
items: AsideHeaderItem[];
|
|
7
|
+
className?: string;
|
|
7
8
|
menuGroups?: MenuGroup[];
|
|
8
9
|
onItemClick?: (item: AsideHeaderItem, collapsed: boolean, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
|
|
9
10
|
menuMoreTitle?: string;
|
|
@@ -11,6 +12,13 @@ type CompositeBarProps = {
|
|
|
11
12
|
compact: boolean;
|
|
12
13
|
compositeId?: string;
|
|
13
14
|
menuItemClassName?: string;
|
|
15
|
+
/**
|
|
16
|
+
* @see AsideHeaderMenuOverflow
|
|
17
|
+
*/
|
|
18
|
+
menuOverflow?: AsideHeaderMenuOverflow;
|
|
19
|
+
collapsedMenuGroupIds?: Record<string, boolean>;
|
|
20
|
+
defaultCollapsedMenuGroupIds?: Record<string, boolean>;
|
|
21
|
+
onToggleMenuGroupCollapsed?: (groupId: string) => void;
|
|
14
22
|
};
|
|
15
23
|
export declare const CompositeBar: FC<CompositeBarProps>;
|
|
16
24
|
export {};
|