@steroidsjs/core 2.1.0-beta.30 → 2.1.0-beta.31

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.
@@ -137,7 +137,8 @@ function useDataProvider(config) {
137
137
  delayTimerRef.current = setTimeout(fetchRemote, autoComplete.delay);
138
138
  }
139
139
  }
140
- }, [autoComplete, components.api, components.http, config.autoFetch, config.dataProvider, config.query, dataProvider, dataProvider.action, dataProvider.onSearch, prevQuery, sourceItems]);
140
+ }, [autoComplete, components.api, components.http, config.autoFetch, config.dataProvider,
141
+ config.query, dataProvider, dataProvider.action, dataProvider.onSearch, prevQuery, sourceItems]);
141
142
  return {
142
143
  sourceItems: sourceItems,
143
144
  items: items,
@@ -51,7 +51,7 @@ function useDataSelect(config) {
51
51
  if (!config.multiple && ids.length > 1) {
52
52
  ids = [ids[0]];
53
53
  }
54
- setSelectedIdsInternal(ids);
54
+ setSelectedIdsInternal(ids.sort());
55
55
  }
56
56
  else {
57
57
  var id_1 = ids;
@@ -61,11 +61,11 @@ function useDataSelect(config) {
61
61
  else if (config.multiple) {
62
62
  if (selectedIds.indexOf(id_1) !== -1) {
63
63
  if (!skipToggle) {
64
- setSelectedIdsInternal(selectedIds.filter(function (itemValue) { return itemValue !== id_1; }));
64
+ setSelectedIdsInternal(selectedIds.filter(function (itemValue) { return itemValue !== id_1; }).sort());
65
65
  }
66
66
  }
67
67
  else {
68
- setSelectedIdsInternal(__spreadArray(__spreadArray([], selectedIds), [id_1]));
68
+ setSelectedIdsInternal(__spreadArray(__spreadArray([], selectedIds), [id_1]).sort());
69
69
  }
70
70
  }
71
71
  else {
@@ -119,16 +119,19 @@ function useDataSelect(config) {
119
119
  newSelectedIds.push(selectedItem.id);
120
120
  }
121
121
  });
122
- if (!isEqual_1["default"](prevConfigSelectedIds, newSelectedIds) && newSelectedIds.length !== 0) {
122
+ if (!isEqual_1["default"](prevConfigSelectedIds.sort(), newSelectedIds.sort())
123
+ && !isEqual_1["default"](selectedIds.sort(), newSelectedIds.sort()) && newSelectedIds.length !== 0) {
123
124
  setSelectedIdsInternal(newSelectedIds);
124
125
  }
125
- }, [config.items, config.selectedIds, primaryKey, prevConfigSelectedIds, selectedItems, config.sourceItems]);
126
+ }, [config.items, config.selectedIds, primaryKey, prevConfigSelectedIds,
127
+ selectedItems, config.sourceItems, selectedIds]);
126
128
  // Global key down handler for navigate on items
127
129
  // Support keys:
128
130
  // - tab
129
131
  // - esc
130
132
  // - enter
131
133
  // - up/down arrows
134
+ // - space
132
135
  var onKeyDown = react_1.useCallback(function (e) {
133
136
  // Skip no active
134
137
  if (!isFocused && !isOpened) {
@@ -138,9 +141,8 @@ function useDataSelect(config) {
138
141
  if ([9, 27].includes(e.which)) {
139
142
  e.preventDefault();
140
143
  setIsOpened(false);
141
- return;
142
144
  }
143
- // Keys: enter
145
+ // Keys: enter (select and close)
144
146
  if (e.which === 13 && isOpened) {
145
147
  e.preventDefault();
146
148
  if (hoveredId) {
@@ -155,6 +157,15 @@ function useDataSelect(config) {
155
157
  // Select first result
156
158
  setSelectedIds(config.items[0], true);
157
159
  }
160
+ setIsOpened(false);
161
+ }
162
+ // Keys: space (toggle select)
163
+ if (e.which === 32 && isOpened) {
164
+ e.preventDefault();
165
+ if (hoveredId) {
166
+ // Select hovered
167
+ setSelectedIds(hoveredId);
168
+ }
158
169
  }
159
170
  // Keys: arrow up, arrow down
160
171
  if ([38, 40].includes(e.which)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "2.1.0-beta.30",
3
+ "version": "2.1.0-beta.31",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -18,11 +18,11 @@ function useDateTime(props) {
18
18
  // Handler for calendar and time picker changes
19
19
  var onDateSelect = react_1.useCallback(function (date) {
20
20
  var result = date + props.dateTimeSeparator + (timeValue || '00:00');
21
- props.input.onChange.call(null, calendar_1.convertDate(result, props.valueFormat, props.valueFormat, true));
21
+ props.input.onChange.call(null, calendar_1.convertDate(result, [props.valueFormat, 'YYYY-MM-DD HH:mm'], props.valueFormat, true));
22
22
  }, [props.dateTimeSeparator, props.input.onChange, props.valueFormat, timeValue]);
23
23
  var onTimeSelect = react_1.useCallback(function (time) {
24
24
  var result = (dateValue || moment_1["default"]().format(dateValueFormat)) + props.dateTimeSeparator + time;
25
- props.input.onChange.call(null, calendar_1.convertDate(result, props.valueFormat, props.valueFormat, true));
25
+ props.input.onChange.call(null, calendar_1.convertDate(result, [props.valueFormat, 'YYYY-MM-DD HH:mm'], props.valueFormat, true));
26
26
  }, [dateValue, dateValueFormat, props.dateTimeSeparator, props.input.onChange, props.valueFormat]);
27
27
  return {
28
28
  dateValue: dateValue,
@@ -63,7 +63,7 @@ export interface IDropDownFieldViewProps extends Omit<IDropDownFieldProps, 'item
63
63
  onClose: () => void;
64
64
  placeholder: string;
65
65
  isAutoComplete?: boolean;
66
- searchAutoFocus?: any;
66
+ isSearchAutoFocus?: boolean;
67
67
  }
68
68
  declare const _default: import("../../form/Field/fieldWrapper").FieldWrapperComponent<IDropDownFieldProps>;
69
69
  export default _default;
@@ -88,13 +88,14 @@ function DropDownField(props) {
88
88
  }
89
89
  }
90
90
  }, [prevSelectedIds, props.input.onChange, props.multiple, props.onChange, selectedIds]);
91
- // form reset
92
- react_1.useEffect(function () {
93
- //if form reset
94
- if (props.input.value === undefined && selectedIds.length > 0) {
91
+ // Reset selected ids on form reset
92
+ var prevInputValue = react_use_1.usePrevious(props.input.value);
93
+ react_use_1.useUpdateEffect(function () {
94
+ // if form reset
95
+ if (prevInputValue && props.input.value === undefined && selectedIds.length > 0) {
95
96
  onReset();
96
97
  }
97
- }, [onReset, props.input.value, selectedIds.length]);
98
+ }, [onReset, prevInputValue, props.input.value, selectedIds.length]);
98
99
  return components.ui.renderView(props.view || 'form.DropDownFieldView', __assign(__assign({}, props), { isAutoComplete: isAutoComplete,
99
100
  items: items,
100
101
  hoveredId: hoveredId,
@@ -120,6 +121,7 @@ DropDownField.defaultProps = {
120
121
  className: '',
121
122
  autoComplete: false,
122
123
  showReset: false,
123
- multiple: false
124
+ multiple: false,
125
+ isSearchAutoFocus: true
124
126
  };
125
127
  exports["default"] = fieldWrapper_1["default"]('DropDownField', DropDownField);
@@ -55,7 +55,7 @@ function ImageField(props) {
55
55
  var data = null;
56
56
  try {
57
57
  data = JSON.parse(text);
58
- dispatch(modal_1.openModal(ImageFieldModalVIew, __assign(__assign({ modalId: modalId }, props.modalProps), { crop: __assign(__assign({}, props.crop), { onSubmit: function (crop, imageId) { return setCroppedImage(__assign(__assign({}, crop), { id: imageId })); } }), image: first_1["default"](data) })));
58
+ dispatch(modal_1.openModal(ImageFieldModalVIew, __assign(__assign({ modalId: modalId }, props.modalProps), { crop: __assign(__assign({}, props.crop), { onSubmit: function (crop, imageId) { return setCroppedImage(__assign(__assign({}, crop), { id: imageId })); } }), image: first_1["default"](data) || data })));
59
59
  // eslint-disable-next-line no-empty
60
60
  }
61
61
  catch (e) { }
@@ -63,7 +63,7 @@ function ImageField(props) {
63
63
  }, [ImageFieldModalVIew, modalId, dispatch, props.crop, props.modalProps]);
64
64
  var _b = useFile_1["default"](__assign(__assign({}, props), { multiple: false, imagesOnly: true, uploader: __assign({ uploaderConfigs: {
65
65
  xhr: {
66
- responseParser: responseParser
66
+ responseParser: props.crop ? responseParser : null
67
67
  }
68
68
  } }, props.uploader) })), files = _b.files, onBrowse = _b.onBrowse, onRemove = _b.onRemove, onAdd = _b.onAdd;
69
69
  // Fetch cropped image
@@ -28,7 +28,7 @@ var getLabel = function (items, id) {
28
28
  exports.getLabel = getLabel;
29
29
  function EnumFormatter(props) {
30
30
  var components = hooks_1.useComponents();
31
- var items = hooks_1.useDataProvider({ items: props.items });
31
+ var items = hooks_1.useDataProvider({ items: props.items }).items;
32
32
  return components.ui.renderView(props.view || 'format.DefaultFormatterView', {
33
33
  value: exports.getLabel(items, props.value)
34
34
  });