@steroidsjs/core 2.2.8 → 2.2.12
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/hooks/index.d.ts +14 -2
- package/hooks/index.js +27 -3
- package/hooks/useDataSelect.d.ts +7 -0
- package/hooks/useDataSelect.js +32 -17
- package/package.json +1 -1
- package/reducers/form.js +1 -1
- package/reducers/router.js +1 -0
- package/ui/form/Button/Button.d.ts +1 -1
- package/ui/form/CheckboxListField/CheckboxListField.js +12 -0
- package/ui/form/DropDownField/DropDownField.d.ts +6 -0
- package/ui/form/DropDownField/DropDownField.js +1 -0
- package/ui/form/FieldList/FieldList.d.ts +5 -0
- package/ui/form/FieldList/FieldList.js +2 -0
- package/ui/form/NumberField/NumberField.js +2 -2
- package/ui/nav/Breadcrumbs/Breadcrumbs.d.ts +3 -1
- package/ui/nav/Breadcrumbs/Breadcrumbs.js +4 -2
- package/ui/nav/Nav/Nav.js +1 -1
- package/ui/nav/Router/Router.js +10 -3
package/hooks/index.d.ts
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
|
+
import useAbsolutePositioning from './useAbsolutePositioning';
|
|
2
|
+
import useAddressBar from './useAddressBar';
|
|
3
|
+
import useApplication from './useApplication';
|
|
1
4
|
import useBem from './useBem';
|
|
2
5
|
import useComponents from './useComponents';
|
|
3
6
|
import useDataProvider from './useDataProvider';
|
|
4
7
|
import useDataSelect from './useDataSelect';
|
|
5
|
-
import
|
|
8
|
+
import useDispatch from './useDispatch';
|
|
9
|
+
import useFetch from './useFetch';
|
|
10
|
+
import useFile from './useFile';
|
|
6
11
|
import useForm from './useForm';
|
|
12
|
+
import useInitial from './useInitial';
|
|
13
|
+
import useLayout from './useLayout';
|
|
14
|
+
import useList from './useList';
|
|
15
|
+
import useModel from './useModel';
|
|
16
|
+
import useScreen from './useScreen';
|
|
17
|
+
import useSelector from './useSelector';
|
|
7
18
|
import useSsr from './useSsr';
|
|
8
|
-
|
|
19
|
+
import useUniqueId from './useUniqueId';
|
|
20
|
+
export { useAbsolutePositioning, useAddressBar, useApplication, useBem, useComponents, useDataProvider, useDataSelect, useDispatch, useFetch, useFile, useForm, useInitial, useLayout, useList, useModel, useScreen, useSelector, useSsr, useUniqueId, };
|
package/hooks/index.js
CHANGED
|
@@ -3,7 +3,13 @@ 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.useSsr = exports.useForm = exports.
|
|
6
|
+
exports.useUniqueId = exports.useSsr = exports.useSelector = exports.useScreen = exports.useModel = exports.useList = exports.useLayout = exports.useInitial = exports.useForm = exports.useFile = exports.useFetch = exports.useDispatch = exports.useDataSelect = exports.useDataProvider = exports.useComponents = exports.useBem = exports.useApplication = exports.useAddressBar = exports.useAbsolutePositioning = void 0;
|
|
7
|
+
var useAbsolutePositioning_1 = __importDefault(require("./useAbsolutePositioning"));
|
|
8
|
+
exports.useAbsolutePositioning = useAbsolutePositioning_1["default"];
|
|
9
|
+
var useAddressBar_1 = __importDefault(require("./useAddressBar"));
|
|
10
|
+
exports.useAddressBar = useAddressBar_1["default"];
|
|
11
|
+
var useApplication_1 = __importDefault(require("./useApplication"));
|
|
12
|
+
exports.useApplication = useApplication_1["default"];
|
|
7
13
|
var useBem_1 = __importDefault(require("./useBem"));
|
|
8
14
|
exports.useBem = useBem_1["default"];
|
|
9
15
|
var useComponents_1 = __importDefault(require("./useComponents"));
|
|
@@ -12,9 +18,27 @@ var useDataProvider_1 = __importDefault(require("./useDataProvider"));
|
|
|
12
18
|
exports.useDataProvider = useDataProvider_1["default"];
|
|
13
19
|
var useDataSelect_1 = __importDefault(require("./useDataSelect"));
|
|
14
20
|
exports.useDataSelect = useDataSelect_1["default"];
|
|
15
|
-
var
|
|
16
|
-
exports.
|
|
21
|
+
var useDispatch_1 = __importDefault(require("./useDispatch"));
|
|
22
|
+
exports.useDispatch = useDispatch_1["default"];
|
|
23
|
+
var useFetch_1 = __importDefault(require("./useFetch"));
|
|
24
|
+
exports.useFetch = useFetch_1["default"];
|
|
25
|
+
var useFile_1 = __importDefault(require("./useFile"));
|
|
26
|
+
exports.useFile = useFile_1["default"];
|
|
17
27
|
var useForm_1 = __importDefault(require("./useForm"));
|
|
18
28
|
exports.useForm = useForm_1["default"];
|
|
29
|
+
var useInitial_1 = __importDefault(require("./useInitial"));
|
|
30
|
+
exports.useInitial = useInitial_1["default"];
|
|
31
|
+
var useLayout_1 = __importDefault(require("./useLayout"));
|
|
32
|
+
exports.useLayout = useLayout_1["default"];
|
|
33
|
+
var useList_1 = __importDefault(require("./useList"));
|
|
34
|
+
exports.useList = useList_1["default"];
|
|
35
|
+
var useModel_1 = __importDefault(require("./useModel"));
|
|
36
|
+
exports.useModel = useModel_1["default"];
|
|
37
|
+
var useScreen_1 = __importDefault(require("./useScreen"));
|
|
38
|
+
exports.useScreen = useScreen_1["default"];
|
|
39
|
+
var useSelector_1 = __importDefault(require("./useSelector"));
|
|
40
|
+
exports.useSelector = useSelector_1["default"];
|
|
19
41
|
var useSsr_1 = __importDefault(require("./useSsr"));
|
|
20
42
|
exports.useSsr = useSsr_1["default"];
|
|
43
|
+
var useUniqueId_1 = __importDefault(require("./useUniqueId"));
|
|
44
|
+
exports.useUniqueId = useUniqueId_1["default"];
|
package/hooks/useDataSelect.d.ts
CHANGED
|
@@ -29,6 +29,12 @@ export interface IDataSelectConfig {
|
|
|
29
29
|
* @example id
|
|
30
30
|
*/
|
|
31
31
|
primaryKey?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Атрибут, в котором должны лежать дочерние элементы списка (для группировки)
|
|
34
|
+
* Если аттрибут не задан - группировка не производится
|
|
35
|
+
* @example items
|
|
36
|
+
*/
|
|
37
|
+
groupAttribute?: string;
|
|
32
38
|
/**
|
|
33
39
|
* Значение поля в форме
|
|
34
40
|
*/
|
|
@@ -49,5 +55,6 @@ export interface IDataSelectResult {
|
|
|
49
55
|
setSelectedIds: (ids: PrimaryKey | PrimaryKey[], skipToggle?: boolean) => void;
|
|
50
56
|
selectedItems: IDataSelectItem[];
|
|
51
57
|
}
|
|
58
|
+
export declare const getLinearItems: (items: any, groupAttribute: any) => any[];
|
|
52
59
|
export default function useDataSelect(config: IDataSelectConfig): IDataSelectResult;
|
|
53
60
|
export {};
|
package/hooks/useDataSelect.js
CHANGED
|
@@ -8,6 +8,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
8
8
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
9
|
};
|
|
10
10
|
exports.__esModule = true;
|
|
11
|
+
exports.getLinearItems = void 0;
|
|
11
12
|
var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
|
|
12
13
|
var isArray_1 = __importDefault(require("lodash-es/isArray"));
|
|
13
14
|
var isNil_1 = __importDefault(require("lodash-es/isNil"));
|
|
@@ -16,9 +17,23 @@ var react_use_1 = require("react-use");
|
|
|
16
17
|
var defaultProps = {
|
|
17
18
|
primaryKey: 'id'
|
|
18
19
|
};
|
|
20
|
+
var getLinearItems = function (items, groupAttribute) {
|
|
21
|
+
var result = [];
|
|
22
|
+
items.forEach(function (item) {
|
|
23
|
+
if (groupAttribute && Array.isArray(item[groupAttribute])) {
|
|
24
|
+
result = result.concat(exports.getLinearItems(item[groupAttribute], groupAttribute));
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
result.push(item);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
exports.getLinearItems = getLinearItems;
|
|
19
33
|
function useDataSelect(config) {
|
|
20
34
|
// Get primary key
|
|
21
35
|
var primaryKey = config.primaryKey || defaultProps.primaryKey;
|
|
36
|
+
var linearItems = react_1.useMemo(function () { return exports.getLinearItems(config.items, config.groupAttribute); }, [config.groupAttribute, config.items]);
|
|
22
37
|
// Initial select
|
|
23
38
|
var initialSelectedIds = react_1.useMemo(function () {
|
|
24
39
|
var _a;
|
|
@@ -28,16 +43,16 @@ function useDataSelect(config) {
|
|
|
28
43
|
if (!isNil_1["default"](config.inputValue)) {
|
|
29
44
|
return [].concat(isArray_1["default"](config.inputValue) ? config.inputValue : [config.inputValue]);
|
|
30
45
|
}
|
|
31
|
-
return config.selectFirst &&
|
|
32
|
-
? [
|
|
46
|
+
return config.selectFirst && linearItems.length > 0
|
|
47
|
+
? [linearItems[0][primaryKey]]
|
|
33
48
|
: [];
|
|
34
|
-
}, [config.
|
|
35
|
-
var initialSelectedItems = react_1.useMemo(function () { return
|
|
49
|
+
}, [config.selectedIds, config.inputValue, config.selectFirst, linearItems, primaryKey]);
|
|
50
|
+
var initialSelectedItems = react_1.useMemo(function () { return linearItems.length > 0
|
|
36
51
|
&& initialSelectedIds.length > 0
|
|
37
52
|
? initialSelectedIds
|
|
38
|
-
.map(function (selectedId) { return
|
|
53
|
+
.map(function (selectedId) { return linearItems.find(function (item) { return item.id === selectedId; }); })
|
|
39
54
|
.filter(Boolean)
|
|
40
|
-
: []; }, [initialSelectedIds,
|
|
55
|
+
: []; }, [initialSelectedIds, linearItems]);
|
|
41
56
|
// State
|
|
42
57
|
var _a = react_1.useState(false), isOpened = _a[0], setIsOpened = _a[1];
|
|
43
58
|
var _b = react_1.useState(false), isFocused = _b[0], setIsFocused = _b[1];
|
|
@@ -82,7 +97,7 @@ function useDataSelect(config) {
|
|
|
82
97
|
var newSelectedItems = [];
|
|
83
98
|
var hasChanges = false;
|
|
84
99
|
selectedIds.forEach(function (selectedId) {
|
|
85
|
-
var finedItem =
|
|
100
|
+
var finedItem = linearItems.find(function (item) { return item[primaryKey] === selectedId; });
|
|
86
101
|
if (!finedItem && config.sourceItems) {
|
|
87
102
|
finedItem = config.sourceItems.find(function (item) { return item[primaryKey] === selectedId; });
|
|
88
103
|
}
|
|
@@ -98,14 +113,14 @@ function useDataSelect(config) {
|
|
|
98
113
|
if (hasChanges || prevSelectedIdsLength !== selectedIds.length) {
|
|
99
114
|
setSelectedItemsInternal(newSelectedItems);
|
|
100
115
|
}
|
|
101
|
-
}, [
|
|
116
|
+
}, [linearItems, config.sourceItems, primaryKey, selectedIds, selectedItems, prevSelectedIdsLength]);
|
|
102
117
|
// Select first after fetch data
|
|
103
|
-
var prevItemsLength = react_use_1.usePrevious(
|
|
118
|
+
var prevItemsLength = react_use_1.usePrevious(linearItems.length);
|
|
104
119
|
react_use_1.useUpdateEffect(function () {
|
|
105
|
-
if (config.selectFirst && prevItemsLength === 0 &&
|
|
106
|
-
setSelectedIdsInternal([
|
|
120
|
+
if (config.selectFirst && prevItemsLength === 0 && linearItems.length > 0) {
|
|
121
|
+
setSelectedIdsInternal([linearItems[0][primaryKey]]);
|
|
107
122
|
}
|
|
108
|
-
}, [
|
|
123
|
+
}, [linearItems, config.selectFirst, prevItemsLength, primaryKey]);
|
|
109
124
|
// Update selected items on change value
|
|
110
125
|
var prevConfigSelectedIds = react_use_1.usePrevious(config.selectedIds || []);
|
|
111
126
|
react_use_1.useUpdateEffect(function () {
|
|
@@ -121,7 +136,7 @@ function useDataSelect(config) {
|
|
|
121
136
|
&& !isEqual_1["default"](selectedIds, newSelectedIds) && newSelectedIds.length !== 0) {
|
|
122
137
|
setSelectedIdsInternal(newSelectedIds);
|
|
123
138
|
}
|
|
124
|
-
}, [
|
|
139
|
+
}, [linearItems, config.selectedIds, primaryKey, prevConfigSelectedIds,
|
|
125
140
|
selectedItems, config.sourceItems, selectedIds]);
|
|
126
141
|
// Global key down handler for navigate on items
|
|
127
142
|
// Support keys:
|
|
@@ -151,9 +166,9 @@ function useDataSelect(config) {
|
|
|
151
166
|
// Select first selected
|
|
152
167
|
setSelectedIds(selectedIds[0], true);
|
|
153
168
|
}
|
|
154
|
-
else if (
|
|
169
|
+
else if (linearItems.length > 0) {
|
|
155
170
|
// Select first result
|
|
156
|
-
setSelectedIds(
|
|
171
|
+
setSelectedIds(linearItems[0], true);
|
|
157
172
|
}
|
|
158
173
|
setIsOpened(false);
|
|
159
174
|
}
|
|
@@ -178,7 +193,7 @@ function useDataSelect(config) {
|
|
|
178
193
|
else {
|
|
179
194
|
// Navigate on items by keys
|
|
180
195
|
var direction = isDown ? 1 : -1;
|
|
181
|
-
var keys =
|
|
196
|
+
var keys = linearItems.map(function (item) { return item.id; });
|
|
182
197
|
// Get current index
|
|
183
198
|
var index = hoveredId ? keys.indexOf(hoveredId) : -1;
|
|
184
199
|
if (index === -1 && selectedIds.length === 1) {
|
|
@@ -192,7 +207,7 @@ function useDataSelect(config) {
|
|
|
192
207
|
setHoveredId(keys[newIndex]);
|
|
193
208
|
}
|
|
194
209
|
}
|
|
195
|
-
}, [
|
|
210
|
+
}, [isFocused, isOpened, hoveredId, selectedIds, linearItems, setSelectedIds]);
|
|
196
211
|
react_use_1.useEvent('keydown', onKeyDown);
|
|
197
212
|
return {
|
|
198
213
|
isOpened: isOpened,
|
package/package.json
CHANGED
package/reducers/form.js
CHANGED
|
@@ -50,7 +50,7 @@ function reducerItem(state, action) {
|
|
|
50
50
|
case form_1.FORM_SUBMIT:
|
|
51
51
|
return dot_prop_immutable_1.set(state, 'submitCounter', (state.submitCounter || 0) + 1);
|
|
52
52
|
case form_1.FORM_RESET:
|
|
53
|
-
return
|
|
53
|
+
return __assign(__assign({}, state), { values: cloneDeep_1["default"](state.initialValues || {}) });
|
|
54
54
|
case form_1.FORM_ARRAY_ADD:
|
|
55
55
|
// eslint-disable-next-line no-case-declarations
|
|
56
56
|
var newValue = [].concat(get_1["default"](state, 'values.' + action.name) || []);
|
package/reducers/router.js
CHANGED
|
@@ -202,6 +202,7 @@ exports.getRouteParam = getRouteParam;
|
|
|
202
202
|
var getRouteBreadcrumbs = function (state, routeId) {
|
|
203
203
|
if (routeId === void 0) { routeId = null; }
|
|
204
204
|
var items = [];
|
|
205
|
+
routeId = routeId || exports.getRouteId(state);
|
|
205
206
|
findRecursive(state.router.routesTree, routeId, items);
|
|
206
207
|
return items.reverse().filter(function (item) { return item.isVisible !== false && item.isNavVisible !== false; });
|
|
207
208
|
};
|
|
@@ -90,7 +90,7 @@ export interface IButtonProps {
|
|
|
90
90
|
* автоматически будет переключаться в режим загрузки (`loading`) на время выполнения `Promise`.
|
|
91
91
|
* @param e => fetch(...)
|
|
92
92
|
*/
|
|
93
|
-
onClick?: (e: Event | React.MouseEvent) => Promise<any> |
|
|
93
|
+
onClick?: (e: Event | React.MouseEvent) => Promise<any> | any;
|
|
94
94
|
/**
|
|
95
95
|
* Переводит кнопку в состояние "не активна"
|
|
96
96
|
* @example true
|
|
@@ -15,6 +15,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
15
15
|
};
|
|
16
16
|
exports.__esModule = true;
|
|
17
17
|
var react_1 = require("react");
|
|
18
|
+
var react_use_1 = require("react-use");
|
|
18
19
|
var hooks_1 = require("../../../hooks");
|
|
19
20
|
var fieldWrapper_1 = __importDefault(require("../../../ui/form/Field/fieldWrapper"));
|
|
20
21
|
function CheckboxListField(props) {
|
|
@@ -42,6 +43,17 @@ function CheckboxListField(props) {
|
|
|
42
43
|
react_1.useEffect(function () {
|
|
43
44
|
props.input.onChange.call(null, selectedIds);
|
|
44
45
|
}, [props.input.onChange, selectedIds]);
|
|
46
|
+
var onReset = react_1.useCallback(function () {
|
|
47
|
+
setSelectedIds([]);
|
|
48
|
+
}, [setSelectedIds]);
|
|
49
|
+
// Reset selected ids on form reset
|
|
50
|
+
var prevInputValue = react_use_1.usePrevious(props.input.value);
|
|
51
|
+
react_use_1.useUpdateEffect(function () {
|
|
52
|
+
// if form reset
|
|
53
|
+
if (prevInputValue && props.input.value === undefined && selectedIds.length > 0) {
|
|
54
|
+
onReset();
|
|
55
|
+
}
|
|
56
|
+
}, [onReset, prevInputValue, props.input.value, selectedIds.length]);
|
|
45
57
|
return components.ui.renderView(props.view || 'form.CheckboxListFieldView', __assign(__assign({}, props), { items: items,
|
|
46
58
|
inputProps: inputProps,
|
|
47
59
|
onItemSelect: onItemSelect,
|
|
@@ -31,6 +31,12 @@ export interface IDropDownFieldProps extends IFieldWrapperInputProps, IDataProvi
|
|
|
31
31
|
* @example true
|
|
32
32
|
*/
|
|
33
33
|
showReset?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Атрибут, в котором должны лежать дочерние элементы списка (для группировки)
|
|
36
|
+
* Если аттрибут не задан - группировка не производится
|
|
37
|
+
* @example items
|
|
38
|
+
*/
|
|
39
|
+
groupAttribute?: string;
|
|
34
40
|
/**
|
|
35
41
|
* Включает стиль без 'border'
|
|
36
42
|
* @example true
|
|
@@ -66,6 +66,10 @@ export interface IFieldListProps extends IFieldWrapperInputProps {
|
|
|
66
66
|
* Дополнительный CSS-класс для списка с группами полей
|
|
67
67
|
*/
|
|
68
68
|
className?: CssClassName;
|
|
69
|
+
/**
|
|
70
|
+
* Дополнительный CSS-класс для таблицы
|
|
71
|
+
*/
|
|
72
|
+
tableClassName?: CssClassName;
|
|
69
73
|
/**
|
|
70
74
|
* Переопределение view React компонента для кастомизации отображения списка с группами полей
|
|
71
75
|
* @example MyCustomView
|
|
@@ -102,6 +106,7 @@ export interface IFieldListViewProps {
|
|
|
102
106
|
showAdd?: boolean;
|
|
103
107
|
children?: React.ReactNode;
|
|
104
108
|
className?: string;
|
|
109
|
+
tableClassName?: string;
|
|
105
110
|
style?: any;
|
|
106
111
|
forwardedRef?: any;
|
|
107
112
|
disabled?: boolean;
|
|
@@ -95,6 +95,8 @@ function FieldList(props) {
|
|
|
95
95
|
size: props.size,
|
|
96
96
|
disabled: props.disabled,
|
|
97
97
|
required: props.required,
|
|
98
|
+
className: props.className,
|
|
99
|
+
tableClassName: props.tableClassName,
|
|
98
100
|
items: items
|
|
99
101
|
};
|
|
100
102
|
var FieldListView = props.view || components.ui.getView('form.FieldListView');
|
|
@@ -21,9 +21,9 @@ function NumberField(props) {
|
|
|
21
21
|
var components = hooks_1.useComponents();
|
|
22
22
|
props.inputProps = react_1.useMemo(function () {
|
|
23
23
|
var _a;
|
|
24
|
-
return (__assign({ name: props.input.name, value: (_a = props.input.value) !== null && _a !== void 0 ? _a :
|
|
24
|
+
return (__assign({ name: props.input.name, value: (_a = props.input.value) !== null && _a !== void 0 ? _a : '', onChange: function (e) { var _a, _b; return props.input.onChange(((_a = e.target) === null || _a === void 0 ? void 0 : _a.value) || ((_b = e.nativeEvent) === null || _b === void 0 ? void 0 : _b.text)); }, type: 'number', min: props.min, max: props.max, step: props.step, placeholder: props.placeholder, disabled: props.disabled }, props.inputProps));
|
|
25
25
|
}, [props.disabled, props.input, props.inputProps, props.placeholder, props.min, props.max, props.step]);
|
|
26
|
-
return components.ui.renderView(props.view || 'form.NumberFieldView'
|
|
26
|
+
return components.ui.renderView(props.view || 'form.NumberFieldView', props);
|
|
27
27
|
}
|
|
28
28
|
NumberField.defaultProps = {
|
|
29
29
|
disabled: false,
|
|
@@ -34,5 +34,7 @@ export interface IBreadcrumbsProps {
|
|
|
34
34
|
view?: CustomView;
|
|
35
35
|
[key: string]: any;
|
|
36
36
|
}
|
|
37
|
-
export declare type IBreadcrumbsViewProps = IBreadcrumbsProps
|
|
37
|
+
export declare type IBreadcrumbsViewProps = IBreadcrumbsProps & {
|
|
38
|
+
routeParams?: any;
|
|
39
|
+
};
|
|
38
40
|
export default function Breadcrumbs(props: IBreadcrumbsProps): JSX.Element;
|
|
@@ -15,8 +15,10 @@ var hooks_1 = require("../../../hooks");
|
|
|
15
15
|
var router_1 = require("../../../reducers/router");
|
|
16
16
|
function Breadcrumbs(props) {
|
|
17
17
|
var components = hooks_1.useComponents();
|
|
18
|
-
var routeItems = hooks_1.useSelector(function (state) { return
|
|
18
|
+
var routeItems = hooks_1.useSelector(function (state) { return router_1.getRouteBreadcrumbs(state, props.pageId); });
|
|
19
|
+
var routeParams = hooks_1.useSelector(function (state) { return router_1.getRouteParams(state); });
|
|
19
20
|
var items = props.items || routeItems;
|
|
20
|
-
return components.ui.renderView(props.view || 'nav.BreadcrumbsView', __assign(__assign({}, props), { items: items
|
|
21
|
+
return components.ui.renderView(props.view || 'nav.BreadcrumbsView', __assign(__assign({}, props), { items: items,
|
|
22
|
+
routeParams: routeParams }));
|
|
21
23
|
}
|
|
22
24
|
exports["default"] = Breadcrumbs;
|
package/ui/nav/Nav/Nav.js
CHANGED
|
@@ -54,7 +54,7 @@ function Nav(props) {
|
|
|
54
54
|
var _a = hooks_1.useSelector(function (state) { return ({
|
|
55
55
|
routes: typeof props.items === 'string' ? router_1.getNavItems(state, props.items) : null,
|
|
56
56
|
activeRouteIds: router_1.getActiveRouteIds(state),
|
|
57
|
-
routerParams: router_1.
|
|
57
|
+
routerParams: router_1.getRouteParams(state)
|
|
58
58
|
}); }), routes = _a.routes, activeRouteIds = _a.activeRouteIds, routerParams = _a.routerParams;
|
|
59
59
|
var _b = react_1.useState(props.activeTab || get_1["default"](props, 'items.0.id') || 0), activeTab = _b[0], setActiveTab = _b[1];
|
|
60
60
|
react_1.useEffect(function () {
|
package/ui/nav/Router/Router.js
CHANGED
|
@@ -116,7 +116,9 @@ var treeToList = function (item, isRoot) {
|
|
|
116
116
|
};
|
|
117
117
|
exports.treeToList = treeToList;
|
|
118
118
|
var renderComponent = function (route, activePath, routeProps) {
|
|
119
|
-
|
|
119
|
+
var _a, _b;
|
|
120
|
+
var routePath = router_2.buildUrl(route.path, (_a = routeProps === null || routeProps === void 0 ? void 0 : routeProps.match) === null || _a === void 0 ? void 0 : _a.params);
|
|
121
|
+
if (route.redirectTo && routePath === activePath) {
|
|
120
122
|
var to = findRedirectPathRecursive(route);
|
|
121
123
|
if (to === null) {
|
|
122
124
|
// eslint-disable-next-line no-console
|
|
@@ -124,8 +126,9 @@ var renderComponent = function (route, activePath, routeProps) {
|
|
|
124
126
|
return null;
|
|
125
127
|
}
|
|
126
128
|
// Check already redirected
|
|
127
|
-
|
|
128
|
-
|
|
129
|
+
var toPath = router_2.buildUrl(to, (_b = routeProps === null || routeProps === void 0 ? void 0 : routeProps.match) === null || _b === void 0 ? void 0 : _b.params);
|
|
130
|
+
if (activePath !== toPath) {
|
|
131
|
+
return (React.createElement(react_router_1.Redirect, __assign({}, routeProps, { to: toPath }, route.componentProps)));
|
|
129
132
|
}
|
|
130
133
|
}
|
|
131
134
|
if (!route.component) {
|
|
@@ -224,6 +227,10 @@ function Router(props) {
|
|
|
224
227
|
}
|
|
225
228
|
var activeRoute = routes.find(function (r) { return r.id === activeRouteId; });
|
|
226
229
|
children = renderComponent(activeRoute, activePath, __assign(__assign({}, routeProps), { children: children })) || children;
|
|
230
|
+
// Stop, if route is exact
|
|
231
|
+
if (activeRoute.exact) {
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
227
234
|
return false;
|
|
228
235
|
});
|
|
229
236
|
var result = renderComponent(routeItem, activePath, __assign(__assign({}, routeProps), { children: children }));
|