@steroidsjs/core 3.0.51 → 3.0.53

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.
@@ -1,4 +1,15 @@
1
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
+ };
2
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
15
  };
@@ -22,9 +33,8 @@ var closeNotification = function (id) {
22
33
  exports.closeNotification = closeNotification;
23
34
  var showNotification = function (message, level, params) {
24
35
  if (level === void 0) { level = null; }
25
- if (params === void 0) { params = showNotificationDefaults; }
26
36
  return function (dispatch) {
27
- var _a = params, position = _a.position, timeOut = _a.timeOut;
37
+ var _a = __assign(__assign({}, showNotificationDefaults), params), position = _a.position, timeOut = _a.timeOut;
28
38
  var id = (0, uniqueId_1["default"])();
29
39
  dispatch({
30
40
  type: exports.NOTIFICATIONS_SHOW,
@@ -4143,6 +4143,14 @@
4143
4143
  "required": true,
4144
4144
  "type": "Model",
4145
4145
  "example": null
4146
+ },
4147
+ {
4148
+ "name": "sort",
4149
+ "decorators": [],
4150
+ "description": "",
4151
+ "required": false,
4152
+ "type": "string",
4153
+ "example": null
4146
4154
  }
4147
4155
  ],
4148
4156
  "methods": [
@@ -17783,6 +17791,14 @@
17783
17791
  "type": "string | boolean",
17784
17792
  "example": "calendar-day"
17785
17793
  },
17794
+ {
17795
+ "name": "id",
17796
+ "decorators": [],
17797
+ "description": "",
17798
+ "required": true,
17799
+ "type": "string",
17800
+ "example": null
17801
+ },
17786
17802
  {
17787
17803
  "name": "inputProps",
17788
17804
  "decorators": [],
@@ -18519,6 +18535,14 @@
18519
18535
  "type": "string | boolean",
18520
18536
  "example": "calendar-day"
18521
18537
  },
18538
+ {
18539
+ "name": "id",
18540
+ "decorators": [],
18541
+ "description": "",
18542
+ "required": true,
18543
+ "type": "string",
18544
+ "example": null
18545
+ },
18522
18546
  {
18523
18547
  "name": "inputProps",
18524
18548
  "decorators": [],
@@ -19435,6 +19459,14 @@
19435
19459
  "type": "boolean | IAutoCompleteConfig",
19436
19460
  "example": "{\n enable: true,\n minLength: 2,\n delay: 100\n}"
19437
19461
  },
19462
+ {
19463
+ "name": "autoCompleteInputForwardedRef",
19464
+ "decorators": [],
19465
+ "description": "",
19466
+ "required": true,
19467
+ "type": "MutableRefObject",
19468
+ "example": null
19469
+ },
19438
19470
  {
19439
19471
  "name": "autoCompleteInputRef",
19440
19472
  "decorators": [],
@@ -19507,14 +19539,6 @@
19507
19539
  "type": "string",
19508
19540
  "example": null
19509
19541
  },
19510
- {
19511
- "name": "forwardedInputRef",
19512
- "decorators": [],
19513
- "description": "",
19514
- "required": true,
19515
- "type": "MutableRefObject",
19516
- "example": null
19517
- },
19518
19542
  {
19519
19543
  "name": "forwardedRef",
19520
19544
  "decorators": [],
@@ -19563,6 +19587,14 @@
19563
19587
  "type": "any",
19564
19588
  "example": null
19565
19589
  },
19590
+ {
19591
+ "name": "inputRef",
19592
+ "decorators": [],
19593
+ "description": "",
19594
+ "required": true,
19595
+ "type": "MutableRefObject",
19596
+ "example": null
19597
+ },
19566
19598
  {
19567
19599
  "name": "inputValue",
19568
19600
  "decorators": [],
@@ -36517,6 +36549,14 @@
36517
36549
  "required": true,
36518
36550
  "type": "Model",
36519
36551
  "example": null
36552
+ },
36553
+ {
36554
+ "name": "sort",
36555
+ "decorators": [],
36556
+ "description": "",
36557
+ "required": false,
36558
+ "type": "string",
36559
+ "example": null
36520
36560
  }
36521
36561
  ],
36522
36562
  "methods": [
@@ -220,6 +220,7 @@ export interface IListOutput {
220
220
  renderInfiniteScroll: () => any;
221
221
  onFetch: (params?: Record<string, unknown>) => void;
222
222
  onSort: (value: any) => void;
223
+ sort?: string;
223
224
  }
224
225
  export declare const defaultConfig: {
225
226
  actionMethod: string;
package/hooks/useList.js CHANGED
@@ -310,7 +310,8 @@ function useList(config) {
310
310
  renderSearchForm: renderSearchForm,
311
311
  renderInfiniteScroll: renderInfiniteScroll,
312
312
  onFetch: onFetch,
313
- onSort: onSort
313
+ onSort: onSort,
314
+ sort: formValues === null || formValues === void 0 ? void 0 : formValues.sort
314
315
  };
315
316
  }
316
317
  exports["default"] = useList;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.51",
3
+ "version": "3.0.53",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -39,8 +39,9 @@ function DateField(props) {
39
39
  }), onClear = _a.onClear, onClose = _a.onClose, isOpened = _a.isOpened, inputProps = _a.inputProps;
40
40
  // Calendar props
41
41
  var calendarProps = (0, react_1.useMemo)(function () { return (__assign({ value: props.input.value, onChange: props.input.onChange, valueFormat: props.valueFormat }, props.calendarProps)); }, [props.calendarProps, props.input.onChange, props.input.value, props.valueFormat]);
42
- var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { calendarProps: calendarProps, onClear: onClear, onClose: onClose, isOpened: isOpened, inputProps: inputProps, size: props.size, icon: props.icon, errors: props.errors, label: props.label, disabled: props.disabled, className: props.className, showRemove: props.showRemove, style: props.style, autoPositioning: props.autoPositioning, maskInputRef: maskInputRef })); }, [calendarProps, inputProps, isOpened, maskInputRef, onClear, onClose, props.className,
43
- props.disabled, props.errors, props.icon, props.label, props.showRemove, props.size, props.style, props.viewProps]);
42
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { calendarProps: calendarProps, onClear: onClear, onClose: onClose, isOpened: isOpened, inputProps: inputProps, size: props.size, icon: props.icon, errors: props.errors, label: props.label, disabled: props.disabled, className: props.className, showRemove: props.showRemove, style: props.style, autoPositioning: props.autoPositioning, maskInputRef: maskInputRef, id: props.id })); }, [props.viewProps, props.size, props.icon, props.errors, props.label, props.disabled,
43
+ props.className, props.showRemove, props.style, props.autoPositioning, props.id,
44
+ calendarProps, onClear, onClose, isOpened, inputProps, maskInputRef]);
44
45
  return components.ui.renderView(props.view || 'form.DateFieldView', viewProps);
45
46
  }
46
47
  DateField.defaultProps = {
@@ -107,6 +107,7 @@ export interface IDateRangeFieldViewProps extends IDateInputStateOutput, Omit<IF
107
107
  * Ref для input элемента, который накладывает маску на поле to
108
108
  */
109
109
  maskInputFromTo?: React.RefCallback<HTMLElement>;
110
+ id: string;
110
111
  }
111
112
  declare const _default: import("../../form/Field/fieldWrapper").FieldWrapperComponent<IDateRangeFieldProps>;
112
113
  export default _default;
@@ -118,9 +118,10 @@ function DateRangeField(props) {
118
118
  inputPropsTo: extendedInputPropsTo,
119
119
  inputPropsFrom: extendedInputPropsFrom,
120
120
  isOpened: focus === 'from' ? isOpenedFrom : isOpenedTo,
121
- style: props.style
122
- }); }, [calendarProps, extendedInputPropsFrom, extendedInputPropsTo, focus, isOpenedFrom, isOpenedTo, onClear,
123
- onClose, props.className, props.disabled, props.errorsFrom, props.errorsTo, props.icon, props.showRemove, props.size, props.style]);
121
+ style: props.style,
122
+ id: props.id
123
+ }); }, [calendarProps, extendedInputPropsFrom, extendedInputPropsTo, focus, isOpenedFrom, isOpenedTo, onClear, onClose,
124
+ props.className, props.disabled, props.errorsFrom, props.errorsTo, props.icon, props.id, props.showRemove, props.size, props.style]);
124
125
  return components.ui.renderView(props.view || 'form.DateRangeFieldView', viewProps);
125
126
  }
126
127
  DateRangeField.defaultProps = {
@@ -75,9 +75,10 @@ function DateTimeField(props) {
75
75
  className: props.className,
76
76
  showRemove: props.showRemove,
77
77
  disabled: props.disabled,
78
- style: props.style
78
+ style: props.style,
79
+ id: props.id
79
80
  }); }, [calendarProps, inputProps, isOpened, maskInputRef, onClear, onClose, props.className, props.disabled, props.errors, props.icon,
80
- props.placeholder, props.showRemove, props.size, props.style, timePanelViewProps]);
81
+ props.id, props.placeholder, props.showRemove, props.size, props.style, timePanelViewProps]);
81
82
  return components.ui.renderView(props.view || 'form.DateTimeFieldView', viewProps);
82
83
  }
83
84
  DateTimeField.defaultProps = {
@@ -76,6 +76,7 @@ export interface IDateTimeRangeFieldViewProps extends IDateInputStateOutput, Omi
76
76
  inputPropsTo?: any;
77
77
  errorsFrom?: any;
78
78
  errorsTo?: any;
79
+ id: string;
79
80
  }
80
81
  declare const _default: import("../../form/Field/fieldWrapper").FieldWrapperComponent<IDateTimeRangeFieldProps>;
81
82
  export default _default;
@@ -156,10 +156,11 @@ function DateTimeRangeField(props) {
156
156
  inputPropsFrom: extendedInputPropsFrom,
157
157
  isOpened: focus === 'from' ? isOpenedFrom : isOpenedTo,
158
158
  disabled: props.disabled,
159
- style: props.style
160
- }); }, [calendarProps, extendedInputPropsFrom, extendedInputPropsTo, focus, isOpenedFrom, isOpenedTo, onClear, onClose,
161
- props.className, props.disabled, props.errorsFrom, props.errorsTo, props.icon, props.showRemove, props.size,
162
- props.style, timePanelViewProps]);
159
+ style: props.style,
160
+ id: props.id
161
+ }); }, [calendarProps, extendedInputPropsFrom, extendedInputPropsTo, focus, isOpenedFrom,
162
+ isOpenedTo, onClear, onClose, props.className, props.disabled, props.errorsFrom,
163
+ props.errorsTo, props.icon, props.id, props.showRemove, props.size, props.style, timePanelViewProps]);
163
164
  return components.ui.renderView(props.view || 'form.DateTimeRangeFieldView', viewProps);
164
165
  }
165
166
  DateTimeRangeField.defaultProps = {
@@ -165,7 +165,8 @@ export interface IDropDownFieldViewProps extends IDropDownFieldProps {
165
165
  hoveredId: PrimaryKey | any;
166
166
  selectedIds: (PrimaryKey | any)[];
167
167
  forwardedRef: any;
168
- forwardedInputRef: MutableRefObject<HTMLInputElement>;
168
+ autoCompleteInputForwardedRef: MutableRefObject<HTMLInputElement>;
169
+ inputRef: MutableRefObject<HTMLInputElement>;
169
170
  searchInputProps: {
170
171
  type: string;
171
172
  name: string;
@@ -87,7 +87,8 @@ function DropDownField(props) {
87
87
  var components = (0, hooks_1.useComponents)();
88
88
  // Query state
89
89
  var _a = (0, react_1.useState)(''), query = _a[0], setQuery = _a[1];
90
- var forwardedInputRef = (0, react_1.useRef)(null);
90
+ var autoCompleteInputForwardedRef = (0, react_1.useRef)(null);
91
+ var inputRef = (0, react_1.useRef)(null);
91
92
  var hasGroup = !!props.groupAttribute;
92
93
  var _b = react_1["default"].useState([]), selectedAccordionItems = _b[0], setSelectedAccordionItems = _b[1];
93
94
  var normalizedItemToSelectAll = react_1["default"].useMemo(function () { return normalizeItemToSelectAll(props.itemToSelectAll); }, [props.itemToSelectAll]);
@@ -125,7 +126,7 @@ function DropDownField(props) {
125
126
  items: items,
126
127
  sourceItems: sourceItems,
127
128
  inputValue: props.input.value,
128
- autoCompleteInputRef: forwardedInputRef
129
+ autoCompleteInputRef: autoCompleteInputForwardedRef
129
130
  }), isOpened = _d.isOpened, setIsOpened = _d.setIsOpened, setIsFocused = _d.setIsFocused, hoveredId = _d.hoveredId, setHoveredId = _d.setHoveredId, selectedIds = _d.selectedIds, setSelectedIds = _d.setSelectedIds, selectedItems = _d.selectedItems, setSelectedAll = _d.setSelectedAll, isSelectedAll = _d.isSelectedAll;
130
131
  var onOpen = (0, react_1.useCallback)(function () {
131
132
  setQuery('');
@@ -199,6 +200,13 @@ function DropDownField(props) {
199
200
  onReset();
200
201
  }
201
202
  }, [onReset, prevInputValue, props.input.value, selectedIds.length]);
203
+ // Add required validation
204
+ (0, react_1.useEffect)(function () {
205
+ var _a;
206
+ var defaultValidity = __('Required Field');
207
+ var errorMessage = props.required && !selectedIds.length ? defaultValidity : '';
208
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.setCustomValidity(errorMessage);
209
+ }, [props.required, selectedIds.length]);
202
210
  var renderItemView = function (item, type, src) { return components.ui.renderView(props.itemView || 'form.DropDownFieldItemView', {
203
211
  item: __assign(__assign({}, item), { contentSrc: src, contentType: type }),
204
212
  selectedIds: selectedIds,
@@ -216,7 +224,7 @@ function DropDownField(props) {
216
224
  isItemToSelectAll: item.id === (normalizedItemToSelectAll === null || normalizedItemToSelectAll === void 0 ? void 0 : normalizedItemToSelectAll.id),
217
225
  isSelectedAll: isSelectedAll
218
226
  }); };
219
- var renderItem = function (item) {
227
+ var renderItem = (0, react_1.useCallback)(function (item) {
220
228
  if (hasGroup && Array.isArray(item[props.groupAttribute])) {
221
229
  return renderItemView(item, 'group', item[props.groupAttribute]);
222
230
  }
@@ -227,14 +235,14 @@ function DropDownField(props) {
227
235
  return renderItemView(item, props.itemsContent.type, props.itemsContent.src);
228
236
  }
229
237
  return renderItemView(item, 'default', null);
230
- };
231
- var viewProps = (0, react_1.useMemo)(function () { return (__assign({ isAutoComplete: isAutoComplete, items: items, hoveredId: hoveredId, selectedIds: selectedIds, forwardedRef: forwardedRef, forwardedInputRef: forwardedInputRef, searchInputProps: searchInputProps, isOpened: isOpened, isLoading: isLoading, onOpen: onOpen, selectedItems: selectedItems,
238
+ }, [hasGroup, props.groupAttribute, props.itemsContent, renderItemView]);
239
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign({ isAutoComplete: isAutoComplete, items: items, hoveredId: hoveredId, selectedIds: selectedIds, forwardedRef: forwardedRef, inputRef: inputRef, autoCompleteInputForwardedRef: autoCompleteInputForwardedRef, searchInputProps: searchInputProps, isOpened: isOpened, isLoading: isLoading, onOpen: onOpen, selectedItems: selectedItems,
232
240
  // TODO onFocus
233
241
  // TODO onBlur
234
242
  onReset: onReset, onClose: onClose, renderItem: renderItem, onItemRemove: onItemRemove, hasGroup: hasGroup, multiple: props.multiple, isSearchAutoFocus: props.isSearchAutoFocus, itemToSelectAll: normalizedItemToSelectAll, className: props.className, viewProps: props.viewProps, style: props.style, size: props.size, color: props.color, outline: props.outline, placeholder: props.placeholder, showReset: props.showReset, showEllipses: props.showEllipses, errors: props.errors, disabled: props.disabled }, dataProvider)); }, [isAutoComplete, items, hoveredId, selectedIds, searchInputProps, isOpened, isLoading, onOpen, selectedItems, onReset, onClose,
235
243
  renderItem, onItemRemove, hasGroup, props.multiple, props.isSearchAutoFocus, props.className, props.viewProps, props.style, props.size,
236
244
  props.color, props.outline, props.placeholder, props.showReset, props.showEllipses, props.errors, props.disabled,
237
- normalizedItemToSelectAll, dataProvider]);
245
+ normalizedItemToSelectAll, dataProvider, inputRef, autoCompleteInputForwardedRef, forwardedRef]);
238
246
  return components.ui.renderView(props.view || 'form.DropDownFieldView', viewProps);
239
247
  }
240
248
  DropDownField.defaultProps = {
@@ -33,6 +33,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
33
33
  __setModuleDefault(result, mod);
34
34
  return result;
35
35
  };
36
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
37
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
38
+ if (ar || !(i in from)) {
39
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
40
+ ar[i] = from[i];
41
+ }
42
+ }
43
+ return to.concat(ar || Array.prototype.slice.call(from));
44
+ };
36
45
  var __importDefault = (this && this.__importDefault) || function (mod) {
37
46
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
47
  };
@@ -40,6 +49,8 @@ exports.__esModule = true;
40
49
  var react_1 = __importStar(require("react"));
41
50
  var isBoolean_1 = __importDefault(require("lodash-es/isBoolean"));
42
51
  var range_1 = __importDefault(require("lodash-es/range"));
52
+ var concat_1 = __importDefault(require("lodash-es/concat"));
53
+ var last_1 = __importDefault(require("lodash-es/last"));
43
54
  var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
44
55
  var get_1 = __importDefault(require("lodash-es/get"));
45
56
  var react_use_1 = require("react-use");
@@ -57,15 +68,26 @@ function FieldList(props) {
57
68
  var isWithReduxForm = (0, hooks_1.useSelector)(function (state) { return (0, get_1["default"])(state, ['form', context.formId]) || null; });
58
69
  var dispatch = context.provider.useDispatch();
59
70
  // Mapper for preserving the correct sequence of rows on the UI
60
- var storeToRowIndexMap = (0, react_1.useMemo)(function () { return (0, range_1["default"])(props.input.value || 0); }, [props.input.value]);
71
+ var _b = (0, react_1.useState)((0, range_1["default"])(props.input.value) || []), storeToRowIndexMap = _b[0], setStoreToRowIndexMap = _b[1];
72
+ var addRowIndexes = (0, react_1.useCallback)(function (rowsCount) {
73
+ setStoreToRowIndexMap(function (prevMap) {
74
+ var lastIndex = !(0, isEmpty_1["default"])(prevMap) ? (0, last_1["default"])(prevMap) + 1 : 0;
75
+ return (0, concat_1["default"])(prevMap, (0, range_1["default"])(lastIndex, lastIndex + rowsCount));
76
+ });
77
+ }, []);
78
+ var removeRowIndex = (0, react_1.useCallback)(function (rowIndex) {
79
+ setStoreToRowIndexMap(function (prevMap) { return __spreadArray(__spreadArray([], prevMap.slice(0, rowIndex), true), prevMap.slice(rowIndex + 1), true); });
80
+ }, []);
61
81
  // Add and Remove handlers
62
82
  var onAdd = (0, react_1.useCallback)(function (rowsCount) {
63
83
  if (rowsCount === void 0) { rowsCount = 1; }
84
+ addRowIndexes(rowsCount);
64
85
  dispatch((0, form_1.formArrayAdd)(context.formId, props.input.name, rowsCount, props.initialValues));
65
- }, [context.formId, dispatch, props.initialValues, props.input.name]);
86
+ }, [addRowIndexes, context.formId, dispatch, props.initialValues, props.input.name]);
66
87
  var onRemove = (0, react_1.useCallback)(function (rowIndex) {
88
+ removeRowIndex(rowIndex);
67
89
  dispatch((0, form_1.formArrayRemove)(context.formId, props.input.name, rowIndex));
68
- }, [context.formId, dispatch, props.input.name]);
90
+ }, [context.formId, dispatch, props.input.name, removeRowIndex]);
69
91
  (0, react_use_1.useMount)(function () {
70
92
  // Add initial rows
71
93
  if (!props.input.value) {
@@ -33,7 +33,7 @@ function TimeField(props) {
33
33
  dateInUTC: props.dateInUTC
34
34
  }), onNow = _a.onNow, onClear = _a.onClear, onClose = _a.onClose, isOpened = _a.isOpened, inputProps = _a.inputProps;
35
35
  var timePanelViewProps = (0, react_1.useMemo)(function () { return (__assign({ onNow: onNow, onClose: onClose, value: inputProps.value, onSelect: inputProps.onChange }, props.timePanelViewProps)); }, [inputProps.onChange, inputProps.value, onClose, onNow, props.timePanelViewProps]);
36
- var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { onNow: onNow, onClear: onClear, onClose: onClose, isOpened: isOpened, inputProps: inputProps, timePanelViewProps: timePanelViewProps, size: props.size, icon: props.icon, errors: props.errors, noBorder: props.noBorder, disabled: props.disabled, className: props.className, style: props.style, showRemove: props.showRemove })); }, [inputProps, isOpened, onClear, onClose, onNow, props.className, props.disabled, props.errors, props.icon, props.noBorder,
36
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { onNow: onNow, onClear: onClear, onClose: onClose, isOpened: isOpened, inputProps: inputProps, timePanelViewProps: timePanelViewProps, size: props.size, icon: props.icon, errors: props.errors, noBorder: props.noBorder, disabled: props.disabled, className: props.className, style: props.style, showRemove: props.showRemove, id: props.id })); }, [inputProps, isOpened, onClear, onClose, onNow, props.className, props.disabled, props.errors, props.icon, props.id, props.noBorder,
37
37
  props.showRemove, props.size, props.style, props.viewProps, timePanelViewProps]);
38
38
  return components.ui.renderView(props.view || 'form.TimeFieldView', viewProps);
39
39
  }
@@ -71,9 +71,9 @@ function TimeRangeField(props) {
71
71
  }), focus = _c.focus, onClose = _c.onClose, onClear = _c.onClear, extendedInputPropsFrom = _c.extendedInputPropsFrom, extendedInputPropsTo = _c.extendedInputPropsTo;
72
72
  var timePanelFromViewProps = (0, react_1.useMemo)(function () { return (__assign({ onNow: onNowFrom, onClose: onCloseFrom, value: inputPropsFrom.value, onSelect: inputPropsFrom.onChange }, props.timePanelViewProps)); }, [inputPropsFrom.onChange, inputPropsFrom.value, onCloseFrom, onNowFrom, props.timePanelViewProps]);
73
73
  var timePanelToViewProps = (0, react_1.useMemo)(function () { return (__assign({ onNow: onNowTo, onClose: onCloseTo, value: inputPropsTo.value, onSelect: inputPropsTo.onChange }, props.timePanelViewProps)); }, [inputPropsTo.onChange, inputPropsTo.value, onCloseTo, onNowTo, props.timePanelViewProps]);
74
- var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { onClear: onClear, onClose: onClose, inputPropsFrom: extendedInputPropsFrom, inputPropsTo: extendedInputPropsTo, isOpened: focus === 'from' ? isOpenedFrom : isOpenedTo, style: props.style, errorsFrom: props.errorsFrom, errorsTo: props.errorsTo, errors: props.errors, timePanelFromViewProps: timePanelFromViewProps, timePanelToViewProps: timePanelToViewProps, size: props.size, icon: props.icon, disabled: props.disabled, showRemove: props.showRemove, className: props.className })); }, [extendedInputPropsFrom, extendedInputPropsTo, focus, isOpenedFrom, isOpenedTo, onClear, onClose, props.className,
75
- props.disabled, props.errors, props.errorsFrom, props.errorsTo, props.icon, props.showRemove, props.size, props.style,
76
- props.viewProps, timePanelFromViewProps, timePanelToViewProps]);
74
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { onClear: onClear, onClose: onClose, inputPropsFrom: extendedInputPropsFrom, inputPropsTo: extendedInputPropsTo, isOpened: focus === 'from' ? isOpenedFrom : isOpenedTo, style: props.style, errorsFrom: props.errorsFrom, errorsTo: props.errorsTo, errors: props.errors, timePanelFromViewProps: timePanelFromViewProps, timePanelToViewProps: timePanelToViewProps, size: props.size, icon: props.icon, disabled: props.disabled, showRemove: props.showRemove, className: props.className, id: props.id })); }, [extendedInputPropsFrom, extendedInputPropsTo, focus, isOpenedFrom, isOpenedTo, onClear, onClose, props.className,
75
+ props.disabled, props.errors, props.errorsFrom, props.errorsTo, props.icon, props.id, props.showRemove, props.size,
76
+ props.style, props.viewProps, timePanelFromViewProps, timePanelToViewProps]);
77
77
  return components.ui.renderView(props.view || 'form.TimeRangeFieldView', viewProps);
78
78
  }
79
79
  TimeRangeField.defaultProps = {
@@ -70,7 +70,7 @@ function Grid(props) {
70
70
  initialItems: props.initialItems,
71
71
  initialTotal: props.initialTotal,
72
72
  autoFetchOnFormChanges: props.autoFetchOnFormChanges
73
- }), list = _a.list, model = _a.model, searchModel = _a.searchModel, paginationPosition = _a.paginationPosition, paginationSizePosition = _a.paginationSizePosition, layoutNamesPosition = _a.layoutNamesPosition, renderList = _a.renderList, renderLoading = _a.renderLoading, renderEmpty = _a.renderEmpty, renderPagination = _a.renderPagination, renderPaginationSize = _a.renderPaginationSize, renderLayoutNames = _a.renderLayoutNames, renderSearchForm = _a.renderSearchForm, renderInfiniteScroll = _a.renderInfiniteScroll, onFetch = _a.onFetch, onSort = _a.onSort;
73
+ }), list = _a.list, model = _a.model, searchModel = _a.searchModel, paginationPosition = _a.paginationPosition, paginationSizePosition = _a.paginationSizePosition, layoutNamesPosition = _a.layoutNamesPosition, renderList = _a.renderList, renderLoading = _a.renderLoading, renderEmpty = _a.renderEmpty, renderPagination = _a.renderPagination, renderPaginationSize = _a.renderPaginationSize, renderLayoutNames = _a.renderLayoutNames, renderSearchForm = _a.renderSearchForm, renderInfiniteScroll = _a.renderInfiniteScroll, onFetch = _a.onFetch, onSort = _a.onSort, sort = _a.sort;
74
74
  var renderLabel = (0, react_1.useCallback)(function (column) {
75
75
  if (column.headerView) {
76
76
  var HeaderView = column.headerView;
@@ -136,6 +136,7 @@ function Grid(props) {
136
136
  columns: columns,
137
137
  onFetch: onFetch,
138
138
  onSort: onSort,
139
+ sort: sort,
139
140
  items: (list === null || list === void 0 ? void 0 : list.items) || [],
140
141
  searchForm: props.searchForm,
141
142
  listId: props.listId,
@@ -146,7 +147,8 @@ function Grid(props) {
146
147
  primaryKey: props.primaryKey
147
148
  }); }, [list, paginationPosition, paginationSizePosition, layoutNamesPosition, renderList, renderLoading, renderEmpty,
148
149
  renderPagination, renderPaginationSize, renderLayoutNames, renderSearchForm, renderInfiniteScroll, renderValue, columns,
149
- onFetch, onSort, props.searchForm, props.listId, props.isLoading, props.size, props.hasAlternatingColors, props.className, props.primaryKey]);
150
+ onFetch, onSort, sort, props.searchForm, props.listId, props.isLoading, props.size, props.hasAlternatingColors, props.className,
151
+ props.primaryKey]);
150
152
  return components.ui.renderView(props.view || 'list.GridView', viewProps);
151
153
  }
152
154
  exports["default"] = Grid;
@@ -69,7 +69,9 @@ var renderComponent = function (route, activePath, routeProps, alwaysAppendParen
69
69
  return null;
70
70
  }
71
71
  // Check already redirected
72
- var toPath = (0, router_2.buildUrl)(redirectPath, (_b = routeProps === null || routeProps === void 0 ? void 0 : routeProps.match) === null || _b === void 0 ? void 0 : _b.params);
72
+ var toPath = (alwaysAppendParentRoutePath
73
+ ? redirectPath
74
+ : (0, router_2.buildUrl)(redirectPath, (_b = routeProps === null || routeProps === void 0 ? void 0 : routeProps.match) === null || _b === void 0 ? void 0 : _b.params));
73
75
  if (activePath !== toPath) {
74
76
  return (react_1["default"].createElement(react_router_1.Redirect, __assign({}, routeProps, { to: toPath }, route.componentProps)));
75
77
  }