@kineticdata/react 5.0.16 → 5.1.0

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 (88) hide show
  1. package/lib/apis/core/attributeDefinitions.js +3 -2
  2. package/lib/apis/core/authentication.js +13 -5
  3. package/lib/apis/core/backgroundJobs.js +22 -39
  4. package/lib/apis/core/fileResources.js +36 -0
  5. package/lib/apis/core/filestores.js +40 -0
  6. package/lib/apis/core/forms.js +21 -36
  7. package/lib/apis/core/forms.test.js +51 -278
  8. package/lib/apis/core/securityPolicyDefinitions.test.js +4 -4
  9. package/lib/apis/core/submissions.js +46 -30
  10. package/lib/apis/core/webhooks.js +1 -2
  11. package/lib/apis/discussions/index.js +2 -1
  12. package/lib/apis/http.js +28 -13
  13. package/lib/apis/http.test.js +13 -15
  14. package/lib/apis/index.js +2 -0
  15. package/lib/apis/system/index.js +86 -1
  16. package/lib/apis/task/index.js +22 -14
  17. package/lib/components/agent/filestore/FilestoreForm.js +132 -0
  18. package/lib/components/agent/filestore/FilestoreTable.js +53 -0
  19. package/lib/components/common/BridgeSelect.js +2 -1
  20. package/lib/components/common/FormSelect.js +2 -1
  21. package/lib/components/common/Scroller.js +6 -6
  22. package/lib/components/common/TableInput.js +74 -29
  23. package/lib/components/common/TeamSelect.js +2 -1
  24. package/lib/components/common/Typeahead.js +7 -4
  25. package/lib/components/common/UserSelect.js +2 -1
  26. package/lib/components/common/authentication/AuthenticationContainer.js +50 -27
  27. package/lib/components/common/code_input/languageHelpers.test.js +1 -1
  28. package/lib/components/core/attribute_definition/AttributeDefinitionForm.js +1 -1
  29. package/lib/components/core/attribute_definition/AttributeDefinitionTable.js +1 -1
  30. package/lib/components/core/core_form/CoreForm.js +10 -10
  31. package/lib/components/core/field_definition/FieldDefinitionForm.js +130 -0
  32. package/lib/components/core/field_definition/FieldDefinitionTable.js +86 -0
  33. package/lib/components/core/file_resource/FileResourceForm.js +180 -0
  34. package/lib/components/core/file_resource/FileResourceTable.js +71 -0
  35. package/lib/components/core/form/FormForm.js +12 -17
  36. package/lib/components/core/form/FormTable.js +3 -8
  37. package/lib/components/core/i18n/I18n.js +15 -15
  38. package/lib/components/core/index_definition/IndexDefinitionForm.js +32 -19
  39. package/lib/components/core/index_definition/IndexDefinitionTable.js +15 -24
  40. package/lib/components/core/index_job/IndexJobTable.js +12 -9
  41. package/lib/components/core/security_definition/SecurityDefinitionForm.js +1 -1
  42. package/lib/components/core/space/SpaceForm.js +59 -10
  43. package/lib/components/core/submission/DatastoreSubmissionTable.js +31 -1
  44. package/lib/components/core/submission/FormSubmissionFilters.js +378 -0
  45. package/lib/components/core/submission/FormSubmissionTable.js +116 -0
  46. package/lib/components/core/submission/KappSubmissionTable.js +250 -0
  47. package/lib/components/core/submission/SubmissionForm.js +124 -0
  48. package/lib/components/core/submission/SubmissionTable.js +35 -249
  49. package/lib/components/core/submission/helpers.js +95 -0
  50. package/lib/components/core/submission/helpers.test.js +96 -0
  51. package/lib/components/core/translation/ContextTable.js +1 -1
  52. package/lib/components/core/user/UserForm.js +2 -2
  53. package/lib/components/core/webapi/WebApiForm.js +111 -126
  54. package/lib/components/core/webhook/WebhookForm.js +1 -1
  55. package/lib/components/form/Form.helpers.js +1 -1
  56. package/lib/components/form/Form.js +200 -144
  57. package/lib/components/index.js +16 -6
  58. package/lib/components/system/SystemBackgroundTasksTable.js +83 -0
  59. package/lib/components/system/SystemSecurityForm.js +69 -0
  60. package/lib/components/system/helpers.js +20 -6
  61. package/lib/components/system/spaces/SystemSpaceForm.js +44 -16
  62. package/lib/components/system/spaces/SystemTenantForm.js +15 -9
  63. package/lib/components/system/spaces/SystemTenantTable.js +21 -16
  64. package/lib/components/table/Table.js +37 -10
  65. package/lib/components/table/Table.redux.js +228 -57
  66. package/lib/components/table/Table.redux.test.js +73 -2
  67. package/lib/components/task/builder/Connector.js +21 -10
  68. package/lib/components/task/builder/ConnectorForm.js +1 -1
  69. package/lib/components/task/builder/Node.js +10 -3
  70. package/lib/components/task/builder/NodeForm.js +54 -22
  71. package/lib/components/task/builder/NodeParametersForm.js +5 -2
  72. package/lib/components/task/builder/SvgCanvas.js +13 -4
  73. package/lib/components/task/builder/TaskDefinitionConfigForm.js +113 -0
  74. package/lib/components/task/builder/TreeBuilder.js +27 -9
  75. package/lib/components/task/builder/builder.redux.js +159 -52
  76. package/lib/components/task/builder/helpers.js +5 -3
  77. package/lib/components/task/builder/models.js +84 -12
  78. package/lib/components/task/errors/RunErrorTable.js +1 -1
  79. package/lib/components/task/runs/CreateManualTriggerForm.js +15 -24
  80. package/lib/components/task/runs/RunTable.js +5 -3
  81. package/lib/components/task/triggers/TriggerTable.js +3 -2
  82. package/lib/components/task/workflows/WorkflowForm.js +67 -85
  83. package/lib/helpers/index.js +19 -2
  84. package/lib/index.js +1 -0
  85. package/lib/models/discussions.js +18 -2
  86. package/lib/models/index.js +1 -1
  87. package/package.json +3 -3
  88. package/proxyhelper.js +19 -6
@@ -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, count, 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;
@@ -224,7 +266,7 @@ function calculateRowsTask(_ref14) {
224
266
  case 5:
225
267
  tableData = _context.sent;
226
268
 
227
- if (!(!tableData || !tableData.get('configured'))) {
269
+ if (tableData) {
228
270
  _context.next = 8;
229
271
  break;
230
272
  }
@@ -237,14 +279,15 @@ function calculateRowsTask(_ref14) {
237
279
 
238
280
  case 10:
239
281
  response = _context.sent;
240
- rows = response.rows, data = response.data, nextPageToken = response.nextPageToken, error = response.error;
282
+ rows = response.rows, data = response.data, nextPageToken = response.nextPageToken, count = response.count, 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: {
@@ -252,50 +295,66 @@ function calculateRowsTask(_ref14) {
252
295
  error: error,
253
296
  rows: List(),
254
297
  data: List(),
255
- nextPageToken: null
298
+ nextPageToken: null,
299
+ count: null
256
300
  }
257
301
  });
258
302
 
259
- case 15:
260
- _context.next = 19;
303
+ case 16:
304
+ _context.next = 20;
261
305
  break;
262
306
 
263
- case 17:
264
- _context.next = 19;
307
+ case 18:
308
+ _context.next = 20;
265
309
  return put({
266
310
  type: 'SET_ROWS',
267
311
  payload: {
268
312
  tableKey: tableKey,
269
313
  rows: rows,
270
314
  data: data,
271
- nextPageToken: nextPageToken
315
+ nextPageToken: nextPageToken,
316
+ count: count
272
317
  }
273
318
  });
274
319
 
275
- case 19:
276
- _context.next = 24;
320
+ case 20:
321
+ if (!(typeof onFetch === 'function')) {
322
+ _context.next = 23;
323
+ break;
324
+ }
325
+
326
+ _context.next = 23;
327
+ return call(onFetch, {
328
+ tableKey: tableKey,
329
+ rows: rows,
330
+ count: count,
331
+ error: error
332
+ });
333
+
334
+ case 23:
335
+ _context.next = 28;
277
336
  break;
278
337
 
279
- case 21:
280
- _context.prev = 21;
338
+ case 25:
339
+ _context.prev = 25;
281
340
  _context.t0 = _context["catch"](1);
282
341
  console.error(_context.t0);
283
342
 
284
- case 24:
343
+ case 28:
285
344
  case "end":
286
345
  return _context.stop();
287
346
  }
288
347
  }
289
- }, _marked, null, [[1, 21]]);
348
+ }, _marked, null, [[1, 25]]);
290
349
  }
291
350
 
292
- function configureTableTask(_ref15) {
351
+ function configureTableTask(_ref16) {
293
352
  var payload, filterForm, tableKey, initialFilterValues;
294
353
  return _regeneratorRuntime.wrap(function configureTableTask$(_context2) {
295
354
  while (1) {
296
355
  switch (_context2.prev = _context2.next) {
297
356
  case 0:
298
- payload = _ref15.payload;
357
+ payload = _ref16.payload;
299
358
  filterForm = payload.filterForm, tableKey = payload.tableKey, initialFilterValues = payload.initialFilterValues;
300
359
 
301
360
  if (filterForm) {
@@ -327,9 +386,114 @@ function configureTableTask(_ref15) {
327
386
  }, _marked2);
328
387
  }
329
388
 
330
- regSaga(takeEvery('CONFIGURE_TABLE', configureTableTask));
389
+ var pollerTableKeys = {};
390
+
391
+ function pollingTask(tableKey) {
392
+ return _regeneratorRuntime.wrap(function pollingTask$(_context3) {
393
+ while (1) {
394
+ switch (_context3.prev = _context3.next) {
395
+ case 0:
396
+ if (!true) {
397
+ _context3.next = 6;
398
+ break;
399
+ }
400
+
401
+ _context3.next = 3;
402
+ return delay(10000);
403
+
404
+ case 3:
405
+ refetchTable(tableKey);
406
+ _context3.next = 0;
407
+ break;
408
+
409
+ case 6:
410
+ case "end":
411
+ return _context3.stop();
412
+ }
413
+ }
414
+ }, _marked3);
415
+ }
416
+
417
+ function startPollingTask(_ref17) {
418
+ var payload, refreshInterval, tableKey;
419
+ return _regeneratorRuntime.wrap(function startPollingTask$(_context4) {
420
+ while (1) {
421
+ switch (_context4.prev = _context4.next) {
422
+ case 0:
423
+ payload = _ref17.payload;
424
+ refreshInterval = payload.refreshInterval, tableKey = payload.tableKey;
425
+
426
+ if (!(refreshInterval && !pollerTableKeys[tableKey])) {
427
+ _context4.next = 6;
428
+ break;
429
+ }
430
+
431
+ _context4.next = 5;
432
+ return fork(pollingTask, tableKey, refreshInterval);
433
+
434
+ case 5:
435
+ pollerTableKeys[tableKey] = _context4.sent;
436
+
437
+ case 6:
438
+ case "end":
439
+ return _context4.stop();
440
+ }
441
+ }
442
+ }, _marked4);
443
+ }
444
+
445
+ function stopPollingTask(_ref18) {
446
+ var payload, tableKey;
447
+ return _regeneratorRuntime.wrap(function stopPollingTask$(_context5) {
448
+ while (1) {
449
+ switch (_context5.prev = _context5.next) {
450
+ case 0:
451
+ payload = _ref18.payload;
452
+ tableKey = payload.tableKey;
453
+
454
+ if (!pollerTableKeys[tableKey]) {
455
+ _context5.next = 6;
456
+ break;
457
+ }
458
+
459
+ _context5.next = 5;
460
+ return cancel(pollerTableKeys[tableKey]);
461
+
462
+ case 5:
463
+ pollerTableKeys[tableKey] = null;
464
+
465
+ case 6:
466
+ case "end":
467
+ return _context5.stop();
468
+ }
469
+ }
470
+ }, _marked5);
471
+ }
472
+
473
+ regSaga('CONFIGURE_TABLE', /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
474
+ return _regeneratorRuntime.wrap(function _callee$(_context6) {
475
+ while (1) {
476
+ switch (_context6.prev = _context6.next) {
477
+ case 0:
478
+ _context6.next = 2;
479
+ return takeEvery('CONFIGURE_TABLE', configureTableTask);
480
+
481
+ case 2:
482
+ _context6.next = 4;
483
+ return takeEvery('CONFIGURE_TABLE', startPollingTask);
484
+
485
+ case 4:
486
+ case "end":
487
+ return _context6.stop();
488
+ }
489
+ }
490
+ }, _callee);
491
+ })); //
492
+
493
+ regSaga(takeEvery('UNMOUNT_TABLE', stopPollingTask));
331
494
  regSaga(takeEvery('NEXT_PAGE', calculateRowsTask));
332
495
  regSaga(takeEvery('PREV_PAGE', calculateRowsTask));
496
+ regSaga(takeEvery('GOTO_PAGE', calculateRowsTask));
333
497
  regSaga(takeEvery('SORT_COLUMN', calculateRowsTask));
334
498
  regSaga(takeEvery('SORT_DIRECTION', calculateRowsTask));
335
499
  regSaga(takeEvery('APPLY_FILTERS', calculateRowsTask));
@@ -459,33 +623,40 @@ var calculateRows = function calculateRows(tableData) {
459
623
  var rows = applyClientSideFilters(tableData, data);
460
624
  return Promise.resolve({
461
625
  rows: rows,
462
- data: data
626
+ data: data,
627
+ count: rows.size
463
628
  });
464
629
  } else if (dataSource) {
465
- var transform = dataSource.transform || function (result) {
466
- return result;
467
- };
468
-
469
- var params = dataSource.params({
630
+ var paramData = {
470
631
  pageSize: tableData.get('pageSize'),
471
632
  filters: tableData.get('appliedFilters'),
472
633
  sortColumn: tableData.getIn(['sortColumn', 'value']),
473
634
  sortDirection: tableData.get('sortDirection'),
474
- nextPageToken: tableData.get('nextPageToken')
475
- });
635
+ nextPageToken: tableData.get('nextPageToken'),
636
+ pageTokens: tableData.get('pageTokens')
637
+ };
638
+
639
+ var transform = dataSource.transform || function (result) {
640
+ return result;
641
+ };
642
+
643
+ var params = dataSource.params(paramData);
476
644
  return dataSource.fn.apply(dataSource, _toConsumableArray(params)).then(function (response) {
477
645
  if (response.error) return response;
478
646
 
479
- var _transform = transform(response),
647
+ var _transform = transform(response, paramData),
480
648
  nextPageToken = _transform.nextPageToken,
481
- responseData = _transform.data;
649
+ responseData = _transform.data,
650
+ count = _transform.count;
482
651
 
483
652
  var data = fromJS(responseData);
484
- var rows = transformData(data, tableData);
653
+ var transformedRows = transformData(data, tableData);
654
+ var rows = dataSource.clientSideSearch || dataSource.clientSide ? applyClientSideFilters(tableData, transformedRows) : transformedRows;
485
655
  return {
486
656
  nextPageToken: nextPageToken,
657
+ count: dataSource.clientSideSearch || dataSource.clientSide ? rows.size : count,
487
658
  data: data,
488
- rows: dataSource.clientSideSearch || dataSource.clientSide ? applyClientSideFilters(tableData, rows) : rows
659
+ rows: rows
489
660
  };
490
661
  });
491
662
  } 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 () {
@@ -126,21 +126,32 @@ export var Connector = /*#__PURE__*/function (_Component) {
126
126
  var dy = y2 - y1;
127
127
  var length = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
128
128
  var angle = Math.atan2(dy, dx) * 180 / Math.PI + 180;
129
- var attribute = isIE11 ? 'transform' : 'style';
130
- var connectorValue = isIE11 ? "translate(".concat(x2, " ").concat(y2, ") rotate(").concat(angle, ")") : "transform: translate(".concat(x2, "px, ").concat(y2, "px) rotate(").concat(angle, "deg)");
131
- var connectorLabelValue = isIE11 ? "translate(".concat(x1 + dx / 2, " ").concat(y1 + dy / 2, ")") : "transform: translate(".concat(x1 + dx / 2, "px, ").concat(y1 + dy / 2, "px)");
129
+ var connectorValue = isIE11 ? "translate(".concat(x2, " ").concat(y2, ") rotate(").concat(angle, ")") : "translate(".concat(x2, "px, ").concat(y2, "px) rotate(").concat(angle, "deg)");
130
+ var connectorLabelValue = isIE11 ? "translate(".concat(x1 + dx / 2, " ").concat(y1 + dy / 2, ")") : "translate(".concat(x1 + dx / 2, "px, ").concat(y1 + dy / 2, "px)");
131
+
132
+ if (isIE11) {
133
+ _this.connector.current.transform = connectorValue;
134
+
135
+ if (_this.connectorLabel.current) {
136
+ _this.connectorLabel.current.transform = connectorLabelValue;
137
+ }
138
+ } else {
139
+ _this.connector.current.style.transform = connectorValue;
140
+
141
+ if (_this.connectorLabel.current) {
142
+ _this.connectorLabel.current.style.transform = connectorLabelValue;
143
+ }
144
+ } // this.connector.current.setAttribute(attribute, connectorValue);
132
145
 
133
- _this.connector.current.setAttribute(attribute, connectorValue);
134
146
 
135
147
  if (_this.connectorTail.current) {
136
148
  _this.connectorTail.current.setAttribute('cx', length);
137
149
  }
138
150
 
139
- _this.connectorBody.current.setAttribute('x2', length);
151
+ _this.connectorBody.current.setAttribute('x2', length); // if (this.connectorLabel.current) {
152
+ // this.connectorLabel.current.setAttribute(attribute, connectorLabelValue);
153
+ // }
140
154
 
141
- if (_this.connectorLabel.current) {
142
- _this.connectorLabel.current.setAttribute(attribute, connectorLabelValue);
143
- }
144
155
  };
145
156
 
146
157
  _this.connector = createRef();
@@ -72,7 +72,7 @@ var fields = function fields(_ref2) {
72
72
  var handleSubmit = function handleSubmit(_ref4) {
73
73
  var connector = _ref4.connector;
74
74
  return function (values) {
75
- return values.toObject();
75
+ return connector.merge(values);
76
76
  };
77
77
  };
78
78
 
@@ -130,9 +130,16 @@ export var Node = /*#__PURE__*/function (_Component) {
130
130
  }, {
131
131
  key: "draw",
132
132
  value: function draw() {
133
- var attribute = isIE11 ? 'transform' : 'style';
134
- var value = isIE11 ? "translate(".concat(this.position.x, " ").concat(this.position.y, ")") : "transform: translate(".concat(this.position.x, "px, ").concat(this.position.y, "px)");
135
- this.el.current.setAttribute(attribute, value);
133
+ // const attribute = isIE11 ? 'transform' : 'style';
134
+ // const value = isIE11
135
+ // ? `translate(${this.position.x} ${this.position.y})`
136
+ // : `transform: translate(${this.position.x}px, ${this.position.y}px)`;
137
+ // this.el.current.setAttribute(attribute, value);
138
+ if (isIE11) {
139
+ this.el.current.transform = "translate(".concat(this.position.x, " ").concat(this.position.y, ")");
140
+ } else {
141
+ this.el.current.style.transform = "translate(".concat(this.position.x, "px, ").concat(this.position.y, "px)");
142
+ }
136
143
  }
137
144
  }, {
138
145
  key: "render",