@kineticdata/react 5.0.15 → 5.0.18

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.
Files changed (38) hide show
  1. package/lib/apis/core/authentication.js +11 -3
  2. package/lib/apis/core/fileResources.js +36 -0
  3. package/lib/apis/core/filestores.js +40 -0
  4. package/lib/apis/core/submissions.js +10 -6
  5. package/lib/apis/http.test.js +8 -3
  6. package/lib/apis/task/index.js +2 -1
  7. package/lib/components/agent/filestore/FilestoreForm.js +132 -0
  8. package/lib/components/agent/filestore/FilestoreTable.js +53 -0
  9. package/lib/components/common/Scroller.js +6 -6
  10. package/lib/components/common/code_input/languageHelpers.test.js +1 -1
  11. package/lib/components/core/core_form/CoreForm.js +10 -10
  12. package/lib/components/core/field_definition/FieldDefinitionForm.js +130 -0
  13. package/lib/components/core/field_definition/FieldDefinitionTable.js +86 -0
  14. package/lib/components/core/file_resource/FileResourceForm.js +180 -0
  15. package/lib/components/core/file_resource/FileResourceTable.js +71 -0
  16. package/lib/components/core/i18n/I18n.js +14 -14
  17. package/lib/components/core/submission/FormSubmissionFilters.js +378 -0
  18. package/lib/components/core/submission/FormSubmissionTable.js +116 -0
  19. package/lib/components/core/submission/KappSubmissionTable.js +250 -0
  20. package/lib/components/core/submission/SubmissionForm.js +124 -0
  21. package/lib/components/core/submission/helpers.js +95 -0
  22. package/lib/components/core/submission/helpers.test.js +96 -0
  23. package/lib/components/form/Form.js +2 -2
  24. package/lib/components/index.js +4 -4
  25. package/lib/components/system/SystemBackgroundTasksTable.js +83 -0
  26. package/lib/components/system/SystemSecurityForm.js +69 -0
  27. package/lib/components/system/helpers.js +16 -24
  28. package/lib/components/system/spaces/SystemTenantForm.js +8 -4
  29. package/lib/components/table/Table.js +23 -3
  30. package/lib/components/table/Table.redux.js +221 -53
  31. package/lib/components/table/Table.redux.test.js +73 -2
  32. package/lib/components/task/builder/Connector.js +2 -2
  33. package/lib/components/task/builder/NodeForm.js +3 -0
  34. package/lib/components/task/builder/TaskDefinitionConfigForm.js +113 -0
  35. package/lib/components/task/builder/TreeBuilder.js +2 -2
  36. package/lib/components/task/triggers/TriggerTable.js +3 -2
  37. package/package.json +3 -3
  38. package/proxyhelper.js +82 -9
@@ -2,11 +2,14 @@ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
2
  import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
 
4
4
  var _marked = /*#__PURE__*/_regeneratorRuntime.mark(calculateRowsTask),
5
- _marked2 = /*#__PURE__*/_regeneratorRuntime.mark(configureTableTask);
5
+ _marked2 = /*#__PURE__*/_regeneratorRuntime.mark(configureTableTask),
6
+ _marked3 = /*#__PURE__*/_regeneratorRuntime.mark(pollingTask),
7
+ _marked4 = /*#__PURE__*/_regeneratorRuntime.mark(startPollingTask),
8
+ _marked5 = /*#__PURE__*/_regeneratorRuntime.mark(stopPollingTask);
6
9
 
7
10
  import { List, Map, fromJS } from 'immutable';
8
11
  import isarray from 'isarray';
9
- import { call, put, select, takeEvery } from 'redux-saga/effects';
12
+ import { call, cancel, delay, fork, put, select, takeEvery } from 'redux-saga/effects';
10
13
  import { action, dispatch, regHandlers, regSaga } from '../../store';
11
14
  import { mountForm, unmountForm } from '..';
12
15
  export var hasData = function hasData(data) {
@@ -28,6 +31,18 @@ export var isClientSide = function isClientSide(tableData) {
28
31
  var dataSource = getDataSource(tableData);
29
32
  return hasData(data) && (dataSource && (dataSource.clientSideSearch === true || dataSource.clientSide) || !dataSource);
30
33
  };
34
+ export var clientSideGotoPage = function clientSideGotoPage(tableData, pageNumber) {
35
+ var data = tableData.get('data');
36
+ var pageSize = tableData.get('pageSize');
37
+ var newOffset = (pageNumber - 1) * pageSize;
38
+
39
+ if (typeof pageNumber !== 'number' || pageNumber < 1) {
40
+ return tableData;
41
+ }
42
+
43
+ if (newOffset > data.size) return tableData;
44
+ return tableData.set('pageOffset', newOffset);
45
+ };
31
46
 
32
47
  var clientSideNextPage = function clientSideNextPage(tableData) {
33
48
  return tableData.update('pageOffset', function (pageOffset) {
@@ -41,6 +56,21 @@ var clientSidePrevPage = function clientSidePrevPage(tableData) {
41
56
  });
42
57
  };
43
58
 
59
+ export var serverSideGotoPage = function serverSideGotoPage(tableData, pageNumber) {
60
+ var pageTokens = tableData.get('pageTokens');
61
+ var tokenLocation = pageNumber - 2;
62
+
63
+ if (typeof pageNumber !== 'number' || pageNumber < 1 || pageNumber > pageTokens.size) {
64
+ return tableData;
65
+ }
66
+
67
+ if (pageNumber === 1) {
68
+ return tableData.set('loading', true).set('nextPageToken', null).set('pageTokens', List());
69
+ }
70
+
71
+ return tableData.set('loading', true).set('nextPageToken', pageTokens.get(tokenLocation)).set('pageTokens', pageTokens.slice(0, tokenLocation));
72
+ };
73
+
44
74
  var serverSideNextPage = function serverSideNextPage(tableData) {
45
75
  return tableData.set('loading', true).set('nextPageToken', tableData.get('currentPageToken')).update('pageTokens', function (pt) {
46
76
  return pt.push(tableData.get('currentPageToken'));
@@ -104,7 +134,8 @@ regHandlers({
104
134
  defaultSortDirection = _ref3$payload$default2 === void 0 ? 'desc' : _ref3$payload$default2,
105
135
  tableOptions = _ref3$payload.tableOptions,
106
136
  onValidateFilters = _ref3$payload.onValidateFilters,
107
- filterForm = _ref3$payload.filterForm;
137
+ filterForm = _ref3$payload.filterForm,
138
+ onFetch = _ref3$payload.onFetch;
108
139
  return !state.getIn(['tables', tableKey, 'mounted']) ? state : state.hasIn(['tables', tableKey, 'configured']) ? state.setIn(['tables', tableKey, 'initialize'], false) : state.mergeIn(['tables', tableKey], Map({
109
140
  data: hasData(data) ? fromJS(data) : data,
110
141
  dataSource: dataSource,
@@ -121,6 +152,7 @@ regHandlers({
121
152
  nextPageToken: null,
122
153
  pageTokens: List(),
123
154
  pageOffset: 0,
155
+ count: null,
124
156
  error: null,
125
157
  // Filtering
126
158
  filterForm: filterForm,
@@ -128,6 +160,7 @@ regHandlers({
128
160
  appliedFilters: generateFilters(tableKey, columns),
129
161
  validFilters: true,
130
162
  onValidateFilters: onValidateFilters,
163
+ onFetch: onFetch,
131
164
  configured: true,
132
165
  initialize: true
133
166
  }));
@@ -138,10 +171,11 @@ regHandlers({
138
171
  rows = _ref4$payload.rows,
139
172
  data = _ref4$payload.data,
140
173
  nextPageToken = _ref4$payload.nextPageToken,
174
+ count = _ref4$payload.count,
141
175
  _ref4$payload$error = _ref4$payload.error,
142
176
  error = _ref4$payload$error === void 0 ? null : _ref4$payload$error;
143
177
  return state.updateIn(['tables', tableKey], function (table) {
144
- return table && table.set('rows', rows).set('data', data).set('currentPageToken', nextPageToken).set('nextPageToken', null).set('error', error).set('initializing', false).set('loading', false);
178
+ return table && table.set('rows', rows).set('data', data).set('currentPageToken', nextPageToken).set('nextPageToken', null).set('count', count).set('error', error).set('initializing', false).set('loading', false);
145
179
  });
146
180
  },
147
181
  NEXT_PAGE: function NEXT_PAGE(state, _ref5) {
@@ -156,10 +190,18 @@ regHandlers({
156
190
  return isClientSide(tableData) ? clientSidePrevPage(tableData) : serverSidePrevPage(tableData);
157
191
  }).setIn(['tables', tableKey, 'error'], null);
158
192
  },
159
- SORT_COLUMN: function SORT_COLUMN(state, _ref7) {
193
+ GOTO_PAGE: function GOTO_PAGE(state, _ref7) {
160
194
  var _ref7$payload = _ref7.payload,
161
195
  tableKey = _ref7$payload.tableKey,
162
- column = _ref7$payload.column;
196
+ pageNumber = _ref7$payload.pageNumber;
197
+ return state.updateIn(['tables', tableKey], function (tableData) {
198
+ return isClientSide(tableData) ? clientSideGotoPage(tableData, pageNumber) : serverSideGotoPage(tableData, pageNumber);
199
+ }).setIn(['tables', tableKey, 'error'], null);
200
+ },
201
+ SORT_COLUMN: function SORT_COLUMN(state, _ref8) {
202
+ var _ref8$payload = _ref8.payload,
203
+ tableKey = _ref8$payload.tableKey,
204
+ column = _ref8$payload.column;
163
205
  return state.updateIn(['tables', tableKey], function (t) {
164
206
  var sortColumn = t.get('sortColumn');
165
207
  var sortDirection = t.get('sortDirection');
@@ -168,52 +210,52 @@ regHandlers({
168
210
  .set('sortDirection', sortColumn === column ? sortDirection === 'desc' ? 'asc' : 'desc' : 'asc').set('sortColumn', column).set('error', null);
169
211
  });
170
212
  },
171
- SET_FILTER: function SET_FILTER(state, _ref8) {
172
- var _ref8$payload = _ref8.payload,
173
- tableKey = _ref8$payload.tableKey,
174
- filter = _ref8$payload.filter,
175
- value = _ref8$payload.value;
213
+ SET_FILTER: function SET_FILTER(state, _ref9) {
214
+ var _ref9$payload = _ref9.payload,
215
+ tableKey = _ref9$payload.tableKey,
216
+ filter = _ref9$payload.filter,
217
+ value = _ref9$payload.value;
176
218
  return state.updateIn(['tables', tableKey], function (table) {
177
219
  return table.setIn(['filters', filter, 'value'], value).set('validFilters', evaluateValidFilters(table));
178
220
  });
179
221
  },
180
- APPLY_FILTERS: function APPLY_FILTERS(state, _ref9) {
181
- var tableKey = _ref9.payload.tableKey;
222
+ APPLY_FILTERS: function APPLY_FILTERS(state, _ref10) {
223
+ var tableKey = _ref10.payload.tableKey;
182
224
  return state.updateIn(['tables', tableKey], function (table) {
183
225
  return table.set('loading', true).set('appliedFilters', state.getIn(['tables', tableKey, 'filters'])).set('pageOffset', 0).set('currentPageToken', null).set('nextPageToken', null).set('pageTokens', List()).set('error', null);
184
226
  });
185
227
  },
186
- APPLY_FILTER_FORM: function APPLY_FILTER_FORM(state, _ref10) {
187
- var _ref10$payload = _ref10.payload,
188
- tableKey = _ref10$payload.tableKey,
189
- appliedFilters = _ref10$payload.appliedFilters;
228
+ APPLY_FILTER_FORM: function APPLY_FILTER_FORM(state, _ref11) {
229
+ var _ref11$payload = _ref11.payload,
230
+ tableKey = _ref11$payload.tableKey,
231
+ appliedFilters = _ref11$payload.appliedFilters;
190
232
  return state.updateIn(['tables', tableKey], function (table) {
191
233
  return table.set('loading', true).set('appliedFilters', appliedFilters).set('pageOffset', 0).set('currentPageToken', null).set('nextPageToken', null).set('pageTokens', List()).set('error', null);
192
234
  });
193
235
  },
194
- REFETCH_TABLE_DATA: function REFETCH_TABLE_DATA(state, _ref11) {
195
- var tableKey = _ref11.payload.tableKey;
236
+ REFETCH_TABLE_DATA: function REFETCH_TABLE_DATA(state, _ref12) {
237
+ var tableKey = _ref12.payload.tableKey;
196
238
  return state.hasIn(['tables', tableKey]) ? state.updateIn(['tables', tableKey], function (tableData) {
197
239
  return tableData.get('dataSource') ? tableData.set('loading', true).set('pageOffset', 0).set('currentPageToken', null).set('nextPageToken', null).set('pageTokens', List()).set('data', null).set('error', null) : tableData;
198
240
  }) : state;
199
241
  },
200
- CLEAR_TABLE_FILTERS: function CLEAR_TABLE_FILTERS(state, _ref12) {
201
- var tableKey = _ref12.payload.tableKey;
242
+ CLEAR_TABLE_FILTERS: function CLEAR_TABLE_FILTERS(state, _ref13) {
243
+ var tableKey = _ref13.payload.tableKey;
202
244
  return state.setIn(['tables', tableKey, 'filters'], generateFilters(tableKey, state.getIn(['tables', tableKey, 'columns'])));
203
245
  },
204
- CLEAR_SELECTED_FILTERS: function CLEAR_SELECTED_FILTERS(state, _ref13) {
205
- var tableKey = _ref13.payload.tableKey;
246
+ CLEAR_SELECTED_FILTERS: function CLEAR_SELECTED_FILTERS(state, _ref14) {
247
+ var tableKey = _ref14.payload.tableKey;
206
248
  return state.setIn(['tables', tableKey, 'filters'], state.getIn(['tables', tableKey, 'appliedFilters']));
207
249
  }
208
250
  });
209
251
 
210
- function calculateRowsTask(_ref14) {
211
- var payload, tableKey, tableData, response, rows, data, nextPageToken, error;
252
+ function calculateRowsTask(_ref15) {
253
+ var payload, tableKey, tableData, response, rows, data, nextPageToken, error, onFetch;
212
254
  return _regeneratorRuntime.wrap(function calculateRowsTask$(_context) {
213
255
  while (1) {
214
256
  switch (_context.prev = _context.next) {
215
257
  case 0:
216
- payload = _ref14.payload;
258
+ payload = _ref15.payload;
217
259
  _context.prev = 1;
218
260
  tableKey = payload.tableKey;
219
261
  _context.next = 5;
@@ -238,13 +280,14 @@ function calculateRowsTask(_ref14) {
238
280
  case 10:
239
281
  response = _context.sent;
240
282
  rows = response.rows, data = response.data, nextPageToken = response.nextPageToken, error = response.error;
283
+ onFetch = tableData.get('onFetch');
241
284
 
242
285
  if (!error) {
243
- _context.next = 17;
286
+ _context.next = 18;
244
287
  break;
245
288
  }
246
289
 
247
- _context.next = 15;
290
+ _context.next = 16;
248
291
  return put({
249
292
  type: 'SET_ROWS',
250
293
  payload: {
@@ -256,12 +299,12 @@ function calculateRowsTask(_ref14) {
256
299
  }
257
300
  });
258
301
 
259
- case 15:
260
- _context.next = 19;
302
+ case 16:
303
+ _context.next = 20;
261
304
  break;
262
305
 
263
- case 17:
264
- _context.next = 19;
306
+ case 18:
307
+ _context.next = 20;
265
308
  return put({
266
309
  type: 'SET_ROWS',
267
310
  payload: {
@@ -272,30 +315,43 @@ function calculateRowsTask(_ref14) {
272
315
  }
273
316
  });
274
317
 
275
- case 19:
276
- _context.next = 24;
318
+ case 20:
319
+ if (!(typeof onFetch === 'function')) {
320
+ _context.next = 23;
321
+ break;
322
+ }
323
+
324
+ _context.next = 23;
325
+ return call(onFetch, {
326
+ tableKey: tableKey,
327
+ rows: rows,
328
+ error: error
329
+ });
330
+
331
+ case 23:
332
+ _context.next = 28;
277
333
  break;
278
334
 
279
- case 21:
280
- _context.prev = 21;
335
+ case 25:
336
+ _context.prev = 25;
281
337
  _context.t0 = _context["catch"](1);
282
338
  console.error(_context.t0);
283
339
 
284
- case 24:
340
+ case 28:
285
341
  case "end":
286
342
  return _context.stop();
287
343
  }
288
344
  }
289
- }, _marked, null, [[1, 21]]);
345
+ }, _marked, null, [[1, 25]]);
290
346
  }
291
347
 
292
- function configureTableTask(_ref15) {
348
+ function configureTableTask(_ref16) {
293
349
  var payload, filterForm, tableKey, initialFilterValues;
294
350
  return _regeneratorRuntime.wrap(function configureTableTask$(_context2) {
295
351
  while (1) {
296
352
  switch (_context2.prev = _context2.next) {
297
353
  case 0:
298
- payload = _ref15.payload;
354
+ payload = _ref16.payload;
299
355
  filterForm = payload.filterForm, tableKey = payload.tableKey, initialFilterValues = payload.initialFilterValues;
300
356
 
301
357
  if (filterForm) {
@@ -327,9 +383,114 @@ function configureTableTask(_ref15) {
327
383
  }, _marked2);
328
384
  }
329
385
 
330
- regSaga(takeEvery('CONFIGURE_TABLE', configureTableTask));
386
+ var pollerTableKeys = {};
387
+
388
+ function pollingTask(tableKey) {
389
+ return _regeneratorRuntime.wrap(function pollingTask$(_context3) {
390
+ while (1) {
391
+ switch (_context3.prev = _context3.next) {
392
+ case 0:
393
+ if (!true) {
394
+ _context3.next = 6;
395
+ break;
396
+ }
397
+
398
+ _context3.next = 3;
399
+ return delay(10000);
400
+
401
+ case 3:
402
+ refetchTable(tableKey);
403
+ _context3.next = 0;
404
+ break;
405
+
406
+ case 6:
407
+ case "end":
408
+ return _context3.stop();
409
+ }
410
+ }
411
+ }, _marked3);
412
+ }
413
+
414
+ function startPollingTask(_ref17) {
415
+ var payload, refreshInterval, tableKey;
416
+ return _regeneratorRuntime.wrap(function startPollingTask$(_context4) {
417
+ while (1) {
418
+ switch (_context4.prev = _context4.next) {
419
+ case 0:
420
+ payload = _ref17.payload;
421
+ refreshInterval = payload.refreshInterval, tableKey = payload.tableKey;
422
+
423
+ if (!(refreshInterval && !pollerTableKeys[tableKey])) {
424
+ _context4.next = 6;
425
+ break;
426
+ }
427
+
428
+ _context4.next = 5;
429
+ return fork(pollingTask, tableKey, refreshInterval);
430
+
431
+ case 5:
432
+ pollerTableKeys[tableKey] = _context4.sent;
433
+
434
+ case 6:
435
+ case "end":
436
+ return _context4.stop();
437
+ }
438
+ }
439
+ }, _marked4);
440
+ }
441
+
442
+ function stopPollingTask(_ref18) {
443
+ var payload, tableKey;
444
+ return _regeneratorRuntime.wrap(function stopPollingTask$(_context5) {
445
+ while (1) {
446
+ switch (_context5.prev = _context5.next) {
447
+ case 0:
448
+ payload = _ref18.payload;
449
+ tableKey = payload.tableKey;
450
+
451
+ if (!pollerTableKeys[tableKey]) {
452
+ _context5.next = 6;
453
+ break;
454
+ }
455
+
456
+ _context5.next = 5;
457
+ return cancel(pollerTableKeys[tableKey]);
458
+
459
+ case 5:
460
+ pollerTableKeys[tableKey] = null;
461
+
462
+ case 6:
463
+ case "end":
464
+ return _context5.stop();
465
+ }
466
+ }
467
+ }, _marked5);
468
+ }
469
+
470
+ regSaga('CONFIGURE_TABLE', /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
471
+ return _regeneratorRuntime.wrap(function _callee$(_context6) {
472
+ while (1) {
473
+ switch (_context6.prev = _context6.next) {
474
+ case 0:
475
+ _context6.next = 2;
476
+ return takeEvery('CONFIGURE_TABLE', configureTableTask);
477
+
478
+ case 2:
479
+ _context6.next = 4;
480
+ return takeEvery('CONFIGURE_TABLE', startPollingTask);
481
+
482
+ case 4:
483
+ case "end":
484
+ return _context6.stop();
485
+ }
486
+ }
487
+ }, _callee);
488
+ })); //
489
+
490
+ regSaga(takeEvery('UNMOUNT_TABLE', stopPollingTask));
331
491
  regSaga(takeEvery('NEXT_PAGE', calculateRowsTask));
332
492
  regSaga(takeEvery('PREV_PAGE', calculateRowsTask));
493
+ regSaga(takeEvery('GOTO_PAGE', calculateRowsTask));
333
494
  regSaga(takeEvery('SORT_COLUMN', calculateRowsTask));
334
495
  regSaga(takeEvery('SORT_DIRECTION', calculateRowsTask));
335
496
  regSaga(takeEvery('APPLY_FILTERS', calculateRowsTask));
@@ -459,33 +620,40 @@ var calculateRows = function calculateRows(tableData) {
459
620
  var rows = applyClientSideFilters(tableData, data);
460
621
  return Promise.resolve({
461
622
  rows: rows,
462
- data: data
623
+ data: data,
624
+ count: rows.size
463
625
  });
464
626
  } else if (dataSource) {
465
- var transform = dataSource.transform || function (result) {
466
- return result;
467
- };
468
-
469
- var params = dataSource.params({
627
+ var paramData = {
470
628
  pageSize: tableData.get('pageSize'),
471
629
  filters: tableData.get('appliedFilters'),
472
630
  sortColumn: tableData.getIn(['sortColumn', 'value']),
473
631
  sortDirection: tableData.get('sortDirection'),
474
- nextPageToken: tableData.get('nextPageToken')
475
- });
632
+ nextPageToken: tableData.get('nextPageToken'),
633
+ pageTokens: tableData.get('pageTokens')
634
+ };
635
+
636
+ var transform = dataSource.transform || function (result) {
637
+ return result;
638
+ };
639
+
640
+ var params = dataSource.params(paramData);
476
641
  return dataSource.fn.apply(dataSource, _toConsumableArray(params)).then(function (response) {
477
642
  if (response.error) return response;
478
643
 
479
- var _transform = transform(response),
644
+ var _transform = transform(response, paramData),
480
645
  nextPageToken = _transform.nextPageToken,
481
- responseData = _transform.data;
646
+ responseData = _transform.data,
647
+ count = _transform.count;
482
648
 
483
649
  var data = fromJS(responseData);
484
- var rows = transformData(data, tableData);
650
+ var transformedRows = transformData(data, tableData);
651
+ var rows = dataSource.clientSideSearch || dataSource.clientSide ? applyClientSideFilters(tableData, transformedRows) : transformedRows;
485
652
  return {
486
653
  nextPageToken: nextPageToken,
654
+ count: dataSource.clientSideSearch || dataSource.clientSide ? rows.size : count,
487
655
  data: data,
488
- rows: dataSource.clientSideSearch || dataSource.clientSide ? applyClientSideFilters(tableData, rows) : rows
656
+ rows: rows
489
657
  };
490
658
  });
491
659
  } else {
@@ -1,5 +1,5 @@
1
- import { operations, isValueEmpty } from './Table.redux';
2
- import { List } from 'immutable';
1
+ import { operations, isValueEmpty, clientSideGotoPage, serverSideGotoPage } from './Table.redux';
2
+ import { List, Range, Map } from 'immutable';
3
3
  describe('<Table /> redux', function () {
4
4
  describe('setup', function () {
5
5
  test('true dat', function () {
@@ -86,4 +86,75 @@ describe('<Table /> redux', function () {
86
86
  expect(isValueEmpty(a)).toBeFalsy();
87
87
  });
88
88
  });
89
+ describe('#clientSideGotoPage', function () {
90
+ var tableData;
91
+ beforeEach(function () {
92
+ tableData = Map({
93
+ pageSize: 5,
94
+ pageOffset: 0,
95
+ data: Range(1, 25).toList()
96
+ });
97
+ });
98
+ describe('when pageNumber is invalid', function () {
99
+ test('invalid type does not affect tableData', function () {
100
+ expect(clientSideGotoPage(tableData, 'foo')).toEqualImmutable(tableData);
101
+ });
102
+ test('invalid number does not affect tableData', function () {
103
+ expect(clientSideGotoPage(tableData, -1)).toEqualImmutable(tableData);
104
+ });
105
+ });
106
+ test('pageNumber 1 offset is 0', function () {
107
+ var newTableData = clientSideGotoPage(tableData.set('pageOffset', 10), 1);
108
+ expect(newTableData.get('pageOffset')).toBe(0);
109
+ });
110
+ test('pageNumber 2 offset is 5', function () {
111
+ var newTableData = clientSideGotoPage(tableData, 2);
112
+ expect(newTableData.get('pageOffset')).toBe(5);
113
+ });
114
+ test('pageNumber 6 offset is unchanged (past the end of the data)', function () {
115
+ var newTableData = clientSideGotoPage(tableData, 6);
116
+ expect(newTableData.get('pageOffset')).toBe(0);
117
+ });
118
+ test('pageNumber 5 offset is 20 (last page)', function () {
119
+ var newTableData = clientSideGotoPage(tableData, 5);
120
+ expect(newTableData.get('pageOffset')).toBe(20);
121
+ });
122
+ });
123
+ describe('#serverSideGotoPage', function () {
124
+ var tableData;
125
+ beforeEach(function () {
126
+ tableData = Map({
127
+ loading: false,
128
+ nextPageToken: 'abc',
129
+ pageTokens: List([2, 3, 4])
130
+ });
131
+ });
132
+ describe('when pageNumber is invalid', function () {
133
+ test('invalid type does not affect tableData', function () {
134
+ expect(serverSideGotoPage(tableData, 'foo')).toEqualImmutable(tableData);
135
+ });
136
+ test('invalid number does not affect tableData', function () {
137
+ expect(serverSideGotoPage(tableData, -1)).toEqualImmutable(tableData);
138
+ });
139
+ });
140
+ test('when there are not enough pageTokens it does not affect tableData', function () {
141
+ expect(serverSideGotoPage(tableData, 5)).toEqualImmutable(tableData);
142
+ });
143
+ test('when going to the first page reset the page tokens', function () {
144
+ var newTableData = serverSideGotoPage(tableData, 1);
145
+ expect(newTableData.get('loading')).toBe(true);
146
+ expect(newTableData.get('nextPageToken')).toBeNull();
147
+ expect(newTableData.get('pageTokens').size).toBe(0);
148
+ });
149
+ test('when going to a valid page use its pageToken and adjust the page tokens', function () {
150
+ var secondTableData = serverSideGotoPage(tableData, 2);
151
+ var thirdTableData = serverSideGotoPage(tableData, 3);
152
+ expect(secondTableData.get('loading')).toBe(true);
153
+ expect(secondTableData.get('nextPageToken')).toBe(2);
154
+ expect(secondTableData.get('pageTokens').size).toBe(0);
155
+ expect(thirdTableData.get('loading')).toBe(true);
156
+ expect(thirdTableData.get('nextPageToken')).toBe(3);
157
+ expect(thirdTableData.get('pageTokens').size).toBe(1);
158
+ });
159
+ });
89
160
  });
@@ -73,8 +73,8 @@ export var Connector = /*#__PURE__*/function (_Component) {
73
73
  });
74
74
  } // when dropping a new connector the `headNode` prop will be undefined
75
75
  else if (_this.props.headNode) {
76
- _this.setHead(_this.props.headNode.position, false);
77
- }
76
+ _this.setHead(_this.props.headNode.position, false);
77
+ }
78
78
  };
79
79
 
80
80
  _this.dropTail = function () {
@@ -165,6 +165,9 @@ var fields = function fields(_ref3) {
165
165
  type: type,
166
166
  value: values.get("message_".concat(type))
167
167
  });
168
+ }) // Do not serialize empty messages.
169
+ .filter(function (message) {
170
+ return !!message.value;
168
171
  });
169
172
  }
170
173
  }]);
@@ -0,0 +1,113 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
+ import { List, Map } from 'immutable';
4
+ import { generateForm } from '../../form/Form';
5
+ import { fetchForm, fetchKapps } from '../../../apis';
6
+ export var checkOmittedParameters = function checkOmittedParameters(node, parameter) {
7
+ if (node.definitionId === 'system_submission_create_v1') {
8
+ return !['kappSlug', 'formSlug'].includes(parameter.id);
9
+ } else {
10
+ return true;
11
+ }
12
+ };
13
+ export var generateTaskDefinition = function generateTaskDefinition(taskDefinition) {
14
+ if (taskDefinition.definitionName === 'system_submission_create') {
15
+ return function (_ref) {
16
+ var form = _ref.form;
17
+ return _objectSpread(_objectSpread({}, taskDefinition), {}, {
18
+ parameters: [].concat(_toConsumableArray(taskDefinition.parameters.map(function (parameter) {
19
+ return parameter.id === 'kappSlug' ? _objectSpread(_objectSpread({}, parameter), {}, {
20
+ defaultValue: form.kapp.slug
21
+ }) : parameter.id === 'formSlug' ? _objectSpread(_objectSpread({}, parameter), {}, {
22
+ defaultValue: form.slug
23
+ }) : parameter;
24
+ })), _toConsumableArray(form.fields.map(function (field) {
25
+ return {
26
+ name: field.name,
27
+ defaultValue: '',
28
+ dependsOnId: null,
29
+ dependsOnValue: null,
30
+ description: '',
31
+ id: "values.".concat(field.name),
32
+ required: false
33
+ };
34
+ })))
35
+ });
36
+ };
37
+ } else {
38
+ return null;
39
+ }
40
+ };
41
+
42
+ var dataSources = function dataSources() {
43
+ return {
44
+ kapps: {
45
+ fn: fetchKapps,
46
+ params: [],
47
+ transform: function transform(data) {
48
+ return data.kapps;
49
+ }
50
+ }
51
+ };
52
+ };
53
+
54
+ var fields = function fields() {
55
+ return function () {
56
+ return [{
57
+ name: 'kappSlug',
58
+ label: 'Kapp',
59
+ type: 'select',
60
+ required: true,
61
+ options: function options(_ref2) {
62
+ var kapps = _ref2.kapps;
63
+ return kapps ? kapps.map(function (kapp) {
64
+ return Map({
65
+ value: kapp.get('slug'),
66
+ label: kapp.get('name')
67
+ });
68
+ }) : List();
69
+ },
70
+ onChange: function onChange(_ref3, actions) {
71
+ var values = _ref3.values;
72
+
73
+ if (!!values.get('form')) {
74
+ actions.setValue('form', null);
75
+ }
76
+ }
77
+ }, {
78
+ name: 'form',
79
+ label: 'Form',
80
+ type: 'form',
81
+ required: true,
82
+ enabled: function enabled(_ref4) {
83
+ var values = _ref4.values;
84
+ return values.get('kappSlug') !== '';
85
+ },
86
+ search: function search(_ref5) {
87
+ var values = _ref5.values;
88
+ return values.get('kappSlug') !== '' ? {
89
+ kappSlug: values.get('kappSlug')
90
+ } : {};
91
+ }
92
+ }];
93
+ };
94
+ };
95
+
96
+ var handleSubmit = function handleSubmit(_ref6) {
97
+ var taskDefinition = _ref6.taskDefinition;
98
+ return function (values) {
99
+ return fetchForm({
100
+ kappSlug: values.get('kappSlug'),
101
+ formSlug: values.getIn(['form', 'slug'], ''),
102
+ include: 'fields,kapp'
103
+ }).then(generateTaskDefinition(taskDefinition));
104
+ };
105
+ };
106
+
107
+ export var TaskDefinitionConfigForm = generateForm({
108
+ formOptions: ['taskDefinition'],
109
+ dataSources: dataSources,
110
+ fields: fields,
111
+ handleSubmit: handleSubmit
112
+ });
113
+ TaskDefinitionConfigForm.displayName = 'TaskDefinitionConfigForm';
@@ -218,8 +218,8 @@ export var TreeBuilderComponent = /*#__PURE__*/function (_Component) {
218
218
  } // otherwise check for changes to the highlight prop and focus if it changes
219
219
  // and its a truthy value
220
220
  else if (this.props.highlight && !this.props.highlight.equals(prevProps.highlight)) {
221
- this.panTo(this.props.highlight);
222
- }
221
+ this.panTo(this.props.highlight);
222
+ }
223
223
  }
224
224
  }
225
225
  }, {