@skbkontur/side-menu 0.1.4 → 0.2.1
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 +23 -0
- package/README.md +36 -31
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/package.json +2 -2
- package/src/InnerSubMenu.d.ts +9 -0
- package/src/InnerSubMenu.js +18 -0
- package/src/RightBorder.d.ts +8 -0
- package/src/RightBorder.js +71 -0
- package/src/SeparatedSubMenu.d.ts +8 -0
- package/src/SeparatedSubMenu.js +32 -0
- package/src/SideMenu.d.ts +23 -50
- package/src/SideMenu.js +81 -143
- package/src/SideMenu.styles.d.ts +7 -4
- package/src/SideMenu.styles.js +51 -46
- package/src/SideMenuAvatar.d.ts +6 -22
- package/src/SideMenuAvatar.js +10 -41
- package/src/SideMenuBody.d.ts +5 -7
- package/src/SideMenuBody.js +22 -15
- package/src/SideMenuBodyChildren.d.ts +6 -0
- package/src/SideMenuBodyChildren.js +26 -0
- package/src/SideMenuContext.d.ts +7 -6
- package/src/SideMenuContext.js +1 -1
- package/src/SideMenuDivider.d.ts +5 -10
- package/src/SideMenuDivider.js +11 -19
- package/src/SideMenuDropdown.d.ts +13 -0
- package/src/SideMenuDropdown.js +29 -0
- package/src/SideMenuFooter.d.ts +5 -7
- package/src/SideMenuFooter.js +19 -6
- package/src/SideMenuHeader.d.ts +4 -26
- package/src/SideMenuHeader.js +32 -76
- package/src/SideMenuItem.d.ts +9 -35
- package/src/SideMenuItem.js +134 -165
- package/src/SideMenuLogotype.d.ts +6 -0
- package/src/SideMenuLogotype.js +65 -0
- package/src/SideMenuOrganisations.d.ts +4 -16
- package/src/SideMenuOrganisations.js +12 -35
- package/src/SideMenuSubItem.d.ts +3 -17
- package/src/SideMenuSubItem.js +27 -42
- package/src/SideMenuSubItemHeader.d.ts +5 -12
- package/src/SideMenuSubItemHeader.js +13 -21
- package/src/SideMenuDropdownMenuSeparator.d.ts +0 -11
- package/src/SideMenuDropdownMenuSeparator.js +0 -25
- package/src/SideMenuSubItemButtons.d.ts +0 -15
- package/src/SideMenuSubItemButtons.js +0 -25
package/src/SideMenuItem.js
CHANGED
|
@@ -1,184 +1,153 @@
|
|
|
1
|
-
import { __assign,
|
|
2
|
-
import React from 'react';
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import React, { forwardRef, useContext, useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
4
|
-
import { CommonWrapper } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
5
4
|
import { keyListener } from '@skbkontur/react-ui/lib/events/keyListener';
|
|
6
5
|
import { jsStyles } from './SideMenu.styles';
|
|
7
|
-
import {
|
|
6
|
+
import { SideMenuContext } from './SideMenuContext';
|
|
7
|
+
import { SeparatedSubMenu } from './SeparatedSubMenu';
|
|
8
|
+
import { InnerSubMenu } from './InnerSubMenu';
|
|
8
9
|
/**
|
|
9
10
|
* Элемент списка
|
|
10
11
|
*
|
|
11
12
|
* @visibleName SideMenu.Item
|
|
12
13
|
*/
|
|
13
|
-
var SideMenuItem =
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return subItem &&
|
|
32
|
-
typeof subItem === 'object' &&
|
|
33
|
-
'type' in subItem &&
|
|
34
|
-
typeof subItem.type === 'function' &&
|
|
35
|
-
(subItem === null || subItem === void 0 ? void 0 : subItem.type.name) === 'SideMenuSubItem' &&
|
|
36
|
-
subItem.props.children;
|
|
37
|
-
};
|
|
38
|
-
if (_this.state.isOpened) {
|
|
39
|
-
React.Children.map(_this.props.children, function (child) {
|
|
40
|
-
if (subItemHasChildren(child)) {
|
|
41
|
-
hasSubItems = true;
|
|
42
|
-
}
|
|
43
|
-
});
|
|
14
|
+
var SideMenuItem = forwardRef(function (_a, ref) {
|
|
15
|
+
var _b, _c, _d, _e, _f;
|
|
16
|
+
var className = _a.className, onClick = _a.onClick, onKeyDown = _a.onKeyDown, icon = _a.icon, marker = _a.marker, caption = _a.caption, parent = _a.parent, isSubMenu = _a.isSubMenu, children = _a.children, rest = __rest(_a, ["className", "onClick", "onKeyDown", "icon", "marker", "caption", "parent", "isSubMenu", "children"]);
|
|
17
|
+
var context = useContext(SideMenuContext);
|
|
18
|
+
var textRef = useRef(null);
|
|
19
|
+
var _g = useState(false), isOpened = _g[0], setIsOpened = _g[1];
|
|
20
|
+
var _h = useState(false), focusedByTab = _h[0], setFocusedByTab = _h[1];
|
|
21
|
+
var _j = useState(false), isMultiline = _j[0], setIsMultiline = _j[1];
|
|
22
|
+
var _k = useState(context), oldContext = _k[0], setOldContext = _k[1];
|
|
23
|
+
var id = useState('id' + Math.floor(Math.random() * 10000))[0];
|
|
24
|
+
var getNumberOfTextLines = function () {
|
|
25
|
+
if (textRef.current) {
|
|
26
|
+
var el = textRef.current;
|
|
27
|
+
var textHeight = +el.offsetHeight;
|
|
28
|
+
var lineHeight = parseInt(window.getComputedStyle(textRef.current).getPropertyValue('line-height'));
|
|
29
|
+
var lines = textHeight / lineHeight;
|
|
30
|
+
if (lines >= 2) {
|
|
31
|
+
setIsMultiline(true);
|
|
44
32
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
};
|
|
66
|
-
_this.handleKeyDown = function (e) {
|
|
67
|
-
var _a, _b;
|
|
68
|
-
if (e.key === 'Enter') {
|
|
69
|
-
_this.setState({ isOpened: !_this.props.children ? false : !_this.state.isOpened });
|
|
70
|
-
_this.setActive();
|
|
71
|
-
}
|
|
72
|
-
(_b = (_a = _this.props).onKeyDown) === null || _b === void 0 ? void 0 : _b.call(_a, e);
|
|
73
|
-
};
|
|
74
|
-
_this.setActive = function () {
|
|
75
|
-
if (_this.props.isSubMenu) {
|
|
76
|
-
if (_this.props.parent) {
|
|
77
|
-
_this.context.setActiveItem(_this.props.parent);
|
|
78
|
-
}
|
|
79
|
-
_this.context.setActiveSubItem(_this);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
if (!_this.context.isSeparatedMenu) {
|
|
83
|
-
_this.context.setActiveSubItem(null);
|
|
84
|
-
}
|
|
85
|
-
_this.context.setActiveItem(_this);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
useEffect(function () {
|
|
36
|
+
var _a;
|
|
37
|
+
if (icon && !isSubMenu) {
|
|
38
|
+
(_a = context.setHasIcons) === null || _a === void 0 ? void 0 : _a.call(context);
|
|
39
|
+
}
|
|
40
|
+
getNumberOfTextLines();
|
|
41
|
+
});
|
|
42
|
+
useEffect(function () {
|
|
43
|
+
if (oldContext.activeItem !== context.activeItem && context.activeItem !== id) {
|
|
44
|
+
setIsOpened(false);
|
|
45
|
+
}
|
|
46
|
+
setOldContext(context);
|
|
47
|
+
}, [context.activeItem]);
|
|
48
|
+
var setActive = function () {
|
|
49
|
+
var _a, _b, _c, _d;
|
|
50
|
+
if (isSubMenu) {
|
|
51
|
+
if (parent) {
|
|
52
|
+
(_a = context.setActiveItem) === null || _a === void 0 ? void 0 : _a.call(context, parent);
|
|
86
53
|
}
|
|
87
|
-
|
|
88
|
-
_this.state = {
|
|
89
|
-
isOpened: false,
|
|
90
|
-
focusedByTab: false,
|
|
91
|
-
isMultiline: false,
|
|
92
|
-
};
|
|
93
|
-
_this.textRef = React.createRef();
|
|
94
|
-
return _this;
|
|
95
|
-
}
|
|
96
|
-
SideMenuItem.prototype.componentDidMount = function () {
|
|
97
|
-
var _a, _b;
|
|
98
|
-
if (this.props.icon && !this.props.isSubMenu) {
|
|
99
|
-
(_b = (_a = this.context).setHasIcons) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
54
|
+
(_b = context.setActiveSubItem) === null || _b === void 0 ? void 0 : _b.call(context, id);
|
|
100
55
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
var lineHeight = parseInt(window.getComputedStyle(this.textRef.current).getPropertyValue('font-size')) * 1.14;
|
|
105
|
-
var lines = divHeight / lineHeight;
|
|
106
|
-
if (lines > 2) {
|
|
107
|
-
this.setState({ isMultiline: true });
|
|
56
|
+
else {
|
|
57
|
+
if (!context.isSeparatedMenu) {
|
|
58
|
+
(_c = context.setActiveSubItem) === null || _c === void 0 ? void 0 : _c.call(context, null);
|
|
108
59
|
}
|
|
60
|
+
(_d = context.setActiveItem) === null || _d === void 0 ? void 0 : _d.call(context, id);
|
|
109
61
|
}
|
|
110
|
-
this.previousContext = this.context;
|
|
111
62
|
};
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
63
|
+
var active = false;
|
|
64
|
+
if (context) {
|
|
65
|
+
active = context.activeItem === id || context.activeSubItem === id;
|
|
66
|
+
}
|
|
67
|
+
// @ts-expect-error: accessing private property
|
|
68
|
+
var isIconUserAvatar = typeof (icon === null || icon === void 0 ? void 0 : icon.type) === 'function' && icon.type.__KONTUR_REACT_UI__ === 'UserAvatar';
|
|
69
|
+
var handleClick = function (e) {
|
|
70
|
+
if (onClick) {
|
|
71
|
+
onClick(e);
|
|
115
72
|
}
|
|
116
|
-
|
|
73
|
+
setActive();
|
|
74
|
+
setIsOpened(!!children);
|
|
75
|
+
};
|
|
76
|
+
var handleFocus = function () {
|
|
77
|
+
requestAnimationFrame(function () {
|
|
78
|
+
if (keyListener.isTabPressed) {
|
|
79
|
+
setFocusedByTab(true);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
var handleBlur = function () {
|
|
84
|
+
setFocusedByTab(false);
|
|
117
85
|
};
|
|
118
|
-
|
|
119
|
-
|
|
86
|
+
var handleKeyDown = function (e) {
|
|
87
|
+
if (e.key === 'Enter') {
|
|
88
|
+
setIsOpened(!isOpened);
|
|
89
|
+
setActive();
|
|
90
|
+
}
|
|
91
|
+
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
|
|
120
92
|
};
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
93
|
+
var renderSubMenu = function () {
|
|
94
|
+
if (children && isOpened && !isSubMenu && !context.isMinimised) {
|
|
95
|
+
if (context.isSeparatedMenu) {
|
|
96
|
+
return React.createElement(SeparatedSubMenu, null, children);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return React.createElement(InnerSubMenu, { id: id }, children);
|
|
100
|
+
}
|
|
126
101
|
}
|
|
127
|
-
var _f = this.props, icon = _f.icon, marker = _f.marker, caption = _f.caption, isSubMenu = _f.isSubMenu;
|
|
128
|
-
var isIconUserAvatar = typeof icon === 'object' && typeof icon.type === 'function' && icon.type.name === 'UserAvatar';
|
|
129
|
-
var itemClasses = cx((_a = {},
|
|
130
|
-
_a[jsStyles.item()] = true,
|
|
131
|
-
_a[jsStyles.subItem()] = this.context.isSeparatedMenu && isSubMenu,
|
|
132
|
-
_a[jsStyles.focusedItem()] = this.state.focusedByTab,
|
|
133
|
-
_a[jsStyles.activeItem()] = (active && !this.state.isOpened) ||
|
|
134
|
-
(active && this.state.isOpened && !this.context.activeSubItem) ||
|
|
135
|
-
(active && this.state.isOpened && isSubMenu),
|
|
136
|
-
_a[jsStyles.activeSubItem()] = active && this.context.isSeparatedMenu && isSubMenu,
|
|
137
|
-
_a));
|
|
138
|
-
var iconClasses = cx((_b = {},
|
|
139
|
-
_b[jsStyles.icon()] = true,
|
|
140
|
-
_b[jsStyles.iconMultiline()] = this.state.isMultiline,
|
|
141
|
-
_b[jsStyles.iconLarge()] = this.context.size === 'large',
|
|
142
|
-
_b[jsStyles.iconSubItem()] = isSubMenu,
|
|
143
|
-
_b[jsStyles.iconSubItemLarge()] = isSubMenu && this.context.size === 'large',
|
|
144
|
-
_b[jsStyles.avatarIcon()] = isIconUserAvatar,
|
|
145
|
-
_b));
|
|
146
|
-
var textClasses = cx((_c = {},
|
|
147
|
-
_c[jsStyles.itemText()] = true,
|
|
148
|
-
_c[jsStyles.itemTextTransitioned()] = this.context.isTransitioned,
|
|
149
|
-
_c[jsStyles.subItemText()] = isSubMenu,
|
|
150
|
-
_c[jsStyles.itemTextWithoutItemIcon()] = !icon,
|
|
151
|
-
_c[jsStyles.itemTextWithoutColumnIcons()] = !this.context.hasIcons && !isSubMenu,
|
|
152
|
-
_c[jsStyles.subItemTextWithoutColumnIcons()] = isSubMenu && this.context.isSeparatedMenu && !this.context.hasSubIcons,
|
|
153
|
-
_c[jsStyles.itemTextLarge()] = this.context.size === 'large',
|
|
154
|
-
_c[jsStyles.itemTextMultiline()] = this.state.isMultiline,
|
|
155
|
-
_c));
|
|
156
|
-
var markerClasses = cx((_d = {},
|
|
157
|
-
_d[jsStyles.marker()] = true,
|
|
158
|
-
_d[jsStyles.markerMultiline()] = this.state.isMultiline,
|
|
159
|
-
_d));
|
|
160
|
-
var itemWrapperClasses = cx((_e = {},
|
|
161
|
-
_e[jsStyles.itemWrapper()] = true,
|
|
162
|
-
_e[jsStyles.itemMultilineWrapper()] = this.state.isMultiline,
|
|
163
|
-
_e[jsStyles.subItemWrapper()] = isSubMenu,
|
|
164
|
-
_e[jsStyles.itemWrapperWithoutIcon()] = !this.props.icon && !isSubMenu,
|
|
165
|
-
_e[jsStyles.itemLargeWrapper()] = this.context.size === 'large',
|
|
166
|
-
_e[jsStyles.subItemLargeWrapper()] = this.context.size === 'large' && isSubMenu,
|
|
167
|
-
_e[jsStyles.itemLargeMultilineWrapper()] = this.state.isMultiline && this.context.size === 'large',
|
|
168
|
-
_e[jsStyles.itemLargeWrapperWithoutIcon()] = !this.props.icon && !isSubMenu && this.context.size === 'large',
|
|
169
|
-
_e));
|
|
170
|
-
return (React.createElement(CommonWrapper, __assign({}, this.props),
|
|
171
|
-
React.createElement("div", null,
|
|
172
|
-
React.createElement("div", { className: itemClasses, onClick: this.handleClick, onKeyDown: this.handleKeyDown, role: "button", tabIndex: 0, onFocus: this.handleFocus, onBlur: this.handleBlur },
|
|
173
|
-
React.createElement("div", { className: itemWrapperClasses },
|
|
174
|
-
icon && (React.createElement("span", { className: iconClasses }, React.cloneElement(icon, { size: isSubMenu ? 16 : 24, disableCompensation: true }))),
|
|
175
|
-
!this.context.isMinimised && (React.createElement(React.Fragment, null,
|
|
176
|
-
React.createElement("div", { className: textClasses, ref: this.textRef }, caption),
|
|
177
|
-
marker && React.createElement("span", { className: markerClasses }, marker))))),
|
|
178
|
-
this.context.isSeparatedMenu ? this.renderSeparatedSubMenu() : this.renderInnerSubMenu())));
|
|
179
102
|
};
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
103
|
+
return (React.createElement("div", null,
|
|
104
|
+
React.createElement("button", __assign({ className: cx((_b = {},
|
|
105
|
+
_b[jsStyles.item()] = true,
|
|
106
|
+
_b[jsStyles.subItem()] = context.isSeparatedMenu && isSubMenu,
|
|
107
|
+
_b[jsStyles.focusedItem()] = focusedByTab,
|
|
108
|
+
_b[jsStyles.activeItem()] = (active && !isOpened) ||
|
|
109
|
+
(active && isOpened && !context.activeSubItem) ||
|
|
110
|
+
(active && isOpened && isSubMenu),
|
|
111
|
+
_b[jsStyles.activeSubItem()] = active && context.isSeparatedMenu && isSubMenu,
|
|
112
|
+
_b), className), onClick: handleClick, onKeyDown: handleKeyDown, tabIndex: 0, onFocus: handleFocus, onBlur: handleBlur, ref: ref }, rest),
|
|
113
|
+
React.createElement("div", { className: cx((_c = {},
|
|
114
|
+
_c[jsStyles.itemWrapper()] = true,
|
|
115
|
+
_c[jsStyles.itemMultilineWrapper()] = isMultiline,
|
|
116
|
+
_c[jsStyles.subItemWrapper()] = isSubMenu,
|
|
117
|
+
_c[jsStyles.itemWrapperWithoutIcon()] = !icon && !isSubMenu,
|
|
118
|
+
_c[jsStyles.itemLargeWrapper()] = context.size === 'large',
|
|
119
|
+
_c[jsStyles.subItemLargeWrapper()] = context.size === 'large' && isSubMenu,
|
|
120
|
+
_c[jsStyles.itemLargeMultilineWrapper()] = isMultiline && context.size === 'large',
|
|
121
|
+
_c[jsStyles.itemLargeWrapperWithoutIcon()] = !icon && !isSubMenu && context.size === 'large',
|
|
122
|
+
_c)) },
|
|
123
|
+
icon && (React.createElement("span", { className: cx((_d = {},
|
|
124
|
+
_d[jsStyles.icon()] = true,
|
|
125
|
+
_d[jsStyles.iconMultiline()] = isMultiline,
|
|
126
|
+
_d[jsStyles.iconLarge()] = context.size === 'large',
|
|
127
|
+
_d[jsStyles.iconSubItem()] = isSubMenu,
|
|
128
|
+
_d[jsStyles.iconSubItemLarge()] = isSubMenu && context.size === 'large',
|
|
129
|
+
_d[jsStyles.avatarIcon()] = isIconUserAvatar,
|
|
130
|
+
_d)) }, React.cloneElement(icon, {
|
|
131
|
+
size: isSubMenu ? 16 : 24,
|
|
132
|
+
disableCompensation: true,
|
|
133
|
+
}))),
|
|
134
|
+
!context.isMinimised && (React.createElement("div", { className: jsStyles.textAndMarkerWrapper() },
|
|
135
|
+
React.createElement("p", { className: cx((_e = {},
|
|
136
|
+
_e[jsStyles.itemText()] = true,
|
|
137
|
+
_e[jsStyles.itemTextTransitioned()] = context.isTransitioned,
|
|
138
|
+
_e[jsStyles.subItemText()] = isSubMenu,
|
|
139
|
+
_e[jsStyles.itemTextWithoutItemIcon()] = !icon,
|
|
140
|
+
_e[jsStyles.itemTextWithoutColumnIcons()] = !context.hasIcons && !isSubMenu,
|
|
141
|
+
_e[jsStyles.subItemTextWithoutColumnIcons()] = isSubMenu && context.isSeparatedMenu && !context.hasSubIcons,
|
|
142
|
+
_e[jsStyles.itemTextLarge()] = context.size === 'large',
|
|
143
|
+
_e[jsStyles.itemTextMultiline()] = isMultiline,
|
|
144
|
+
_e)), ref: textRef }, caption),
|
|
145
|
+
marker && (React.createElement("span", { className: cx((_f = {},
|
|
146
|
+
_f[jsStyles.marker()] = true,
|
|
147
|
+
_f[jsStyles.markerMultiline()] = isMultiline,
|
|
148
|
+
_f)) }, marker)))))),
|
|
149
|
+
renderSubMenu()));
|
|
150
|
+
});
|
|
151
|
+
SideMenuItem.displayName = 'SideMenuItem';
|
|
152
|
+
var SideMenuItemWithStaticFields = Object.assign(SideMenuItem, { __KONTUR_REACT_UI__: 'SideMenuItem' });
|
|
153
|
+
export { SideMenuItemWithStaticFields as SideMenuItem };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SideMenuHeaderProps } from './SideMenuHeader';
|
|
3
|
+
declare const SideMenuLogotypeWithStaticFields: React.ForwardRefExoticComponent<SideMenuHeaderProps & React.RefAttributes<HTMLDivElement>> & {
|
|
4
|
+
__KONTUR_REACT_UI__: string;
|
|
5
|
+
};
|
|
6
|
+
export { SideMenuLogotypeWithStaticFields as SideMenuLogotype };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import React, { forwardRef, useContext, useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { Logotype } from '@skbkontur/react-ui-addons/components/Logotype';
|
|
4
|
+
import { jsStyles } from './SideMenu.styles';
|
|
5
|
+
import { SideMenuContext } from './SideMenuContext';
|
|
6
|
+
/**
|
|
7
|
+
* Логотип
|
|
8
|
+
*
|
|
9
|
+
* @visibleName SideMenu.Logotype
|
|
10
|
+
*/
|
|
11
|
+
var SideMenuLogotype = forwardRef(function (_a, ref) {
|
|
12
|
+
var productLogo = _a.productLogo, konturLogo = _a.konturLogo, iconUrl = _a.iconUrl, rest = __rest(_a, ["productLogo", "konturLogo", "iconUrl"]);
|
|
13
|
+
var context = useContext(SideMenuContext);
|
|
14
|
+
var refLogotype = useRef(null);
|
|
15
|
+
var _b = useState(28), size = _b[0], setSize = _b[1];
|
|
16
|
+
useEffect(function () {
|
|
17
|
+
var _a, _b, _c;
|
|
18
|
+
(_a = context.setProductColor) === null || _a === void 0 ? void 0 : _a.call(context, productLogo === null || productLogo === void 0 ? void 0 : productLogo.props.color);
|
|
19
|
+
var logotypeWidth = (_c = (_b = refLogotype.current) === null || _b === void 0 ? void 0 : _b.logotypeRef) === null || _c === void 0 ? void 0 : _c.clientWidth;
|
|
20
|
+
if (logotypeWidth && logotypeWidth > 186) {
|
|
21
|
+
//TODO 186 заменить на headerWrapper width после возврата к кастомизации
|
|
22
|
+
setSize(24);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
var widgetTimer;
|
|
26
|
+
var _c = useState(false), withWidget = _c[0], setWithWidget = _c[1];
|
|
27
|
+
var handleMouseEnter = function () {
|
|
28
|
+
widgetTimer = setTimeout(function () {
|
|
29
|
+
setWithWidget(true);
|
|
30
|
+
}, 500);
|
|
31
|
+
};
|
|
32
|
+
var handleMouseLeave = function () {
|
|
33
|
+
if (widgetTimer) {
|
|
34
|
+
clearTimeout(widgetTimer);
|
|
35
|
+
}
|
|
36
|
+
setWithWidget(false);
|
|
37
|
+
};
|
|
38
|
+
var changeCamelCaseToKebabCase = function (str) {
|
|
39
|
+
return str
|
|
40
|
+
.split('')
|
|
41
|
+
.map(function (letter, idx) {
|
|
42
|
+
return letter.toUpperCase() === letter ? "" + (idx !== 0 ? '-' : '') + letter.toLowerCase() : letter;
|
|
43
|
+
})
|
|
44
|
+
.join('');
|
|
45
|
+
};
|
|
46
|
+
var getProductName = function () {
|
|
47
|
+
var name = 'kontur';
|
|
48
|
+
if (productLogo && typeof productLogo.type === 'function') {
|
|
49
|
+
name = changeCamelCaseToKebabCase(productLogo.type.name);
|
|
50
|
+
}
|
|
51
|
+
return name;
|
|
52
|
+
};
|
|
53
|
+
var productName = getProductName();
|
|
54
|
+
var getStaticIconPath = function () {
|
|
55
|
+
return "https://s.kontur.ru/common-v2/icons-products/" + productName + "/" + productName + "-32.svg";
|
|
56
|
+
};
|
|
57
|
+
if (context.isMinimised || context.isTransitioned) {
|
|
58
|
+
return React.createElement("img", { className: jsStyles.headerIcon(), src: iconUrl || getStaticIconPath(), alt: productName });
|
|
59
|
+
}
|
|
60
|
+
return (React.createElement("div", { onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, ref: ref },
|
|
61
|
+
React.createElement(Logotype, __assign({ ref: refLogotype, size: size, productLogo: productLogo, konturLogo: konturLogo, withWidget: withWidget }, rest))));
|
|
62
|
+
});
|
|
63
|
+
SideMenuLogotype.displayName = 'SideMenuLogotype';
|
|
64
|
+
var SideMenuLogotypeWithStaticFields = Object.assign(SideMenuLogotype, { __KONTUR_REACT_UI__: 'SideMenuLogotype' });
|
|
65
|
+
export { SideMenuLogotypeWithStaticFields as SideMenuLogotype };
|
|
@@ -1,18 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
caption?: string;
|
|
2
|
+
import { SideMenuDropdownProps } from './SideMenuDropdown';
|
|
3
|
+
declare const SideMenuOrganisationsWithStaticFields: React.ForwardRefExoticComponent<SideMenuDropdownProps & React.RefAttributes<HTMLDivElement>> & {
|
|
4
|
+
__KONTUR_REACT_UI__: string;
|
|
6
5
|
};
|
|
7
|
-
|
|
8
|
-
* Список организаций
|
|
9
|
-
*
|
|
10
|
-
* @visibleName SideMenu.Organisations
|
|
11
|
-
*/
|
|
12
|
-
export declare class SideMenuOrganisations extends React.Component<SideMenuOrganisationsProps> {
|
|
13
|
-
static __KONTUR_REACT_UI__: string;
|
|
14
|
-
static defaultProps: Partial<SideMenuOrganisationsProps>;
|
|
15
|
-
render(): JSX.Element;
|
|
16
|
-
renderMain(): JSX.Element;
|
|
17
|
-
}
|
|
18
|
-
export {};
|
|
6
|
+
export { SideMenuOrganisationsWithStaticFields as SideMenuOrganisations };
|
|
@@ -1,40 +1,17 @@
|
|
|
1
|
-
import { __assign,
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import {
|
|
4
|
-
import { DEFAULT_THEME, DropdownMenu, ThemeFactory } from '@skbkontur/react-ui';
|
|
5
|
-
import { CommonWrapper } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
6
|
-
import { SideMenuItem } from './SideMenuItem';
|
|
7
|
-
import { jsStyles } from './SideMenu.styles';
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import React, { forwardRef } from 'react';
|
|
3
|
+
import { SideMenuDropdown } from './SideMenuDropdown';
|
|
8
4
|
/**
|
|
9
5
|
* Список организаций
|
|
10
6
|
*
|
|
11
7
|
* @visibleName SideMenu.Organisations
|
|
12
8
|
*/
|
|
13
|
-
var SideMenuOrganisations =
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var label = (React.createElement("div", { className: jsStyles.dropdownLabel() },
|
|
23
|
-
React.createElement(SideMenuItem, { icon: this.props.icon, caption: this.props.caption })));
|
|
24
|
-
return (React.createElement(ThemeContext.Provider, { value: ThemeFactory.create({
|
|
25
|
-
menuItemHoverBg: '#f6f6f6',
|
|
26
|
-
menuItemHoverColor: '#222',
|
|
27
|
-
popupBorderRadius: '8px',
|
|
28
|
-
menuItemPaddingX: '32px',
|
|
29
|
-
}, DEFAULT_THEME) },
|
|
30
|
-
React.createElement(CommonWrapper, __assign({}, this.props),
|
|
31
|
-
React.createElement("div", { className: jsStyles.dropdownWrapper() },
|
|
32
|
-
React.createElement(DropdownMenu, { caption: label, menuWidth: '240px', positions: ['top left'] }, this.props.children)))));
|
|
33
|
-
};
|
|
34
|
-
SideMenuOrganisations.__KONTUR_REACT_UI__ = 'SideMenuOrganisations';
|
|
35
|
-
SideMenuOrganisations.defaultProps = {
|
|
36
|
-
caption: 'СКБ Контур',
|
|
37
|
-
};
|
|
38
|
-
return SideMenuOrganisations;
|
|
39
|
-
}(React.Component));
|
|
40
|
-
export { SideMenuOrganisations };
|
|
9
|
+
var SideMenuOrganisations = forwardRef(function (_a, ref) {
|
|
10
|
+
var children = _a.children, _b = _a.caption, caption = _b === void 0 ? 'СКБ Контур' : _b, rest = __rest(_a, ["children", "caption"]);
|
|
11
|
+
return (React.createElement(SideMenuDropdown, __assign({ caption: caption, menuWidth: '240px', positions: ['top left'], ref: ref }, rest), children));
|
|
12
|
+
});
|
|
13
|
+
SideMenuOrganisations.displayName = 'SideMenuOrganisations';
|
|
14
|
+
var SideMenuOrganisationsWithStaticFields = Object.assign(SideMenuOrganisations, {
|
|
15
|
+
__KONTUR_REACT_UI__: 'SideMenuOrganisations',
|
|
16
|
+
});
|
|
17
|
+
export { SideMenuOrganisationsWithStaticFields as SideMenuOrganisations };
|
package/src/SideMenuSubItem.d.ts
CHANGED
|
@@ -1,20 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { SideMenuItemProps } from './SideMenuItem';
|
|
3
|
-
declare
|
|
4
|
-
|
|
3
|
+
declare const SideMenuSubItemWithStaticFields: React.ForwardRefExoticComponent<SideMenuItemProps & React.RefAttributes<HTMLDivElement>> & {
|
|
4
|
+
__KONTUR_REACT_UI__: string;
|
|
5
5
|
};
|
|
6
|
-
|
|
7
|
-
* Элемент списка второго уровня
|
|
8
|
-
*
|
|
9
|
-
* @visibleName SideMenu.SubItem
|
|
10
|
-
*/
|
|
11
|
-
export declare class SideMenuSubItem extends React.Component<SideMenuItemProps, SideMenuSubItemState> {
|
|
12
|
-
static __KONTUR_REACT_UI__: string;
|
|
13
|
-
static contextType: React.Context<import("./SideMenuContext").SideMenuContextType>;
|
|
14
|
-
constructor(props: SideMenuItemProps);
|
|
15
|
-
render(): JSX.Element;
|
|
16
|
-
renderMain(): JSX.Element;
|
|
17
|
-
private handleClick;
|
|
18
|
-
private handleKeyDown;
|
|
19
|
-
}
|
|
20
|
-
export {};
|
|
6
|
+
export { SideMenuSubItemWithStaticFields as SideMenuSubItem };
|
package/src/SideMenuSubItem.js
CHANGED
|
@@ -1,54 +1,39 @@
|
|
|
1
|
-
import { __assign
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import {
|
|
4
|
-
import { SideMenuThemeContext } from './SideMenuContext';
|
|
1
|
+
import { __assign } from "tslib";
|
|
2
|
+
import React, { forwardRef, useMemo, useState } from 'react';
|
|
3
|
+
import { ArrowCDownIcon16Regular, ArrowCRightIcon16Regular } from '@skbkontur/icons';
|
|
5
4
|
import { SideMenuItem } from './SideMenuItem';
|
|
6
5
|
import { jsStyles } from './SideMenu.styles';
|
|
7
|
-
import { ArrowChevronDown, ArrowChevronRight } from '@skbkontur/react-icons';
|
|
8
6
|
/**
|
|
9
7
|
* Элемент списка второго уровня
|
|
10
8
|
*
|
|
11
9
|
* @visibleName SideMenu.SubItem
|
|
12
10
|
*/
|
|
13
|
-
var SideMenuSubItem =
|
|
14
|
-
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
(_b = (_a = _this.props).onKeyDown) === null || _b === void 0 ? void 0 : _b.call(_a, e);
|
|
26
|
-
};
|
|
27
|
-
_this.state = {
|
|
28
|
-
isOpened: false,
|
|
29
|
-
};
|
|
30
|
-
return _this;
|
|
31
|
-
}
|
|
32
|
-
SideMenuSubItem.prototype.render = function () {
|
|
33
|
-
return this.renderMain();
|
|
11
|
+
var SideMenuSubItem = forwardRef(function (props, ref) {
|
|
12
|
+
var _a = useState(false), isOpened = _a[0], setIsOpened = _a[1];
|
|
13
|
+
var handleClick = function () {
|
|
14
|
+
setIsOpened(true);
|
|
15
|
+
};
|
|
16
|
+
var handleKeyDown = function (e) {
|
|
17
|
+
var _a;
|
|
18
|
+
if (e.key === 'Enter') {
|
|
19
|
+
setIsOpened(true);
|
|
20
|
+
}
|
|
21
|
+
(_a = props.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
34
22
|
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
icon = React.createElement(ArrowChevronDown, null);
|
|
23
|
+
var icon = useMemo(function () {
|
|
24
|
+
if (props.children) {
|
|
25
|
+
if (isOpened) {
|
|
26
|
+
return React.createElement(ArrowCDownIcon16Regular, null);
|
|
40
27
|
}
|
|
41
28
|
else {
|
|
42
|
-
|
|
29
|
+
return React.createElement(ArrowCRightIcon16Regular, null);
|
|
43
30
|
}
|
|
44
31
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}(React.Component));
|
|
54
|
-
export { SideMenuSubItem };
|
|
32
|
+
}, [isOpened, props.children]);
|
|
33
|
+
return (React.createElement("div", { ref: ref },
|
|
34
|
+
React.createElement(SideMenuItem, __assign({ onClick: handleClick, icon: icon, isSubMenu: true, onKeyDown: handleKeyDown }, props)),
|
|
35
|
+
props.children && isOpened && React.createElement("div", { className: jsStyles.subItemMenu() }, props.children)));
|
|
36
|
+
});
|
|
37
|
+
SideMenuSubItem.displayName = 'SideMenuSubItem';
|
|
38
|
+
var SideMenuSubItemWithStaticFields = Object.assign(SideMenuSubItem, { __KONTUR_REACT_UI__: 'SideMenuSubItem' });
|
|
39
|
+
export { SideMenuSubItemWithStaticFields as SideMenuSubItem };
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { CommonProps } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
3
|
-
export
|
|
3
|
+
export interface SideMenuSubItemHeaderProps extends CommonProps {
|
|
4
4
|
children?: React.ReactNode;
|
|
5
|
-
};
|
|
6
|
-
/**
|
|
7
|
-
* Заголовок списка второго уровня
|
|
8
|
-
*
|
|
9
|
-
* @visibleName SideMenu.SubItemHeader
|
|
10
|
-
*/
|
|
11
|
-
export declare class SideMenuSubItemHeader extends React.Component<SideMenuSubItemHeaderProps> {
|
|
12
|
-
static __KONTUR_REACT_UI__: string;
|
|
13
|
-
static contextType: React.Context<import("./SideMenuContext").SideMenuContextType>;
|
|
14
|
-
render(): JSX.Element;
|
|
15
|
-
renderMain(): JSX.Element;
|
|
16
5
|
}
|
|
6
|
+
declare const SideMenuSubItemHeaderWithStaticFields: React.ForwardRefExoticComponent<SideMenuSubItemHeaderProps & React.RefAttributes<HTMLParagraphElement>> & {
|
|
7
|
+
__KONTUR_REACT_UI__: string;
|
|
8
|
+
};
|
|
9
|
+
export { SideMenuSubItemHeaderWithStaticFields as SideMenuSubItemHeader };
|
|
@@ -1,27 +1,19 @@
|
|
|
1
|
-
import { __assign,
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import {
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import React, { forwardRef } from 'react';
|
|
3
|
+
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
4
4
|
import { jsStyles } from './SideMenu.styles';
|
|
5
|
-
import { SideMenuThemeContext } from './SideMenuContext';
|
|
6
5
|
/**
|
|
7
6
|
* Заголовок списка второго уровня
|
|
8
7
|
*
|
|
9
8
|
* @visibleName SideMenu.SubItemHeader
|
|
10
9
|
*/
|
|
11
|
-
var SideMenuSubItemHeader =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
React.createElement("div", { className: jsStyles.subItemHeader() }, this.props.children)));
|
|
22
|
-
};
|
|
23
|
-
SideMenuSubItemHeader.__KONTUR_REACT_UI__ = 'SideMenuSubItemHeader';
|
|
24
|
-
SideMenuSubItemHeader.contextType = SideMenuThemeContext;
|
|
25
|
-
return SideMenuSubItemHeader;
|
|
26
|
-
}(React.Component));
|
|
27
|
-
export { SideMenuSubItemHeader };
|
|
10
|
+
var SideMenuSubItemHeader = forwardRef(function (_a, ref) {
|
|
11
|
+
var _b;
|
|
12
|
+
var className = _a.className, children = _a.children, rest = __rest(_a, ["className", "children"]);
|
|
13
|
+
return (React.createElement("p", __assign({ className: cx((_b = {}, _b[jsStyles.subItemHeader()] = true, _b), className), ref: ref }, rest), children));
|
|
14
|
+
});
|
|
15
|
+
SideMenuSubItemHeader.displayName = 'SideMenuSubItemHeader';
|
|
16
|
+
var SideMenuSubItemHeaderWithStaticFields = Object.assign(SideMenuSubItemHeader, {
|
|
17
|
+
__KONTUR_REACT_UI__: 'SideMenuSubItemHeader',
|
|
18
|
+
});
|
|
19
|
+
export { SideMenuSubItemHeaderWithStaticFields as SideMenuSubItemHeader };
|