@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.
- package/hooks/useDataSelect.d.ts +1 -0
- package/hooks/useDataSelect.js +32 -31
- package/package.json +1 -1
package/hooks/useDataSelect.d.ts
CHANGED
|
@@ -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 {};
|
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,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
|
|
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,
|
|
210
|
+
}, [isFocused, isOpened, hoveredId, selectedIds, linearItems, setSelectedIds]);
|
|
210
211
|
react_use_1.useEvent('keydown', onKeyDown);
|
|
211
212
|
return {
|
|
212
213
|
isOpened: isOpened,
|