@steroidsjs/core 2.2.10 → 2.2.11

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.
@@ -55,5 +55,6 @@ export interface IDataSelectResult {
55
55
  setSelectedIds: (ids: PrimaryKey | PrimaryKey[], skipToggle?: boolean) => void;
56
56
  selectedItems: IDataSelectItem[];
57
57
  }
58
+ export declare const getLinearItems: (items: any, groupAttribute: any) => any[];
58
59
  export default function useDataSelect(config: IDataSelectConfig): IDataSelectResult;
59
60
  export {};
@@ -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 && config.items.length > 0
32
- ? [config.items[0][primaryKey]]
46
+ return config.selectFirst && linearItems.length > 0
47
+ ? [linearItems[0][primaryKey]]
33
48
  : [];
34
- }, [config.items, config.selectFirst, config.selectedIds, primaryKey, config.inputValue]);
35
- var initialSelectedItems = react_1.useMemo(function () { return config.items.length > 0
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 config.items.find(function (item) { return item.id === selectedId; }); })
53
+ .map(function (selectedId) { return linearItems.find(function (item) { return item.id === selectedId; }); })
39
54
  .filter(Boolean)
40
- : []; }, [initialSelectedIds, config.items]);
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 = config.items.find(function (item) { return item[primaryKey] === selectedId; });
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
- }, [config.items, config.sourceItems, primaryKey, selectedIds, selectedItems, prevSelectedIdsLength]);
116
+ }, [linearItems, config.sourceItems, primaryKey, selectedIds, selectedItems, prevSelectedIdsLength]);
102
117
  // Select first after fetch data
103
- var prevItemsLength = react_use_1.usePrevious(config.items.length);
118
+ var prevItemsLength = react_use_1.usePrevious(linearItems.length);
104
119
  react_use_1.useUpdateEffect(function () {
105
- if (config.selectFirst && prevItemsLength === 0 && config.items.length > 0) {
106
- setSelectedIdsInternal([config.items[0][primaryKey]]);
120
+ if (config.selectFirst && prevItemsLength === 0 && linearItems.length > 0) {
121
+ setSelectedIdsInternal([linearItems[0][primaryKey]]);
107
122
  }
108
- }, [config.items, config.selectFirst, prevItemsLength, primaryKey]);
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
- }, [config.items, config.selectedIds, primaryKey, prevConfigSelectedIds,
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 (config.items.length > 0) {
169
+ else if (linearItems.length > 0) {
155
170
  // Select first result
156
- setSelectedIds(config.items[0], true);
171
+ setSelectedIds(linearItems[0], true);
157
172
  }
158
173
  setIsOpened(false);
159
174
  }
@@ -178,21 +193,7 @@ function useDataSelect(config) {
178
193
  else {
179
194
  // Navigate on items by keys
180
195
  var direction = isDown ? 1 : -1;
181
- var getKeysRecursive_1 = function (items) {
182
- var ids = [];
183
- items.forEach(function (item) {
184
- if (config.groupAttribute && Array.isArray(item[config.groupAttribute])) {
185
- ids = ids.concat(getKeysRecursive_1(item[config.groupAttribute]));
186
- }
187
- else {
188
- ids.push(item.id);
189
- }
190
- return ids;
191
- });
192
- return ids;
193
- };
194
- //const keys = config.items.map(item => item.id);
195
- var keys = getKeysRecursive_1(config.items);
196
+ var keys = linearItems.map(function (item) { return item.id; });
196
197
  // Get current index
197
198
  var index = hoveredId ? keys.indexOf(hoveredId) : -1;
198
199
  if (index === -1 && selectedIds.length === 1) {
@@ -206,7 +207,7 @@ function useDataSelect(config) {
206
207
  setHoveredId(keys[newIndex]);
207
208
  }
208
209
  }
209
- }, [isFocused, isOpened, hoveredId, selectedIds, config.items, config.groupAttribute, setSelectedIds]);
210
+ }, [isFocused, isOpened, hoveredId, selectedIds, linearItems, setSelectedIds]);
210
211
  react_use_1.useEvent('keydown', onKeyDown);
211
212
  return {
212
213
  isOpened: isOpened,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "2.2.10",
3
+ "version": "2.2.11",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {