@steroidsjs/core 2.2.5 → 2.2.9

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 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 useSelector from './useSelector';
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
- export { useBem, useComponents, useDataProvider, useDataSelect, useSelector, useForm, useSsr, };
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.useSelector = exports.useDataSelect = exports.useDataProvider = exports.useComponents = exports.useBem = void 0;
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 useSelector_1 = __importDefault(require("./useSelector"));
16
- exports.useSelector = useSelector_1["default"];
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"];
@@ -90,6 +90,7 @@ function useDataProvider(config) {
90
90
  var delayTimerRef = react_1.useRef(null);
91
91
  var isAutoFetchedRef = react_1.useRef(false);
92
92
  var prevQuery = react_use_1.usePrevious(config.query);
93
+ var prevParams = react_use_1.usePrevious(dataProvider.params);
93
94
  react_1.useEffect(function () {
94
95
  var fetchRemote = function (isAuto) { return __awaiter(_this, void 0, void 0, function () {
95
96
  var searchHandler, result, newItems;
@@ -132,7 +133,7 @@ function useDataProvider(config) {
132
133
  clearTimeout(delayTimerRef.current);
133
134
  }
134
135
  // Changed query logic
135
- if (prevQuery !== config.query) {
136
+ if (prevQuery !== config.query || prevParams !== dataProvider.params) {
136
137
  // Search with delay
137
138
  delayTimerRef.current = setTimeout(fetchRemote, autoComplete.delay);
138
139
  }
@@ -109,7 +109,7 @@ function useDataSelect(config) {
109
109
  // Update selected items on change value
110
110
  var prevConfigSelectedIds = react_use_1.usePrevious(config.selectedIds || []);
111
111
  react_use_1.useUpdateEffect(function () {
112
- var newSelectedIds = config.selectedIds;
112
+ var newSelectedIds = config.selectedIds || [];
113
113
  selectedItems.forEach(function (selectedItem) {
114
114
  if (!newSelectedIds.includes(selectedItem.id) && config.selectedIds
115
115
  && config.selectedIds.includes(selectedItem.id)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "2.2.5",
3
+ "version": "2.2.9",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -27,7 +27,7 @@
27
27
  "connected-react-router": "^6.9.1",
28
28
  "domready": "^1.0.8",
29
29
  "dot-prop-immutable": "^2.1.0",
30
- "fileup-core": "^1.2.0",
30
+ "fileup-core": "^1.2.2",
31
31
  "history": "^4.10.1",
32
32
  "intl-messageformat": "^9.11.0",
33
33
  "js-cookie": "^2.2.1",
@@ -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
  };
@@ -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,7 +21,7 @@ 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 : undefined, onChange: function (e) { return props.input.onChange(e.target ? e.target.value : e.nativeEvent.text); }, type: 'number', min: props.min, max: props.max, step: props.step, placeholder: props.placeholder, disabled: props.disabled }, props.inputProps));
24
+ return (__assign({ name: props.input.name, value: (_a = props.input.value) !== null && _a !== void 0 ? _a : undefined, 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
26
  return components.ui.renderView(props.view || 'form.NumberFieldView' || 'form.InputFieldView', props);
27
27
  }
@@ -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 props.pageId ? router_1.getRouteBreadcrumbs(state, props.pageId) : null; });
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.getRouterParams(state)
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 () {
@@ -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
- if (route.redirectTo && route.path === activePath) {
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
- if (activePath !== to) {
128
- return (React.createElement(react_router_1.Redirect, __assign({}, routeProps, { to: to }, route.componentProps)));
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 }));