@skbkontur/side-menu 0.4.0 → 0.4.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/CHANGELOG.md +16 -0
- package/README.md +13 -6
- package/hooks/UseMemoIcon.d.ts +2 -0
- package/hooks/UseMemoIcon.js +14 -0
- package/hooks/useActiveState.d.ts +1 -0
- package/hooks/useActiveState.js +12 -0
- package/hooks/useOpenedState.d.ts +2 -0
- package/hooks/useOpenedState.js +11 -0
- package/hooks/useOpenedSubElementState.d.ts +1 -0
- package/hooks/useOpenedSubElementState.js +12 -0
- package/index.d.ts +13 -11
- package/index.js +13 -11
- package/package.json +2 -2
- package/src/SideMenu/SideMenu.d.ts +42 -0
- package/src/{SideMenu.js → SideMenu/SideMenu.js} +33 -27
- package/src/SideMenu/SideMenu.md +0 -0
- package/src/SideMenu.styles.d.ts +3 -1
- package/src/SideMenu.styles.js +60 -54
- package/src/SideMenuAvatar/SideMenuAvatar.d.ts +13 -0
- package/src/{SideMenuAvatar.js → SideMenuAvatar/SideMenuAvatar.js} +9 -10
- package/src/SideMenuAvatar/SideMenuAvatar.md +0 -0
- package/src/SideMenuBody/SideMenuBody.d.ts +13 -0
- package/src/{SideMenuBody.js → SideMenuBody/SideMenuBody.js} +10 -11
- package/src/SideMenuBody/SideMenuBody.md +0 -0
- package/src/SideMenuDivider/SideMenuDivider.d.ts +10 -0
- package/src/{SideMenuDivider.js → SideMenuDivider/SideMenuDivider.js} +8 -9
- package/src/SideMenuDivider/SideMenuDivider.md +0 -0
- package/src/{SideMenuDropdown.d.ts → SideMenuDropdown/SideMenuDropdown.d.ts} +6 -2
- package/src/{SideMenuDropdown.js → SideMenuDropdown/SideMenuDropdown.js} +11 -12
- package/src/SideMenuDropdown/SideMenuDropdown.md +0 -0
- package/src/{SideMenuFooter.d.ts → SideMenuFooter/SideMenuFooter.d.ts} +6 -2
- package/src/{SideMenuFooter.js → SideMenuFooter/SideMenuFooter.js} +10 -11
- package/src/SideMenuFooter/SideMenuFooter.md +0 -0
- package/src/{SideMenuHeader.d.ts → SideMenuHeader/SideMenuHeader.d.ts} +6 -2
- package/src/{SideMenuHeader.js → SideMenuHeader/SideMenuHeader.js} +11 -12
- package/src/SideMenuHeader/SideMenuHeader.md +0 -0
- package/src/SideMenuItem/SideMenuItem.d.ts +14 -0
- package/src/SideMenuItem/SideMenuItem.js +15 -0
- package/src/SideMenuItem/SideMenuItem.md +0 -0
- package/src/SideMenuLink/SideMenuLink.d.ts +16 -0
- package/src/SideMenuLink/SideMenuLink.js +21 -0
- package/src/SideMenuLink/SideMenuLink.md +0 -0
- package/src/SideMenuOrganisations/SideMenuOrganisations.d.ts +10 -0
- package/src/{SideMenuOrganisations.js → SideMenuOrganisations/SideMenuOrganisations.js} +7 -8
- package/src/SideMenuOrganisations/SideMenuOrganisations.md +0 -0
- package/src/SideMenuSubItem/SideMenuSubItem.d.ts +12 -0
- package/src/SideMenuSubItem/SideMenuSubItem.js +27 -0
- package/src/SideMenuSubItem/SideMenuSubItem.md +0 -0
- package/src/SideMenuSubItemHeader/SideMenuSubItemHeader.d.ts +13 -0
- package/src/{SideMenuSubItemHeader.js → SideMenuSubItemHeader/SideMenuSubItemHeader.js} +10 -11
- package/src/SideMenuSubItemHeader/SideMenuSubItemHeader.md +0 -0
- package/src/SideMenuSubLink/SideMenuSubLink.d.ts +16 -0
- package/src/SideMenuSubLink/SideMenuSubLink.js +31 -0
- package/src/SideMenuSubLink/SideMenuSubLink.md +0 -0
- package/src/internal/ClickableElement.d.ts +25 -0
- package/src/internal/ClickableElement.js +63 -0
- package/src/{SideMenuBodyChildren.d.ts → internal/InnerBody.d.ts} +2 -2
- package/src/{SideMenuBodyChildren.js → internal/InnerBody.js} +13 -12
- package/src/{InnerSubMenu.d.ts → internal/InnerSubMenu.d.ts} +0 -0
- package/src/{InnerSubMenu.js → internal/InnerSubMenu.js} +3 -1
- package/src/internal/ItemContent/Avatar.d.ts +5 -0
- package/src/internal/ItemContent/Avatar.js +12 -0
- package/src/internal/ItemContent/Caption.d.ts +9 -0
- package/src/internal/ItemContent/Caption.js +19 -0
- package/src/internal/ItemContent/Icon.d.ts +8 -0
- package/src/internal/ItemContent/Icon.js +20 -0
- package/src/internal/ItemContent/ItemContent.d.ts +7 -0
- package/src/internal/ItemContent/ItemContent.js +39 -0
- package/src/internal/ItemContent/Marker.d.ts +6 -0
- package/src/internal/ItemContent/Marker.js +11 -0
- package/src/internal/NestedMenu.d.ts +9 -0
- package/src/internal/NestedMenu.js +27 -0
- package/src/{RightBorder.d.ts → internal/RightBorder.d.ts} +0 -0
- package/src/{RightBorder.js → internal/RightBorder.js} +2 -2
- package/src/{SeparatedSubMenu.d.ts → internal/SeparatedSubMenu.d.ts} +0 -0
- package/src/{SeparatedSubMenu.js → internal/SeparatedSubMenu.js} +6 -4
- package/src/{SideMenuLogotype.d.ts → internal/SideMenuLogotype.d.ts} +1 -1
- package/src/{SideMenuLogotype.js → internal/SideMenuLogotype.js} +2 -2
- package/src/internal/SubMenu.d.ts +13 -0
- package/src/internal/SubMenu.js +21 -0
- package/utils/scripts.d.ts +4 -2
- package/utils/scripts.js +18 -14
- package/src/SideMenu.d.ts +0 -38
- package/src/SideMenuAvatar.d.ts +0 -9
- package/src/SideMenuBody.d.ts +0 -9
- package/src/SideMenuDivider.d.ts +0 -6
- package/src/SideMenuItem.d.ts +0 -19
- package/src/SideMenuItem.js +0 -126
- package/src/SideMenuOrganisations.d.ts +0 -6
- package/src/SideMenuSubItem.d.ts +0 -8
- package/src/SideMenuSubItem.js +0 -58
- package/src/SideMenuSubItemHeader.d.ts +0 -9
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { SideMenuHeaderProps } from '
|
|
2
|
+
import { SideMenuHeaderProps } from '../SideMenuHeader/SideMenuHeader';
|
|
3
3
|
declare const SideMenuLogotypeWithStaticFields: React.ForwardRefExoticComponent<SideMenuHeaderProps & React.RefAttributes<HTMLDivElement>> & {
|
|
4
4
|
__KONTUR_REACT_UI__: string;
|
|
5
5
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __assign, __rest } from "tslib";
|
|
2
2
|
import React, { forwardRef, useContext, useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { Logotype } from '@skbkontur/react-ui-addons/components/Logotype';
|
|
4
|
-
import { jsStyles } from '
|
|
5
|
-
import { SideMenuContext } from '
|
|
4
|
+
import { jsStyles } from '../SideMenu.styles';
|
|
5
|
+
import { SideMenuContext } from '../SideMenuContext';
|
|
6
6
|
/**
|
|
7
7
|
* Логотип
|
|
8
8
|
*
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface SubMenuProps {
|
|
3
|
+
children?: React.ReactNode;
|
|
4
|
+
generatedId?: string;
|
|
5
|
+
isOpened?: boolean;
|
|
6
|
+
isSubMenu?: boolean;
|
|
7
|
+
isMinimised?: boolean;
|
|
8
|
+
isSeparatedMenu?: boolean;
|
|
9
|
+
}
|
|
10
|
+
declare const SubMenuWithStaticFields: React.ForwardRefExoticComponent<SubMenuProps & React.RefAttributes<HTMLDivElement>> & {
|
|
11
|
+
__KONTUR_REACT_UI__: string;
|
|
12
|
+
};
|
|
13
|
+
export { SubMenuWithStaticFields as SubMenu };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { SeparatedSubMenu } from './SeparatedSubMenu';
|
|
3
|
+
import { InnerSubMenu } from './InnerSubMenu';
|
|
4
|
+
/**
|
|
5
|
+
* Подменю
|
|
6
|
+
*
|
|
7
|
+
* @visibleName InnerSubMenu
|
|
8
|
+
*/
|
|
9
|
+
var SubMenu = forwardRef(function (_a, ref) {
|
|
10
|
+
var children = _a.children, isOpened = _a.isOpened, isSubMenu = _a.isSubMenu, isMinimised = _a.isMinimised, isSeparatedMenu = _a.isSeparatedMenu, generatedId = _a.generatedId;
|
|
11
|
+
if (!children || !isOpened || isSubMenu || isMinimised) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
if (isSeparatedMenu) {
|
|
15
|
+
return (React.createElement(SeparatedSubMenu, { generatedId: generatedId, ref: ref }, children));
|
|
16
|
+
}
|
|
17
|
+
return (React.createElement(InnerSubMenu, { generatedId: generatedId, ref: ref }, children));
|
|
18
|
+
});
|
|
19
|
+
SubMenu.displayName = 'SubMenu';
|
|
20
|
+
var SubMenuWithStaticFields = Object.assign(SubMenu, { __KONTUR_REACT_UI__: 'SubMenu' });
|
|
21
|
+
export { SubMenuWithStaticFields as SubMenu };
|
package/utils/scripts.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ReactElement } from 'react';
|
|
2
|
-
import { FlattedArrayElementType } from '../src/
|
|
2
|
+
import { FlattedArrayElementType } from '../src/internal/InnerBody';
|
|
3
3
|
export declare const getItemId: (prefix: 'body' | 'footer', id: string | number) => string;
|
|
4
|
+
export declare const isClickableSubElement: (element: string) => boolean;
|
|
5
|
+
export declare const isClickableElement: (element: string) => boolean;
|
|
4
6
|
export declare const getAllParents: (id: string, flattedArrayOfAllElements: FlattedArrayElementType[]) => string[];
|
|
5
7
|
export declare const getElementsChildren: (element: ReactElement, levelIndex: string) => FlattedArrayElementType[];
|
|
6
|
-
export declare const isOpenedParents: (id: string | undefined, generatedId: string | undefined, openedParents: string[] | undefined) => boolean;
|
|
8
|
+
export declare const isOpenedParents: (id: string | undefined, generatedId: string | undefined, openedParents: string[] | undefined) => boolean | "" | undefined;
|
|
7
9
|
export declare const isIdActive: (id: string | undefined, activeMenuItem: string | undefined | null) => boolean;
|
package/utils/scripts.js
CHANGED
|
@@ -3,10 +3,18 @@ import { isNonNullable } from '@skbkontur/react-ui/lib/utils';
|
|
|
3
3
|
export var getItemId = function (prefix, id) {
|
|
4
4
|
return prefix + "-" + id;
|
|
5
5
|
};
|
|
6
|
+
var SideMenuClickableSubElements = ['SideMenuSubItem', 'SideMenuSubLink'];
|
|
7
|
+
export var isClickableSubElement = function (element) {
|
|
8
|
+
return SideMenuClickableSubElements.includes(element);
|
|
9
|
+
};
|
|
10
|
+
var SideMenuClickableElements = ['SideMenuItem', 'SideMenuLink'];
|
|
11
|
+
export var isClickableElement = function (element) {
|
|
12
|
+
return SideMenuClickableElements.includes(element);
|
|
13
|
+
};
|
|
6
14
|
export var getAllParents = function (id, flattedArrayOfAllElements) {
|
|
7
15
|
var parentsArray = [];
|
|
8
16
|
var element = flattedArrayOfAllElements.find(function (element) { return element.id === id || element.generatedId === id; });
|
|
9
|
-
if (element && isNonNullable(element.parentId)) {
|
|
17
|
+
if (element && element.id && isNonNullable(element.parentId)) {
|
|
10
18
|
parentsArray.push(element.parentId);
|
|
11
19
|
parentsArray.push.apply(parentsArray, getAllParents(element.parentId, flattedArrayOfAllElements));
|
|
12
20
|
}
|
|
@@ -21,16 +29,16 @@ export var getElementsChildren = function (element, levelIndex) {
|
|
|
21
29
|
if (element.props.children) {
|
|
22
30
|
var childLevelIndex_1 = 0;
|
|
23
31
|
React.Children.map(element.props.children, function (child) {
|
|
24
|
-
var
|
|
32
|
+
var isClickableComponent =
|
|
25
33
|
// @ts-expect-error: accessing private property
|
|
26
|
-
child.type.__KONTUR_REACT_UI__
|
|
34
|
+
isClickableElement(child.type.__KONTUR_REACT_UI__) ||
|
|
27
35
|
// @ts-expect-error: accessing private property
|
|
28
|
-
child.type.__KONTUR_REACT_UI__
|
|
29
|
-
if (isValidElement(child) &&
|
|
36
|
+
isClickableSubElement(child.type.__KONTUR_REACT_UI__);
|
|
37
|
+
if (isValidElement(child) && isClickableComponent) {
|
|
30
38
|
childrenArray.push({
|
|
31
|
-
id: child.props.id,
|
|
39
|
+
id: child.props.id || child.props.href,
|
|
32
40
|
generatedId: levelIndex + "-" + childLevelIndex_1,
|
|
33
|
-
parentId: element.props.id,
|
|
41
|
+
parentId: element.props.id || element.props.href,
|
|
34
42
|
generatedParentId: "" + levelIndex,
|
|
35
43
|
});
|
|
36
44
|
var subChildrenArray = getElementsChildren(child, levelIndex + "-" + childLevelIndex_1);
|
|
@@ -45,13 +53,9 @@ export var isOpenedParents = function (id, generatedId, openedParents) {
|
|
|
45
53
|
if (!openedParents || (openedParents === null || openedParents === void 0 ? void 0 : openedParents.length) === 0) {
|
|
46
54
|
return false;
|
|
47
55
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (generatedId) {
|
|
52
|
-
return openedParents.includes(generatedId);
|
|
53
|
-
}
|
|
54
|
-
return false;
|
|
56
|
+
var idIsOpened = id && openedParents.includes(id);
|
|
57
|
+
var generatedIdIsOpened = generatedId && openedParents.includes(generatedId);
|
|
58
|
+
return idIsOpened || generatedIdIsOpened;
|
|
55
59
|
};
|
|
56
60
|
export var isIdActive = function (id, activeMenuItem) {
|
|
57
61
|
return !!id && !!activeMenuItem && id === activeMenuItem;
|
package/src/SideMenu.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { CommonProps } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
3
|
-
import { SideMenuOrganisations } from './SideMenuOrganisations';
|
|
4
|
-
import { SideMenuBody } from './SideMenuBody';
|
|
5
|
-
import { SideMenuFooter } from './SideMenuFooter';
|
|
6
|
-
import { SideMenuHeader } from './SideMenuHeader';
|
|
7
|
-
import { SideMenuItem } from './SideMenuItem';
|
|
8
|
-
import { SideMenuAvatar } from './SideMenuAvatar';
|
|
9
|
-
import { SideMenuSubItem } from './SideMenuSubItem';
|
|
10
|
-
import { SideMenuDivider } from './SideMenuDivider';
|
|
11
|
-
import { SideMenuSubItemHeader } from './SideMenuSubItemHeader';
|
|
12
|
-
import { SideMenuDropdown } from './SideMenuDropdown';
|
|
13
|
-
export interface SideMenuProps extends CommonProps {
|
|
14
|
-
children?: React.ReactNode;
|
|
15
|
-
size?: 'small' | 'large';
|
|
16
|
-
isSeparatedMenu?: boolean;
|
|
17
|
-
disableSwipe?: boolean;
|
|
18
|
-
value?: string;
|
|
19
|
-
onValueChange?: (value: string) => void;
|
|
20
|
-
}
|
|
21
|
-
interface SubComponents {
|
|
22
|
-
Body: typeof SideMenuBody;
|
|
23
|
-
Footer: typeof SideMenuFooter;
|
|
24
|
-
Header: typeof SideMenuHeader;
|
|
25
|
-
Item: typeof SideMenuItem;
|
|
26
|
-
SubItem: typeof SideMenuSubItem;
|
|
27
|
-
SubItemHeader: typeof SideMenuSubItemHeader;
|
|
28
|
-
Avatar: typeof SideMenuAvatar;
|
|
29
|
-
Organisations: typeof SideMenuOrganisations;
|
|
30
|
-
Divider: typeof SideMenuDivider;
|
|
31
|
-
Dropdown: typeof SideMenuDropdown;
|
|
32
|
-
__KONTUR_REACT_UI__: string;
|
|
33
|
-
}
|
|
34
|
-
export declare const SideMenuDataTids: {
|
|
35
|
-
root: string;
|
|
36
|
-
};
|
|
37
|
-
declare const SideMenuWithStaticFields: React.ForwardRefExoticComponent<SideMenuProps & React.RefAttributes<HTMLElement>> & SubComponents;
|
|
38
|
-
export { SideMenuWithStaticFields as SideMenu };
|
package/src/SideMenuAvatar.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { UserAvatarProps } from '@skbkontur/react-ui-addons/components/UserAvatar';
|
|
3
|
-
import { SideMenuDropdownProps } from './SideMenuDropdown';
|
|
4
|
-
export interface SideMenuAvatarProps extends UserAvatarProps, Omit<SideMenuDropdownProps, 'icon'>, Partial<Pick<SideMenuDropdownProps, 'icon' | 'onOpen' | 'onClose'>> {
|
|
5
|
-
}
|
|
6
|
-
declare const SideMenuAvatarWithStaticFields: React.ForwardRefExoticComponent<SideMenuAvatarProps & React.RefAttributes<HTMLDivElement>> & {
|
|
7
|
-
__KONTUR_REACT_UI__: string;
|
|
8
|
-
};
|
|
9
|
-
export { SideMenuAvatarWithStaticFields as SideMenuAvatar };
|
package/src/SideMenuBody.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { CommonProps } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
3
|
-
export interface SideMenuBodyProps extends CommonProps {
|
|
4
|
-
children?: React.ReactNode;
|
|
5
|
-
}
|
|
6
|
-
declare const SideMenuBodyWithStaticFields: React.ForwardRefExoticComponent<SideMenuBodyProps & React.RefAttributes<HTMLDivElement>> & {
|
|
7
|
-
__KONTUR_REACT_UI__: string;
|
|
8
|
-
};
|
|
9
|
-
export { SideMenuBodyWithStaticFields as SideMenuBody };
|
package/src/SideMenuDivider.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { CommonProps } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
3
|
-
declare const SideMenuDividerWithStaticFields: React.ForwardRefExoticComponent<CommonProps & React.RefAttributes<HTMLHRElement>> & {
|
|
4
|
-
__KONTUR_REACT_UI__: string;
|
|
5
|
-
};
|
|
6
|
-
export { SideMenuDividerWithStaticFields as SideMenuDivider };
|
package/src/SideMenuItem.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { CommonProps } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
3
|
-
export interface SideMenuItemProps extends CommonProps {
|
|
4
|
-
onClick?: (event: React.MouseEvent) => void;
|
|
5
|
-
onKeyDown?: (event: React.KeyboardEvent) => void;
|
|
6
|
-
children?: React.ReactNode;
|
|
7
|
-
icon: React.ReactElement;
|
|
8
|
-
marker?: string;
|
|
9
|
-
caption?: string;
|
|
10
|
-
id?: string;
|
|
11
|
-
_generatedId?: string;
|
|
12
|
-
_isSubMenu?: boolean;
|
|
13
|
-
_isNestedSubMenu?: boolean;
|
|
14
|
-
_avatar?: React.ReactElement;
|
|
15
|
-
}
|
|
16
|
-
declare const SideMenuItemWithStaticFields: React.ForwardRefExoticComponent<SideMenuItemProps & React.RefAttributes<HTMLButtonElement>> & {
|
|
17
|
-
__KONTUR_REACT_UI__: string;
|
|
18
|
-
};
|
|
19
|
-
export { SideMenuItemWithStaticFields as SideMenuItem };
|
package/src/SideMenuItem.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { __assign, __rest } from "tslib";
|
|
2
|
-
import React, { forwardRef, useContext, useEffect, useRef, useState } from 'react';
|
|
3
|
-
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
4
|
-
import { keyListener } from '@skbkontur/react-ui/lib/events/keyListener';
|
|
5
|
-
import { jsStyles } from './SideMenu.styles';
|
|
6
|
-
import { SideMenuContext } from './SideMenuContext';
|
|
7
|
-
import { SeparatedSubMenu } from './SeparatedSubMenu';
|
|
8
|
-
import { InnerSubMenu } from './InnerSubMenu';
|
|
9
|
-
import { useNumberOfTextLinesInItem } from '../hooks/useNumberOfTextLinesInItem';
|
|
10
|
-
import { isIdActive, isOpenedParents } from '../utils/scripts';
|
|
11
|
-
/**
|
|
12
|
-
* Элемент списка
|
|
13
|
-
*
|
|
14
|
-
* @visibleName SideMenu.Item
|
|
15
|
-
*/
|
|
16
|
-
var SideMenuItem = forwardRef(function (_a, ref) {
|
|
17
|
-
var _b, _c, _d, _e, _f, _g;
|
|
18
|
-
var _h;
|
|
19
|
-
var className = _a.className, onClick = _a.onClick, onKeyDown = _a.onKeyDown, icon = _a.icon, _avatar = _a._avatar, marker = _a.marker, caption = _a.caption, id = _a.id, _isSubMenu = _a._isSubMenu, children = _a.children, _isNestedSubMenu = _a._isNestedSubMenu, _generatedId = _a._generatedId, rest = __rest(_a, ["className", "onClick", "onKeyDown", "icon", "_avatar", "marker", "caption", "id", "_isSubMenu", "children", "_isNestedSubMenu", "_generatedId"]);
|
|
20
|
-
var context = useContext(SideMenuContext);
|
|
21
|
-
var textRef = useRef(null);
|
|
22
|
-
var _j = useState(false), isOpened = _j[0], setIsOpened = _j[1];
|
|
23
|
-
var _k = useState(false), isActive = _k[0], setIsActive = _k[1];
|
|
24
|
-
var _l = useState(false), focusedByTab = _l[0], setFocusedByTab = _l[1];
|
|
25
|
-
var _m = useState(false), isMultiline = _m[0], setIsMultiline = _m[1];
|
|
26
|
-
useEffect(function () {
|
|
27
|
-
useNumberOfTextLinesInItem(textRef, setIsMultiline);
|
|
28
|
-
}, [textRef.current]);
|
|
29
|
-
useEffect(function () {
|
|
30
|
-
var isOpenedParent = isOpenedParents(id, _generatedId, context.openedParents);
|
|
31
|
-
setIsOpened(!!children && (isOpenedParent || isActive));
|
|
32
|
-
}, [(_h = context.openedParents) === null || _h === void 0 ? void 0 : _h.toString(), isActive]);
|
|
33
|
-
useEffect(function () {
|
|
34
|
-
var idIsActive = isIdActive(id, context.activeMenuItem);
|
|
35
|
-
var generatedIdIsActive = isIdActive(_generatedId, context.activeMenuItem);
|
|
36
|
-
setIsActive(idIsActive || generatedIdIsActive);
|
|
37
|
-
}, [context.activeMenuItem]);
|
|
38
|
-
var handleClick = function (e) {
|
|
39
|
-
var _a, _b;
|
|
40
|
-
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
41
|
-
if (id) {
|
|
42
|
-
(_a = context.switchActiveMenuItem) === null || _a === void 0 ? void 0 : _a.call(context, id);
|
|
43
|
-
}
|
|
44
|
-
else if (_generatedId) {
|
|
45
|
-
(_b = context.switchActiveMenuItem) === null || _b === void 0 ? void 0 : _b.call(context, _generatedId);
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
var handleFocus = function () {
|
|
49
|
-
requestAnimationFrame(function () {
|
|
50
|
-
if (keyListener.isTabPressed) {
|
|
51
|
-
setFocusedByTab(true);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
};
|
|
55
|
-
var handleBlur = function () {
|
|
56
|
-
setFocusedByTab(false);
|
|
57
|
-
};
|
|
58
|
-
var renderSubMenu = function () {
|
|
59
|
-
if (children && isOpened && !_isSubMenu && !context.isMinimised) {
|
|
60
|
-
if (context.isSeparatedMenu) {
|
|
61
|
-
return React.createElement(SeparatedSubMenu, { generatedId: _generatedId }, children);
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
return React.createElement(InnerSubMenu, { generatedId: _generatedId }, children);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
var hasShortcutImage = icon || _avatar;
|
|
69
|
-
var isOpenedFirstLevelItemInSeparatedMenu = isOpened && !_isSubMenu && context.isSeparatedMenu;
|
|
70
|
-
return (React.createElement("div", null,
|
|
71
|
-
React.createElement("button", __assign({ className: cx((_b = {},
|
|
72
|
-
_b[jsStyles.item()] = true,
|
|
73
|
-
_b[jsStyles.subItem()] = context.isSeparatedMenu && _isSubMenu,
|
|
74
|
-
_b[jsStyles.focusedItem()] = focusedByTab,
|
|
75
|
-
_b[jsStyles.activeItem()] = isActive || isOpenedFirstLevelItemInSeparatedMenu,
|
|
76
|
-
_b[jsStyles.activeSubItem()] = isActive && context.isSeparatedMenu && _isSubMenu,
|
|
77
|
-
_b), className), onClick: handleClick, tabIndex: 0, onFocus: handleFocus, onBlur: handleBlur, ref: ref }, rest),
|
|
78
|
-
React.createElement("div", { className: cx((_c = {},
|
|
79
|
-
_c[jsStyles.itemWrapper()] = true,
|
|
80
|
-
_c[jsStyles.itemMultilineWrapper()] = isMultiline,
|
|
81
|
-
_c[jsStyles.subItemWrapper()] = _isSubMenu,
|
|
82
|
-
_c[jsStyles.itemLargeWrapper()] = context.size === 'large',
|
|
83
|
-
_c[jsStyles.subItemLargeWrapper()] = context.size === 'large' && _isSubMenu,
|
|
84
|
-
_c[jsStyles.itemLargeMultilineWrapper()] = isMultiline && context.size === 'large',
|
|
85
|
-
_c)) },
|
|
86
|
-
icon &&
|
|
87
|
-
React.cloneElement(icon, {
|
|
88
|
-
size: _isSubMenu ? 16 : 24,
|
|
89
|
-
disableCompensation: true,
|
|
90
|
-
className: cx((_d = {},
|
|
91
|
-
_d[jsStyles.icon()] = true,
|
|
92
|
-
_d[jsStyles.iconMultiline()] = isMultiline,
|
|
93
|
-
_d[jsStyles.iconLarge()] = context.size === 'large',
|
|
94
|
-
_d[jsStyles.iconMultilineLarge()] = context.size === 'large' && isMultiline,
|
|
95
|
-
_d[jsStyles.iconSubItem()] = _isSubMenu,
|
|
96
|
-
_d[jsStyles.iconSubItemSeparatedMenu()] = context.isSeparatedMenu && _isSubMenu,
|
|
97
|
-
_d[jsStyles.iconSubItemLarge()] = _isSubMenu && context.size === 'large',
|
|
98
|
-
_d)),
|
|
99
|
-
}),
|
|
100
|
-
_avatar &&
|
|
101
|
-
React.cloneElement(_avatar, {
|
|
102
|
-
className: cx((_e = {},
|
|
103
|
-
_e[jsStyles.avatarIcon()] = true,
|
|
104
|
-
_e)),
|
|
105
|
-
}),
|
|
106
|
-
!context.isMinimised && (React.createElement("div", { className: jsStyles.textAndMarkerWrapper() },
|
|
107
|
-
React.createElement("p", { className: cx((_f = {},
|
|
108
|
-
_f[jsStyles.itemText()] = true,
|
|
109
|
-
_f[jsStyles.itemTextTransitioned()] = context.isTransitioned,
|
|
110
|
-
_f[jsStyles.subItemText()] = _isSubMenu,
|
|
111
|
-
_f[jsStyles.subItemTextSeparatedMenuFirstLevel()] = context.isSeparatedMenu && !_isNestedSubMenu && _isSubMenu,
|
|
112
|
-
_f[jsStyles.nestedSubItemTextSeparatedMenu()] = context.isSeparatedMenu && _isNestedSubMenu && !hasShortcutImage,
|
|
113
|
-
_f[jsStyles.itemTextWithoutItemIcon()] = !hasShortcutImage && !context.isSeparatedMenu,
|
|
114
|
-
_f[jsStyles.subItemTextWithoutColumnIcons()] = _isSubMenu && context.isSeparatedMenu && !context.hasSubIcons,
|
|
115
|
-
_f[jsStyles.itemTextLarge()] = context.size === 'large',
|
|
116
|
-
_f[jsStyles.itemTextMultiline()] = isMultiline,
|
|
117
|
-
_f)), ref: textRef }, caption),
|
|
118
|
-
marker && (React.createElement("span", { className: cx((_g = {},
|
|
119
|
-
_g[jsStyles.marker()] = true,
|
|
120
|
-
_g[jsStyles.markerMultiline()] = isMultiline,
|
|
121
|
-
_g)) }, marker)))))),
|
|
122
|
-
renderSubMenu()));
|
|
123
|
-
});
|
|
124
|
-
SideMenuItem.displayName = 'SideMenuItem';
|
|
125
|
-
var SideMenuItemWithStaticFields = Object.assign(SideMenuItem, { __KONTUR_REACT_UI__: 'SideMenuItem' });
|
|
126
|
-
export { SideMenuItemWithStaticFields as SideMenuItem };
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { SideMenuDropdownProps } from './SideMenuDropdown';
|
|
3
|
-
declare const SideMenuOrganisationsWithStaticFields: React.ForwardRefExoticComponent<SideMenuDropdownProps & React.RefAttributes<HTMLDivElement>> & {
|
|
4
|
-
__KONTUR_REACT_UI__: string;
|
|
5
|
-
};
|
|
6
|
-
export { SideMenuOrganisationsWithStaticFields as SideMenuOrganisations };
|
package/src/SideMenuSubItem.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { SideMenuItemProps } from './SideMenuItem';
|
|
3
|
-
export interface SideMenuSubItemProps extends Omit<SideMenuItemProps, 'icon'>, Partial<Pick<SideMenuItemProps, 'icon'>> {
|
|
4
|
-
}
|
|
5
|
-
declare const SideMenuSubItemWithStaticFields: React.ForwardRefExoticComponent<SideMenuSubItemProps & React.RefAttributes<HTMLDivElement>> & {
|
|
6
|
-
__KONTUR_REACT_UI__: string;
|
|
7
|
-
};
|
|
8
|
-
export { SideMenuSubItemWithStaticFields as SideMenuSubItem };
|
package/src/SideMenuSubItem.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { __assign, __rest } from "tslib";
|
|
2
|
-
import React, { forwardRef, useContext, useEffect, useMemo, useState } from 'react';
|
|
3
|
-
import { ArrowCDownIcon16Regular, ArrowCRightIcon16Regular } from '@skbkontur/icons';
|
|
4
|
-
import { SideMenuItem } from './SideMenuItem';
|
|
5
|
-
import { jsStyles } from './SideMenu.styles';
|
|
6
|
-
import { SideMenuContext } from './SideMenuContext';
|
|
7
|
-
import { isIdActive, isOpenedParents } from '../utils/scripts';
|
|
8
|
-
/**
|
|
9
|
-
* Элемент списка второго уровня
|
|
10
|
-
*
|
|
11
|
-
* @visibleName SideMenu.SubItem
|
|
12
|
-
*/
|
|
13
|
-
var SideMenuSubItem = forwardRef(function (_a, ref) {
|
|
14
|
-
var _b;
|
|
15
|
-
var children = _a.children, _generatedId = _a._generatedId, id = _a.id, props = __rest(_a, ["children", "_generatedId", "id"]);
|
|
16
|
-
var _c = useState(false), isOpened = _c[0], setIsOpened = _c[1];
|
|
17
|
-
var context = useContext(SideMenuContext);
|
|
18
|
-
var handleClick = function () {
|
|
19
|
-
setIsOpened(true);
|
|
20
|
-
};
|
|
21
|
-
useEffect(function () {
|
|
22
|
-
var isOpenedParent = isOpenedParents(id, _generatedId, context.openedParents);
|
|
23
|
-
var idIsActive = isIdActive(id, context.activeMenuItem);
|
|
24
|
-
var generatedIdIsActive = isIdActive(_generatedId, context.activeMenuItem);
|
|
25
|
-
setIsOpened(isOpenedParent || isOpened || idIsActive || generatedIdIsActive);
|
|
26
|
-
}, [(_b = context.openedParents) === null || _b === void 0 ? void 0 : _b.toString()]);
|
|
27
|
-
var icon = useMemo(function () {
|
|
28
|
-
if (children) {
|
|
29
|
-
if (isOpened) {
|
|
30
|
-
return React.createElement(ArrowCDownIcon16Regular, null);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
return React.createElement(ArrowCRightIcon16Regular, null);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}, [isOpened, children]);
|
|
37
|
-
var levelIndex = 0;
|
|
38
|
-
return (React.createElement("div", { ref: ref },
|
|
39
|
-
React.createElement(SideMenuItem, __assign({ onClick: handleClick,
|
|
40
|
-
/*@ts-expect-error: SideMenuItem should have icon */
|
|
41
|
-
icon: icon, _isSubMenu: true, id: id, _generatedId: _generatedId }, props)),
|
|
42
|
-
children && isOpened && (React.createElement("div", { className: jsStyles.subItemMenu() }, React.Children.map(children, function (child) {
|
|
43
|
-
// @ts-expect-error: accessing private property
|
|
44
|
-
if (React.isValidElement(child) && (child === null || child === void 0 ? void 0 : child.type.__KONTUR_REACT_UI__) === 'SideMenuSubItem') {
|
|
45
|
-
var oldIndex = levelIndex;
|
|
46
|
-
levelIndex++;
|
|
47
|
-
return React.cloneElement(child, {
|
|
48
|
-
_generatedId: _generatedId + "-" + oldIndex,
|
|
49
|
-
_isNestedSubMenu: true,
|
|
50
|
-
ref: ref,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
return child;
|
|
54
|
-
})))));
|
|
55
|
-
});
|
|
56
|
-
SideMenuSubItem.displayName = 'SideMenuSubItem';
|
|
57
|
-
var SideMenuSubItemWithStaticFields = Object.assign(SideMenuSubItem, { __KONTUR_REACT_UI__: 'SideMenuSubItem' });
|
|
58
|
-
export { SideMenuSubItemWithStaticFields as SideMenuSubItem };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { CommonProps } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
3
|
-
export interface SideMenuSubItemHeaderProps extends CommonProps {
|
|
4
|
-
children?: React.ReactNode;
|
|
5
|
-
}
|
|
6
|
-
declare const SideMenuSubItemHeaderWithStaticFields: React.ForwardRefExoticComponent<SideMenuSubItemHeaderProps & React.RefAttributes<HTMLParagraphElement>> & {
|
|
7
|
-
__KONTUR_REACT_UI__: string;
|
|
8
|
-
};
|
|
9
|
-
export { SideMenuSubItemHeaderWithStaticFields as SideMenuSubItemHeader };
|