@steroidsjs/core 3.0.0-beta.61 → 3.0.0-beta.62
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/package.json +1 -1
- package/ui/layout/Sidebar/Sidebar.d.ts +83 -0
- package/ui/layout/Sidebar/Sidebar.js +60 -0
- package/ui/layout/Sidebar/index.d.ts +2 -0
- package/ui/layout/Sidebar/index.js +7 -0
- package/ui/layout/index.d.ts +2 -1
- package/ui/layout/index.js +3 -1
- package/ui/nav/Nav/Nav.d.ts +9 -0
- package/ui/nav/Nav/Nav.js +26 -12
package/package.json
CHANGED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IMenuProps } from 'src/ui/content/Menu/Menu';
|
|
3
|
+
import { INavItem } from 'src/ui/nav/Nav/Nav';
|
|
4
|
+
import { IIconProps } from 'src/ui/content/Icon/Icon';
|
|
5
|
+
export interface ISidebarItem extends INavItem {
|
|
6
|
+
/**
|
|
7
|
+
* Наличие верней границы у элемента
|
|
8
|
+
*/
|
|
9
|
+
border: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface ISidebarProps extends IUiComponent {
|
|
12
|
+
/**
|
|
13
|
+
* Объект с информацией о логотипе.
|
|
14
|
+
*/
|
|
15
|
+
logo?: {
|
|
16
|
+
/**
|
|
17
|
+
* Текст или React-элемент для отображения логотипа.
|
|
18
|
+
*/
|
|
19
|
+
label: string;
|
|
20
|
+
/**
|
|
21
|
+
* Путь к иконке или React-элемент для отображения иконки логотипа.
|
|
22
|
+
*/
|
|
23
|
+
icon: string | React.ReactElement;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Объект с информацией о пользователе.
|
|
27
|
+
*/
|
|
28
|
+
user?: {
|
|
29
|
+
/**
|
|
30
|
+
* URL изображения пользователя.
|
|
31
|
+
*/
|
|
32
|
+
picture: string;
|
|
33
|
+
/**
|
|
34
|
+
* Имя пользователя.
|
|
35
|
+
*/
|
|
36
|
+
name: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Props для компонента Menu.
|
|
40
|
+
*/
|
|
41
|
+
menu?: IMenuProps;
|
|
42
|
+
/**
|
|
43
|
+
* Элементы навигации для компонента Nav.
|
|
44
|
+
* Может быть строкой или массивом элементов INavItem.
|
|
45
|
+
*/
|
|
46
|
+
items?: string | ISidebarItem[];
|
|
47
|
+
/**
|
|
48
|
+
* Флаг, определяющий, следует ли разделять элементы навигации.
|
|
49
|
+
*/
|
|
50
|
+
hasSeparatedNavItem?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Массив объектов с информацией об иконках для футера.
|
|
53
|
+
*/
|
|
54
|
+
footerIcons?: IIconProps[];
|
|
55
|
+
/**
|
|
56
|
+
* Флаг, определяющий, будет ли сайдбар открытым по умолчанию.
|
|
57
|
+
*/
|
|
58
|
+
isOpenedByDefault?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Callback-функция, вызывается при переключении сайдбара.
|
|
61
|
+
* @param toggleState - текущее состояние сайдбара (открыт или закрыт).
|
|
62
|
+
*/
|
|
63
|
+
onToggleSidebar?: (toggleState: boolean) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Callback-функция, вызывается при клике на элемент навигации.
|
|
66
|
+
* @param itemId - идентификатор элемента навигации, по которому произошел клик.
|
|
67
|
+
*/
|
|
68
|
+
onClickItem?: (itemId: number) => void;
|
|
69
|
+
[key: string]: any;
|
|
70
|
+
}
|
|
71
|
+
export interface ISidebarViewProps extends ISidebarProps {
|
|
72
|
+
isOpened: boolean;
|
|
73
|
+
toggleSidebar: VoidFunction;
|
|
74
|
+
onClickNav: (itemId: number) => void;
|
|
75
|
+
}
|
|
76
|
+
declare function Sidebar(props: ISidebarProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
77
|
+
declare namespace Sidebar {
|
|
78
|
+
var defaultProps: {
|
|
79
|
+
hasSeparatedNavItem: boolean;
|
|
80
|
+
isOpenedByDefault: boolean;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export default Sidebar;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
exports.__esModule = true;
|
|
37
|
+
var react_1 = __importStar(require("react"));
|
|
38
|
+
var hooks_1 = require("../../../hooks");
|
|
39
|
+
function Sidebar(props) {
|
|
40
|
+
var components = (0, hooks_1.useComponents)();
|
|
41
|
+
var _a = (0, react_1.useState)(props.isOpenedByDefault), isOpened = _a[0], setIsOpened = _a[1];
|
|
42
|
+
var toggleSidebar = (0, react_1.useCallback)(function () {
|
|
43
|
+
var newState = !isOpened;
|
|
44
|
+
setIsOpened(newState);
|
|
45
|
+
if (props === null || props === void 0 ? void 0 : props.onToggleSidebar) {
|
|
46
|
+
props.onToggleSidebar(newState);
|
|
47
|
+
}
|
|
48
|
+
}, [isOpened, props]);
|
|
49
|
+
var onClickNav = react_1["default"].useCallback(function (itemId) {
|
|
50
|
+
if (props === null || props === void 0 ? void 0 : props.onClickItem) {
|
|
51
|
+
props.onClickItem(itemId);
|
|
52
|
+
}
|
|
53
|
+
}, [props]);
|
|
54
|
+
return components.ui.renderView(props.view || 'layout.SidebarView', __assign(__assign({}, props), { isOpened: isOpened, toggleSidebar: toggleSidebar, onClickNav: onClickNav }));
|
|
55
|
+
}
|
|
56
|
+
exports["default"] = Sidebar;
|
|
57
|
+
Sidebar.defaultProps = {
|
|
58
|
+
hasSeparatedNavItem: false,
|
|
59
|
+
isOpenedByDefault: true
|
|
60
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
var Sidebar_1 = __importDefault(require("./Sidebar"));
|
|
7
|
+
exports["default"] = Sidebar_1["default"];
|
package/ui/layout/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ import Header from './Header';
|
|
|
2
2
|
import Loader from './Loader';
|
|
3
3
|
import Notifications from './Notifications';
|
|
4
4
|
import Tooltip from './Tooltip';
|
|
5
|
-
|
|
5
|
+
import Sidebar from './Sidebar';
|
|
6
|
+
export { Header, Loader, Notifications, Tooltip, Sidebar, };
|
package/ui/layout/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
exports.__esModule = true;
|
|
6
|
-
exports.Tooltip = exports.Notifications = exports.Loader = exports.Header = void 0;
|
|
6
|
+
exports.Sidebar = exports.Tooltip = exports.Notifications = exports.Loader = exports.Header = void 0;
|
|
7
7
|
var Header_1 = __importDefault(require("./Header"));
|
|
8
8
|
exports.Header = Header_1["default"];
|
|
9
9
|
var Loader_1 = __importDefault(require("./Loader"));
|
|
@@ -12,3 +12,5 @@ var Notifications_1 = __importDefault(require("./Notifications"));
|
|
|
12
12
|
exports.Notifications = Notifications_1["default"];
|
|
13
13
|
var Tooltip_1 = __importDefault(require("./Tooltip"));
|
|
14
14
|
exports.Tooltip = Tooltip_1["default"];
|
|
15
|
+
var Sidebar_1 = __importDefault(require("./Sidebar"));
|
|
16
|
+
exports.Sidebar = Sidebar_1["default"];
|
package/ui/nav/Nav/Nav.d.ts
CHANGED
|
@@ -44,6 +44,14 @@ export interface INavItem extends IButtonProps {
|
|
|
44
44
|
* @example {content: 'Some text'}
|
|
45
45
|
*/
|
|
46
46
|
contentProps?: any;
|
|
47
|
+
/**
|
|
48
|
+
* Вложенные элементы
|
|
49
|
+
*/
|
|
50
|
+
items?: INavItem[];
|
|
51
|
+
/**
|
|
52
|
+
* Props для пункта
|
|
53
|
+
*/
|
|
54
|
+
itemProps?: IButtonProps;
|
|
47
55
|
}
|
|
48
56
|
/**
|
|
49
57
|
* Nav
|
|
@@ -90,6 +98,7 @@ export interface INavViewProps extends INavProps {
|
|
|
90
98
|
onClick: (item: Record<string, unknown>, index: number) => void;
|
|
91
99
|
items: (INavItem & {
|
|
92
100
|
isActive: boolean;
|
|
101
|
+
isActiveNested: boolean;
|
|
93
102
|
})[];
|
|
94
103
|
navClassName?: CssClassName;
|
|
95
104
|
}
|
package/ui/nav/Nav/Nav.js
CHANGED
|
@@ -43,6 +43,7 @@ var has_1 = __importDefault(require("lodash-es/has"));
|
|
|
43
43
|
var isFunction_1 = __importDefault(require("lodash-es/isFunction"));
|
|
44
44
|
var isObject_1 = __importDefault(require("lodash-es/isObject"));
|
|
45
45
|
var react_1 = require("react");
|
|
46
|
+
var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
|
|
46
47
|
var hooks_1 = require("../../../hooks");
|
|
47
48
|
var router_1 = require("../../../reducers/router");
|
|
48
49
|
var defaultViewMap = {
|
|
@@ -85,18 +86,31 @@ function Nav(props) {
|
|
|
85
86
|
props.onChange.call(null, newActiveTab);
|
|
86
87
|
}
|
|
87
88
|
}, [props.onChange]);
|
|
88
|
-
var
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
89
|
+
var formatItems = React.useCallback(function (items) {
|
|
90
|
+
if (items === void 0) { items = props.items; }
|
|
91
|
+
if (Array.isArray(items)) {
|
|
92
|
+
return items.map(function (item, index) {
|
|
93
|
+
var _a;
|
|
94
|
+
return (__assign(__assign({}, item), { isActive: activeTab === ((0, has_1["default"])(item, 'id') ? item.id : index), isActiveNested: !(0, isEmpty_1["default"])((_a = item.items) === null || _a === void 0 ? void 0 : _a.filter(function (nestedItem) { return nestedItem.id === activeTab; })) || false, items: item.items ? formatItems(item.items) : null }));
|
|
95
|
+
})
|
|
96
|
+
.filter(function (item) { return item.visible !== false; });
|
|
97
|
+
}
|
|
98
|
+
return (routes || []).map(function (route) {
|
|
99
|
+
var _a;
|
|
100
|
+
return ({
|
|
101
|
+
id: route.id,
|
|
102
|
+
label: route.label,
|
|
103
|
+
toRoute: route.id,
|
|
104
|
+
toRouteParams: routerParams,
|
|
105
|
+
visible: route.isNavVisible,
|
|
106
|
+
isActive: (activeRouteIds || []).includes(route.id),
|
|
107
|
+
isActiveNested: ((_a = route.items) === null || _a === void 0 ? void 0 : _a.filter(function (nestedItem) { return activeRouteIds.includes(nestedItem.id); })),
|
|
108
|
+
items: route.items ? formatItems(route.items) : null
|
|
109
|
+
});
|
|
110
|
+
})
|
|
111
|
+
.filter(function (item) { return item.visible !== false; });
|
|
112
|
+
}, [activeRouteIds, activeTab, props.items, routerParams, routes]);
|
|
113
|
+
var items = (0, react_1.useMemo)(function () { return formatItems(); }, [formatItems]);
|
|
100
114
|
return components.ui.renderView(props.view || defaultViewMap[props.layout], __assign(__assign({}, props), { items: items, onClick: onClick, disabled: props.disabled, children: renderContent() }));
|
|
101
115
|
}
|
|
102
116
|
Nav.defaultProps = {
|