@reltio/components 1.4.1988 → 1.4.1989
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/cjs/DataTypeValueEditor/useEditorContext.test.js +17 -0
- package/cjs/TagsEditor/TagsEditor.test.js +16 -0
- package/cjs/TypeaheadEditor/TypeaheadEditor.js +21 -6
- package/cjs/TypeaheadEditor/TypeaheadEditor.test.js +21 -0
- package/cjs/features/history/HistoryTree/HistoryTree.js +5 -1
- package/esm/DataTypeValueEditor/useEditorContext.test.js +17 -0
- package/esm/TagsEditor/TagsEditor.test.js +16 -0
- package/esm/TypeaheadEditor/TypeaheadEditor.js +21 -6
- package/esm/TypeaheadEditor/TypeaheadEditor.test.js +21 -0
- package/esm/features/history/HistoryTree/HistoryTree.js +5 -1
- package/package.json +2 -2
|
@@ -119,6 +119,23 @@ describe('useEditorContext tests', function () {
|
|
|
119
119
|
}
|
|
120
120
|
});
|
|
121
121
|
}); });
|
|
122
|
+
it('should return getSuggestions which passes request error through', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
123
|
+
var error, fieldName, dataTypeDefinition, result;
|
|
124
|
+
return __generator(this, function (_a) {
|
|
125
|
+
switch (_a.label) {
|
|
126
|
+
case 0:
|
|
127
|
+
error = { errorCode: 403, errorMessage: 'Access is denied' };
|
|
128
|
+
mdm_sdk_1.getFacetedAttributeData.mockRejectedValue(error);
|
|
129
|
+
fieldName = 'attributes.TextField';
|
|
130
|
+
dataTypeDefinition = { type: mdm_sdk_1.DataTypes.TYPE_TYPEAHEAD };
|
|
131
|
+
result = setUp({ fieldName: fieldName, dataTypeDefinition: dataTypeDefinition }).result;
|
|
132
|
+
return [4 /*yield*/, expect(result.current.getSuggestions('value', 100, 0)).rejects.toMatchObject(error)];
|
|
133
|
+
case 1:
|
|
134
|
+
_a.sent();
|
|
135
|
+
return [2 /*return*/];
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}); });
|
|
122
139
|
it('should return getLookups which dispatches an action for "Lookup" type', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
123
140
|
var response, fieldName, dataTypeDefinition, result;
|
|
124
141
|
return __generator(this, function (_a) {
|
|
@@ -174,6 +174,22 @@ describe('TagsEditor tests', function () {
|
|
|
174
174
|
}
|
|
175
175
|
});
|
|
176
176
|
}); });
|
|
177
|
+
it('should catch and handle error in getFacetedAttributeData', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
178
|
+
var user;
|
|
179
|
+
return __generator(this, function (_a) {
|
|
180
|
+
switch (_a.label) {
|
|
181
|
+
case 0:
|
|
182
|
+
jest.clearAllMocks();
|
|
183
|
+
mdm_sdk_1.getFacetedAttributeData.mockRejectedValue({ errorCode: 403, errorMessage: 'Access is denied' });
|
|
184
|
+
user = setUp().user;
|
|
185
|
+
return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), 'new value')];
|
|
186
|
+
case 1:
|
|
187
|
+
_a.sent();
|
|
188
|
+
expect(react_2.screen.queryByRole('menuitem')).not.toBeInTheDocument();
|
|
189
|
+
return [2 /*return*/];
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}); });
|
|
177
193
|
it('should call onChange with correct params after click to suggestion', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
178
194
|
var onChange, user;
|
|
179
195
|
return __generator(this, function (_a) {
|
|
@@ -137,13 +137,24 @@ var TypeaheadEditor = function (_a) {
|
|
|
137
137
|
var value = multiple === true && !(0, ramda_1.isNil)(valueProp) ? (0, mdm_sdk_1.wrapInArrayIfNeeded)(valueProp) : valueProp;
|
|
138
138
|
var isFocused = function () { var _a; return ((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('input')) === document.activeElement; };
|
|
139
139
|
var fetchSuggestions = (0, react_1.useCallback)(function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
140
|
-
var response;
|
|
140
|
+
var response, error_1;
|
|
141
141
|
var value = _b.value;
|
|
142
142
|
return __generator(this, function (_c) {
|
|
143
143
|
switch (_c.label) {
|
|
144
|
-
case 0:
|
|
144
|
+
case 0:
|
|
145
|
+
response = [];
|
|
146
|
+
_c.label = 1;
|
|
145
147
|
case 1:
|
|
148
|
+
_c.trys.push([1, 3, , 4]);
|
|
149
|
+
return [4 /*yield*/, safePromise(getSuggestions(value.trim(), pageSizeForRequest))];
|
|
150
|
+
case 2:
|
|
146
151
|
response = _c.sent();
|
|
152
|
+
return [3 /*break*/, 4];
|
|
153
|
+
case 3:
|
|
154
|
+
error_1 = _c.sent();
|
|
155
|
+
console.warn(error_1);
|
|
156
|
+
return [3 /*break*/, 4];
|
|
157
|
+
case 4:
|
|
147
158
|
setSuggestions(response);
|
|
148
159
|
setPlaceholderVisibility((0, ramda_1.isEmpty)(response) && isFocused());
|
|
149
160
|
return [2 /*return*/];
|
|
@@ -154,24 +165,28 @@ var TypeaheadEditor = function (_a) {
|
|
|
154
165
|
getSuggestions
|
|
155
166
|
]);
|
|
156
167
|
var handleLoadMoreSuggestions = (0, react_1.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
157
|
-
var response_1;
|
|
168
|
+
var response_1, error_2;
|
|
158
169
|
return __generator(this, function (_a) {
|
|
159
170
|
switch (_a.label) {
|
|
160
171
|
case 0:
|
|
161
172
|
setNextPageIsLoading(true);
|
|
162
173
|
_a.label = 1;
|
|
163
174
|
case 1:
|
|
164
|
-
_a.trys.push([1, ,
|
|
175
|
+
_a.trys.push([1, 3, 4, 5]);
|
|
165
176
|
return [4 /*yield*/, getSuggestions(inputValue, pageSizeForRequest, pageNumber + 1)];
|
|
166
177
|
case 2:
|
|
167
178
|
response_1 = _a.sent();
|
|
168
179
|
setSuggestions(function (prevSuggestions) { return __spreadArray(__spreadArray([], prevSuggestions, true), response_1, true); });
|
|
169
180
|
setPageNumber(function (prevPageNumber) { return prevPageNumber + 1; });
|
|
170
|
-
return [3 /*break*/,
|
|
181
|
+
return [3 /*break*/, 5];
|
|
171
182
|
case 3:
|
|
183
|
+
error_2 = _a.sent();
|
|
184
|
+
console.warn(error_2);
|
|
185
|
+
return [3 /*break*/, 5];
|
|
186
|
+
case 4:
|
|
172
187
|
setNextPageIsLoading(false);
|
|
173
188
|
return [7 /*endfinally*/];
|
|
174
|
-
case
|
|
189
|
+
case 5: return [2 /*return*/];
|
|
175
190
|
}
|
|
176
191
|
});
|
|
177
192
|
}); }, [getSuggestions, inputValue, pageNumber, pageSizeForRequest]);
|
|
@@ -222,6 +222,27 @@ describe('TypeaheadEditor', function () {
|
|
|
222
222
|
}
|
|
223
223
|
});
|
|
224
224
|
}); });
|
|
225
|
+
it('should catch error in getSuggestions', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
226
|
+
var getSuggestions, user, input;
|
|
227
|
+
return __generator(this, function (_a) {
|
|
228
|
+
switch (_a.label) {
|
|
229
|
+
case 0:
|
|
230
|
+
getSuggestions = function () { return Promise.reject({ errorCode: 403, errorMessage: 'Access is denied' }); };
|
|
231
|
+
user = setUp(__assign(__assign({}, defaultSingleProps), { getSuggestions: getSuggestions })).user;
|
|
232
|
+
input = react_2.screen.getByRole('textbox');
|
|
233
|
+
return [4 /*yield*/, user.click(input)];
|
|
234
|
+
case 1:
|
|
235
|
+
_a.sent();
|
|
236
|
+
return [4 /*yield*/, user.type(input, 'e')];
|
|
237
|
+
case 2:
|
|
238
|
+
_a.sent();
|
|
239
|
+
return [4 /*yield*/, react_2.screen.findByText('No results found')];
|
|
240
|
+
case 3:
|
|
241
|
+
_a.sent();
|
|
242
|
+
return [2 /*return*/];
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}); });
|
|
225
246
|
describe('single mode', function () {
|
|
226
247
|
it('should set input value after click on suggestion item', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
227
248
|
var user, input;
|
|
@@ -89,7 +89,8 @@ var HistoryTree = function (_a) {
|
|
|
89
89
|
var handleHistoryCircleMouseOver = function (uri, timestamp, index) {
|
|
90
90
|
if ((0, ramda_1.isNil)(graphData.rows[index].label)) {
|
|
91
91
|
var options = { time: timestamp, select: 'crosswalks' };
|
|
92
|
-
(0, mdm_sdk_1.getEntity)(uri, options)
|
|
92
|
+
(0, mdm_sdk_1.getEntity)(uri, options)
|
|
93
|
+
.then(function (_a) {
|
|
93
94
|
var crosswalks = _a.crosswalks;
|
|
94
95
|
var label = crosswalks
|
|
95
96
|
? (0, ramda_1.uniqBy)((0, ramda_1.prop)('type'), crosswalks)
|
|
@@ -101,6 +102,9 @@ var HistoryTree = function (_a) {
|
|
|
101
102
|
.join(', ')
|
|
102
103
|
: ui_i18n_1.default.text('No data');
|
|
103
104
|
setGraphData(function (prevGraphData) { return (__assign(__assign({}, prevGraphData), { rows: prevGraphData.rows.map(function (row) { return (row.index === index ? __assign(__assign({}, row), { label: label }) : row); }) })); });
|
|
105
|
+
})
|
|
106
|
+
.catch(function (error) {
|
|
107
|
+
console.warn(error);
|
|
104
108
|
});
|
|
105
109
|
}
|
|
106
110
|
};
|
|
@@ -114,6 +114,23 @@ describe('useEditorContext tests', function () {
|
|
|
114
114
|
}
|
|
115
115
|
});
|
|
116
116
|
}); });
|
|
117
|
+
it('should return getSuggestions which passes request error through', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
118
|
+
var error, fieldName, dataTypeDefinition, result;
|
|
119
|
+
return __generator(this, function (_a) {
|
|
120
|
+
switch (_a.label) {
|
|
121
|
+
case 0:
|
|
122
|
+
error = { errorCode: 403, errorMessage: 'Access is denied' };
|
|
123
|
+
getFacetedAttributeData.mockRejectedValue(error);
|
|
124
|
+
fieldName = 'attributes.TextField';
|
|
125
|
+
dataTypeDefinition = { type: DataTypes.TYPE_TYPEAHEAD };
|
|
126
|
+
result = setUp({ fieldName: fieldName, dataTypeDefinition: dataTypeDefinition }).result;
|
|
127
|
+
return [4 /*yield*/, expect(result.current.getSuggestions('value', 100, 0)).rejects.toMatchObject(error)];
|
|
128
|
+
case 1:
|
|
129
|
+
_a.sent();
|
|
130
|
+
return [2 /*return*/];
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}); });
|
|
117
134
|
it('should return getLookups which dispatches an action for "Lookup" type', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
118
135
|
var response, fieldName, dataTypeDefinition, result;
|
|
119
136
|
return __generator(this, function (_a) {
|
|
@@ -169,6 +169,22 @@ describe('TagsEditor tests', function () {
|
|
|
169
169
|
}
|
|
170
170
|
});
|
|
171
171
|
}); });
|
|
172
|
+
it('should catch and handle error in getFacetedAttributeData', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
173
|
+
var user;
|
|
174
|
+
return __generator(this, function (_a) {
|
|
175
|
+
switch (_a.label) {
|
|
176
|
+
case 0:
|
|
177
|
+
jest.clearAllMocks();
|
|
178
|
+
getFacetedAttributeData.mockRejectedValue({ errorCode: 403, errorMessage: 'Access is denied' });
|
|
179
|
+
user = setUp().user;
|
|
180
|
+
return [4 /*yield*/, user.type(screen.getByRole('textbox'), 'new value')];
|
|
181
|
+
case 1:
|
|
182
|
+
_a.sent();
|
|
183
|
+
expect(screen.queryByRole('menuitem')).not.toBeInTheDocument();
|
|
184
|
+
return [2 /*return*/];
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}); });
|
|
172
188
|
it('should call onChange with correct params after click to suggestion', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
173
189
|
var onChange, user;
|
|
174
190
|
return __generator(this, function (_a) {
|
|
@@ -108,13 +108,24 @@ export var TypeaheadEditor = function (_a) {
|
|
|
108
108
|
var value = multiple === true && !isNil(valueProp) ? wrapInArrayIfNeeded(valueProp) : valueProp;
|
|
109
109
|
var isFocused = function () { var _a; return ((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('input')) === document.activeElement; };
|
|
110
110
|
var fetchSuggestions = useCallback(function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
111
|
-
var response;
|
|
111
|
+
var response, error_1;
|
|
112
112
|
var value = _b.value;
|
|
113
113
|
return __generator(this, function (_c) {
|
|
114
114
|
switch (_c.label) {
|
|
115
|
-
case 0:
|
|
115
|
+
case 0:
|
|
116
|
+
response = [];
|
|
117
|
+
_c.label = 1;
|
|
116
118
|
case 1:
|
|
119
|
+
_c.trys.push([1, 3, , 4]);
|
|
120
|
+
return [4 /*yield*/, safePromise(getSuggestions(value.trim(), pageSizeForRequest))];
|
|
121
|
+
case 2:
|
|
117
122
|
response = _c.sent();
|
|
123
|
+
return [3 /*break*/, 4];
|
|
124
|
+
case 3:
|
|
125
|
+
error_1 = _c.sent();
|
|
126
|
+
console.warn(error_1);
|
|
127
|
+
return [3 /*break*/, 4];
|
|
128
|
+
case 4:
|
|
118
129
|
setSuggestions(response);
|
|
119
130
|
setPlaceholderVisibility(isEmpty(response) && isFocused());
|
|
120
131
|
return [2 /*return*/];
|
|
@@ -125,24 +136,28 @@ export var TypeaheadEditor = function (_a) {
|
|
|
125
136
|
getSuggestions
|
|
126
137
|
]);
|
|
127
138
|
var handleLoadMoreSuggestions = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
128
|
-
var response_1;
|
|
139
|
+
var response_1, error_2;
|
|
129
140
|
return __generator(this, function (_a) {
|
|
130
141
|
switch (_a.label) {
|
|
131
142
|
case 0:
|
|
132
143
|
setNextPageIsLoading(true);
|
|
133
144
|
_a.label = 1;
|
|
134
145
|
case 1:
|
|
135
|
-
_a.trys.push([1, ,
|
|
146
|
+
_a.trys.push([1, 3, 4, 5]);
|
|
136
147
|
return [4 /*yield*/, getSuggestions(inputValue, pageSizeForRequest, pageNumber + 1)];
|
|
137
148
|
case 2:
|
|
138
149
|
response_1 = _a.sent();
|
|
139
150
|
setSuggestions(function (prevSuggestions) { return __spreadArray(__spreadArray([], prevSuggestions, true), response_1, true); });
|
|
140
151
|
setPageNumber(function (prevPageNumber) { return prevPageNumber + 1; });
|
|
141
|
-
return [3 /*break*/,
|
|
152
|
+
return [3 /*break*/, 5];
|
|
142
153
|
case 3:
|
|
154
|
+
error_2 = _a.sent();
|
|
155
|
+
console.warn(error_2);
|
|
156
|
+
return [3 /*break*/, 5];
|
|
157
|
+
case 4:
|
|
143
158
|
setNextPageIsLoading(false);
|
|
144
159
|
return [7 /*endfinally*/];
|
|
145
|
-
case
|
|
160
|
+
case 5: return [2 /*return*/];
|
|
146
161
|
}
|
|
147
162
|
});
|
|
148
163
|
}); }, [getSuggestions, inputValue, pageNumber, pageSizeForRequest]);
|
|
@@ -217,6 +217,27 @@ describe('TypeaheadEditor', function () {
|
|
|
217
217
|
}
|
|
218
218
|
});
|
|
219
219
|
}); });
|
|
220
|
+
it('should catch error in getSuggestions', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
221
|
+
var getSuggestions, user, input;
|
|
222
|
+
return __generator(this, function (_a) {
|
|
223
|
+
switch (_a.label) {
|
|
224
|
+
case 0:
|
|
225
|
+
getSuggestions = function () { return Promise.reject({ errorCode: 403, errorMessage: 'Access is denied' }); };
|
|
226
|
+
user = setUp(__assign(__assign({}, defaultSingleProps), { getSuggestions: getSuggestions })).user;
|
|
227
|
+
input = screen.getByRole('textbox');
|
|
228
|
+
return [4 /*yield*/, user.click(input)];
|
|
229
|
+
case 1:
|
|
230
|
+
_a.sent();
|
|
231
|
+
return [4 /*yield*/, user.type(input, 'e')];
|
|
232
|
+
case 2:
|
|
233
|
+
_a.sent();
|
|
234
|
+
return [4 /*yield*/, screen.findByText('No results found')];
|
|
235
|
+
case 3:
|
|
236
|
+
_a.sent();
|
|
237
|
+
return [2 /*return*/];
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}); });
|
|
220
241
|
describe('single mode', function () {
|
|
221
242
|
it('should set input value after click on suggestion item', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
222
243
|
var user, input;
|
|
@@ -60,7 +60,8 @@ export var HistoryTree = function (_a) {
|
|
|
60
60
|
var handleHistoryCircleMouseOver = function (uri, timestamp, index) {
|
|
61
61
|
if (isNil(graphData.rows[index].label)) {
|
|
62
62
|
var options = { time: timestamp, select: 'crosswalks' };
|
|
63
|
-
getEntity(uri, options)
|
|
63
|
+
getEntity(uri, options)
|
|
64
|
+
.then(function (_a) {
|
|
64
65
|
var crosswalks = _a.crosswalks;
|
|
65
66
|
var label = crosswalks
|
|
66
67
|
? uniqBy(prop('type'), crosswalks)
|
|
@@ -72,6 +73,9 @@ export var HistoryTree = function (_a) {
|
|
|
72
73
|
.join(', ')
|
|
73
74
|
: i18n.text('No data');
|
|
74
75
|
setGraphData(function (prevGraphData) { return (__assign(__assign({}, prevGraphData), { rows: prevGraphData.rows.map(function (row) { return (row.index === index ? __assign(__assign({}, row), { label: label }) : row); }) })); });
|
|
76
|
+
})
|
|
77
|
+
.catch(function (error) {
|
|
78
|
+
console.warn(error);
|
|
75
79
|
});
|
|
76
80
|
}
|
|
77
81
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reltio/components",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1989",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE FILE",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./esm/index.js",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"@fluentui/react-context-selector": "^9.1.26",
|
|
9
9
|
"@react-google-maps/api": "2.7.0",
|
|
10
10
|
"@react-sigma/core": "3.4.0",
|
|
11
|
-
"@reltio/mdm-sdk": "^1.4.
|
|
11
|
+
"@reltio/mdm-sdk": "^1.4.1887",
|
|
12
12
|
"d3-cloud": "^1.2.5",
|
|
13
13
|
"d3-geo": "^2.0.1",
|
|
14
14
|
"d3-hierarchy": "^2.0.0",
|