@kineticdata/react 6.0.4 → 6.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 (100) hide show
  1. package/CHANGELOG.md +116 -86
  2. package/lib/apis/core/attributeDefinitions.js +9 -6
  3. package/lib/apis/core/integrations.js +61 -0
  4. package/lib/apis/core/submissions.js +52 -15
  5. package/lib/apis/http.js +16 -2
  6. package/lib/apis/index.js +24 -0
  7. package/lib/apis/integrator/index.js +262 -0
  8. package/lib/apis/system/index.js +64 -12
  9. package/lib/apis/task/index.js +9 -2
  10. package/lib/components/agent/filestore/FilestoreForm.js +1 -1
  11. package/lib/components/common/AttributeSelect.js +10 -2
  12. package/lib/components/common/BridgeSelect.js +2 -1
  13. package/lib/components/common/ConnectionSelect.js +72 -0
  14. package/lib/components/common/FormSelect.js +2 -1
  15. package/lib/components/common/StaticSelect.js +15 -6
  16. package/lib/components/common/TableInput.js +4 -1
  17. package/lib/components/common/TeamSelect.js +2 -1
  18. package/lib/components/common/ToastContainer.js +34 -10
  19. package/lib/components/common/Typeahead.js +59 -23
  20. package/lib/components/common/UserSelect.js +2 -1
  21. package/lib/components/common/authentication/RequestInterceptor.js +1 -1
  22. package/lib/components/core/attribute_definition/AttributeDefinitionForm.js +3 -0
  23. package/lib/components/core/bridge_model/BridgeModelTable.js +19 -0
  24. package/lib/components/core/bridge_model_attribute/BridgeModelAttributeForm.js +6 -9
  25. package/lib/components/core/bridge_model_attribute/BridgeModelAttributeTable.js +0 -4
  26. package/lib/components/core/bridge_model_qualification/BridgeModelQualificationForm.js +7 -10
  27. package/lib/components/core/bridge_model_qualification/BridgeModelQualificationTable.js +2 -15
  28. package/lib/components/core/category/CategoryForm.js +4 -1
  29. package/lib/components/core/category/CategoryTable.js +2 -2
  30. package/lib/components/core/core_form/CoreForm.js +18 -10
  31. package/lib/components/core/file_resource/FileResourceForm.js +2 -1
  32. package/lib/components/core/file_resource/FileResourceTable.js +14 -7
  33. package/lib/components/core/form/FormForm.js +42 -19
  34. package/lib/components/core/form/FormTable.js +14 -14
  35. package/lib/components/core/form_type/FormTypeForm.js +3 -0
  36. package/lib/components/core/i18n/Moment.js +1 -0
  37. package/lib/components/core/integration/IntegrationForm.js +232 -0
  38. package/lib/components/core/integration/IntegrationTable.js +139 -0
  39. package/lib/components/core/kapp/KappForm.js +56 -67
  40. package/lib/components/core/kapp/KappTable.js +3 -3
  41. package/lib/components/core/log/LogTable.js +1 -1
  42. package/lib/components/core/security_definition/SecurityDefinitionForm.js +48 -10
  43. package/lib/components/core/space/SpaceForm.js +97 -111
  44. package/lib/components/core/submission/DatastoreSubmissionTable.js +4 -4
  45. package/lib/components/core/submission/FormSubmissionTable.js +12 -7
  46. package/lib/components/core/submission/KappSubmissionTable.js +4 -4
  47. package/lib/components/core/submission/SubmissionForm.js +3 -1
  48. package/lib/components/core/team/TeamTable.js +17 -7
  49. package/lib/components/core/user/UserTable.js +18 -18
  50. package/lib/components/core/webapi/WebApiForm.js +5 -2
  51. package/lib/components/core/webapi/WebApiTable.js +2 -2
  52. package/lib/components/core/webhook/WebhookForm.js +43 -33
  53. package/lib/components/core/webhook/WebhookTable.js +16 -16
  54. package/lib/components/core/webhook_job/WebhookJobTable.js +17 -6
  55. package/lib/components/form/Form.helpers.js +10 -4
  56. package/lib/components/form/Form.js +250 -168
  57. package/lib/components/form/Form.models.js +6 -1
  58. package/lib/components/form/FormState.js +9 -5
  59. package/lib/components/form/defaults/CodeField.js +44 -1
  60. package/lib/components/index.js +84 -3
  61. package/lib/components/integrator/connection/ConnectionForm.js +112 -0
  62. package/lib/components/integrator/connection/ConnectionTable.js +80 -0
  63. package/lib/components/integrator/connection/config_fields/http.js +570 -0
  64. package/lib/components/integrator/integrationTypes.js +98 -0
  65. package/lib/components/integrator/operation/OperationForm.js +128 -0
  66. package/lib/components/integrator/operation/OperationTable.js +64 -0
  67. package/lib/components/integrator/operation/config_fields/http.js +184 -0
  68. package/lib/components/system/SystemSecurityForm.js +1 -1
  69. package/lib/components/system/SystemTaskAdapterForm.js +9 -9
  70. package/lib/components/system/helpers.js +123 -100
  71. package/lib/components/system/spaces/SystemSpaceForm.js +9 -37
  72. package/lib/components/system/spaces/SystemTenantForm.js +276 -104
  73. package/lib/components/system/spaces/SystemTenantMigrateForm.js +449 -0
  74. package/lib/components/system/spaces/SystemTenantTable.js +20 -16
  75. package/lib/components/table/Table.redux.js +1 -1
  76. package/lib/components/task/builder/ConnectorForm.js +11 -7
  77. package/lib/components/task/builder/Node.js +11 -2
  78. package/lib/components/task/builder/NodeForm.js +93 -22
  79. package/lib/components/task/builder/NodeParametersForm.js +29 -17
  80. package/lib/components/task/builder/TaskDefinitionConfigForm.js +18 -50
  81. package/lib/components/task/builder/TreeBuilder.js +32 -5
  82. package/lib/components/task/builder/builder.redux.js +399 -205
  83. package/lib/components/task/builder/constants.js +10 -2
  84. package/lib/components/task/builder/helpers.js +199 -79
  85. package/lib/components/task/builder/models.js +11 -9
  86. package/lib/components/task/category/TaskCategoryTable.js +3 -3
  87. package/lib/components/task/common/UsageTable.js +1 -1
  88. package/lib/components/task/handlers/HandlerTable.js +35 -19
  89. package/lib/components/task/policy_rule/PolicyRuleTable.js +3 -3
  90. package/lib/components/task/runs/CreateManualTriggerForm.js +2 -0
  91. package/lib/components/task/runs/RunTable.js +4 -4
  92. package/lib/components/task/runs/RunTaskTable.js +1 -1
  93. package/lib/components/task/sources/SourceTable.js +2 -2
  94. package/lib/components/task/triggers/TriggerTable.js +2 -2
  95. package/lib/components/task/workflows/LinkedWorkflowTable.js +2 -2
  96. package/lib/components/task/workflows/WorkflowForm.js +29 -9
  97. package/lib/components/task/workflows/WorkflowTable.js +2 -2
  98. package/lib/helpers/index.js +289 -72
  99. package/package.json +5 -3
  100. package/proxyhelper.js +28 -3
@@ -6,7 +6,7 @@ var _regeneratorRuntime3 = require("@babel/runtime/helpers/regeneratorRuntime")[
6
6
  Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
- exports.validateField = exports.unmountForm = exports.toggleMultiValue = exports.submitForm = exports.setValue = exports.serializeForm = exports.resetForm = exports.reloadDataSource = exports.onSubmit = exports.onReset = exports.onFocus = exports.onChange = exports.onBlur = exports.mountForm = exports.mapStateToProps = exports.isEmpty = exports.getTimestamp = exports.generateForm = exports.evaluateFieldProps = exports.configureForm = exports.clearError = exports.checkRequired = exports.checkPattern = exports.checkConstraint = exports.Form = void 0;
9
+ exports.validateForm = exports.validateField = exports.unmountForm = exports.toggleMultiValue = exports.submitForm = exports.setValue = exports.serializeForm = exports.resetForm = exports.reloadDataSources = exports.reloadDataSource = exports.onSubmit = exports.onReset = exports.onFocus = exports.onChange = exports.onBlur = exports.mountForm = exports.mapStateToProps = exports.isEmpty = exports.getTimestamp = exports.generateForm = exports.evaluateFieldProps = exports.configureForm = exports.clearError = exports.checkRequired = exports.checkPattern = exports.checkConstraint = exports.Form = void 0;
10
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectWithoutProperties"));
11
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck"));
12
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass"));
@@ -100,7 +100,7 @@ var initializeFields = function initializeFields(formState) {
100
100
  };
101
101
  var buildBindings = function buildBindings(formState) {
102
102
  return formState.set('bindings', formState.dataSources.filter(function (dataSource) {
103
- return dataSource.status === _Form.DATA_SOURCE_STATUS.RESOLVED;
103
+ return [_Form.DATA_SOURCE_STATUS.RESOLVED, _Form.DATA_SOURCE_STATUS.PENDING_RELOAD].includes(dataSource.status);
104
104
  }).map(function (dataSource) {
105
105
  return dataSource.data;
106
106
  }).merge(formState.fields ? {
@@ -146,7 +146,7 @@ var digest = function digest(formState) {
146
146
  value = _ref4$payload.value;
147
147
  return state.updateIn(['forms', formKey, 'fields', name], function (field) {
148
148
  return field.merge({
149
- value: value || _Form.FIELD_DEFAULT_VALUES.get(field.type, ''),
149
+ value: field.type === 'number' ? typeof value === 'number' ? value : '' : value || _Form.FIELD_DEFAULT_VALUES.get(field.type, ''),
150
150
  touched: true,
151
151
  dirty: !(0, _immutable.is)(value, field.initialValue)
152
152
  });
@@ -186,18 +186,20 @@ var digest = function digest(formState) {
186
186
  var _ref8$payload = _ref8.payload,
187
187
  formKey = _ref8$payload.formKey,
188
188
  name = _ref8$payload.name;
189
- return state.mergeIn(['forms', formKey, 'dataSources', name], {
190
- status: _Form.DATA_SOURCE_STATUS.PENDING
189
+ return state.updateIn(['forms', formKey, 'dataSources', name, 'status'], function (status) {
190
+ return status === _Form.DATA_SOURCE_STATUS.RESOLVED ? _Form.DATA_SOURCE_STATUS.PENDING_RELOAD : _Form.DATA_SOURCE_STATUS.PENDING;
191
191
  });
192
192
  },
193
193
  RESOLVE_DATA_SOURCE: function RESOLVE_DATA_SOURCE(state, _ref9) {
194
194
  var _ref9$payload = _ref9.payload,
195
195
  formKey = _ref9$payload.formKey,
196
196
  name = _ref9$payload.name,
197
- data = _ref9$payload.data;
197
+ data = _ref9$payload.data,
198
+ error = _ref9$payload.error;
198
199
  return state.updateIn(['forms', formKey, 'dataSources', name], function (dataSource) {
199
200
  return dataSource && dataSource.merge({
200
201
  data: (0, _immutable.fromJS)(data),
202
+ error: error,
201
203
  status: _Form.DATA_SOURCE_STATUS.RESOLVED
202
204
  });
203
205
  }).updateIn(['forms', formKey], digest);
@@ -239,6 +241,16 @@ var digest = function digest(formState) {
239
241
  return fieldNames.includes(field.name) ? field.set('touched', true) : field;
240
242
  });
241
243
  });
244
+ },
245
+ VALIDATION_FIELD_ERRORS: function VALIDATION_FIELD_ERRORS(state, _ref16) {
246
+ var _ref16$payload = _ref16.payload,
247
+ formKey = _ref16$payload.formKey,
248
+ fieldNames = _ref16$payload.fieldNames;
249
+ return state.updateIn(['forms', formKey, 'fields'], function (fields) {
250
+ return fields.map(function (field) {
251
+ return fieldNames.includes(field.name) ? field.set('touched', true) : field;
252
+ });
253
+ });
242
254
  }
243
255
  });
244
256
  var selectForm = function selectForm(formKey) {
@@ -258,8 +270,8 @@ var selectDataSource = function selectDataSource(formKey, name) {
258
270
  case 0:
259
271
  checkActions = ['CONFIGURE_FORM', 'RESOLVE_DATA_SOURCE'];
260
272
  _context2.next = 3;
261
- return (0, _effects.takeEvery)(checkActions, function (_ref16) {
262
- var formKey = _ref16.payload.formKey;
273
+ return (0, _effects.takeEvery)(checkActions, function (_ref17) {
274
+ var formKey = _ref17.payload.formKey;
263
275
  return /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee() {
264
276
  var formState;
265
277
  return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) {
@@ -317,6 +329,32 @@ var selectDataSource = function selectDataSource(formKey, name) {
317
329
  }
318
330
  }, _callee3);
319
331
  })));
332
+ (0, _store.regSaga)((0, _effects.takeEvery)('RELOAD_DATA_SOURCES', /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee4(action) {
333
+ var _action$payload, formKey, dataSourceNames, formState;
334
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee4$(_context4) {
335
+ while (1) switch (_context4.prev = _context4.next) {
336
+ case 0:
337
+ _action$payload = action.payload, formKey = _action$payload.formKey, dataSourceNames = _action$payload.dataSourceNames;
338
+ _context4.next = 3;
339
+ return (0, _effects.select)(selectForm(formKey));
340
+ case 3:
341
+ formState = _context4.sent;
342
+ if (!(formState !== null && formState !== void 0 && formState.dataSources)) {
343
+ _context4.next = 7;
344
+ break;
345
+ }
346
+ _context4.next = 7;
347
+ return (0, _effects.all)(formState.dataSources.filter(function (ds, name) {
348
+ return !(dataSourceNames !== null && dataSourceNames !== void 0 && dataSourceNames.length) || dataSourceNames.includes(name);
349
+ }).map(function (ds, name) {
350
+ return (0, _effects.fork)(runDataSource, formKey, name, ds);
351
+ }).valueSeq().toArray());
352
+ case 7:
353
+ case "end":
354
+ return _context4.stop();
355
+ }
356
+ }, _callee4);
357
+ })));
320
358
 
321
359
  // Create a process that represents a datasource, it listens for form events
322
360
  // and checks to see if its parameters have changed, if it detects parameter
@@ -324,16 +362,16 @@ var selectDataSource = function selectDataSource(formKey, name) {
324
362
  // listens for a UNMOUNT_FORM action to end the while-loop.
325
363
  function runDataSource(formKey, name, dataSource) {
326
364
  var params, paramsFn, prevParams, _yield$race, _yield$race2, checkAction, unmountAction, formState, _params, nextParams;
327
- return (0, _regeneratorRuntime2["default"])().wrap(function runDataSource$(_context4) {
328
- while (1) switch (_context4.prev = _context4.next) {
365
+ return (0, _regeneratorRuntime2["default"])().wrap(function runDataSource$(_context5) {
366
+ while (1) switch (_context5.prev = _context5.next) {
329
367
  case 0:
330
368
  params = dataSource.params, paramsFn = dataSource.paramsFn;
331
369
  prevParams = (0, _immutable.fromJS)(params);
332
370
  if (!params) {
333
- _context4.next = 5;
371
+ _context5.next = 5;
334
372
  break;
335
373
  }
336
- _context4.next = 5;
374
+ _context5.next = 5;
337
375
  return (0, _effects.put)((0, _store.action)('CALL_DATA_SOURCE', {
338
376
  formKey: formKey,
339
377
  name: name,
@@ -341,43 +379,43 @@ function runDataSource(formKey, name, dataSource) {
341
379
  }));
342
380
  case 5:
343
381
  if (!paramsFn) {
344
- _context4.next = 29;
382
+ _context5.next = 29;
345
383
  break;
346
384
  }
347
385
  case 6:
348
386
  if (!true) {
349
- _context4.next = 29;
387
+ _context5.next = 29;
350
388
  break;
351
389
  }
352
- _context4.next = 9;
353
- return (0, _effects.race)([(0, _effects.take)(['CONFIGURE_FORM', 'REJECT_DATA_SOURCE', 'RESET', 'RESOLVE_DATA_SOURCE', 'SET_VALUE', 'TOGGLE_MULTI_VALUE', 'SUBMIT_SUCCESS']), (0, _effects.take)('UNMOUNT_FORM')]);
390
+ _context5.next = 9;
391
+ return (0, _effects.race)([(0, _effects.take)(['CONFIGURE_FORM', 'RELOAD_DATA_SOURCES', 'REJECT_DATA_SOURCE', 'RESET', 'RESOLVE_DATA_SOURCE', 'SET_VALUE', 'TOGGLE_MULTI_VALUE', 'SUBMIT_SUCCESS']), (0, _effects.take)('UNMOUNT_FORM')]);
354
392
  case 9:
355
- _yield$race = _context4.sent;
393
+ _yield$race = _context5.sent;
356
394
  _yield$race2 = (0, _slicedToArray2["default"])(_yield$race, 2);
357
395
  checkAction = _yield$race2[0];
358
396
  unmountAction = _yield$race2[1];
359
397
  if (!(unmountAction && unmountAction.payload.formKey === formKey)) {
360
- _context4.next = 17;
398
+ _context5.next = 17;
361
399
  break;
362
400
  }
363
- return _context4.abrupt("break", 29);
401
+ return _context5.abrupt("break", 29);
364
402
  case 17:
365
403
  if (!(checkAction && checkAction.payload.formKey === formKey)) {
366
- _context4.next = 27;
404
+ _context5.next = 27;
367
405
  break;
368
406
  }
369
- _context4.next = 20;
407
+ _context5.next = 20;
370
408
  return (0, _effects.select)(selectForm(formKey));
371
409
  case 20:
372
- formState = _context4.sent;
410
+ formState = _context5.sent;
373
411
  _params = formState.getIn(['dataSources', name, 'params']);
374
412
  nextParams = (0, _immutable.fromJS)(_params);
375
413
  if ((0, _immutable.is)(nextParams, prevParams)) {
376
- _context4.next = 27;
414
+ _context5.next = 27;
377
415
  break;
378
416
  }
379
417
  prevParams = nextParams;
380
- _context4.next = 27;
418
+ _context5.next = 27;
381
419
  return (0, _effects.put)(_params ? (0, _store.action)('CALL_DATA_SOURCE', {
382
420
  formKey: formKey,
383
421
  name: name,
@@ -389,143 +427,146 @@ function runDataSource(formKey, name, dataSource) {
389
427
  timestamp: null
390
428
  }));
391
429
  case 27:
392
- _context4.next = 6;
430
+ _context5.next = 6;
393
431
  break;
394
432
  case 29:
395
433
  case "end":
396
- return _context4.stop();
434
+ return _context5.stop();
397
435
  }
398
436
  }, _marked);
399
437
  }
400
- (0, _store.regSaga)((0, _effects.takeEvery)('CALL_DATA_SOURCE', function (_ref17) {
401
- var _ref17$payload = _ref17.payload,
402
- formKey = _ref17$payload.formKey,
403
- name = _ref17$payload.name,
404
- params = _ref17$payload.params;
405
- return /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee4() {
406
- var _yield$select2, fn, transform, data, timestamp;
407
- return (0, _regeneratorRuntime2["default"])().wrap(function _callee4$(_context5) {
408
- while (1) switch (_context5.prev = _context5.next) {
438
+ (0, _store.regSaga)((0, _effects.takeEvery)('CALL_DATA_SOURCE', function (_ref18) {
439
+ var _ref18$payload = _ref18.payload,
440
+ formKey = _ref18$payload.formKey,
441
+ name = _ref18$payload.name,
442
+ params = _ref18$payload.params;
443
+ return /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee5() {
444
+ var _yield$select2, fn, transform, errorTransform, data, timestamp;
445
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee5$(_context6) {
446
+ while (1) switch (_context6.prev = _context6.next) {
409
447
  case 0:
410
- _context5.prev = 0;
411
- _context5.next = 3;
448
+ _context6.prev = 0;
449
+ _context6.next = 3;
412
450
  return (0, _effects.select)(selectDataSource(formKey, name));
413
451
  case 3:
414
- _yield$select2 = _context5.sent;
452
+ _yield$select2 = _context6.sent;
415
453
  fn = _yield$select2.fn;
416
454
  transform = _yield$select2.transform;
417
- _context5.next = 8;
455
+ errorTransform = _yield$select2.errorTransform;
456
+ _context6.next = 9;
418
457
  return _effects.call.apply(void 0, [fn].concat((0, _toConsumableArray2["default"])(params)));
419
- case 8:
420
- data = _context5.sent;
421
- _context5.next = 11;
458
+ case 9:
459
+ data = _context6.sent;
460
+ _context6.next = 12;
422
461
  return (0, _effects.call)(getTimestamp);
423
- case 11:
424
- timestamp = _context5.sent;
425
- _context5.next = 14;
462
+ case 12:
463
+ timestamp = _context6.sent;
464
+ _context6.next = 15;
426
465
  return (0, _effects.put)((0, _store.action)('RESOLVE_DATA_SOURCE', {
427
466
  formKey: formKey,
428
467
  name: name,
429
468
  data: transform ? transform(data) : data,
469
+ error: errorTransform ? errorTransform(data) : null,
430
470
  timestamp: timestamp
431
471
  }));
432
- case 14:
433
- _context5.next = 19;
472
+ case 15:
473
+ _context6.next = 20;
434
474
  break;
435
- case 16:
436
- _context5.prev = 16;
437
- _context5.t0 = _context5["catch"](0);
438
- console.error(_context5.t0);
439
- case 19:
475
+ case 17:
476
+ _context6.prev = 17;
477
+ _context6.t0 = _context6["catch"](0);
478
+ console.error(_context6.t0);
479
+ case 20:
440
480
  case "end":
441
- return _context5.stop();
481
+ return _context6.stop();
442
482
  }
443
- }, _callee4, null, [[0, 16]]);
483
+ }, _callee5, null, [[0, 17]]);
444
484
  })();
445
485
  }));
446
- (0, _store.regSaga)('HANDLE_SET_VALUE', /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee6() {
447
- return (0, _regeneratorRuntime2["default"])().wrap(function _callee6$(_context7) {
448
- while (1) switch (_context7.prev = _context7.next) {
486
+ (0, _store.regSaga)('HANDLE_SET_VALUE', /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee7() {
487
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee7$(_context8) {
488
+ while (1) switch (_context8.prev = _context8.next) {
449
489
  case 0:
450
- _context7.next = 2;
451
- return (0, _effects.takeEvery)(['SET_VALUE', 'TOGGLE_MULTI_VALUE'], function (_ref18) {
452
- var _ref18$payload = _ref18.payload,
453
- formKey = _ref18$payload.formKey,
454
- name = _ref18$payload.name,
455
- triggerChange = _ref18$payload.triggerChange;
456
- return /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee5() {
490
+ _context8.next = 2;
491
+ return (0, _effects.takeEvery)(['SET_VALUE', 'TOGGLE_MULTI_VALUE'], function (_ref19) {
492
+ var _ref19$payload = _ref19.payload,
493
+ formKey = _ref19$payload.formKey,
494
+ name = _ref19$payload.name,
495
+ triggerChange = _ref19$payload.triggerChange;
496
+ return /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee6() {
457
497
  var _yield$select3, bindings, fields, _fields$get, _onChange;
458
- return (0, _regeneratorRuntime2["default"])().wrap(function _callee5$(_context6) {
459
- while (1) switch (_context6.prev = _context6.next) {
498
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee6$(_context7) {
499
+ while (1) switch (_context7.prev = _context7.next) {
460
500
  case 0:
461
- _context6.prev = 0;
501
+ _context7.prev = 0;
462
502
  if (!triggerChange) {
463
- _context6.next = 11;
503
+ _context7.next = 11;
464
504
  break;
465
505
  }
466
- _context6.next = 4;
506
+ _context7.next = 4;
467
507
  return (0, _effects.select)(selectForm(formKey));
468
508
  case 4:
469
- _yield$select3 = _context6.sent;
509
+ _yield$select3 = _context7.sent;
470
510
  bindings = _yield$select3.bindings;
471
511
  fields = _yield$select3.fields;
472
512
  _fields$get = fields.get(name), _onChange = _fields$get.onChange;
473
513
  if (!_onChange) {
474
- _context6.next = 11;
514
+ _context7.next = 11;
475
515
  break;
476
516
  }
477
- _context6.next = 11;
517
+ _context7.next = 11;
478
518
  return (0, _effects.call)(_onChange, bindings, bindActions(formKey));
479
519
  case 11:
480
- _context6.next = 16;
520
+ _context7.next = 16;
481
521
  break;
482
522
  case 13:
483
- _context6.prev = 13;
484
- _context6.t0 = _context6["catch"](0);
485
- console.error(_context6.t0);
523
+ _context7.prev = 13;
524
+ _context7.t0 = _context7["catch"](0);
525
+ console.error(_context7.t0);
486
526
  case 16:
487
527
  case "end":
488
- return _context6.stop();
528
+ return _context7.stop();
489
529
  }
490
- }, _callee5, null, [[0, 13]]);
530
+ }, _callee6, null, [[0, 13]]);
491
531
  })();
492
532
  });
493
533
  case 2:
494
534
  case "end":
495
- return _context7.stop();
535
+ return _context8.stop();
496
536
  }
497
- }, _callee6);
537
+ }, _callee7);
498
538
  }));
499
- (0, _store.regSaga)((0, _effects.takeEvery)('REJECT_DATA_SOURCE', function (_ref19) {
500
- var payload = _ref19.payload;
501
- return /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee7() {
502
- return (0, _regeneratorRuntime2["default"])().wrap(function _callee7$(_context8) {
503
- while (1) switch (_context8.prev = _context8.next) {
539
+ (0, _store.regSaga)((0, _effects.takeEvery)('REJECT_DATA_SOURCE', function (_ref20) {
540
+ var payload = _ref20.payload;
541
+ return /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee8() {
542
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee8$(_context9) {
543
+ while (1) switch (_context9.prev = _context9.next) {
504
544
  case 0:
505
- _context8.next = 2;
545
+ _context9.next = 2;
506
546
  return (0, _effects.call)(console.error, 'REJECT_DATA_SOURCE', payload);
507
547
  case 2:
508
548
  case "end":
509
- return _context8.stop();
549
+ return _context9.stop();
510
550
  }
511
- }, _callee7);
551
+ }, _callee8);
512
552
  })();
513
553
  }));
514
- (0, _store.regSaga)((0, _effects.takeEvery)('SUBMIT', function (_ref20) {
515
- var _ref20$payload = _ref20.payload,
516
- formKey = _ref20$payload.formKey,
517
- fieldSet = _ref20$payload.fieldSet,
518
- onInvalid = _ref20$payload.onInvalid;
519
- return /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee8() {
554
+ (0, _store.regSaga)((0, _effects.takeEvery)('SUBMIT', function (_ref21) {
555
+ var _ref21$payload = _ref21.payload,
556
+ formKey = _ref21$payload.formKey,
557
+ fieldSet = _ref21$payload.fieldSet,
558
+ onInvalid = _ref21$payload.onInvalid,
559
+ onSaveOverride = _ref21$payload.onSave;
560
+ return /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee9() {
520
561
  var _yield$select4, bindings, fields, _onSubmit, onSave, onError, computedFieldSet, values, errors, result;
521
- return (0, _regeneratorRuntime2["default"])().wrap(function _callee8$(_context9) {
522
- while (1) switch (_context9.prev = _context9.next) {
562
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee9$(_context10) {
563
+ while (1) switch (_context10.prev = _context10.next) {
523
564
  case 0:
524
- _context9.prev = 0;
525
- _context9.next = 3;
565
+ _context10.prev = 0;
566
+ _context10.next = 3;
526
567
  return (0, _effects.select)(selectForm(formKey));
527
568
  case 3:
528
- _yield$select4 = _context9.sent;
569
+ _yield$select4 = _context10.sent;
529
570
  bindings = _yield$select4.bindings;
530
571
  fields = _yield$select4.fields;
531
572
  _onSubmit = _yield$select4.onSubmit;
@@ -544,44 +585,44 @@ function runDataSource(formKey, name, dataSource) {
544
585
  return !errors.isEmpty();
545
586
  });
546
587
  if (!errors.isEmpty()) {
547
- _context9.next = 32;
588
+ _context10.next = 32;
548
589
  break;
549
590
  }
550
- _context9.prev = 13;
551
- _context9.next = 16;
591
+ _context10.prev = 13;
592
+ _context10.next = 16;
552
593
  return (0, _effects.call)(_onSubmit, values, bindings);
553
594
  case 16:
554
- result = _context9.sent;
595
+ result = _context10.sent;
555
596
  (0, _store.dispatch)('SUBMIT_SUCCESS', {
556
597
  formKey: formKey
557
598
  });
558
- if (!onSave) {
559
- _context9.next = 21;
599
+ if (!(onSaveOverride || onSave)) {
600
+ _context10.next = 21;
560
601
  break;
561
602
  }
562
- _context9.next = 21;
563
- return (0, _effects.call)(onSave, result);
603
+ _context10.next = 21;
604
+ return (0, _effects.call)(onSaveOverride || onSave, result);
564
605
  case 21:
565
- _context9.next = 30;
606
+ _context10.next = 30;
566
607
  break;
567
608
  case 23:
568
- _context9.prev = 23;
569
- _context9.t0 = _context9["catch"](13);
609
+ _context10.prev = 23;
610
+ _context10.t0 = _context10["catch"](13);
570
611
  (0, _store.dispatch)('SUBMIT_ERROR', {
571
612
  formKey: formKey,
572
- error: typeof _context9.t0 === 'string' ? _context9.t0 : 'Unexpected error occurred'
613
+ error: typeof _context10.t0 === 'string' ? _context10.t0 : 'Unexpected error occurred'
573
614
  });
574
- if (typeof _context9.t0 !== 'string') {
575
- console.error('Error handling form submit', _context9.t0);
615
+ if (typeof _context10.t0 !== 'string') {
616
+ console.error('Error handling form submit', _context10.t0);
576
617
  }
577
618
  if (!onError) {
578
- _context9.next = 30;
619
+ _context10.next = 30;
579
620
  break;
580
621
  }
581
- _context9.next = 30;
582
- return (0, _effects.call)(onError, _context9.t0);
622
+ _context10.next = 30;
623
+ return (0, _effects.call)(onError, _context10.t0);
583
624
  case 30:
584
- _context9.next = 34;
625
+ _context10.next = 34;
585
626
  break;
586
627
  case 32:
587
628
  (0, _store.dispatch)('SUBMIT_FIELD_ERRORS', {
@@ -592,17 +633,17 @@ function runDataSource(formKey, name, dataSource) {
592
633
  onInvalid(errors);
593
634
  }
594
635
  case 34:
595
- _context9.next = 39;
636
+ _context10.next = 39;
596
637
  break;
597
638
  case 36:
598
- _context9.prev = 36;
599
- _context9.t1 = _context9["catch"](0);
600
- console.error(_context9.t1);
639
+ _context10.prev = 36;
640
+ _context10.t1 = _context10["catch"](0);
641
+ console.error(_context10.t1);
601
642
  case 39:
602
643
  case "end":
603
- return _context9.stop();
644
+ return _context10.stop();
604
645
  }
605
- }, _callee8, null, [[0, 36], [13, 23]]);
646
+ }, _callee9, null, [[0, 36], [13, 23]]);
606
647
  })();
607
648
  }));
608
649
  var setValue = exports.setValue = function setValue(formKey, name, value) {
@@ -648,16 +689,16 @@ var actions = {
648
689
  }
649
690
  };
650
691
  var bindActions = function bindActions(formKey) {
651
- return Object.entries(actions).reduce(function (acc, _ref21) {
652
- var _ref22 = (0, _slicedToArray2["default"])(_ref21, 2),
653
- name = _ref22[0],
654
- fn = _ref22[1];
692
+ return Object.entries(actions).reduce(function (acc, _ref22) {
693
+ var _ref23 = (0, _slicedToArray2["default"])(_ref22, 2),
694
+ name = _ref23[0],
695
+ fn = _ref23[1];
655
696
  return (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, acc), {}, (0, _defineProperty2["default"])({}, name, fn(formKey)));
656
697
  }, {});
657
698
  };
658
- var onFocus = exports.onFocus = function onFocus(_ref23) {
659
- var formKey = _ref23.formKey,
660
- name = _ref23.name;
699
+ var onFocus = exports.onFocus = function onFocus(_ref24) {
700
+ var formKey = _ref24.formKey,
701
+ name = _ref24.name;
661
702
  return function () {
662
703
  (0, _store.dispatch)('FOCUS_FIELD', {
663
704
  formKey: formKey,
@@ -665,9 +706,9 @@ var onFocus = exports.onFocus = function onFocus(_ref23) {
665
706
  });
666
707
  };
667
708
  };
668
- var onBlur = exports.onBlur = function onBlur(_ref24) {
669
- var formKey = _ref24.formKey,
670
- name = _ref24.name;
709
+ var onBlur = exports.onBlur = function onBlur(_ref25) {
710
+ var formKey = _ref25.formKey,
711
+ name = _ref25.name;
671
712
  return function () {
672
713
  (0, _store.dispatch)('BLUR_FIELD', {
673
714
  formKey: formKey,
@@ -676,10 +717,10 @@ var onBlur = exports.onBlur = function onBlur(_ref24) {
676
717
  };
677
718
  };
678
719
  var LIST_VALUE_TYPES = ['checkbox-multi'];
679
- var onChange = exports.onChange = function onChange(_ref25) {
680
- var formKey = _ref25.formKey,
681
- type = _ref25.type,
682
- name = _ref25.name;
720
+ var onChange = exports.onChange = function onChange(_ref26) {
721
+ var formKey = _ref26.formKey,
722
+ type = _ref26.type,
723
+ name = _ref26.name;
683
724
  return function (event) {
684
725
  var value;
685
726
  if (type === 'checkbox' && event && event.target) {
@@ -740,6 +781,15 @@ var resetForm = exports.resetForm = function resetForm(formKey) {
740
781
  formKey: formKey
741
782
  });
742
783
  };
784
+ var reloadDataSources = exports.reloadDataSources = function reloadDataSources(formKey) {
785
+ for (var _len = arguments.length, dataSourceNames = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
786
+ dataSourceNames[_key - 1] = arguments[_key];
787
+ }
788
+ return (0, _store.dispatch)('RELOAD_DATA_SOURCES', {
789
+ formKey: formKey,
790
+ dataSourceNames: dataSourceNames
791
+ });
792
+ };
743
793
  var reloadDataSource = exports.reloadDataSource = function reloadDataSource(formKey, name) {
744
794
  return (0, _store.dispatch)('CALL_DATA_SOURCE', {
745
795
  formKey: formKey,
@@ -749,25 +799,27 @@ var reloadDataSource = exports.reloadDataSource = function reloadDataSource(form
749
799
  var configureForm = exports.configureForm = function configureForm(config) {
750
800
  return (0, _store.dispatch)('CONFIGURE_FORM', config);
751
801
  };
752
- var submitForm = exports.submitForm = function submitForm(formKey, _ref26) {
753
- var fieldSet = _ref26.fieldSet,
754
- onInvalid = _ref26.onInvalid,
755
- values = _ref26.values;
802
+ var submitForm = exports.submitForm = function submitForm(formKey, _ref27) {
803
+ var fieldSet = _ref27.fieldSet,
804
+ onInvalid = _ref27.onInvalid,
805
+ values = _ref27.values,
806
+ onSave = _ref27.onSave;
756
807
  return (0, _store.dispatch)('SUBMIT', {
757
808
  formKey: formKey,
758
809
  fieldSet: fieldSet,
759
810
  onInvalid: onInvalid,
760
- values: values
811
+ values: values,
812
+ onSave: onSave
761
813
  });
762
814
  };
763
815
  var serializeForm = exports.serializeForm = function serializeForm(formKey) {
764
- var _ref27 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
765
- fieldSet = _ref27.fieldSet;
816
+ var _ref28 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
817
+ fieldSet = _ref28.fieldSet;
766
818
  return serializeImpl(selectForm(formKey)(_store.store.getState()), fieldSet);
767
819
  };
768
- var serializeImpl = function serializeImpl(_ref28, fieldSet) {
769
- var bindings = _ref28.bindings,
770
- fields = _ref28.fields;
820
+ var serializeImpl = function serializeImpl(_ref29, fieldSet) {
821
+ var bindings = _ref29.bindings,
822
+ fields = _ref29.fields;
771
823
  var computedFieldSet = computeFieldSet(fields, fieldSet);
772
824
  return fields.filter(function (field) {
773
825
  return !field["transient"] && computedFieldSet.contains(field.name);
@@ -775,6 +827,28 @@ var serializeImpl = function serializeImpl(_ref28, fieldSet) {
775
827
  return field.serialize ? field.serialize(bindings) : field.value;
776
828
  });
777
829
  };
830
+ var validateForm = exports.validateForm = function validateForm(formKey) {
831
+ var _ref30 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
832
+ fieldSet = _ref30.fieldSet;
833
+ var _selectForm = selectForm(formKey)(_store.store.getState()),
834
+ fields = _selectForm.fields;
835
+ var computedFieldSet = computeFieldSet(fields, fieldSet);
836
+ var errors = fields.filter(function (field) {
837
+ return computedFieldSet.contains(field.name);
838
+ }).map(function (field) {
839
+ return field.errors;
840
+ }).filter(function (errors) {
841
+ return !errors.isEmpty();
842
+ });
843
+ if (!errors.isEmpty()) {
844
+ (0, _store.dispatch)('VALIDATION_FIELD_ERRORS', {
845
+ formKey: formKey,
846
+ fieldNames: errors.keySeq()
847
+ });
848
+ return false;
849
+ }
850
+ return true;
851
+ };
778
852
 
779
853
  // Wraps the FormImpl to handle the formKey behavior. If this is passed a
780
854
  // formKey prop this wrapper is essentially a noop, but if it is not passed a
@@ -784,8 +858,8 @@ var serializeImpl = function serializeImpl(_ref28, fieldSet) {
784
858
  // to do this because we need to use the form key in the mapStateToProps of the
785
859
  // wrapped component.
786
860
 
787
- /**
788
- * @component
861
+ /**
862
+ * @component
789
863
  */
790
864
  var Form = exports.Form = /*#__PURE__*/function (_Component) {
791
865
  (0, _inherits2["default"])(Form, _Component);
@@ -844,8 +918,8 @@ var FormImplComponent = /*#__PURE__*/function (_Component2) {
844
918
  function FormImplComponent() {
845
919
  var _this3;
846
920
  (0, _classCallCheck2["default"])(this, FormImplComponent);
847
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
848
- args[_key] = arguments[_key];
921
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
922
+ args[_key2] = arguments[_key2];
849
923
  }
850
924
  _this3 = _super2.call.apply(_super2, [this].concat(args));
851
925
  _this3.focusRef = /*#__PURE__*/(0, _react.createRef)();
@@ -900,20 +974,24 @@ var FormImplComponent = /*#__PURE__*/function (_Component2) {
900
974
  readOnly = _this$props2.readOnly;
901
975
  var bindings = formState ? formState.bindings : {};
902
976
  var initialized = formState ? !!formState.fields : false;
977
+ var errors = formState ? formState.dataSources.map(function (ds) {
978
+ return ds.error;
979
+ }).filter(Boolean) : (0, _immutable.Map)();
903
980
  var form = null;
981
+ var dirty = false;
982
+ var _components$toObject = components.toObject(),
983
+ FormButtons = _components$toObject.FormButtons,
984
+ FormError = _components$toObject.FormError,
985
+ FormLayout = _components$toObject.FormLayout;
904
986
  if (initialized) {
905
- var _components$toObject = components.toObject(),
906
- FormButtons = _components$toObject.FormButtons,
907
- FormError = _components$toObject.FormError,
908
- FormLayout = _components$toObject.FormLayout;
909
987
  var error = formState.error,
910
988
  fields = formState.fields,
911
989
  formOptions = formState.formOptions,
912
990
  submitting = formState.submitting;
913
- // Build a map of components by field, merging the fields, addFields, and
914
- var dirty = fields.some(function (field) {
991
+ dirty = fields.some(function (field) {
915
992
  return field.dirty;
916
993
  });
994
+ // Build a map of components by field, merging the fields, addFields, and
917
995
  // alterFields options. Note that we get those from the parent props not
918
996
  // redux store because we want to see new components on HMR updates.
919
997
  var fieldComponents = (0, _Form2.resolveFieldConfig)(formOptions, bindings, fieldsFn, addFields, alterFields).filter(function (fieldConfig) {
@@ -928,10 +1006,10 @@ var FormImplComponent = /*#__PURE__*/function (_Component2) {
928
1006
  formOptions: formOptions,
929
1007
  fields: (0, _immutable.OrderedMap)(computedFieldSet.map(function (name) {
930
1008
  return [name, fields.get(name)];
931
- })).mapEntries(function (_ref29, index) {
932
- var _ref30 = (0, _slicedToArray2["default"])(_ref29, 2),
933
- name = _ref30[0],
934
- field = _ref30[1];
1009
+ })).mapEntries(function (_ref31, index) {
1010
+ var _ref32 = (0, _slicedToArray2["default"])(_ref31, 2),
1011
+ name = _ref32[0],
1012
+ field = _ref32[1];
935
1013
  var FieldImpl = fieldComponents.get(name) || components.get((0, _Form2.getComponentName)(field), null);
936
1014
  return [name, FieldImpl ? /*#__PURE__*/_react["default"].createElement(FieldImpl, Object.assign({
937
1015
  key: name,
@@ -956,8 +1034,10 @@ var FormImplComponent = /*#__PURE__*/function (_Component2) {
956
1034
  }),
957
1035
  bindings: bindings,
958
1036
  meta: fields.map(function (field) {
1037
+ var _field$errors;
959
1038
  return (0, _immutable.Map)({
960
- visible: field.visible
1039
+ visible: field.visible,
1040
+ hasErrors: ((_field$errors = field.errors) === null || _field$errors === void 0 ? void 0 : _field$errors.size) > 0
961
1041
  });
962
1042
  })
963
1043
  });
@@ -965,7 +1045,9 @@ var FormImplComponent = /*#__PURE__*/function (_Component2) {
965
1045
  return typeof this.props.children === 'function' ? this.props.children({
966
1046
  bindings: bindings,
967
1047
  form: form,
968
- initialized: initialized
1048
+ initialized: initialized,
1049
+ errors: errors,
1050
+ dirty: dirty
969
1051
  }) : form;
970
1052
  }
971
1053
  }]);
@@ -977,11 +1059,11 @@ var mapStateToProps = exports.mapStateToProps = function mapStateToProps(state,
977
1059
  };
978
1060
  };
979
1061
  var FormImpl = (0, _store.connect)(mapStateToProps)(FormImplComponent);
980
- var generateForm = exports.generateForm = function generateForm(_ref31) {
981
- var dataSources = _ref31.dataSources,
982
- fields = _ref31.fields,
983
- handleSubmit = _ref31.handleSubmit,
984
- formOptions = _ref31.formOptions;
1062
+ var generateForm = exports.generateForm = function generateForm(_ref33) {
1063
+ var dataSources = _ref33.dataSources,
1064
+ fields = _ref33.fields,
1065
+ handleSubmit = _ref33.handleSubmit,
1066
+ formOptions = _ref33.formOptions;
985
1067
  return function (configurationProps) {
986
1068
  return /*#__PURE__*/_react["default"].createElement(Form, {
987
1069
  addDataSources: configurationProps.addDataSources,