@reltio/components 1.4.2295 → 1.4.2297

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,10 +1,11 @@
1
+ import { compareStrings } from '@reltio/mdm-sdk';
1
2
  import { insertNode, getDescendantCount, getFlatDataFromTree } from './tree';
2
3
  var memoize = function (f) {
3
4
  var savedArgsArray = [];
4
5
  var savedKeysArray = [];
5
6
  var savedResult = null;
6
7
  return function (args) {
7
- var keysArray = Object.keys(args).sort();
8
+ var keysArray = Object.keys(args).sort(compareStrings);
8
9
  var argsArray = keysArray.map(function (key) { return args[key]; });
9
10
  // If the arguments for the last insert operation are different than this time,
10
11
  // recalculate the result
@@ -46,12 +46,19 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
46
  }
47
47
  };
48
48
  import React from 'react';
49
- import { render, screen } from '@testing-library/react';
49
+ import { render, screen, waitFor } from '@testing-library/react';
50
50
  import userEvent from '@testing-library/user-event';
51
51
  import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
52
52
  import { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment';
53
53
  import { TimestampEditor } from './TimestampEditor';
54
54
  var defaultProps = { onChange: jest.fn() };
55
+ var MIN_DATE_ERROR = 'Date should not be before minimal date';
56
+ var MAX_DATE_ERROR = 'Date should not be after maximal date';
57
+ // the editor propagates changes through a debounced handler, so validation state settles
58
+ // one tick after the interaction promise resolves
59
+ var expectErrorToBeHidden = function (message) {
60
+ return waitFor(function () { return expect(screen.queryByText(message)).not.toBeInTheDocument(); });
61
+ };
55
62
  var setUp = function (_a) {
56
63
  var _b = _a === void 0 ? {} : _a, _c = _b.props, props = _c === void 0 ? defaultProps : _c;
57
64
  var user = userEvent.setup();
@@ -134,8 +141,12 @@ describe('TimestampEditor behaviour', function () {
134
141
  return [4 /*yield*/, user.click(screen.getByRole('textbox'))];
135
142
  case 6:
136
143
  _a.sent();
137
- expect(screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
138
- expect(props.onChange).toHaveBeenCalledWith(new Date('2000-01-01T00:00:00'));
144
+ return [4 /*yield*/, waitFor(function () { return expect(props.onChange).toHaveBeenCalledWith(new Date('2000-01-01T00:00:00')); })];
145
+ case 7:
146
+ _a.sent();
147
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
148
+ case 8:
149
+ _a.sent();
139
150
  return [2 /*return*/];
140
151
  }
141
152
  });
@@ -150,13 +161,19 @@ describe('TimestampEditor behaviour', function () {
150
161
  return [4 /*yield*/, user.type(screen.getByRole('textbox'), '01/02/1800 08:00:00 PM')];
151
162
  case 1:
152
163
  _a.sent();
153
- expect(screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
154
- expect(props.onChange).toHaveBeenCalledWith(new Date('1800-01-02T20:00:00'));
164
+ return [4 /*yield*/, waitFor(function () { return expect(props.onChange).toHaveBeenCalledWith(new Date('1800-01-02T20:00:00')); })];
165
+ case 2:
166
+ _a.sent();
167
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
168
+ case 3:
169
+ _a.sent();
155
170
  props.onChange.mockClear();
156
171
  return [4 /*yield*/, user.type(screen.getByRole('textbox'), '12/30/2200 00:00:00 AM')];
157
- case 2:
172
+ case 4:
173
+ _a.sent();
174
+ return [4 /*yield*/, screen.findByText(MAX_DATE_ERROR)];
175
+ case 5:
158
176
  _a.sent();
159
- screen.getByText('Date should not be after maximal date');
160
177
  expect(props.onChange).not.toHaveBeenCalledWith(new Date('2200-12-30T00:00:00'));
161
178
  return [2 /*return*/];
162
179
  }
@@ -172,28 +189,39 @@ describe('TimestampEditor behaviour', function () {
172
189
  textbox = screen.getByRole('textbox');
173
190
  return [4 /*yield*/, user.type(textbox, '01/02/1800 08:00:00 PM')];
174
191
  case 1:
192
+ _a.sent();
193
+ return [4 /*yield*/, waitFor(function () { return expect(props.onChange).toHaveBeenCalledWith(new Date('1800-01-02T20:00:00')); })];
194
+ case 2:
175
195
  _a.sent();
176
196
  props.onChange.mockClear();
177
197
  return [4 /*yield*/, user.click(textbox)];
178
- case 2:
198
+ case 3:
179
199
  _a.sent();
180
200
  return [4 /*yield*/, user.keyboard('{ArrowRight}{ArrowDown}')];
181
- case 3:
201
+ case 4:
202
+ _a.sent();
203
+ return [4 /*yield*/, screen.findByText(MIN_DATE_ERROR)];
204
+ case 5:
182
205
  _a.sent();
183
- screen.getByText('Date should not be before minimal date');
184
206
  expect(props.onChange).not.toHaveBeenCalled();
185
207
  return [4 /*yield*/, user.type(textbox, '12/29/2200 09:59:59 PM')];
186
- case 4:
208
+ case 6:
187
209
  _a.sent();
188
210
  return [4 /*yield*/, user.click(textbox)];
189
- case 5:
211
+ case 7:
190
212
  _a.sent();
191
213
  return [4 /*yield*/, user.keyboard('{ArrowRight}{ArrowRight}{ArrowRight}{ArrowUp}{ArrowUp}')];
192
- case 6:
214
+ case 8:
215
+ _a.sent();
216
+ return [4 /*yield*/, waitFor(function () { return expect(props.onChange).toHaveBeenCalledWith(new Date('2200-12-29T23:59:59')); })];
217
+ case 9:
218
+ _a.sent();
219
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
220
+ case 10:
221
+ _a.sent();
222
+ return [4 /*yield*/, expectErrorToBeHidden(MAX_DATE_ERROR)];
223
+ case 11:
193
224
  _a.sent();
194
- expect(screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
195
- expect(screen.queryByText('Date should not be after maximal date')).not.toBeInTheDocument();
196
- expect(props.onChange).toHaveBeenCalledWith(new Date('2200-12-29T23:59:59'));
197
225
  return [2 /*return*/];
198
226
  }
199
227
  });
@@ -219,20 +247,30 @@ describe('TimestampEditor behaviour', function () {
219
247
  return [4 /*yield*/, user.click(screen.getByText('1'))];
220
248
  case 5:
221
249
  _a.sent();
222
- expect(screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
223
- return [4 /*yield*/, user.type(screen.getByRole('textbox'), '01/01/1900')];
250
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
224
251
  case 6:
225
252
  _a.sent();
226
- expect(screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
227
- return [4 /*yield*/, user.type(screen.getByRole('textbox'), '12/31/1899')];
253
+ return [4 /*yield*/, user.type(screen.getByRole('textbox'), '01/01/1900')];
228
254
  case 7:
229
255
  _a.sent();
230
- screen.getByText('Date should not be before minimal date');
231
- return [4 /*yield*/, user.type(screen.getByRole('textbox'), '12/31/9999')];
256
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
232
257
  case 8:
233
258
  _a.sent();
234
- expect(screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
235
- expect(screen.queryByText('Date should not be after maximal date')).not.toBeInTheDocument();
259
+ return [4 /*yield*/, user.type(screen.getByRole('textbox'), '12/31/1899')];
260
+ case 9:
261
+ _a.sent();
262
+ return [4 /*yield*/, screen.findByText(MIN_DATE_ERROR)];
263
+ case 10:
264
+ _a.sent();
265
+ return [4 /*yield*/, user.type(screen.getByRole('textbox'), '12/31/9999')];
266
+ case 11:
267
+ _a.sent();
268
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
269
+ case 12:
270
+ _a.sent();
271
+ return [4 /*yield*/, expectErrorToBeHidden(MAX_DATE_ERROR)];
272
+ case 13:
273
+ _a.sent();
236
274
  return [2 /*return*/];
237
275
  }
238
276
  });
@@ -240,7 +278,7 @@ describe('TimestampEditor behaviour', function () {
240
278
  it('validation should work correctly with initial wrong value', function () {
241
279
  var props = __assign(__assign({}, defaultProps), { value: new Date('1800-10-19T00:00:00'), minDate: new Date('1800-10-20T00:00:00') });
242
280
  setUp({ props: props });
243
- screen.getByText('Date should not be before minimal date');
281
+ screen.getByText(MIN_DATE_ERROR);
244
282
  });
245
283
  it('should not clear error message after change value if there is not min date and not max date error', function () { return __awaiter(void 0, void 0, void 0, function () {
246
284
  var user;
@@ -251,11 +289,15 @@ describe('TimestampEditor behaviour', function () {
251
289
  return [4 /*yield*/, user.type(screen.getByRole('textbox'), 'invalid date')];
252
290
  case 1:
253
291
  _a.sent();
254
- screen.getByText('Invalid Date Format');
255
- return [4 /*yield*/, user.type(screen.getByRole('textbox'), 'invalid date 2')];
292
+ return [4 /*yield*/, screen.findByText('Invalid Date Format')];
256
293
  case 2:
257
294
  _a.sent();
258
- screen.getByText('Invalid Date Format');
295
+ return [4 /*yield*/, user.type(screen.getByRole('textbox'), 'invalid date 2')];
296
+ case 3:
297
+ _a.sent();
298
+ return [4 /*yield*/, screen.findByText('Invalid Date Format')];
299
+ case 4:
300
+ _a.sent();
259
301
  return [2 /*return*/];
260
302
  }
261
303
  });
@@ -1,13 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.memoizedGetDescendantCount = exports.memoizedGetFlatDataFromTree = exports.memoizedInsertNode = void 0;
4
+ var mdm_sdk_1 = require("@reltio/mdm-sdk");
4
5
  var tree_1 = require("./tree");
5
6
  var memoize = function (f) {
6
7
  var savedArgsArray = [];
7
8
  var savedKeysArray = [];
8
9
  var savedResult = null;
9
10
  return function (args) {
10
- var keysArray = Object.keys(args).sort();
11
+ var keysArray = Object.keys(args).sort(mdm_sdk_1.compareStrings);
11
12
  var argsArray = keysArray.map(function (key) { return args[key]; });
12
13
  // If the arguments for the last insert operation are different than this time,
13
14
  // recalculate the result
@@ -57,6 +57,13 @@ var LocalizationProvider_1 = require("@mui/x-date-pickers/LocalizationProvider")
57
57
  var AdapterMoment_1 = require("@mui/x-date-pickers/AdapterMoment");
58
58
  var TimestampEditor_1 = require("./TimestampEditor");
59
59
  var defaultProps = { onChange: jest.fn() };
60
+ var MIN_DATE_ERROR = 'Date should not be before minimal date';
61
+ var MAX_DATE_ERROR = 'Date should not be after maximal date';
62
+ // the editor propagates changes through a debounced handler, so validation state settles
63
+ // one tick after the interaction promise resolves
64
+ var expectErrorToBeHidden = function (message) {
65
+ return (0, react_2.waitFor)(function () { return expect(react_2.screen.queryByText(message)).not.toBeInTheDocument(); });
66
+ };
60
67
  var setUp = function (_a) {
61
68
  var _b = _a === void 0 ? {} : _a, _c = _b.props, props = _c === void 0 ? defaultProps : _c;
62
69
  var user = user_event_1.default.setup();
@@ -139,8 +146,12 @@ describe('TimestampEditor behaviour', function () {
139
146
  return [4 /*yield*/, user.click(react_2.screen.getByRole('textbox'))];
140
147
  case 6:
141
148
  _a.sent();
142
- expect(react_2.screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
143
- expect(props.onChange).toHaveBeenCalledWith(new Date('2000-01-01T00:00:00'));
149
+ return [4 /*yield*/, (0, react_2.waitFor)(function () { return expect(props.onChange).toHaveBeenCalledWith(new Date('2000-01-01T00:00:00')); })];
150
+ case 7:
151
+ _a.sent();
152
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
153
+ case 8:
154
+ _a.sent();
144
155
  return [2 /*return*/];
145
156
  }
146
157
  });
@@ -155,13 +166,19 @@ describe('TimestampEditor behaviour', function () {
155
166
  return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), '01/02/1800 08:00:00 PM')];
156
167
  case 1:
157
168
  _a.sent();
158
- expect(react_2.screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
159
- expect(props.onChange).toHaveBeenCalledWith(new Date('1800-01-02T20:00:00'));
169
+ return [4 /*yield*/, (0, react_2.waitFor)(function () { return expect(props.onChange).toHaveBeenCalledWith(new Date('1800-01-02T20:00:00')); })];
170
+ case 2:
171
+ _a.sent();
172
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
173
+ case 3:
174
+ _a.sent();
160
175
  props.onChange.mockClear();
161
176
  return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), '12/30/2200 00:00:00 AM')];
162
- case 2:
177
+ case 4:
178
+ _a.sent();
179
+ return [4 /*yield*/, react_2.screen.findByText(MAX_DATE_ERROR)];
180
+ case 5:
163
181
  _a.sent();
164
- react_2.screen.getByText('Date should not be after maximal date');
165
182
  expect(props.onChange).not.toHaveBeenCalledWith(new Date('2200-12-30T00:00:00'));
166
183
  return [2 /*return*/];
167
184
  }
@@ -177,28 +194,39 @@ describe('TimestampEditor behaviour', function () {
177
194
  textbox = react_2.screen.getByRole('textbox');
178
195
  return [4 /*yield*/, user.type(textbox, '01/02/1800 08:00:00 PM')];
179
196
  case 1:
197
+ _a.sent();
198
+ return [4 /*yield*/, (0, react_2.waitFor)(function () { return expect(props.onChange).toHaveBeenCalledWith(new Date('1800-01-02T20:00:00')); })];
199
+ case 2:
180
200
  _a.sent();
181
201
  props.onChange.mockClear();
182
202
  return [4 /*yield*/, user.click(textbox)];
183
- case 2:
203
+ case 3:
184
204
  _a.sent();
185
205
  return [4 /*yield*/, user.keyboard('{ArrowRight}{ArrowDown}')];
186
- case 3:
206
+ case 4:
207
+ _a.sent();
208
+ return [4 /*yield*/, react_2.screen.findByText(MIN_DATE_ERROR)];
209
+ case 5:
187
210
  _a.sent();
188
- react_2.screen.getByText('Date should not be before minimal date');
189
211
  expect(props.onChange).not.toHaveBeenCalled();
190
212
  return [4 /*yield*/, user.type(textbox, '12/29/2200 09:59:59 PM')];
191
- case 4:
213
+ case 6:
192
214
  _a.sent();
193
215
  return [4 /*yield*/, user.click(textbox)];
194
- case 5:
216
+ case 7:
195
217
  _a.sent();
196
218
  return [4 /*yield*/, user.keyboard('{ArrowRight}{ArrowRight}{ArrowRight}{ArrowUp}{ArrowUp}')];
197
- case 6:
219
+ case 8:
220
+ _a.sent();
221
+ return [4 /*yield*/, (0, react_2.waitFor)(function () { return expect(props.onChange).toHaveBeenCalledWith(new Date('2200-12-29T23:59:59')); })];
222
+ case 9:
223
+ _a.sent();
224
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
225
+ case 10:
226
+ _a.sent();
227
+ return [4 /*yield*/, expectErrorToBeHidden(MAX_DATE_ERROR)];
228
+ case 11:
198
229
  _a.sent();
199
- expect(react_2.screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
200
- expect(react_2.screen.queryByText('Date should not be after maximal date')).not.toBeInTheDocument();
201
- expect(props.onChange).toHaveBeenCalledWith(new Date('2200-12-29T23:59:59'));
202
230
  return [2 /*return*/];
203
231
  }
204
232
  });
@@ -224,20 +252,30 @@ describe('TimestampEditor behaviour', function () {
224
252
  return [4 /*yield*/, user.click(react_2.screen.getByText('1'))];
225
253
  case 5:
226
254
  _a.sent();
227
- expect(react_2.screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
228
- return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), '01/01/1900')];
255
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
229
256
  case 6:
230
257
  _a.sent();
231
- expect(react_2.screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
232
- return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), '12/31/1899')];
258
+ return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), '01/01/1900')];
233
259
  case 7:
234
260
  _a.sent();
235
- react_2.screen.getByText('Date should not be before minimal date');
236
- return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), '12/31/9999')];
261
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
237
262
  case 8:
238
263
  _a.sent();
239
- expect(react_2.screen.queryByText('Date should not be before minimal date')).not.toBeInTheDocument();
240
- expect(react_2.screen.queryByText('Date should not be after maximal date')).not.toBeInTheDocument();
264
+ return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), '12/31/1899')];
265
+ case 9:
266
+ _a.sent();
267
+ return [4 /*yield*/, react_2.screen.findByText(MIN_DATE_ERROR)];
268
+ case 10:
269
+ _a.sent();
270
+ return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), '12/31/9999')];
271
+ case 11:
272
+ _a.sent();
273
+ return [4 /*yield*/, expectErrorToBeHidden(MIN_DATE_ERROR)];
274
+ case 12:
275
+ _a.sent();
276
+ return [4 /*yield*/, expectErrorToBeHidden(MAX_DATE_ERROR)];
277
+ case 13:
278
+ _a.sent();
241
279
  return [2 /*return*/];
242
280
  }
243
281
  });
@@ -245,7 +283,7 @@ describe('TimestampEditor behaviour', function () {
245
283
  it('validation should work correctly with initial wrong value', function () {
246
284
  var props = __assign(__assign({}, defaultProps), { value: new Date('1800-10-19T00:00:00'), minDate: new Date('1800-10-20T00:00:00') });
247
285
  setUp({ props: props });
248
- react_2.screen.getByText('Date should not be before minimal date');
286
+ react_2.screen.getByText(MIN_DATE_ERROR);
249
287
  });
250
288
  it('should not clear error message after change value if there is not min date and not max date error', function () { return __awaiter(void 0, void 0, void 0, function () {
251
289
  var user;
@@ -256,11 +294,15 @@ describe('TimestampEditor behaviour', function () {
256
294
  return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), 'invalid date')];
257
295
  case 1:
258
296
  _a.sent();
259
- react_2.screen.getByText('Invalid Date Format');
260
- return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), 'invalid date 2')];
297
+ return [4 /*yield*/, react_2.screen.findByText('Invalid Date Format')];
261
298
  case 2:
262
299
  _a.sent();
263
- react_2.screen.getByText('Invalid Date Format');
300
+ return [4 /*yield*/, user.type(react_2.screen.getByRole('textbox'), 'invalid date 2')];
301
+ case 3:
302
+ _a.sent();
303
+ return [4 /*yield*/, react_2.screen.findByText('Invalid Date Format')];
304
+ case 4:
305
+ _a.sent();
264
306
  return [2 /*return*/];
265
307
  }
266
308
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.2295",
3
+ "version": "1.4.2297",
4
4
  "license": "SEE LICENSE IN LICENSE FILE",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./index.js",
@@ -11,7 +11,7 @@
11
11
  "@fluentui/react-context-selector": "^9.1.26",
12
12
  "@googlemaps/markerclusterer": "^2.5.3",
13
13
  "@react-sigma/core": "3.4.0",
14
- "@reltio/mdm-sdk": "^1.4.2064",
14
+ "@reltio/mdm-sdk": "^1.4.2066",
15
15
  "@vis.gl/react-google-maps": "^1.3.0",
16
16
  "d3-cloud": "^1.2.5",
17
17
  "d3-geo": "^2.0.1",