@gravity-ui/navigation 4.0.18 → 4.0.19
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/components/CompositeBar/CompositeBar.js +42 -36
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js +43 -37
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,10 +14,31 @@ var utils = require('./utils.js');
|
|
|
14
14
|
var CompositeBar_module = require('./CompositeBar.module.scss.js');
|
|
15
15
|
|
|
16
16
|
const b = cn.createBlock('composite-bar', CompositeBar_module.default);
|
|
17
|
+
const CompositeBarList = React.memo(function CompositeBarList({ compact, compositeId, collapseItems, items, listRef, multipleTooltip, onItemClickByIndex, onMouseEnterByIndex, onMouseLeave, type, }) {
|
|
18
|
+
return (React.createElement(uikit.List, { id: compositeId, ref: listRef, items: items, selectedItemIndex: type === 'menu' ? utils.getSelectedItemIndex(items) : undefined, itemHeight: utils.getItemHeight, itemsHeight: utils.getItemsHeight, itemClassName: b('root-menu-item'), virtualized: false, filterable: false, sortable: false, renderItem: (item, _isItemActive, itemIndex) => (React.createElement(Item.Item, Object.assign({}, item, { enableTooltip: multipleTooltip ? false : item.enableTooltip, compact: compact, onMouseEnter: onMouseEnterByIndex(itemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(itemIndex, item.onItemClick), collapseItems: collapseItems }))) }));
|
|
19
|
+
});
|
|
17
20
|
const CompositeBarView = ({ type, items, onItemClick, onMoreClick, collapseItems, multipleTooltip = false, compact, compositeId, }) => {
|
|
18
21
|
const ref = React.useRef(null);
|
|
19
22
|
const tooltipRef = React.useRef(null);
|
|
20
23
|
const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = React.useContext(MultipleTooltipContext.MultipleTooltipContext);
|
|
24
|
+
const multipleTooltipStateRef = React.useRef({
|
|
25
|
+
active: multipleTooltipActive,
|
|
26
|
+
activeIndex,
|
|
27
|
+
lastClickedItemIndex,
|
|
28
|
+
});
|
|
29
|
+
const onItemClickRef = React.useRef(onItemClick);
|
|
30
|
+
const onMoreClickRef = React.useRef(onMoreClick);
|
|
31
|
+
const setMultipleTooltipContextValueRef = React.useRef(setMultipleTooltipContextValue);
|
|
32
|
+
React.useLayoutEffect(() => {
|
|
33
|
+
multipleTooltipStateRef.current = {
|
|
34
|
+
active: multipleTooltipActive,
|
|
35
|
+
activeIndex,
|
|
36
|
+
lastClickedItemIndex,
|
|
37
|
+
};
|
|
38
|
+
onItemClickRef.current = onItemClick;
|
|
39
|
+
onMoreClickRef.current = onMoreClick;
|
|
40
|
+
setMultipleTooltipContextValueRef.current = setMultipleTooltipContextValue;
|
|
41
|
+
});
|
|
21
42
|
React.useEffect(() => {
|
|
22
43
|
function handleBlurWindow() {
|
|
23
44
|
if (multipleTooltip && multipleTooltipActive) {
|
|
@@ -58,76 +79,61 @@ const CompositeBarView = ({ type, items, onItemClick, onMoreClick, collapseItems
|
|
|
58
79
|
}, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);
|
|
59
80
|
const onMouseEnterByIndex = React.useCallback((itemIndex) => () => {
|
|
60
81
|
if (multipleTooltip && document.hasFocus()) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
82
|
+
const { active: multipleTooltipActiveValue, activeIndex: currentActiveIndex, lastClickedItemIndex: currentLastClickedItemIndex, } = multipleTooltipStateRef.current;
|
|
83
|
+
let nextMultipleTooltipActive = multipleTooltipActiveValue;
|
|
84
|
+
if (!multipleTooltipActiveValue && itemIndex !== currentLastClickedItemIndex) {
|
|
85
|
+
nextMultipleTooltipActive = true;
|
|
64
86
|
}
|
|
65
|
-
if (
|
|
66
|
-
|
|
87
|
+
if (currentActiveIndex === itemIndex &&
|
|
88
|
+
multipleTooltipActiveValue === nextMultipleTooltipActive) {
|
|
67
89
|
return;
|
|
68
90
|
}
|
|
69
|
-
|
|
91
|
+
setMultipleTooltipContextValueRef.current({
|
|
70
92
|
activeIndex: itemIndex,
|
|
71
|
-
active:
|
|
93
|
+
active: nextMultipleTooltipActive,
|
|
72
94
|
});
|
|
73
95
|
}
|
|
74
|
-
}, [
|
|
75
|
-
multipleTooltip,
|
|
76
|
-
multipleTooltipActive,
|
|
77
|
-
lastClickedItemIndex,
|
|
78
|
-
activeIndex,
|
|
79
|
-
setMultipleTooltipContextValue,
|
|
80
|
-
]);
|
|
96
|
+
}, [multipleTooltip]);
|
|
81
97
|
const onMouseLeave = React.useCallback(() => {
|
|
82
98
|
var _a;
|
|
83
99
|
if (compact && document.hasFocus()) {
|
|
84
100
|
(_a = ref.current) === null || _a === undefined ? undefined : _a.activateItem(undefined);
|
|
101
|
+
const { activeIndex: currentActiveIndex, lastClickedItemIndex: currentLastClickedItemIndex, } = multipleTooltipStateRef.current;
|
|
85
102
|
if (multipleTooltip &&
|
|
86
|
-
(
|
|
87
|
-
|
|
103
|
+
(currentActiveIndex !== undefined || currentLastClickedItemIndex !== undefined)) {
|
|
104
|
+
setMultipleTooltipContextValueRef.current({
|
|
88
105
|
activeIndex: undefined,
|
|
89
106
|
lastClickedItemIndex: undefined,
|
|
90
107
|
});
|
|
91
108
|
}
|
|
92
109
|
}
|
|
93
|
-
}, [
|
|
94
|
-
activeIndex,
|
|
95
|
-
compact,
|
|
96
|
-
lastClickedItemIndex,
|
|
97
|
-
multipleTooltip,
|
|
98
|
-
setMultipleTooltipContextValue,
|
|
99
|
-
]);
|
|
110
|
+
}, [compact, multipleTooltip]);
|
|
100
111
|
const onItemClickByIndex = React.useCallback((itemIndex, orginalItemClick) => (item, collapsed, event) => {
|
|
112
|
+
var _a, _b;
|
|
113
|
+
const { lastClickedItemIndex: currentLastClickedItemIndex } = multipleTooltipStateRef.current;
|
|
101
114
|
if (compact &&
|
|
102
115
|
multipleTooltip &&
|
|
103
|
-
itemIndex !==
|
|
116
|
+
itemIndex !== currentLastClickedItemIndex &&
|
|
104
117
|
item.id !== constants$1.COLLAPSE_ITEM_ID) {
|
|
105
|
-
|
|
118
|
+
setMultipleTooltipContextValueRef.current({
|
|
106
119
|
lastClickedItemIndex: itemIndex,
|
|
107
120
|
active: false,
|
|
108
121
|
});
|
|
109
122
|
}
|
|
110
123
|
// Handle clicks on the "more" button (collapse item)
|
|
111
124
|
if (item.id === constants$1.COLLAPSE_ITEM_ID && collapsed) {
|
|
112
|
-
|
|
125
|
+
(_a = onMoreClickRef.current) === null || _a === undefined ? undefined : _a.call(onMoreClickRef);
|
|
113
126
|
}
|
|
114
127
|
else {
|
|
115
|
-
|
|
128
|
+
(_b = onItemClickRef.current) === null || _b === undefined ? undefined : _b.call(onItemClickRef, Object.assign(Object.assign({}, item), {
|
|
116
129
|
// For collapsed popup items, preserve the item's own onItemClick
|
|
117
130
|
// since orginalItemClick belongs to the collapse button, not the item
|
|
118
131
|
onItemClick: collapsed ? item.onItemClick : orginalItemClick }), collapsed, event);
|
|
119
132
|
}
|
|
120
|
-
}, [
|
|
121
|
-
compact,
|
|
122
|
-
lastClickedItemIndex,
|
|
123
|
-
multipleTooltip,
|
|
124
|
-
onItemClick,
|
|
125
|
-
onMoreClick,
|
|
126
|
-
setMultipleTooltipContextValue,
|
|
127
|
-
]);
|
|
133
|
+
}, [compact, multipleTooltip]);
|
|
128
134
|
return (React.createElement(React.Fragment, null,
|
|
129
135
|
React.createElement("div", { ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
|
|
130
|
-
React.createElement(
|
|
136
|
+
React.createElement(CompositeBarList, { compositeId: compositeId, type: type, compact: compact, items: items, listRef: ref, multipleTooltip: multipleTooltip, onItemClickByIndex: onItemClickByIndex, onMouseEnterByIndex: onMouseEnterByIndex, onMouseLeave: onMouseLeave, collapseItems: collapseItems })),
|
|
131
137
|
type === 'menu' && multipleTooltip && (React.createElement(MultipleTooltip.MultipleTooltip, { open: compact && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
|
|
132
138
|
};
|
|
133
139
|
const CompositeBar = ({ type, items, menuMoreTitle, onItemClick, onMoreClick, multipleTooltip = false, compact, compositeId, }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositeBar.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/CompositeBar.tsx"],"sourcesContent":["import React, {FC, ReactNode, useCallback, useContext, useRef} from 'react';\n\nimport {List} from '@gravity-ui/uikit';\nimport AutoSizer, {Size} from 'react-virtualized-auto-sizer';\n\nimport {ASIDE_HEADER_COMPACT_WIDTH} from '../../../constants';\nimport {createBlock} from '../../../utils/cn';\nimport {AsideHeaderItem} from '../../types';\n\nimport {Item, ItemProps} from './Item/Item';\nimport {MultipleTooltip, MultipleTooltipContext, MultipleTooltipProvider} from './MultipleTooltip';\nimport {COLLAPSE_ITEM_ID} from './constants';\nimport {\n getAutosizeListItems,\n getItemHeight,\n getItemsHeight,\n getItemsMinHeight,\n getMoreButtonItem,\n getSelectedItemIndex,\n} from './utils';\n\nimport styles from './CompositeBar.module.scss';\n\nconst b = createBlock('composite-bar', styles);\n\ntype CompositeBarProps = {\n type: 'menu' | 'subheader';\n items: AsideHeaderItem[];\n onItemClick?: (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => void;\n multipleTooltip?: boolean;\n menuMoreTitle?: string;\n onMoreClick?: () => void;\n compact: boolean;\n compositeId?: string;\n};\n\ntype CompositeBarViewProps = CompositeBarProps & {\n collapseItems?: AsideHeaderItem[];\n};\n\nconst CompositeBarView: FC<CompositeBarViewProps> = ({\n type,\n items,\n onItemClick,\n onMoreClick,\n collapseItems,\n multipleTooltip = false,\n compact,\n compositeId,\n}) => {\n const ref = useRef<List<AsideHeaderItem>>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n\n const {\n setValue: setMultipleTooltipContextValue,\n active: multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n } = useContext(MultipleTooltipContext);\n\n React.useEffect(() => {\n function handleBlurWindow() {\n if (multipleTooltip && multipleTooltipActive) {\n setMultipleTooltipContextValue({active: false});\n }\n }\n\n window.addEventListener('blur', handleBlurWindow);\n\n return () => {\n window.removeEventListener('blur', handleBlurWindow);\n };\n }, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);\n\n const onTooltipMouseEnter = useCallback(\n (e: {clientX: number}) => {\n if (\n multipleTooltip &&\n compact &&\n !multipleTooltipActive &&\n document.hasFocus() &&\n activeIndex !== lastClickedItemIndex &&\n e.clientX <= ASIDE_HEADER_COMPACT_WIDTH\n ) {\n setMultipleTooltipContextValue?.({\n active: true,\n });\n }\n },\n [\n multipleTooltip,\n compact,\n multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n setMultipleTooltipContextValue,\n ],\n );\n\n const onTooltipMouseLeave = useCallback(() => {\n if (multipleTooltip && multipleTooltipActive && document.hasFocus()) {\n setMultipleTooltipContextValue?.({\n active: false,\n lastClickedItemIndex: undefined,\n });\n }\n }, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);\n\n const onMouseEnterByIndex = useCallback(\n (itemIndex: number) => () => {\n if (multipleTooltip && document.hasFocus()) {\n let multipleTooltipActiveValue = multipleTooltipActive;\n if (!multipleTooltipActive && itemIndex !== lastClickedItemIndex) {\n multipleTooltipActiveValue = true;\n }\n if (\n activeIndex === itemIndex &&\n multipleTooltipActive === multipleTooltipActiveValue\n ) {\n return;\n }\n setMultipleTooltipContextValue({\n activeIndex: itemIndex,\n active: multipleTooltipActiveValue,\n });\n }\n },\n [\n multipleTooltip,\n multipleTooltipActive,\n lastClickedItemIndex,\n activeIndex,\n setMultipleTooltipContextValue,\n ],\n );\n\n const onMouseLeave = useCallback(() => {\n if (compact && document.hasFocus()) {\n ref.current?.activateItem(undefined as unknown as number);\n if (\n multipleTooltip &&\n (activeIndex !== undefined || lastClickedItemIndex !== undefined)\n ) {\n setMultipleTooltipContextValue({\n activeIndex: undefined,\n lastClickedItemIndex: undefined,\n });\n }\n }\n }, [\n activeIndex,\n compact,\n lastClickedItemIndex,\n multipleTooltip,\n setMultipleTooltipContextValue,\n ]);\n\n const onItemClickByIndex = useCallback(\n (\n itemIndex: number,\n orginalItemClick: AsideHeaderItem['onItemClick'],\n ): ItemProps['onItemClick'] =>\n (item, collapsed, event) => {\n if (\n compact &&\n multipleTooltip &&\n itemIndex !== lastClickedItemIndex &&\n item.id !== COLLAPSE_ITEM_ID\n ) {\n setMultipleTooltipContextValue({\n lastClickedItemIndex: itemIndex,\n active: false,\n });\n }\n\n // Handle clicks on the \"more\" button (collapse item)\n if (item.id === COLLAPSE_ITEM_ID && collapsed) {\n onMoreClick?.();\n } else {\n onItemClick?.(\n {\n ...item,\n // For collapsed popup items, preserve the item's own onItemClick\n // since orginalItemClick belongs to the collapse button, not the item\n onItemClick: collapsed ? item.onItemClick : orginalItemClick,\n },\n collapsed,\n event,\n );\n }\n },\n [\n compact,\n lastClickedItemIndex,\n multipleTooltip,\n onItemClick,\n onMoreClick,\n setMultipleTooltipContextValue,\n ],\n );\n\n return (\n <React.Fragment>\n <div\n ref={tooltipRef}\n onMouseEnter={onTooltipMouseEnter}\n onMouseLeave={onTooltipMouseLeave}\n >\n <List<AsideHeaderItem>\n id={compositeId}\n ref={ref}\n items={items}\n selectedItemIndex={type === 'menu' ? getSelectedItemIndex(items) : undefined}\n itemHeight={getItemHeight}\n itemsHeight={getItemsHeight}\n itemClassName={b('root-menu-item')}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(item, _isItemActive, itemIndex) => (\n <Item\n {...item}\n enableTooltip={multipleTooltip ? false : item.enableTooltip}\n compact={compact}\n onMouseEnter={onMouseEnterByIndex(itemIndex)}\n onMouseLeave={onMouseLeave}\n onItemClick={onItemClickByIndex(itemIndex, item.onItemClick)}\n collapseItems={collapseItems}\n />\n )}\n />\n </div>\n {type === 'menu' && multipleTooltip && (\n <MultipleTooltip\n open={compact && multipleTooltipActive}\n anchorRef={tooltipRef}\n placement={['right-start']}\n items={items}\n />\n )}\n </React.Fragment>\n );\n};\n\nexport const CompositeBar: FC<CompositeBarProps> = ({\n type,\n items,\n menuMoreTitle,\n onItemClick,\n onMoreClick,\n multipleTooltip = false,\n compact,\n compositeId,\n}) => {\n if (items.length === 0) {\n return null;\n }\n let node: ReactNode;\n\n if (type === 'menu') {\n const minHeight = getItemsMinHeight(items);\n const collapseItem = getMoreButtonItem(menuMoreTitle);\n node = (\n <div className={b({autosizer: true})} style={{minHeight}}>\n {items.length !== 0 && (\n <AutoSizer>\n {(size: Size) => {\n const width = Number.isNaN(size.width) ? 0 : size.width;\n const height = Number.isNaN(size.height) ? 0 : size.height;\n\n const {listItems, collapseItems} = getAutosizeListItems(\n items,\n height,\n collapseItem,\n );\n return (\n <div style={{width, height}}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n items={listItems}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n collapseItems={collapseItems}\n multipleTooltip={multipleTooltip}\n />\n </div>\n );\n }}\n </AutoSizer>\n )}\n </div>\n );\n } else {\n node = (\n <div className={b({subheader: true})}>\n <CompositeBarView\n type=\"subheader\"\n compact={compact}\n items={items}\n onItemClick={onItemClick}\n />\n </div>\n );\n }\n return <MultipleTooltipProvider>{node}</MultipleTooltipProvider>;\n};\n"],"names":["createBlock","styles","useRef","useContext","MultipleTooltipContext","useCallback","ASIDE_HEADER_COMPACT_WIDTH","COLLAPSE_ITEM_ID","List","getSelectedItemIndex","getItemHeight","getItemsHeight","Item","MultipleTooltip","getItemsMinHeight","getMoreButtonItem","getAutosizeListItems","MultipleTooltipProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CompositeBar.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/CompositeBar.tsx"],"sourcesContent":["import React, {FC, ReactNode, useCallback, useContext, useRef} from 'react';\n\nimport {List} from '@gravity-ui/uikit';\nimport AutoSizer, {Size} from 'react-virtualized-auto-sizer';\n\nimport {ASIDE_HEADER_COMPACT_WIDTH} from '../../../constants';\nimport {createBlock} from '../../../utils/cn';\nimport {AsideHeaderItem} from '../../types';\n\nimport {Item, ItemProps} from './Item/Item';\nimport {MultipleTooltip, MultipleTooltipContext, MultipleTooltipProvider} from './MultipleTooltip';\nimport {COLLAPSE_ITEM_ID} from './constants';\nimport {\n getAutosizeListItems,\n getItemHeight,\n getItemsHeight,\n getItemsMinHeight,\n getMoreButtonItem,\n getSelectedItemIndex,\n} from './utils';\n\nimport styles from './CompositeBar.module.scss';\n\nconst b = createBlock('composite-bar', styles);\n\ntype CompositeBarProps = {\n type: 'menu' | 'subheader';\n items: AsideHeaderItem[];\n onItemClick?: (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => void;\n multipleTooltip?: boolean;\n menuMoreTitle?: string;\n onMoreClick?: () => void;\n compact: boolean;\n compositeId?: string;\n};\n\ntype CompositeBarViewProps = CompositeBarProps & {\n collapseItems?: AsideHeaderItem[];\n};\n\ntype CompositeBarListProps = {\n compact: boolean;\n compositeId?: string;\n collapseItems?: AsideHeaderItem[];\n items: AsideHeaderItem[];\n listRef: React.RefObject<List<AsideHeaderItem>>;\n multipleTooltip: boolean;\n onItemClickByIndex: (\n itemIndex: number,\n orginalItemClick: AsideHeaderItem['onItemClick'],\n ) => ItemProps['onItemClick'];\n onMouseEnterByIndex: (itemIndex: number) => () => void;\n onMouseLeave: () => void;\n type: CompositeBarProps['type'];\n};\n\nconst CompositeBarList = React.memo(function CompositeBarList({\n compact,\n compositeId,\n collapseItems,\n items,\n listRef,\n multipleTooltip,\n onItemClickByIndex,\n onMouseEnterByIndex,\n onMouseLeave,\n type,\n}: CompositeBarListProps) {\n return (\n <List<AsideHeaderItem>\n id={compositeId}\n ref={listRef}\n items={items}\n selectedItemIndex={type === 'menu' ? getSelectedItemIndex(items) : undefined}\n itemHeight={getItemHeight}\n itemsHeight={getItemsHeight}\n itemClassName={b('root-menu-item')}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(item, _isItemActive, itemIndex) => (\n <Item\n {...item}\n enableTooltip={multipleTooltip ? false : item.enableTooltip}\n compact={compact}\n onMouseEnter={onMouseEnterByIndex(itemIndex)}\n onMouseLeave={onMouseLeave}\n onItemClick={onItemClickByIndex(itemIndex, item.onItemClick)}\n collapseItems={collapseItems}\n />\n )}\n />\n );\n});\n\nconst CompositeBarView: FC<CompositeBarViewProps> = ({\n type,\n items,\n onItemClick,\n onMoreClick,\n collapseItems,\n multipleTooltip = false,\n compact,\n compositeId,\n}) => {\n const ref = useRef<List<AsideHeaderItem>>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n\n const {\n setValue: setMultipleTooltipContextValue,\n active: multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n } = useContext(MultipleTooltipContext);\n const multipleTooltipStateRef = useRef({\n active: multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n });\n const onItemClickRef = useRef(onItemClick);\n const onMoreClickRef = useRef(onMoreClick);\n const setMultipleTooltipContextValueRef = useRef(setMultipleTooltipContextValue);\n\n React.useLayoutEffect(() => {\n multipleTooltipStateRef.current = {\n active: multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n };\n onItemClickRef.current = onItemClick;\n onMoreClickRef.current = onMoreClick;\n setMultipleTooltipContextValueRef.current = setMultipleTooltipContextValue;\n });\n\n React.useEffect(() => {\n function handleBlurWindow() {\n if (multipleTooltip && multipleTooltipActive) {\n setMultipleTooltipContextValue({active: false});\n }\n }\n\n window.addEventListener('blur', handleBlurWindow);\n\n return () => {\n window.removeEventListener('blur', handleBlurWindow);\n };\n }, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);\n\n const onTooltipMouseEnter = useCallback(\n (e: {clientX: number}) => {\n if (\n multipleTooltip &&\n compact &&\n !multipleTooltipActive &&\n document.hasFocus() &&\n activeIndex !== lastClickedItemIndex &&\n e.clientX <= ASIDE_HEADER_COMPACT_WIDTH\n ) {\n setMultipleTooltipContextValue?.({\n active: true,\n });\n }\n },\n [\n multipleTooltip,\n compact,\n multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n setMultipleTooltipContextValue,\n ],\n );\n\n const onTooltipMouseLeave = useCallback(() => {\n if (multipleTooltip && multipleTooltipActive && document.hasFocus()) {\n setMultipleTooltipContextValue?.({\n active: false,\n lastClickedItemIndex: undefined,\n });\n }\n }, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);\n\n const onMouseEnterByIndex = useCallback(\n (itemIndex: number) => () => {\n if (multipleTooltip && document.hasFocus()) {\n const {\n active: multipleTooltipActiveValue,\n activeIndex: currentActiveIndex,\n lastClickedItemIndex: currentLastClickedItemIndex,\n } = multipleTooltipStateRef.current;\n let nextMultipleTooltipActive = multipleTooltipActiveValue;\n if (!multipleTooltipActiveValue && itemIndex !== currentLastClickedItemIndex) {\n nextMultipleTooltipActive = true;\n }\n if (\n currentActiveIndex === itemIndex &&\n multipleTooltipActiveValue === nextMultipleTooltipActive\n ) {\n return;\n }\n setMultipleTooltipContextValueRef.current({\n activeIndex: itemIndex,\n active: nextMultipleTooltipActive,\n });\n }\n },\n [multipleTooltip],\n );\n\n const onMouseLeave = useCallback(() => {\n if (compact && document.hasFocus()) {\n ref.current?.activateItem(undefined as unknown as number);\n const {\n activeIndex: currentActiveIndex,\n lastClickedItemIndex: currentLastClickedItemIndex,\n } = multipleTooltipStateRef.current;\n if (\n multipleTooltip &&\n (currentActiveIndex !== undefined || currentLastClickedItemIndex !== undefined)\n ) {\n setMultipleTooltipContextValueRef.current({\n activeIndex: undefined,\n lastClickedItemIndex: undefined,\n });\n }\n }\n }, [compact, multipleTooltip]);\n\n const onItemClickByIndex = useCallback(\n (\n itemIndex: number,\n orginalItemClick: AsideHeaderItem['onItemClick'],\n ): ItemProps['onItemClick'] =>\n (item, collapsed, event) => {\n const {lastClickedItemIndex: currentLastClickedItemIndex} =\n multipleTooltipStateRef.current;\n if (\n compact &&\n multipleTooltip &&\n itemIndex !== currentLastClickedItemIndex &&\n item.id !== COLLAPSE_ITEM_ID\n ) {\n setMultipleTooltipContextValueRef.current({\n lastClickedItemIndex: itemIndex,\n active: false,\n });\n }\n\n // Handle clicks on the \"more\" button (collapse item)\n if (item.id === COLLAPSE_ITEM_ID && collapsed) {\n onMoreClickRef.current?.();\n } else {\n onItemClickRef.current?.(\n {\n ...item,\n // For collapsed popup items, preserve the item's own onItemClick\n // since orginalItemClick belongs to the collapse button, not the item\n onItemClick: collapsed ? item.onItemClick : orginalItemClick,\n },\n collapsed,\n event,\n );\n }\n },\n [compact, multipleTooltip],\n );\n\n return (\n <React.Fragment>\n <div\n ref={tooltipRef}\n onMouseEnter={onTooltipMouseEnter}\n onMouseLeave={onTooltipMouseLeave}\n >\n <CompositeBarList\n compositeId={compositeId}\n type={type}\n compact={compact}\n items={items}\n listRef={ref}\n multipleTooltip={multipleTooltip}\n onItemClickByIndex={onItemClickByIndex}\n onMouseEnterByIndex={onMouseEnterByIndex}\n onMouseLeave={onMouseLeave}\n collapseItems={collapseItems}\n />\n </div>\n {type === 'menu' && multipleTooltip && (\n <MultipleTooltip\n open={compact && multipleTooltipActive}\n anchorRef={tooltipRef}\n placement={['right-start']}\n items={items}\n />\n )}\n </React.Fragment>\n );\n};\n\nexport const CompositeBar: FC<CompositeBarProps> = ({\n type,\n items,\n menuMoreTitle,\n onItemClick,\n onMoreClick,\n multipleTooltip = false,\n compact,\n compositeId,\n}) => {\n if (items.length === 0) {\n return null;\n }\n let node: ReactNode;\n\n if (type === 'menu') {\n const minHeight = getItemsMinHeight(items);\n const collapseItem = getMoreButtonItem(menuMoreTitle);\n node = (\n <div className={b({autosizer: true})} style={{minHeight}}>\n {items.length !== 0 && (\n <AutoSizer>\n {(size: Size) => {\n const width = Number.isNaN(size.width) ? 0 : size.width;\n const height = Number.isNaN(size.height) ? 0 : size.height;\n\n const {listItems, collapseItems} = getAutosizeListItems(\n items,\n height,\n collapseItem,\n );\n return (\n <div style={{width, height}}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n items={listItems}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n collapseItems={collapseItems}\n multipleTooltip={multipleTooltip}\n />\n </div>\n );\n }}\n </AutoSizer>\n )}\n </div>\n );\n } else {\n node = (\n <div className={b({subheader: true})}>\n <CompositeBarView\n type=\"subheader\"\n compact={compact}\n items={items}\n onItemClick={onItemClick}\n />\n </div>\n );\n }\n return <MultipleTooltipProvider>{node}</MultipleTooltipProvider>;\n};\n"],"names":["createBlock","styles","List","getSelectedItemIndex","getItemHeight","getItemsHeight","Item","useRef","useContext","MultipleTooltipContext","useCallback","ASIDE_HEADER_COMPACT_WIDTH","COLLAPSE_ITEM_ID","MultipleTooltip","getItemsMinHeight","getMoreButtonItem","getAutosizeListItems","MultipleTooltipProvider"],"mappings":"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"}
|
package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js
CHANGED
|
@@ -13,7 +13,7 @@ const POPUP_OFFSET = { mainAxis: 4, crossAxis: -32 };
|
|
|
13
13
|
const MultipleTooltip = ({ items, open, anchorRef, placement, }) => {
|
|
14
14
|
const { activeIndex, hideCollapseItemTooltip } = React.useContext(MultipleTooltipContext.MultipleTooltipContext);
|
|
15
15
|
const activeItem = activeIndex === undefined ? null : items[activeIndex];
|
|
16
|
-
return (React.createElement(uikit.Popup, { open: open, className: b('popup'), anchorElement: anchorRef.current, strategy: "fixed", placement: placement, offset: POPUP_OFFSET },
|
|
16
|
+
return (React.createElement(uikit.Popup, { open: open, className: b('popup'), anchorElement: anchorRef.current, strategy: "fixed", placement: placement, offset: POPUP_OFFSET, returnFocus: false },
|
|
17
17
|
React.createElement("div", { className: b() },
|
|
18
18
|
React.createElement("div", { className: b('items-container') }, items
|
|
19
19
|
.filter(({ type = 'regular', id }) => !hideCollapseItemTooltip ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultipleTooltip.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.tsx"],"sourcesContent":["import React from 'react';\n\nimport {Popup, PopupProps} from '@gravity-ui/uikit';\n\nimport {AsideHeaderItem} from 'src/components/AsideHeader/types';\n\nimport {createBlock} from '../../../../utils/cn';\nimport {COLLAPSE_ITEM_ID} from '../constants';\n\nimport {MultipleTooltipContext} from './MultipleTooltipContext';\n\nimport styles from './MultipleTooltip.module.scss';\n\nconst b = createBlock('multiple-tooltip', styles);\n\nconst POPUP_OFFSET: PopupProps['offset'] = {mainAxis: 4, crossAxis: -32};\n\ntype MultipleTooltipProps = Pick<PopupProps, 'open' | 'placement'> & {\n anchorRef: React.RefObject<HTMLElement>;\n items: AsideHeaderItem[];\n};\n\nexport const MultipleTooltip: React.FC<MultipleTooltipProps> = ({\n items,\n open,\n anchorRef,\n placement,\n}) => {\n const {activeIndex, hideCollapseItemTooltip} = React.useContext(MultipleTooltipContext);\n const activeItem = activeIndex === undefined ? null : items[activeIndex];\n\n return (\n <Popup\n open={open}\n className={b('popup')}\n anchorElement={anchorRef.current}\n strategy=\"fixed\"\n placement={placement}\n offset={POPUP_OFFSET}\n >\n <div className={b()}>\n <div className={b('items-container')}>\n {items\n .filter(\n ({type = 'regular', id}) =>\n !hideCollapseItemTooltip ||\n (id !== COLLAPSE_ITEM_ID && type !== 'action'),\n )\n .map((currentItem, idx) => {\n switch (currentItem.type) {\n case 'divider':\n return (\n <div className={b('item', {divider: true})} key={idx}>\n {currentItem.tooltipText || currentItem.title}\n </div>\n );\n default:\n return (\n <div\n className={b('item', {\n active: currentItem === activeItem,\n })}\n key={idx}\n >\n {currentItem.tooltipText || currentItem.title}\n </div>\n );\n }\n })}\n </div>\n </div>\n </Popup>\n );\n};\n"],"names":["createBlock","styles","MultipleTooltipContext","Popup","COLLAPSE_ITEM_ID"],"mappings":";;;;;;;;;AAaA,MAAM,CAAC,GAAGA,cAAW,CAAC,kBAAkB,EAAEC,8BAAM,CAAC;AAEjD,MAAM,YAAY,GAAyB,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAC;AAOjE,MAAM,eAAe,GAAmC,CAAC,EAC5D,KAAK,EACL,IAAI,EACJ,SAAS,EACT,SAAS,GACZ,KAAI;AACD,IAAA,MAAM,EAAC,WAAW,EAAE,uBAAuB,EAAC,GAAG,KAAK,CAAC,UAAU,CAACC,6CAAsB,CAAC;AACvF,IAAA,MAAM,UAAU,GAAG,WAAW,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;AAExE,IAAA,QACI,KAAA,CAAA,aAAA,CAACC,WAAK,EAAA,EACF,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EACrB,aAAa,EAAE,SAAS,CAAC,OAAO,EAChC,QAAQ,EAAC,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,YAAY,EAAA;
|
|
1
|
+
{"version":3,"file":"MultipleTooltip.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.tsx"],"sourcesContent":["import React from 'react';\n\nimport {Popup, PopupProps} from '@gravity-ui/uikit';\n\nimport {AsideHeaderItem} from 'src/components/AsideHeader/types';\n\nimport {createBlock} from '../../../../utils/cn';\nimport {COLLAPSE_ITEM_ID} from '../constants';\n\nimport {MultipleTooltipContext} from './MultipleTooltipContext';\n\nimport styles from './MultipleTooltip.module.scss';\n\nconst b = createBlock('multiple-tooltip', styles);\n\nconst POPUP_OFFSET: PopupProps['offset'] = {mainAxis: 4, crossAxis: -32};\n\ntype MultipleTooltipProps = Pick<PopupProps, 'open' | 'placement'> & {\n anchorRef: React.RefObject<HTMLElement>;\n items: AsideHeaderItem[];\n};\n\nexport const MultipleTooltip: React.FC<MultipleTooltipProps> = ({\n items,\n open,\n anchorRef,\n placement,\n}) => {\n const {activeIndex, hideCollapseItemTooltip} = React.useContext(MultipleTooltipContext);\n const activeItem = activeIndex === undefined ? null : items[activeIndex];\n\n return (\n <Popup\n open={open}\n className={b('popup')}\n anchorElement={anchorRef.current}\n strategy=\"fixed\"\n placement={placement}\n offset={POPUP_OFFSET}\n returnFocus={false}\n >\n <div className={b()}>\n <div className={b('items-container')}>\n {items\n .filter(\n ({type = 'regular', id}) =>\n !hideCollapseItemTooltip ||\n (id !== COLLAPSE_ITEM_ID && type !== 'action'),\n )\n .map((currentItem, idx) => {\n switch (currentItem.type) {\n case 'divider':\n return (\n <div className={b('item', {divider: true})} key={idx}>\n {currentItem.tooltipText || currentItem.title}\n </div>\n );\n default:\n return (\n <div\n className={b('item', {\n active: currentItem === activeItem,\n })}\n key={idx}\n >\n {currentItem.tooltipText || currentItem.title}\n </div>\n );\n }\n })}\n </div>\n </div>\n </Popup>\n );\n};\n"],"names":["createBlock","styles","MultipleTooltipContext","Popup","COLLAPSE_ITEM_ID"],"mappings":";;;;;;;;;AAaA,MAAM,CAAC,GAAGA,cAAW,CAAC,kBAAkB,EAAEC,8BAAM,CAAC;AAEjD,MAAM,YAAY,GAAyB,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAC;AAOjE,MAAM,eAAe,GAAmC,CAAC,EAC5D,KAAK,EACL,IAAI,EACJ,SAAS,EACT,SAAS,GACZ,KAAI;AACD,IAAA,MAAM,EAAC,WAAW,EAAE,uBAAuB,EAAC,GAAG,KAAK,CAAC,UAAU,CAACC,6CAAsB,CAAC;AACvF,IAAA,MAAM,UAAU,GAAG,WAAW,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;AAExE,IAAA,QACI,KAAA,CAAA,aAAA,CAACC,WAAK,EAAA,EACF,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EACrB,aAAa,EAAE,SAAS,CAAC,OAAO,EAChC,QAAQ,EAAC,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,KAAK,EAAA;QAElB,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,CAAC,EAAE,EAAA;AACf,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAC/B;AACI,iBAAA,MAAM,CACH,CAAC,EAAC,IAAI,GAAG,SAAS,EAAE,EAAE,EAAC,KACnB,CAAC,uBAAuB;iBACvB,EAAE,KAAKC,0BAAgB,IAAI,IAAI,KAAK,QAAQ,CAAC;AAErD,iBAAA,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,KAAI;AACtB,gBAAA,QAAQ,WAAW,CAAC,IAAI;AACpB,oBAAA,KAAK,SAAS;AACV,wBAAA,QACI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAC/C,EAAA,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,KAAK,CAC3C;AAEd,oBAAA;AACI,wBAAA,QACI,KACI,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;gCACjB,MAAM,EAAE,WAAW,KAAK,UAAU;AACrC,6BAAA,CAAC,EACF,GAAG,EAAE,GAAG,IAEP,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,KAAK,CAC3C;;AAGtB,aAAC,CAAC,CACJ,CACJ,CACF;AAEhB;;;;"}
|
|
@@ -8,14 +8,35 @@ import { Item } from './Item/Item.js';
|
|
|
8
8
|
import { MultipleTooltip } from './MultipleTooltip/MultipleTooltip.js';
|
|
9
9
|
import { MultipleTooltipProvider, MultipleTooltipContext } from './MultipleTooltip/MultipleTooltipContext.js';
|
|
10
10
|
import { COLLAPSE_ITEM_ID } from './constants.js';
|
|
11
|
-
import {
|
|
11
|
+
import { getSelectedItemIndex, getItemHeight, getItemsHeight, getItemsMinHeight, getAutosizeListItems, getMoreButtonItem } from './utils.js';
|
|
12
12
|
import styles from './CompositeBar.module.scss.js';
|
|
13
13
|
|
|
14
14
|
const b = createBlock('composite-bar', styles);
|
|
15
|
+
const CompositeBarList = React__default.memo(function CompositeBarList({ compact, compositeId, collapseItems, items, listRef, multipleTooltip, onItemClickByIndex, onMouseEnterByIndex, onMouseLeave, type, }) {
|
|
16
|
+
return (React__default.createElement(List, { id: compositeId, ref: listRef, items: items, selectedItemIndex: type === 'menu' ? getSelectedItemIndex(items) : undefined, itemHeight: getItemHeight, itemsHeight: getItemsHeight, itemClassName: b('root-menu-item'), virtualized: false, filterable: false, sortable: false, renderItem: (item, _isItemActive, itemIndex) => (React__default.createElement(Item, Object.assign({}, item, { enableTooltip: multipleTooltip ? false : item.enableTooltip, compact: compact, onMouseEnter: onMouseEnterByIndex(itemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(itemIndex, item.onItemClick), collapseItems: collapseItems }))) }));
|
|
17
|
+
});
|
|
15
18
|
const CompositeBarView = ({ type, items, onItemClick, onMoreClick, collapseItems, multipleTooltip = false, compact, compositeId, }) => {
|
|
16
19
|
const ref = useRef(null);
|
|
17
20
|
const tooltipRef = useRef(null);
|
|
18
21
|
const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = useContext(MultipleTooltipContext);
|
|
22
|
+
const multipleTooltipStateRef = useRef({
|
|
23
|
+
active: multipleTooltipActive,
|
|
24
|
+
activeIndex,
|
|
25
|
+
lastClickedItemIndex,
|
|
26
|
+
});
|
|
27
|
+
const onItemClickRef = useRef(onItemClick);
|
|
28
|
+
const onMoreClickRef = useRef(onMoreClick);
|
|
29
|
+
const setMultipleTooltipContextValueRef = useRef(setMultipleTooltipContextValue);
|
|
30
|
+
React__default.useLayoutEffect(() => {
|
|
31
|
+
multipleTooltipStateRef.current = {
|
|
32
|
+
active: multipleTooltipActive,
|
|
33
|
+
activeIndex,
|
|
34
|
+
lastClickedItemIndex,
|
|
35
|
+
};
|
|
36
|
+
onItemClickRef.current = onItemClick;
|
|
37
|
+
onMoreClickRef.current = onMoreClick;
|
|
38
|
+
setMultipleTooltipContextValueRef.current = setMultipleTooltipContextValue;
|
|
39
|
+
});
|
|
19
40
|
React__default.useEffect(() => {
|
|
20
41
|
function handleBlurWindow() {
|
|
21
42
|
if (multipleTooltip && multipleTooltipActive) {
|
|
@@ -56,76 +77,61 @@ const CompositeBarView = ({ type, items, onItemClick, onMoreClick, collapseItems
|
|
|
56
77
|
}, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);
|
|
57
78
|
const onMouseEnterByIndex = useCallback((itemIndex) => () => {
|
|
58
79
|
if (multipleTooltip && document.hasFocus()) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
80
|
+
const { active: multipleTooltipActiveValue, activeIndex: currentActiveIndex, lastClickedItemIndex: currentLastClickedItemIndex, } = multipleTooltipStateRef.current;
|
|
81
|
+
let nextMultipleTooltipActive = multipleTooltipActiveValue;
|
|
82
|
+
if (!multipleTooltipActiveValue && itemIndex !== currentLastClickedItemIndex) {
|
|
83
|
+
nextMultipleTooltipActive = true;
|
|
62
84
|
}
|
|
63
|
-
if (
|
|
64
|
-
|
|
85
|
+
if (currentActiveIndex === itemIndex &&
|
|
86
|
+
multipleTooltipActiveValue === nextMultipleTooltipActive) {
|
|
65
87
|
return;
|
|
66
88
|
}
|
|
67
|
-
|
|
89
|
+
setMultipleTooltipContextValueRef.current({
|
|
68
90
|
activeIndex: itemIndex,
|
|
69
|
-
active:
|
|
91
|
+
active: nextMultipleTooltipActive,
|
|
70
92
|
});
|
|
71
93
|
}
|
|
72
|
-
}, [
|
|
73
|
-
multipleTooltip,
|
|
74
|
-
multipleTooltipActive,
|
|
75
|
-
lastClickedItemIndex,
|
|
76
|
-
activeIndex,
|
|
77
|
-
setMultipleTooltipContextValue,
|
|
78
|
-
]);
|
|
94
|
+
}, [multipleTooltip]);
|
|
79
95
|
const onMouseLeave = useCallback(() => {
|
|
80
96
|
var _a;
|
|
81
97
|
if (compact && document.hasFocus()) {
|
|
82
98
|
(_a = ref.current) === null || _a === undefined ? undefined : _a.activateItem(undefined);
|
|
99
|
+
const { activeIndex: currentActiveIndex, lastClickedItemIndex: currentLastClickedItemIndex, } = multipleTooltipStateRef.current;
|
|
83
100
|
if (multipleTooltip &&
|
|
84
|
-
(
|
|
85
|
-
|
|
101
|
+
(currentActiveIndex !== undefined || currentLastClickedItemIndex !== undefined)) {
|
|
102
|
+
setMultipleTooltipContextValueRef.current({
|
|
86
103
|
activeIndex: undefined,
|
|
87
104
|
lastClickedItemIndex: undefined,
|
|
88
105
|
});
|
|
89
106
|
}
|
|
90
107
|
}
|
|
91
|
-
}, [
|
|
92
|
-
activeIndex,
|
|
93
|
-
compact,
|
|
94
|
-
lastClickedItemIndex,
|
|
95
|
-
multipleTooltip,
|
|
96
|
-
setMultipleTooltipContextValue,
|
|
97
|
-
]);
|
|
108
|
+
}, [compact, multipleTooltip]);
|
|
98
109
|
const onItemClickByIndex = useCallback((itemIndex, orginalItemClick) => (item, collapsed, event) => {
|
|
110
|
+
var _a, _b;
|
|
111
|
+
const { lastClickedItemIndex: currentLastClickedItemIndex } = multipleTooltipStateRef.current;
|
|
99
112
|
if (compact &&
|
|
100
113
|
multipleTooltip &&
|
|
101
|
-
itemIndex !==
|
|
114
|
+
itemIndex !== currentLastClickedItemIndex &&
|
|
102
115
|
item.id !== COLLAPSE_ITEM_ID) {
|
|
103
|
-
|
|
116
|
+
setMultipleTooltipContextValueRef.current({
|
|
104
117
|
lastClickedItemIndex: itemIndex,
|
|
105
118
|
active: false,
|
|
106
119
|
});
|
|
107
120
|
}
|
|
108
121
|
// Handle clicks on the "more" button (collapse item)
|
|
109
122
|
if (item.id === COLLAPSE_ITEM_ID && collapsed) {
|
|
110
|
-
|
|
123
|
+
(_a = onMoreClickRef.current) === null || _a === undefined ? undefined : _a.call(onMoreClickRef);
|
|
111
124
|
}
|
|
112
125
|
else {
|
|
113
|
-
|
|
126
|
+
(_b = onItemClickRef.current) === null || _b === undefined ? undefined : _b.call(onItemClickRef, Object.assign(Object.assign({}, item), {
|
|
114
127
|
// For collapsed popup items, preserve the item's own onItemClick
|
|
115
128
|
// since orginalItemClick belongs to the collapse button, not the item
|
|
116
129
|
onItemClick: collapsed ? item.onItemClick : orginalItemClick }), collapsed, event);
|
|
117
130
|
}
|
|
118
|
-
}, [
|
|
119
|
-
compact,
|
|
120
|
-
lastClickedItemIndex,
|
|
121
|
-
multipleTooltip,
|
|
122
|
-
onItemClick,
|
|
123
|
-
onMoreClick,
|
|
124
|
-
setMultipleTooltipContextValue,
|
|
125
|
-
]);
|
|
131
|
+
}, [compact, multipleTooltip]);
|
|
126
132
|
return (React__default.createElement(React__default.Fragment, null,
|
|
127
133
|
React__default.createElement("div", { ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
|
|
128
|
-
React__default.createElement(
|
|
134
|
+
React__default.createElement(CompositeBarList, { compositeId: compositeId, type: type, compact: compact, items: items, listRef: ref, multipleTooltip: multipleTooltip, onItemClickByIndex: onItemClickByIndex, onMouseEnterByIndex: onMouseEnterByIndex, onMouseLeave: onMouseLeave, collapseItems: collapseItems })),
|
|
129
135
|
type === 'menu' && multipleTooltip && (React__default.createElement(MultipleTooltip, { open: compact && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
|
|
130
136
|
};
|
|
131
137
|
const CompositeBar = ({ type, items, menuMoreTitle, onItemClick, onMoreClick, multipleTooltip = false, compact, compositeId, }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositeBar.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/CompositeBar.tsx"],"sourcesContent":["import React, {FC, ReactNode, useCallback, useContext, useRef} from 'react';\n\nimport {List} from '@gravity-ui/uikit';\nimport AutoSizer, {Size} from 'react-virtualized-auto-sizer';\n\nimport {ASIDE_HEADER_COMPACT_WIDTH} from '../../../constants';\nimport {createBlock} from '../../../utils/cn';\nimport {AsideHeaderItem} from '../../types';\n\nimport {Item, ItemProps} from './Item/Item';\nimport {MultipleTooltip, MultipleTooltipContext, MultipleTooltipProvider} from './MultipleTooltip';\nimport {COLLAPSE_ITEM_ID} from './constants';\nimport {\n getAutosizeListItems,\n getItemHeight,\n getItemsHeight,\n getItemsMinHeight,\n getMoreButtonItem,\n getSelectedItemIndex,\n} from './utils';\n\nimport styles from './CompositeBar.module.scss';\n\nconst b = createBlock('composite-bar', styles);\n\ntype CompositeBarProps = {\n type: 'menu' | 'subheader';\n items: AsideHeaderItem[];\n onItemClick?: (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => void;\n multipleTooltip?: boolean;\n menuMoreTitle?: string;\n onMoreClick?: () => void;\n compact: boolean;\n compositeId?: string;\n};\n\ntype CompositeBarViewProps = CompositeBarProps & {\n collapseItems?: AsideHeaderItem[];\n};\n\nconst CompositeBarView: FC<CompositeBarViewProps> = ({\n type,\n items,\n onItemClick,\n onMoreClick,\n collapseItems,\n multipleTooltip = false,\n compact,\n compositeId,\n}) => {\n const ref = useRef<List<AsideHeaderItem>>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n\n const {\n setValue: setMultipleTooltipContextValue,\n active: multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n } = useContext(MultipleTooltipContext);\n\n React.useEffect(() => {\n function handleBlurWindow() {\n if (multipleTooltip && multipleTooltipActive) {\n setMultipleTooltipContextValue({active: false});\n }\n }\n\n window.addEventListener('blur', handleBlurWindow);\n\n return () => {\n window.removeEventListener('blur', handleBlurWindow);\n };\n }, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);\n\n const onTooltipMouseEnter = useCallback(\n (e: {clientX: number}) => {\n if (\n multipleTooltip &&\n compact &&\n !multipleTooltipActive &&\n document.hasFocus() &&\n activeIndex !== lastClickedItemIndex &&\n e.clientX <= ASIDE_HEADER_COMPACT_WIDTH\n ) {\n setMultipleTooltipContextValue?.({\n active: true,\n });\n }\n },\n [\n multipleTooltip,\n compact,\n multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n setMultipleTooltipContextValue,\n ],\n );\n\n const onTooltipMouseLeave = useCallback(() => {\n if (multipleTooltip && multipleTooltipActive && document.hasFocus()) {\n setMultipleTooltipContextValue?.({\n active: false,\n lastClickedItemIndex: undefined,\n });\n }\n }, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);\n\n const onMouseEnterByIndex = useCallback(\n (itemIndex: number) => () => {\n if (multipleTooltip && document.hasFocus()) {\n let multipleTooltipActiveValue = multipleTooltipActive;\n if (!multipleTooltipActive && itemIndex !== lastClickedItemIndex) {\n multipleTooltipActiveValue = true;\n }\n if (\n activeIndex === itemIndex &&\n multipleTooltipActive === multipleTooltipActiveValue\n ) {\n return;\n }\n setMultipleTooltipContextValue({\n activeIndex: itemIndex,\n active: multipleTooltipActiveValue,\n });\n }\n },\n [\n multipleTooltip,\n multipleTooltipActive,\n lastClickedItemIndex,\n activeIndex,\n setMultipleTooltipContextValue,\n ],\n );\n\n const onMouseLeave = useCallback(() => {\n if (compact && document.hasFocus()) {\n ref.current?.activateItem(undefined as unknown as number);\n if (\n multipleTooltip &&\n (activeIndex !== undefined || lastClickedItemIndex !== undefined)\n ) {\n setMultipleTooltipContextValue({\n activeIndex: undefined,\n lastClickedItemIndex: undefined,\n });\n }\n }\n }, [\n activeIndex,\n compact,\n lastClickedItemIndex,\n multipleTooltip,\n setMultipleTooltipContextValue,\n ]);\n\n const onItemClickByIndex = useCallback(\n (\n itemIndex: number,\n orginalItemClick: AsideHeaderItem['onItemClick'],\n ): ItemProps['onItemClick'] =>\n (item, collapsed, event) => {\n if (\n compact &&\n multipleTooltip &&\n itemIndex !== lastClickedItemIndex &&\n item.id !== COLLAPSE_ITEM_ID\n ) {\n setMultipleTooltipContextValue({\n lastClickedItemIndex: itemIndex,\n active: false,\n });\n }\n\n // Handle clicks on the \"more\" button (collapse item)\n if (item.id === COLLAPSE_ITEM_ID && collapsed) {\n onMoreClick?.();\n } else {\n onItemClick?.(\n {\n ...item,\n // For collapsed popup items, preserve the item's own onItemClick\n // since orginalItemClick belongs to the collapse button, not the item\n onItemClick: collapsed ? item.onItemClick : orginalItemClick,\n },\n collapsed,\n event,\n );\n }\n },\n [\n compact,\n lastClickedItemIndex,\n multipleTooltip,\n onItemClick,\n onMoreClick,\n setMultipleTooltipContextValue,\n ],\n );\n\n return (\n <React.Fragment>\n <div\n ref={tooltipRef}\n onMouseEnter={onTooltipMouseEnter}\n onMouseLeave={onTooltipMouseLeave}\n >\n <List<AsideHeaderItem>\n id={compositeId}\n ref={ref}\n items={items}\n selectedItemIndex={type === 'menu' ? getSelectedItemIndex(items) : undefined}\n itemHeight={getItemHeight}\n itemsHeight={getItemsHeight}\n itemClassName={b('root-menu-item')}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(item, _isItemActive, itemIndex) => (\n <Item\n {...item}\n enableTooltip={multipleTooltip ? false : item.enableTooltip}\n compact={compact}\n onMouseEnter={onMouseEnterByIndex(itemIndex)}\n onMouseLeave={onMouseLeave}\n onItemClick={onItemClickByIndex(itemIndex, item.onItemClick)}\n collapseItems={collapseItems}\n />\n )}\n />\n </div>\n {type === 'menu' && multipleTooltip && (\n <MultipleTooltip\n open={compact && multipleTooltipActive}\n anchorRef={tooltipRef}\n placement={['right-start']}\n items={items}\n />\n )}\n </React.Fragment>\n );\n};\n\nexport const CompositeBar: FC<CompositeBarProps> = ({\n type,\n items,\n menuMoreTitle,\n onItemClick,\n onMoreClick,\n multipleTooltip = false,\n compact,\n compositeId,\n}) => {\n if (items.length === 0) {\n return null;\n }\n let node: ReactNode;\n\n if (type === 'menu') {\n const minHeight = getItemsMinHeight(items);\n const collapseItem = getMoreButtonItem(menuMoreTitle);\n node = (\n <div className={b({autosizer: true})} style={{minHeight}}>\n {items.length !== 0 && (\n <AutoSizer>\n {(size: Size) => {\n const width = Number.isNaN(size.width) ? 0 : size.width;\n const height = Number.isNaN(size.height) ? 0 : size.height;\n\n const {listItems, collapseItems} = getAutosizeListItems(\n items,\n height,\n collapseItem,\n );\n return (\n <div style={{width, height}}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n items={listItems}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n collapseItems={collapseItems}\n multipleTooltip={multipleTooltip}\n />\n </div>\n );\n }}\n </AutoSizer>\n )}\n </div>\n );\n } else {\n node = (\n <div className={b({subheader: true})}>\n <CompositeBarView\n type=\"subheader\"\n compact={compact}\n items={items}\n onItemClick={onItemClick}\n />\n </div>\n );\n }\n return <MultipleTooltipProvider>{node}</MultipleTooltipProvider>;\n};\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CompositeBar.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/CompositeBar.tsx"],"sourcesContent":["import React, {FC, ReactNode, useCallback, useContext, useRef} from 'react';\n\nimport {List} from '@gravity-ui/uikit';\nimport AutoSizer, {Size} from 'react-virtualized-auto-sizer';\n\nimport {ASIDE_HEADER_COMPACT_WIDTH} from '../../../constants';\nimport {createBlock} from '../../../utils/cn';\nimport {AsideHeaderItem} from '../../types';\n\nimport {Item, ItemProps} from './Item/Item';\nimport {MultipleTooltip, MultipleTooltipContext, MultipleTooltipProvider} from './MultipleTooltip';\nimport {COLLAPSE_ITEM_ID} from './constants';\nimport {\n getAutosizeListItems,\n getItemHeight,\n getItemsHeight,\n getItemsMinHeight,\n getMoreButtonItem,\n getSelectedItemIndex,\n} from './utils';\n\nimport styles from './CompositeBar.module.scss';\n\nconst b = createBlock('composite-bar', styles);\n\ntype CompositeBarProps = {\n type: 'menu' | 'subheader';\n items: AsideHeaderItem[];\n onItemClick?: (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => void;\n multipleTooltip?: boolean;\n menuMoreTitle?: string;\n onMoreClick?: () => void;\n compact: boolean;\n compositeId?: string;\n};\n\ntype CompositeBarViewProps = CompositeBarProps & {\n collapseItems?: AsideHeaderItem[];\n};\n\ntype CompositeBarListProps = {\n compact: boolean;\n compositeId?: string;\n collapseItems?: AsideHeaderItem[];\n items: AsideHeaderItem[];\n listRef: React.RefObject<List<AsideHeaderItem>>;\n multipleTooltip: boolean;\n onItemClickByIndex: (\n itemIndex: number,\n orginalItemClick: AsideHeaderItem['onItemClick'],\n ) => ItemProps['onItemClick'];\n onMouseEnterByIndex: (itemIndex: number) => () => void;\n onMouseLeave: () => void;\n type: CompositeBarProps['type'];\n};\n\nconst CompositeBarList = React.memo(function CompositeBarList({\n compact,\n compositeId,\n collapseItems,\n items,\n listRef,\n multipleTooltip,\n onItemClickByIndex,\n onMouseEnterByIndex,\n onMouseLeave,\n type,\n}: CompositeBarListProps) {\n return (\n <List<AsideHeaderItem>\n id={compositeId}\n ref={listRef}\n items={items}\n selectedItemIndex={type === 'menu' ? getSelectedItemIndex(items) : undefined}\n itemHeight={getItemHeight}\n itemsHeight={getItemsHeight}\n itemClassName={b('root-menu-item')}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(item, _isItemActive, itemIndex) => (\n <Item\n {...item}\n enableTooltip={multipleTooltip ? false : item.enableTooltip}\n compact={compact}\n onMouseEnter={onMouseEnterByIndex(itemIndex)}\n onMouseLeave={onMouseLeave}\n onItemClick={onItemClickByIndex(itemIndex, item.onItemClick)}\n collapseItems={collapseItems}\n />\n )}\n />\n );\n});\n\nconst CompositeBarView: FC<CompositeBarViewProps> = ({\n type,\n items,\n onItemClick,\n onMoreClick,\n collapseItems,\n multipleTooltip = false,\n compact,\n compositeId,\n}) => {\n const ref = useRef<List<AsideHeaderItem>>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n\n const {\n setValue: setMultipleTooltipContextValue,\n active: multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n } = useContext(MultipleTooltipContext);\n const multipleTooltipStateRef = useRef({\n active: multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n });\n const onItemClickRef = useRef(onItemClick);\n const onMoreClickRef = useRef(onMoreClick);\n const setMultipleTooltipContextValueRef = useRef(setMultipleTooltipContextValue);\n\n React.useLayoutEffect(() => {\n multipleTooltipStateRef.current = {\n active: multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n };\n onItemClickRef.current = onItemClick;\n onMoreClickRef.current = onMoreClick;\n setMultipleTooltipContextValueRef.current = setMultipleTooltipContextValue;\n });\n\n React.useEffect(() => {\n function handleBlurWindow() {\n if (multipleTooltip && multipleTooltipActive) {\n setMultipleTooltipContextValue({active: false});\n }\n }\n\n window.addEventListener('blur', handleBlurWindow);\n\n return () => {\n window.removeEventListener('blur', handleBlurWindow);\n };\n }, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);\n\n const onTooltipMouseEnter = useCallback(\n (e: {clientX: number}) => {\n if (\n multipleTooltip &&\n compact &&\n !multipleTooltipActive &&\n document.hasFocus() &&\n activeIndex !== lastClickedItemIndex &&\n e.clientX <= ASIDE_HEADER_COMPACT_WIDTH\n ) {\n setMultipleTooltipContextValue?.({\n active: true,\n });\n }\n },\n [\n multipleTooltip,\n compact,\n multipleTooltipActive,\n activeIndex,\n lastClickedItemIndex,\n setMultipleTooltipContextValue,\n ],\n );\n\n const onTooltipMouseLeave = useCallback(() => {\n if (multipleTooltip && multipleTooltipActive && document.hasFocus()) {\n setMultipleTooltipContextValue?.({\n active: false,\n lastClickedItemIndex: undefined,\n });\n }\n }, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);\n\n const onMouseEnterByIndex = useCallback(\n (itemIndex: number) => () => {\n if (multipleTooltip && document.hasFocus()) {\n const {\n active: multipleTooltipActiveValue,\n activeIndex: currentActiveIndex,\n lastClickedItemIndex: currentLastClickedItemIndex,\n } = multipleTooltipStateRef.current;\n let nextMultipleTooltipActive = multipleTooltipActiveValue;\n if (!multipleTooltipActiveValue && itemIndex !== currentLastClickedItemIndex) {\n nextMultipleTooltipActive = true;\n }\n if (\n currentActiveIndex === itemIndex &&\n multipleTooltipActiveValue === nextMultipleTooltipActive\n ) {\n return;\n }\n setMultipleTooltipContextValueRef.current({\n activeIndex: itemIndex,\n active: nextMultipleTooltipActive,\n });\n }\n },\n [multipleTooltip],\n );\n\n const onMouseLeave = useCallback(() => {\n if (compact && document.hasFocus()) {\n ref.current?.activateItem(undefined as unknown as number);\n const {\n activeIndex: currentActiveIndex,\n lastClickedItemIndex: currentLastClickedItemIndex,\n } = multipleTooltipStateRef.current;\n if (\n multipleTooltip &&\n (currentActiveIndex !== undefined || currentLastClickedItemIndex !== undefined)\n ) {\n setMultipleTooltipContextValueRef.current({\n activeIndex: undefined,\n lastClickedItemIndex: undefined,\n });\n }\n }\n }, [compact, multipleTooltip]);\n\n const onItemClickByIndex = useCallback(\n (\n itemIndex: number,\n orginalItemClick: AsideHeaderItem['onItemClick'],\n ): ItemProps['onItemClick'] =>\n (item, collapsed, event) => {\n const {lastClickedItemIndex: currentLastClickedItemIndex} =\n multipleTooltipStateRef.current;\n if (\n compact &&\n multipleTooltip &&\n itemIndex !== currentLastClickedItemIndex &&\n item.id !== COLLAPSE_ITEM_ID\n ) {\n setMultipleTooltipContextValueRef.current({\n lastClickedItemIndex: itemIndex,\n active: false,\n });\n }\n\n // Handle clicks on the \"more\" button (collapse item)\n if (item.id === COLLAPSE_ITEM_ID && collapsed) {\n onMoreClickRef.current?.();\n } else {\n onItemClickRef.current?.(\n {\n ...item,\n // For collapsed popup items, preserve the item's own onItemClick\n // since orginalItemClick belongs to the collapse button, not the item\n onItemClick: collapsed ? item.onItemClick : orginalItemClick,\n },\n collapsed,\n event,\n );\n }\n },\n [compact, multipleTooltip],\n );\n\n return (\n <React.Fragment>\n <div\n ref={tooltipRef}\n onMouseEnter={onTooltipMouseEnter}\n onMouseLeave={onTooltipMouseLeave}\n >\n <CompositeBarList\n compositeId={compositeId}\n type={type}\n compact={compact}\n items={items}\n listRef={ref}\n multipleTooltip={multipleTooltip}\n onItemClickByIndex={onItemClickByIndex}\n onMouseEnterByIndex={onMouseEnterByIndex}\n onMouseLeave={onMouseLeave}\n collapseItems={collapseItems}\n />\n </div>\n {type === 'menu' && multipleTooltip && (\n <MultipleTooltip\n open={compact && multipleTooltipActive}\n anchorRef={tooltipRef}\n placement={['right-start']}\n items={items}\n />\n )}\n </React.Fragment>\n );\n};\n\nexport const CompositeBar: FC<CompositeBarProps> = ({\n type,\n items,\n menuMoreTitle,\n onItemClick,\n onMoreClick,\n multipleTooltip = false,\n compact,\n compositeId,\n}) => {\n if (items.length === 0) {\n return null;\n }\n let node: ReactNode;\n\n if (type === 'menu') {\n const minHeight = getItemsMinHeight(items);\n const collapseItem = getMoreButtonItem(menuMoreTitle);\n node = (\n <div className={b({autosizer: true})} style={{minHeight}}>\n {items.length !== 0 && (\n <AutoSizer>\n {(size: Size) => {\n const width = Number.isNaN(size.width) ? 0 : size.width;\n const height = Number.isNaN(size.height) ? 0 : size.height;\n\n const {listItems, collapseItems} = getAutosizeListItems(\n items,\n height,\n collapseItem,\n );\n return (\n <div style={{width, height}}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n items={listItems}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n collapseItems={collapseItems}\n multipleTooltip={multipleTooltip}\n />\n </div>\n );\n }}\n </AutoSizer>\n )}\n </div>\n );\n } else {\n node = (\n <div className={b({subheader: true})}>\n <CompositeBarView\n type=\"subheader\"\n compact={compact}\n items={items}\n onItemClick={onItemClick}\n />\n </div>\n );\n }\n return <MultipleTooltipProvider>{node}</MultipleTooltipProvider>;\n};\n"],"names":["React"],"mappings":"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"}
|
package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js
CHANGED
|
@@ -11,7 +11,7 @@ const POPUP_OFFSET = { mainAxis: 4, crossAxis: -32 };
|
|
|
11
11
|
const MultipleTooltip = ({ items, open, anchorRef, placement, }) => {
|
|
12
12
|
const { activeIndex, hideCollapseItemTooltip } = React__default.useContext(MultipleTooltipContext);
|
|
13
13
|
const activeItem = activeIndex === undefined ? null : items[activeIndex];
|
|
14
|
-
return (React__default.createElement(Popup, { open: open, className: b('popup'), anchorElement: anchorRef.current, strategy: "fixed", placement: placement, offset: POPUP_OFFSET },
|
|
14
|
+
return (React__default.createElement(Popup, { open: open, className: b('popup'), anchorElement: anchorRef.current, strategy: "fixed", placement: placement, offset: POPUP_OFFSET, returnFocus: false },
|
|
15
15
|
React__default.createElement("div", { className: b() },
|
|
16
16
|
React__default.createElement("div", { className: b('items-container') }, items
|
|
17
17
|
.filter(({ type = 'regular', id }) => !hideCollapseItemTooltip ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultipleTooltip.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.tsx"],"sourcesContent":["import React from 'react';\n\nimport {Popup, PopupProps} from '@gravity-ui/uikit';\n\nimport {AsideHeaderItem} from 'src/components/AsideHeader/types';\n\nimport {createBlock} from '../../../../utils/cn';\nimport {COLLAPSE_ITEM_ID} from '../constants';\n\nimport {MultipleTooltipContext} from './MultipleTooltipContext';\n\nimport styles from './MultipleTooltip.module.scss';\n\nconst b = createBlock('multiple-tooltip', styles);\n\nconst POPUP_OFFSET: PopupProps['offset'] = {mainAxis: 4, crossAxis: -32};\n\ntype MultipleTooltipProps = Pick<PopupProps, 'open' | 'placement'> & {\n anchorRef: React.RefObject<HTMLElement>;\n items: AsideHeaderItem[];\n};\n\nexport const MultipleTooltip: React.FC<MultipleTooltipProps> = ({\n items,\n open,\n anchorRef,\n placement,\n}) => {\n const {activeIndex, hideCollapseItemTooltip} = React.useContext(MultipleTooltipContext);\n const activeItem = activeIndex === undefined ? null : items[activeIndex];\n\n return (\n <Popup\n open={open}\n className={b('popup')}\n anchorElement={anchorRef.current}\n strategy=\"fixed\"\n placement={placement}\n offset={POPUP_OFFSET}\n >\n <div className={b()}>\n <div className={b('items-container')}>\n {items\n .filter(\n ({type = 'regular', id}) =>\n !hideCollapseItemTooltip ||\n (id !== COLLAPSE_ITEM_ID && type !== 'action'),\n )\n .map((currentItem, idx) => {\n switch (currentItem.type) {\n case 'divider':\n return (\n <div className={b('item', {divider: true})} key={idx}>\n {currentItem.tooltipText || currentItem.title}\n </div>\n );\n default:\n return (\n <div\n className={b('item', {\n active: currentItem === activeItem,\n })}\n key={idx}\n >\n {currentItem.tooltipText || currentItem.title}\n </div>\n );\n }\n })}\n </div>\n </div>\n </Popup>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;AAaA,MAAM,CAAC,GAAG,WAAW,CAAC,kBAAkB,EAAE,MAAM,CAAC;AAEjD,MAAM,YAAY,GAAyB,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAC;AAOjE,MAAM,eAAe,GAAmC,CAAC,EAC5D,KAAK,EACL,IAAI,EACJ,SAAS,EACT,SAAS,GACZ,KAAI;AACD,IAAA,MAAM,EAAC,WAAW,EAAE,uBAAuB,EAAC,GAAGA,cAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC;AACvF,IAAA,MAAM,UAAU,GAAG,WAAW,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;AAExE,IAAA,QACIA,cAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EACF,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EACrB,aAAa,EAAE,SAAS,CAAC,OAAO,EAChC,QAAQ,EAAC,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,YAAY,EAAA;
|
|
1
|
+
{"version":3,"file":"MultipleTooltip.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.tsx"],"sourcesContent":["import React from 'react';\n\nimport {Popup, PopupProps} from '@gravity-ui/uikit';\n\nimport {AsideHeaderItem} from 'src/components/AsideHeader/types';\n\nimport {createBlock} from '../../../../utils/cn';\nimport {COLLAPSE_ITEM_ID} from '../constants';\n\nimport {MultipleTooltipContext} from './MultipleTooltipContext';\n\nimport styles from './MultipleTooltip.module.scss';\n\nconst b = createBlock('multiple-tooltip', styles);\n\nconst POPUP_OFFSET: PopupProps['offset'] = {mainAxis: 4, crossAxis: -32};\n\ntype MultipleTooltipProps = Pick<PopupProps, 'open' | 'placement'> & {\n anchorRef: React.RefObject<HTMLElement>;\n items: AsideHeaderItem[];\n};\n\nexport const MultipleTooltip: React.FC<MultipleTooltipProps> = ({\n items,\n open,\n anchorRef,\n placement,\n}) => {\n const {activeIndex, hideCollapseItemTooltip} = React.useContext(MultipleTooltipContext);\n const activeItem = activeIndex === undefined ? null : items[activeIndex];\n\n return (\n <Popup\n open={open}\n className={b('popup')}\n anchorElement={anchorRef.current}\n strategy=\"fixed\"\n placement={placement}\n offset={POPUP_OFFSET}\n returnFocus={false}\n >\n <div className={b()}>\n <div className={b('items-container')}>\n {items\n .filter(\n ({type = 'regular', id}) =>\n !hideCollapseItemTooltip ||\n (id !== COLLAPSE_ITEM_ID && type !== 'action'),\n )\n .map((currentItem, idx) => {\n switch (currentItem.type) {\n case 'divider':\n return (\n <div className={b('item', {divider: true})} key={idx}>\n {currentItem.tooltipText || currentItem.title}\n </div>\n );\n default:\n return (\n <div\n className={b('item', {\n active: currentItem === activeItem,\n })}\n key={idx}\n >\n {currentItem.tooltipText || currentItem.title}\n </div>\n );\n }\n })}\n </div>\n </div>\n </Popup>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;AAaA,MAAM,CAAC,GAAG,WAAW,CAAC,kBAAkB,EAAE,MAAM,CAAC;AAEjD,MAAM,YAAY,GAAyB,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAC;AAOjE,MAAM,eAAe,GAAmC,CAAC,EAC5D,KAAK,EACL,IAAI,EACJ,SAAS,EACT,SAAS,GACZ,KAAI;AACD,IAAA,MAAM,EAAC,WAAW,EAAE,uBAAuB,EAAC,GAAGA,cAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC;AACvF,IAAA,MAAM,UAAU,GAAG,WAAW,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;AAExE,IAAA,QACIA,cAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EACF,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EACrB,aAAa,EAAE,SAAS,CAAC,OAAO,EAChC,QAAQ,EAAC,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,KAAK,EAAA;QAElBA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,CAAC,EAAE,EAAA;AACf,YAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAC/B;AACI,iBAAA,MAAM,CACH,CAAC,EAAC,IAAI,GAAG,SAAS,EAAE,EAAE,EAAC,KACnB,CAAC,uBAAuB;iBACvB,EAAE,KAAK,gBAAgB,IAAI,IAAI,KAAK,QAAQ,CAAC;AAErD,iBAAA,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,KAAI;AACtB,gBAAA,QAAQ,WAAW,CAAC,IAAI;AACpB,oBAAA,KAAK,SAAS;AACV,wBAAA,QACIA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAC/C,EAAA,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,KAAK,CAC3C;AAEd,oBAAA;AACI,wBAAA,QACIA,cACI,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;gCACjB,MAAM,EAAE,WAAW,KAAK,UAAU;AACrC,6BAAA,CAAC,EACF,GAAG,EAAE,GAAG,IAEP,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,KAAK,CAC3C;;AAGtB,aAAC,CAAC,CACJ,CACJ,CACF;AAEhB;;;;"}
|