@kineticdata/react 6.0.5 → 6.1.1

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 (151) hide show
  1. package/README.md +110 -110
  2. package/assets/task/icons/defer.svg +12 -12
  3. package/assets/task/icons/drag-handle.svg +3 -3
  4. package/assets/task/icons/filter.svg +11 -11
  5. package/assets/task/icons/loop.svg +10 -10
  6. package/assets/task/icons/plus_small.svg +5 -5
  7. package/assets/task/icons/routine.svg +9 -9
  8. package/assets/task/icons/scale-minus.svg +11 -11
  9. package/assets/task/icons/scale-plus.svg +13 -13
  10. package/assets/task/icons/start.svg +11 -11
  11. package/assets/task/icons/stop.svg +8 -8
  12. package/lib/apis/core/activity.js +4 -4
  13. package/lib/apis/core/attributeDefinitions.js +64 -6
  14. package/lib/apis/core/attributeDefinitions.test.js +7 -4
  15. package/lib/apis/core/authentication.js +12 -1
  16. package/lib/apis/core/bridgeModels.test.js +46 -23
  17. package/lib/apis/core/bridgedresources.js +41 -41
  18. package/lib/apis/core/fileResources.js +2 -6
  19. package/lib/apis/core/forms.js +51 -2
  20. package/lib/apis/core/forms.test.js +32 -19
  21. package/lib/apis/core/integrations.js +61 -0
  22. package/lib/apis/core/kapps.js +49 -0
  23. package/lib/apis/core/kapps.test.js +16 -10
  24. package/lib/apis/core/notices.js +7 -0
  25. package/lib/apis/core/securityPolicyDefinitions.test.js +7 -4
  26. package/lib/apis/core/space.js +18 -0
  27. package/lib/apis/core/space.test.js +16 -10
  28. package/lib/apis/core/submissionActivities.js +38 -0
  29. package/lib/apis/core/submissions.js +114 -15
  30. package/lib/apis/core/translations.test.js +126 -55
  31. package/lib/apis/core/userPreferences.js +59 -0
  32. package/lib/apis/core/webApis.js +32 -2
  33. package/lib/apis/core/webhooks.test.js +7 -4
  34. package/lib/apis/http.js +30 -5
  35. package/lib/apis/index.js +48 -0
  36. package/lib/apis/integrator/index.js +337 -0
  37. package/lib/apis/system/index.js +64 -12
  38. package/lib/apis/task/index.js +9 -2
  39. package/lib/components/agent/filestore/FilestoreForm.js +1 -1
  40. package/lib/components/common/AttributeSelect.js +11 -2
  41. package/lib/components/common/BridgeSelect.js +3 -1
  42. package/lib/components/common/ConnectionSelect.js +73 -0
  43. package/lib/components/common/FormSelect.js +3 -1
  44. package/lib/components/common/NodeSelect.js +1 -0
  45. package/lib/components/common/StaticSelect.js +16 -6
  46. package/lib/components/common/TableInput.js +4 -1
  47. package/lib/components/common/TeamSelect.js +3 -1
  48. package/lib/components/common/ToastContainer.js +34 -10
  49. package/lib/components/common/Typeahead.js +62 -23
  50. package/lib/components/common/UserSelect.js +3 -1
  51. package/lib/components/common/authentication/AuthenticationContainer.js +121 -55
  52. package/lib/components/common/authentication/RequestInterceptor.js +1 -1
  53. package/lib/components/common/preferences/PreferencesProvider.js +461 -0
  54. package/lib/components/core/attribute_definition/AttributeDefinitionForm.js +10 -7
  55. package/lib/components/core/bridge_model/BridgeModelTable.js +19 -0
  56. package/lib/components/core/bridge_model_attribute/BridgeModelAttributeForm.js +6 -9
  57. package/lib/components/core/bridge_model_attribute/BridgeModelAttributeTable.js +0 -4
  58. package/lib/components/core/bridge_model_qualification/BridgeModelQualificationForm.js +7 -10
  59. package/lib/components/core/bridge_model_qualification/BridgeModelQualificationTable.js +2 -15
  60. package/lib/components/core/category/CategoryForm.js +4 -1
  61. package/lib/components/core/category/CategoryTable.js +2 -2
  62. package/lib/components/core/core_form/CoreForm.js +18 -10
  63. package/lib/components/core/field_definition/FieldDefinitionForm.js +3 -3
  64. package/lib/components/core/file_resource/FileResourceForm.js +2 -1
  65. package/lib/components/core/file_resource/FileResourceTable.js +14 -7
  66. package/lib/components/core/form/FormForm.js +42 -19
  67. package/lib/components/core/form/FormTable.js +13 -14
  68. package/lib/components/core/form_type/FormTypeForm.js +3 -0
  69. package/lib/components/core/i18n/Moment.js +1 -0
  70. package/lib/components/core/integration/IntegrationForm.js +232 -0
  71. package/lib/components/core/integration/IntegrationTable.js +142 -0
  72. package/lib/components/core/kapp/KappForm.js +18 -5
  73. package/lib/components/core/kapp/KappTable.js +3 -3
  74. package/lib/components/core/log/LogTable.js +1 -1
  75. package/lib/components/core/security_definition/SecurityDefinitionForm.js +48 -10
  76. package/lib/components/core/space/SpaceForm.js +17 -36
  77. package/lib/components/core/submission/DatastoreSubmissionTable.js +4 -4
  78. package/lib/components/core/submission/FormSubmissionTable.js +12 -7
  79. package/lib/components/core/submission/KappSubmissionTable.js +4 -4
  80. package/lib/components/core/submission/SubmissionActivityForm.js +79 -0
  81. package/lib/components/core/submission/SubmissionForm.js +15 -3
  82. package/lib/components/core/team/TeamTable.js +17 -7
  83. package/lib/components/core/translation/EntryTable.js +8 -7
  84. package/lib/components/core/user/UserForm.js +2 -0
  85. package/lib/components/core/user/UserTable.js +22 -22
  86. package/lib/components/core/webapi/WebApiForm.js +5 -2
  87. package/lib/components/core/webapi/WebApiTable.js +2 -2
  88. package/lib/components/core/webhook/WebhookForm.js +43 -33
  89. package/lib/components/core/webhook/WebhookTable.js +16 -16
  90. package/lib/components/core/webhook_job/WebhookJobTable.js +17 -6
  91. package/lib/components/form/Form.helpers.js +10 -4
  92. package/lib/components/form/Form.js +264 -171
  93. package/lib/components/form/Form.models.js +6 -1
  94. package/lib/components/form/FormState.js +9 -5
  95. package/lib/components/form/SimpleForm.js +2 -2
  96. package/lib/components/form/defaults/CodeField.js +44 -1
  97. package/lib/components/index.js +152 -3
  98. package/lib/components/integrator/connection/ConnectionForm.js +156 -0
  99. package/lib/components/integrator/connection/ConnectionTable.js +82 -0
  100. package/lib/components/integrator/connection/config_fields/http.js +570 -0
  101. package/lib/components/integrator/connection/config_fields/sql.js +123 -0
  102. package/lib/components/integrator/integrationTypes.js +120 -0
  103. package/lib/components/integrator/operation/OperationForm.js +148 -0
  104. package/lib/components/integrator/operation/OperationTable.js +62 -0
  105. package/lib/components/integrator/operation/config_fields/http.js +185 -0
  106. package/lib/components/integrator/operation/config_fields/sql.js +81 -0
  107. package/lib/components/system/SystemSecurityForm.js +1 -1
  108. package/lib/components/system/SystemTaskAdapterForm.js +9 -9
  109. package/lib/components/system/SystemUserForm.js +2 -0
  110. package/lib/components/system/helpers.js +123 -100
  111. package/lib/components/system/spaces/SystemSpaceForm.js +9 -37
  112. package/lib/components/system/spaces/SystemTenantForm.js +276 -104
  113. package/lib/components/system/spaces/SystemTenantMigrateForm.js +449 -0
  114. package/lib/components/system/spaces/SystemTenantTable.js +20 -16
  115. package/lib/components/table/Table.js +75 -15
  116. package/lib/components/table/Table.redux.js +297 -73
  117. package/lib/components/table/defaults/FilterControl.js +24 -0
  118. package/lib/components/table/defaults/index.js +2 -0
  119. package/lib/components/table/tests/Table.test.js +22 -22
  120. package/lib/components/table/tests/components.js +9 -2
  121. package/lib/components/task/builder/Connector.js +51 -41
  122. package/lib/components/task/builder/ConnectorForm.js +11 -7
  123. package/lib/components/task/builder/Node.js +31 -35
  124. package/lib/components/task/builder/NodeForm.js +93 -22
  125. package/lib/components/task/builder/NodeParametersForm.js +29 -17
  126. package/lib/components/task/builder/SvgCanvas.js +3 -17
  127. package/lib/components/task/builder/TaskDefinitionConfigForm.js +18 -50
  128. package/lib/components/task/builder/TreeBuilder.js +23 -3
  129. package/lib/components/task/builder/builder.redux.js +342 -197
  130. package/lib/components/task/builder/constants.js +10 -2
  131. package/lib/components/task/builder/helpers.js +231 -81
  132. package/lib/components/task/builder/models.js +7 -6
  133. package/lib/components/task/category/TaskCategoryTable.js +3 -3
  134. package/lib/components/task/common/UsageTable.js +9 -2
  135. package/lib/components/task/handlers/HandlerTable.js +44 -37
  136. package/lib/components/task/policy_rule/PolicyRuleTable.js +3 -3
  137. package/lib/components/task/runs/CreateManualTriggerForm.js +2 -0
  138. package/lib/components/task/runs/RunTable.js +10 -14
  139. package/lib/components/task/runs/RunTaskTable.js +1 -1
  140. package/lib/components/task/sources/SourceTable.js +2 -2
  141. package/lib/components/task/triggers/TriggerTable.js +2 -2
  142. package/lib/components/task/workflows/LinkedWorkflowTable.js +16 -11
  143. package/lib/components/task/workflows/WorkflowForm.js +27 -8
  144. package/lib/components/task/workflows/WorkflowTable.js +27 -26
  145. package/lib/helpers/index.js +307 -74
  146. package/lib/index.js +2 -1
  147. package/lib/saga.js +4 -4
  148. package/lib/store.js +2 -1
  149. package/package.json +7 -6
  150. package/proxyhelper.js +201 -176
  151. package/CHANGELOG.md +0 -94
@@ -18,7 +18,7 @@ var _excluded = ["header", "body", "footer"],
18
18
  _excluded9 = ["cells"],
19
19
  _excluded10 = ["filters"],
20
20
  _excluded11 = ["fields", "error", "buttons"],
21
- _excluded12 = ["table", "pagination", "filter", "columnControl"];
21
+ _excluded12 = ["table", "pagination", "filter", "filterControl", "columnControl"];
22
22
  var stringifyProps = function stringifyProps(props) {
23
23
  return JSON.stringify(props,
24
24
  // Make sure functions are stringified to an empty function string
@@ -138,6 +138,12 @@ var mockTableConfig = exports.mockTableConfig = {
138
138
  type: "submit"
139
139
  }, "Search"));
140
140
  },
141
+ FilterControl: function FilterControl(props) {
142
+ return /*#__PURE__*/_react["default"].createElement("div", {
143
+ "data-testid": "FilterControlMock",
144
+ "data-props": stringifyProps(props)
145
+ });
146
+ },
141
147
  TextFilter: function TextFilter(props) {
142
148
  return /*#__PURE__*/_react["default"].createElement("div", {
143
149
  "data-testid": "TextFilterMock",
@@ -173,10 +179,11 @@ var TableViewMock = exports.TableViewMock = function TableViewMock(_ref12) {
173
179
  var table = _ref12.table,
174
180
  pagination = _ref12.pagination,
175
181
  filter = _ref12.filter,
182
+ filterControl = _ref12.filterControl,
176
183
  columnControl = _ref12.columnControl,
177
184
  props = (0, _objectWithoutProperties2["default"])(_ref12, _excluded12);
178
185
  return /*#__PURE__*/_react["default"].createElement("div", {
179
186
  "data-testid": "TableViewMock",
180
187
  "data-props": stringifyProps(props)
181
- }, table, pagination, filter, columnControl);
188
+ }, table, pagination, filterControl, filter, columnControl);
182
189
  };
@@ -31,23 +31,23 @@ var Connector = exports.Connector = /*#__PURE__*/function (_Component) {
31
31
  _this.setTreeBuilder = function (treeBuilder) {
32
32
  _this.treeBuilder = treeBuilder;
33
33
  };
34
- /*****************************************************************************
35
- * Click handlers *
34
+ /*****************************************************************************
35
+ * Click handlers *
36
36
  ****************************************************************************/
37
37
  _this.onSelect = function (event) {
38
38
  if (typeof _this.props.onSelect === 'function') {
39
39
  _this.props.onSelect(_this.props.connector, event.shiftKey);
40
40
  }
41
41
  };
42
- /*****************************************************************************
43
- * Drag-and-drop support *
44
- * Leverages the `watchDrag` helper exposed by the `TreeBuilder` instance. *
45
- * On move we update this instance's `head` or `tail` properties and set *
46
- * `dragging` to either "head" or "tail" so that the `draw` method knows if *
47
- * we are drawing to a dragging point or to the center of a node. *
48
- * On drop we check to see if the point we are dropping at is within a node *
49
- * (we check that its a valid node as well) and dispatch a redux action to *
50
- * persist the change or we reset the `head` or `tail` properties and `draw` *
42
+ /*****************************************************************************
43
+ * Drag-and-drop support *
44
+ * Leverages the `watchDrag` helper exposed by the `TreeBuilder` instance. *
45
+ * On move we update this instance's `head` or `tail` properties and set *
46
+ * `dragging` to either "head" or "tail" so that the `draw` method knows if *
47
+ * we are drawing to a dragging point or to the center of a node. *
48
+ * On drop we check to see if the point we are dropping at is within a node *
49
+ * (we check that its a valid node as well) and dispatch a redux action to *
50
+ * persist the change or we reset the `head` or `tail` properties and `draw` *
51
51
  ****************************************************************************/
52
52
  _this.dragHead = function (event) {
53
53
  _this.treeBuilder.watchDrag({
@@ -119,49 +119,53 @@ var Connector = exports.Connector = /*#__PURE__*/function (_Component) {
119
119
  _this.tail = point;
120
120
  _this.draw();
121
121
  };
122
- /*****************************************************************************
123
- * Rendering *
124
- * To make the drag-and-drop perform as fast as possible we manually *
125
- * manipulate some DOM elements in the `draw` method below. Anything that *
126
- * changes the instance's `head` or `tail` properties should also call *
127
- * `draw` *
122
+ /*****************************************************************************
123
+ * Rendering *
124
+ * To make the drag-and-drop perform as fast as possible we manually *
125
+ * manipulate some DOM elements in the `draw` method below. Anything that *
126
+ * changes the instance's `head` or `tail` properties should also call *
127
+ * `draw` *
128
128
  ****************************************************************************/
129
129
  _this.draw = function () {
130
130
  _this.connector.current.parentElement.style.display = '';
131
131
  var _getRectIntersections = (0, _helpers.getRectIntersections)((0, _assertThisInitialized2["default"])(_this)),
132
- _getRectIntersections2 = (0, _slicedToArray2["default"])(_getRectIntersections, 2),
132
+ _getRectIntersections2 = (0, _slicedToArray2["default"])(_getRectIntersections, 3),
133
133
  _getRectIntersections3 = _getRectIntersections2[0],
134
134
  x1 = _getRectIntersections3.x,
135
135
  y1 = _getRectIntersections3.y,
136
136
  _getRectIntersections4 = _getRectIntersections2[1],
137
137
  x2 = _getRectIntersections4.x,
138
- y2 = _getRectIntersections4.y;
138
+ y2 = _getRectIntersections4.y,
139
+ nodesOverlap = _getRectIntersections2[2];
139
140
  var dx = x2 - x1;
140
141
  var dy = y2 - y1;
141
142
  var length = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
142
143
  var angle = Math.atan2(dy, dx) * 180 / Math.PI + 180;
143
- var connectorValue = _helpers.isIE11 ? "translate(".concat(x2, " ").concat(y2, ") rotate(").concat(angle, ")") : "translate(".concat(x2, "px, ").concat(y2, "px) rotate(").concat(angle, "deg)");
144
- var connectorLabelValue = _helpers.isIE11 ? "translate(".concat(x1 + dx / 2, " ").concat(y1 + dy / 2, ")") : "translate(".concat(x1 + dx / 2, "px, ").concat(y1 + dy / 2, "px)");
145
- if (_helpers.isIE11) {
146
- _this.connector.current.transform = connectorValue;
147
- if (_this.connectorLabel.current) {
148
- _this.connectorLabel.current.transform = connectorLabelValue;
149
- }
144
+ var connectorValue = "translate(".concat(x2, "px, ").concat(y2, "px) rotate(").concat(angle, "deg)");
145
+ var connectorLabelValue = "translate(".concat(x1 + dx / 2, "px, ").concat(y1 + dy / 2, "px)");
146
+
147
+ // If the nodes overlap, hide the connector line
148
+ if (nodesOverlap) {
149
+ _this.connector.current.style.display = 'none';
150
150
  } else {
151
- _this.connector.current.style.transform = connectorValue;
152
- if (_this.connectorLabel.current) {
153
- _this.connectorLabel.current.style.transform = connectorLabelValue;
151
+ _this.connector.current.style.display = '';
152
+ }
153
+ _this.connector.current.style.transform = connectorValue;
154
+ if (_this.connectorLabel.current) {
155
+ var _this$props$connector3;
156
+ _this.connectorLabel.current.style.transform = connectorLabelValue;
157
+ // If the nodes overlap or the connector has an id, show the label
158
+ if (nodesOverlap || ((_this$props$connector3 = _this.props.connector) === null || _this$props$connector3 === void 0 ? void 0 : _this$props$connector3.id) !== null) {
159
+ _this.connectorLabel.current.style.display = '';
160
+ } else {
161
+ // If nodes don't overlap for a new connector, hide the label
162
+ _this.connectorLabel.current.style.display = 'none';
154
163
  }
155
164
  }
156
-
157
- // this.connector.current.setAttribute(attribute, connectorValue);
158
165
  if (_this.connectorTail.current) {
159
166
  _this.connectorTail.current.setAttribute('cx', length);
160
167
  }
161
168
  _this.connectorBody.current.setAttribute('x2', length);
162
- // if (this.connectorLabel.current) {
163
- // this.connectorLabel.current.setAttribute(attribute, connectorLabelValue);
164
- // }
165
169
  };
166
170
  _this.connector = /*#__PURE__*/(0, _react.createRef)();
167
171
  _this.connectorBody = /*#__PURE__*/(0, _react.createRef)();
@@ -172,11 +176,11 @@ var Connector = exports.Connector = /*#__PURE__*/function (_Component) {
172
176
  (0, _createClass2["default"])(Connector, [{
173
177
  key: "shouldComponentUpdate",
174
178
  value:
175
- /*****************************************************************************
176
- * React lifecycle *
177
- * Check the `connector` prop for change, which should be an immutable *
178
- * record. If that prop changes we need to sync the instance's `head` and *
179
- * `tail` values and call `draw`. *
179
+ /*****************************************************************************
180
+ * React lifecycle *
181
+ * Check the `connector` prop for change, which should be an immutable *
182
+ * record. If that prop changes we need to sync the instance's `head` and *
183
+ * `tail` values and call `draw`. *
180
184
  ****************************************************************************/
181
185
 
182
186
  function shouldComponentUpdate(nextProps) {
@@ -256,7 +260,7 @@ var Connector = exports.Connector = /*#__PURE__*/function (_Component) {
256
260
  className: "connector-head high-detail",
257
261
  points: constants.CONNECTOR_HEAD_POINTS,
258
262
  onMouseDown: this.dragHead
259
- })), id !== null && /*#__PURE__*/_react["default"].createElement("g", {
263
+ })), id !== null ? /*#__PURE__*/_react["default"].createElement("g", {
260
264
  ref: this.connectorLabel,
261
265
  className: "connector-button",
262
266
  onClick: this.onSelect
@@ -300,7 +304,13 @@ var Connector = exports.Connector = /*#__PURE__*/function (_Component) {
300
304
  y: -constants.ICON_CENTER,
301
305
  height: constants.ICON_SIZE,
302
306
  width: constants.ICON_SIZE
303
- }))));
307
+ }))) : /*#__PURE__*/_react["default"].createElement("circle", {
308
+ ref: this.connectorLabel,
309
+ className: "connector-placeholder",
310
+ r: constants.CONNECTOR_TAIL_RADIUS,
311
+ cx: "0",
312
+ cy: "0"
313
+ }));
304
314
  }
305
315
  }]);
306
316
  return Connector;
@@ -9,18 +9,22 @@ var _helpers = require("./helpers");
9
9
  var dataSources = function dataSources(_ref) {
10
10
  var tasks = _ref.tasks,
11
11
  tree = _ref.tree,
12
- connector = _ref.connector;
12
+ connector = _ref.connector,
13
+ connections = _ref.connections;
13
14
  return {
14
15
  bindings: {
15
16
  fn: _helpers.buildBindings,
16
- params: [tree, tasks, tree.nodes.get(connector.headId)]
17
+ params: [{
18
+ tree: tree,
19
+ tasks: tasks,
20
+ node: tree.nodes.get(connector.headId),
21
+ connections: connections
22
+ }]
17
23
  }
18
24
  };
19
25
  };
20
26
  var fields = function fields(_ref2) {
21
- var connector = _ref2.connector,
22
- tasks = _ref2.tasks,
23
- tree = _ref2.tree;
27
+ var connector = _ref2.connector;
24
28
  return function (_ref3) {
25
29
  var bindings = _ref3.bindings;
26
30
  return bindings && [{
@@ -49,7 +53,7 @@ var fields = function fields(_ref2) {
49
53
  label: 'Condition',
50
54
  type: 'code',
51
55
  initialValue: connector.condition,
52
- language: 'ruby',
56
+ language: 'ruby-expression',
53
57
  options: bindings
54
58
  }, {
55
59
  name: 'from',
@@ -82,7 +86,7 @@ var handleSubmit = function handleSubmit(_ref4) {
82
86
  };
83
87
  };
84
88
  var ConnectorForm = exports.ConnectorForm = (0, _Form.generateForm)({
85
- formOptions: ['connector', 'tasks', 'tree'],
89
+ formOptions: ['connections', 'connector', 'tasks', 'tree'],
86
90
  dataSources: dataSources,
87
91
  fields: fields,
88
92
  handleSubmit: handleSubmit
@@ -28,8 +28,8 @@ var Node = exports.Node = /*#__PURE__*/function (_Component) {
28
28
  var _this;
29
29
  (0, _classCallCheck2["default"])(this, Node);
30
30
  _this = _super.call(this, props);
31
- /*****************************************************************************
32
- * Click handlers *
31
+ /*****************************************************************************
32
+ * Click handlers *
33
33
  ****************************************************************************/
34
34
  _this.onSelect = function (shiftKey) {
35
35
  return function () {
@@ -38,15 +38,15 @@ var Node = exports.Node = /*#__PURE__*/function (_Component) {
38
38
  }
39
39
  };
40
40
  };
41
- /*****************************************************************************
42
- * Drag-and-drop support *
43
- * Leverages the `watchDrag` helper exposed by the `TreeBuilder` instance. *
44
- * On move we need to update any related connectors manually (for maximum *
45
- * performance). *
46
- * On drop we dispatch an action to update the node in redux to persist the *
47
- * change. *
48
- * We also watch for drag on the plus button, which should leverage the *
49
- * `TreeBuilder` instance to start creating a new connector *
41
+ /*****************************************************************************
42
+ * Drag-and-drop support *
43
+ * Leverages the `watchDrag` helper exposed by the `TreeBuilder` instance. *
44
+ * On move we need to update any related connectors manually (for maximum *
45
+ * performance). *
46
+ * On drop we dispatch an action to update the node in redux to persist the *
47
+ * change. *
48
+ * We also watch for drag on the plus button, which should leverage the *
49
+ * `TreeBuilder` instance to start creating a new connector *
50
50
  ****************************************************************************/
51
51
  _this.drag = function (event) {
52
52
  _this.treeBuilder.watchDrag({
@@ -101,15 +101,15 @@ var Node = exports.Node = /*#__PURE__*/function (_Component) {
101
101
  }, {
102
102
  key: "shouldComponentUpdate",
103
103
  value:
104
- /*****************************************************************************
105
- * React lifecycle *
106
- * Check the `node` prop for change, which should be an immutable record. *
107
- * If that prop changes we need to sync the instance's `position` value and *
108
- * call `draw`. *
104
+ /*****************************************************************************
105
+ * React lifecycle *
106
+ * Check the `node` prop for change, which should be an immutable record. *
107
+ * If that prop changes we need to sync the instance's `position` value and *
108
+ * call `draw`. *
109
109
  ****************************************************************************/
110
110
 
111
111
  function shouldComponentUpdate(nextProps) {
112
- return !this.props.node.equals(nextProps.node) || this.props.primary !== nextProps.primary || this.props.selected !== nextProps.selected || this.props.highlighted !== nextProps.highlighted;
112
+ return !this.props.node.equals(nextProps.node) || this.props.primary !== nextProps.primary || this.props.selected !== nextProps.selected || this.props.highlighted !== nextProps.highlighted || this.props.missingIntegration !== nextProps.missingIntegration;
113
113
  }
114
114
  }, {
115
115
  key: "componentDidMount",
@@ -124,26 +124,16 @@ var Node = exports.Node = /*#__PURE__*/function (_Component) {
124
124
  this.draw();
125
125
  }
126
126
 
127
- /*****************************************************************************
128
- * Rendering *
129
- * To make the drag-and-drop perform as fast as possible we manually *
130
- * manipulate some DOM elements in the `draw` method below. Anything that *
131
- * changes the instance's `position` property should also call `draw` *
127
+ /*****************************************************************************
128
+ * Rendering *
129
+ * To make the drag-and-drop perform as fast as possible we manually *
130
+ * manipulate some DOM elements in the `draw` method below. Anything that *
131
+ * changes the instance's `position` property should also call `draw` *
132
132
  ****************************************************************************/
133
133
  }, {
134
134
  key: "draw",
135
135
  value: function draw() {
136
- // const attribute = isIE11 ? 'transform' : 'style';
137
- // const value = isIE11
138
- // ? `translate(${this.position.x} ${this.position.y})`
139
- // : `transform: translate(${this.position.x}px, ${this.position.y}px)`;
140
- // this.el.current.setAttribute(attribute, value);
141
-
142
- if (_helpers.isIE11) {
143
- this.el.current.transform = "translate(".concat(this.position.x, " ").concat(this.position.y, ")");
144
- } else {
145
- this.el.current.style.transform = "translate(".concat(this.position.x, "px, ").concat(this.position.y, "px)");
146
- }
136
+ this.el.current.style.transform = "translate(".concat(this.position.x, "px, ").concat(this.position.y, "px)");
147
137
  }
148
138
  }, {
149
139
  key: "render",
@@ -153,17 +143,19 @@ var Node = exports.Node = /*#__PURE__*/function (_Component) {
153
143
  highlighted = _this$props.highlighted,
154
144
  primary = _this$props.primary,
155
145
  selected = _this$props.selected,
146
+ missingIntegration = _this$props.missingIntegration,
156
147
  tasks = _this$props.tasks;
157
148
  var defers = node.defers,
158
149
  definitionId = node.definitionId,
159
150
  id = node.id,
160
151
  name = node.name;
161
152
  var tempNode = typeof id !== 'number';
162
- var missing = !tempNode && !tasks.has(node.definitionId) && !node.definitionId.startsWith('system_tree_return_v') && !node.definitionId.startsWith('system_start_v');
153
+ var isRoutine = tasks.get(definitionId) && (0, _lodashEs.isArray)(tasks.get(definitionId).inputs);
154
+ var isIntegration = node.definitionId.startsWith("".concat(_constants.ADVANCED_HANDLER_NAME_INTEGRATION, "_v"));
155
+ var missing = !tempNode && !tasks.has(node.definitionId) && !node.definitionId.startsWith('system_tree_return_v') && !node.definitionId.startsWith('system_start_v') || missingIntegration;
163
156
  var invalid = missing || !tempNode && !name || node.parameters.some(function (parameter) {
164
157
  return parameter.required && parameter.value === '';
165
158
  });
166
- var isRoutine = tasks.get(definitionId) && (0, _lodashEs.isArray)(tasks.get(definitionId).inputs);
167
159
  var type = (0, _helpers.getNodeType)(node);
168
160
  var height = type === 'join' || type === 'junction' ? constants.NODE_JOIN_JUNCTION_HEIGHT : type === 'start' ? constants.NODE_START_RADIUS * 2 : constants.NODE_HEIGHT;
169
161
  var width = type === 'start' ? constants.NODE_START_RADIUS * 2 : constants.NODE_WIDTH;
@@ -215,6 +207,10 @@ var Node = exports.Node = /*#__PURE__*/function (_Component) {
215
207
  d: constants.NODE_LEFT_BAR_PATH,
216
208
  className: "routine-bar",
217
209
  strokeWidth: constants.NODE_DECORATION_STROKE_WIDTH
210
+ }), isIntegration && /*#__PURE__*/_react["default"].createElement("path", {
211
+ d: constants.NODE_PLUG_BAR_PATH,
212
+ className: "integration-bar",
213
+ strokeWidth: constants.NODE_DECORATION_STROKE_WIDTH
218
214
  }), type === 'loop-head' && /*#__PURE__*/_react["default"].createElement("path", {
219
215
  d: constants.NODE_BOTTOM_BAR_PATH,
220
216
  className: "loop-bar",
@@ -10,16 +10,23 @@ var _immutable = require("immutable");
10
10
  var _Form = require("../../form/Form");
11
11
  var _models = require("./models");
12
12
  var _helpers = require("./helpers");
13
+ var _constants = require("./constants");
13
14
  var _apis = require("../../../apis");
14
- var _TaskDefinitionConfigForm = require("./TaskDefinitionConfigForm");
15
15
  var dataSources = function dataSources(_ref) {
16
+ var _tasks$get, _tasks$get2, _tasks$get3, _tasks$get4;
16
17
  var tasks = _ref.tasks,
17
18
  tree = _ref.tree,
18
- node = _ref.node;
19
+ node = _ref.node,
20
+ connections = _ref.connections;
19
21
  return {
20
22
  bindings: {
21
23
  fn: _helpers.buildBindings,
22
- params: [tree, tasks, node]
24
+ params: [{
25
+ tree: tree,
26
+ tasks: tasks,
27
+ node: node,
28
+ connections: connections
29
+ }]
23
30
  },
24
31
  parameters: {
25
32
  fn: function fn(node) {
@@ -30,28 +37,93 @@ var dataSources = function dataSources(_ref) {
30
37
  form: {
31
38
  fn: function fn(node) {
32
39
  return (0, _apis.fetchForm)({
33
- kappSlug: node.parameters.find(function (parameter) {
34
- return parameter.id === 'kappSlug';
40
+ kappSlug: node.parameters.find(function (p) {
41
+ return p.id === 'kappSlug';
35
42
  }).value,
36
- formSlug: node.parameters.find(function (parameter) {
37
- return parameter.id === 'formSlug';
43
+ formSlug: node.parameters.find(function (p) {
44
+ return p.id === 'formSlug';
38
45
  }).value,
39
46
  include: 'fields,kapp'
40
47
  }).then(function (data) {
41
48
  return data.form;
42
49
  });
43
50
  },
44
- params: (0, _TaskDefinitionConfigForm.generateTaskDefinition)(tasks.get(node.definitionId)) ? [node] : null
51
+ params: ((_tasks$get = tasks.get(node.definitionId)) === null || _tasks$get === void 0 ? void 0 : _tasks$get.definitionName) === _constants.ADVANCED_HANDLER_NAME_SUBMISSION_CREATE ? [node] : null
52
+ },
53
+ connection: {
54
+ fn: function fn(node) {
55
+ var _node$parameters$find;
56
+ var id = (_node$parameters$find = node.parameters.find(function (p) {
57
+ return p.id === 'connection';
58
+ })) === null || _node$parameters$find === void 0 ? void 0 : _node$parameters$find.value;
59
+ return (connections === null || connections === void 0 ? void 0 : connections.get(id)) || (0, _apis.fetchConnection)({
60
+ id: id
61
+ }).then(function (data) {
62
+ return data.connection;
63
+ });
64
+ },
65
+ params: ((_tasks$get2 = tasks.get(node.definitionId)) === null || _tasks$get2 === void 0 ? void 0 : _tasks$get2.definitionName) === _constants.ADVANCED_HANDLER_NAME_INTEGRATION ? [node] : null
66
+ },
67
+ operation: {
68
+ fn: function fn(node) {
69
+ var _node$parameters$find2, _node$parameters$find3;
70
+ var connectionId = (_node$parameters$find2 = node.parameters.find(function (p) {
71
+ return p.id === 'connection';
72
+ })) === null || _node$parameters$find2 === void 0 ? void 0 : _node$parameters$find2.value;
73
+ var id = (_node$parameters$find3 = node.parameters.find(function (p) {
74
+ return p.id === 'operation';
75
+ })) === null || _node$parameters$find3 === void 0 ? void 0 : _node$parameters$find3.value;
76
+ return (connections === null || connections === void 0 ? void 0 : connections.getIn([connectionId, 'operations', id])) || (0, _apis.fetchOperation)({
77
+ connectionId: connectionId,
78
+ id: id
79
+ }).then(function (data) {
80
+ return data.operation;
81
+ });
82
+ },
83
+ params: ((_tasks$get3 = tasks.get(node.definitionId)) === null || _tasks$get3 === void 0 ? void 0 : _tasks$get3.definitionName) === _constants.ADVANCED_HANDLER_NAME_INTEGRATION ? [node] : null
84
+ },
85
+ detectedInputs: {
86
+ fn: function fn(node) {
87
+ var _node$parameters$find4;
88
+ return (0, _apis.inspectOperation)({
89
+ operationId: (_node$parameters$find4 = node.parameters.find(function (p) {
90
+ return p.id === 'operation';
91
+ })) === null || _node$parameters$find4 === void 0 ? void 0 : _node$parameters$find4.value
92
+ }).then(function (data) {
93
+ return data.detectedInputs;
94
+ });
95
+ },
96
+ params: ((_tasks$get4 = tasks.get(node.definitionId)) === null || _tasks$get4 === void 0 ? void 0 : _tasks$get4.definitionName) === _constants.ADVANCED_HANDLER_NAME_INTEGRATION ? [node] : null
45
97
  },
46
98
  task: {
47
- fn: function fn(node, form) {
48
- return form ? (0, _TaskDefinitionConfigForm.generateTaskDefinition)(tasks.get(node.definitionId))({
49
- form: form.toJS()
50
- }) : tasks.get(node.definitionId);
99
+ fn: function fn(task) {
100
+ return task;
51
101
  },
52
102
  params: function params(_ref2) {
53
- var form = _ref2.form;
54
- return (0, _TaskDefinitionConfigForm.generateTaskDefinition)(tasks.get(node.definitionId)) ? form ? [node, form] : null : [node, null];
103
+ var form = _ref2.form,
104
+ connection = _ref2.connection,
105
+ operation = _ref2.operation,
106
+ detectedInputs = _ref2.detectedInputs;
107
+ var task = tasks.get(node.definitionId);
108
+ if ((task === null || task === void 0 ? void 0 : task.definitionName) === _constants.ADVANCED_HANDLER_NAME_SUBMISSION_CREATE) {
109
+ if (form) {
110
+ return [(0, _helpers.generateSubmissionCreateTaskDefinition)(task, {
111
+ form: form.toJS()
112
+ })];
113
+ }
114
+ return null;
115
+ } else if ((task === null || task === void 0 ? void 0 : task.definitionName) === _constants.ADVANCED_HANDLER_NAME_INTEGRATION) {
116
+ if (connection && operation && detectedInputs) {
117
+ return [(0, _helpers.generateIntegrationTaskDefinition)(task, {
118
+ connection: connection.toJS(),
119
+ operation: operation.toJS(),
120
+ detectedInputs: detectedInputs.toJS()
121
+ })];
122
+ }
123
+ return null;
124
+ } else {
125
+ return [task];
126
+ }
55
127
  }
56
128
  }
57
129
  };
@@ -73,8 +145,7 @@ var checkDependsOn = function checkDependsOn(parameter) {
73
145
  };
74
146
  };
75
147
  var fields = function fields(_ref4) {
76
- var tasks = _ref4.tasks,
77
- tree = _ref4.tree,
148
+ var tree = _ref4.tree,
78
149
  node = _ref4.node;
79
150
  return function (_ref5) {
80
151
  var bindings = _ref5.bindings;
@@ -125,12 +196,12 @@ var fields = function fields(_ref4) {
125
196
  name: "parameter_".concat(parameter.id),
126
197
  label: parameter.label,
127
198
  type: parameter.menu ? 'select' : 'code',
128
- language: parameter.menu ? null : 'erb',
199
+ language: parameter.menu ? null : 'ruby-template',
129
200
  helpText: parameter.description,
130
201
  initialValue: parameter.value,
131
202
  options: parameter.menu ? getOptions(parameter.menu) : bindings,
132
203
  "transient": true,
133
- visible: checkDependsOn(parameter) && (0, _TaskDefinitionConfigForm.checkOmittedParameters)(node, parameter)
204
+ visible: checkDependsOn(parameter) && (0, _helpers.checkOmittedParametersForAdvancedHandlers)(node, parameter)
134
205
  };
135
206
  })), [{
136
207
  name: 'parameters',
@@ -151,7 +222,7 @@ var fields = function fields(_ref4) {
151
222
  }).map(function (message) {
152
223
  return message.value;
153
224
  }).first(''),
154
- language: 'erb',
225
+ language: 'ruby-template',
155
226
  options: bindings,
156
227
  "transient": true,
157
228
  visible: function visible(_ref8) {
@@ -167,7 +238,7 @@ var fields = function fields(_ref4) {
167
238
  }).map(function (message) {
168
239
  return message.value;
169
240
  }).first(''),
170
- language: 'erb',
241
+ language: 'ruby-template',
171
242
  options: bindings,
172
243
  "transient": true,
173
244
  visible: function visible(_ref9) {
@@ -183,7 +254,7 @@ var fields = function fields(_ref4) {
183
254
  }).map(function (message) {
184
255
  return message.value;
185
256
  }).first(''),
186
- language: 'erb',
257
+ language: 'ruby-template',
187
258
  options: bindings,
188
259
  "transient": true
189
260
  }, {
@@ -213,7 +284,7 @@ var handleSubmit = function handleSubmit(_ref11) {
213
284
  };
214
285
  };
215
286
  var NodeForm = exports.NodeForm = (0, _Form.generateForm)({
216
- formOptions: ['node', 'tasks', 'tree'],
287
+ formOptions: ['connections', 'node', 'tasks', 'tree'],
217
288
  dataSources: dataSources,
218
289
  fields: fields,
219
290
  handleSubmit: handleSubmit
@@ -9,7 +9,6 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
9
9
  var _Form = require("../../form/Form");
10
10
  var _helpers = require("./helpers");
11
11
  var _models = require("./models");
12
- var _TaskDefinitionConfigForm = require("./TaskDefinitionConfigForm");
13
12
  var getOptions = function getOptions(menu) {
14
13
  return menu.split(',').filter(function (value) {
15
14
  return !!value;
@@ -21,14 +20,20 @@ var getOptions = function getOptions(menu) {
21
20
  });
22
21
  };
23
22
  var dataSources = function dataSources(_ref) {
24
- var task = _ref.task,
23
+ var connections = _ref.connections,
24
+ task = _ref.task,
25
25
  tasks = _ref.tasks,
26
26
  tree = _ref.tree,
27
27
  node = _ref.node;
28
28
  return {
29
29
  bindings: {
30
30
  fn: _helpers.buildBindings,
31
- params: [tree, tasks, node]
31
+ params: [{
32
+ tree: tree,
33
+ tasks: tasks,
34
+ node: node,
35
+ connections: connections
36
+ }]
32
37
  },
33
38
  parameters: {
34
39
  fn: function fn() {
@@ -38,44 +43,52 @@ var dataSources = function dataSources(_ref) {
38
43
  transform: function transform(result) {
39
44
  return result.map(_helpers.normalizeParameter).map(_models.NodeParameter);
40
45
  }
46
+ },
47
+ oldParameters: {
48
+ fn: function fn() {
49
+ return node.parameters;
50
+ },
51
+ params: []
41
52
  }
42
53
  };
43
54
  };
44
55
  var fields = function fields(_ref2) {
45
56
  var node = _ref2.node,
46
- task = _ref2.task,
47
- tasks = _ref2.tasks,
48
- tree = _ref2.tree;
57
+ task = _ref2.task;
49
58
  return function (_ref3) {
50
59
  var bindings = _ref3.bindings,
51
- parameters = _ref3.parameters;
52
- return bindings && parameters && [].concat((0, _toConsumableArray2["default"])(node.parameters.map(function (parameter) {
60
+ parameters = _ref3.parameters,
61
+ oldParameters = _ref3.oldParameters;
62
+ return bindings && parameters && oldParameters && [].concat((0, _toConsumableArray2["default"])(oldParameters.map(function (parameter) {
53
63
  return {
54
64
  name: "oldParameter_".concat(parameter.id),
55
65
  label: parameter.label,
56
66
  type: parameter.menu ? 'select' : 'code',
57
- language: parameter.menu ? null : 'erb',
67
+ language: parameter.menu ? null : 'ruby-template',
58
68
  helpText: parameter.description,
59
69
  initialValue: parameter.value,
60
70
  options: parameter.menu ? getOptions(parameter.menu) : bindings,
61
71
  "transient": true,
62
72
  enabled: false,
63
- visible: (0, _TaskDefinitionConfigForm.checkOmittedParameters)(node, parameter)
73
+ visible: (0, _helpers.checkOmittedParametersForAdvancedHandlers)(node, parameter)
64
74
  };
65
75
  })), (0, _toConsumableArray2["default"])(parameters.map(function (parameter) {
66
- var matchingParameter = node.parameters.find(function (oldParameter) {
76
+ var matchingParameter = oldParameters.find(function (oldParameter) {
67
77
  return oldParameter.id === parameter.id;
68
78
  });
69
79
  return {
70
80
  name: "parameter_".concat(parameter.id),
71
81
  label: parameter.label,
72
82
  type: parameter.menu ? 'select' : 'code',
73
- language: parameter.menu ? null : 'erb',
83
+ language: parameter.menu ? null : 'ruby-template',
74
84
  helpText: parameter.description,
75
- initialValue: matchingParameter ? matchingParameter.value : parameter.defaultValue,
85
+ // If this parameter will be omitted, keep its value. Otherwise, set to
86
+ // the matchingParameter's value or the default
87
+ initialValue: !(0, _helpers.checkOmittedParametersForAdvancedHandlers)(task, parameter) ? parameter.value || parameter.defaultValue : matchingParameter ? matchingParameter.value : parameter.defaultValue,
76
88
  options: parameter.menu ? getOptions(parameter.menu) : bindings,
77
89
  "transient": true,
78
- visible: (0, _TaskDefinitionConfigForm.checkOmittedParameters)(node, parameter)
90
+ // Use the task variable as the node since this is the new node
91
+ visible: (0, _helpers.checkOmittedParametersForAdvancedHandlers)(task, parameter)
79
92
  };
80
93
  })), [{
81
94
  name: 'parameters',
@@ -128,14 +141,13 @@ var fields = function fields(_ref2) {
128
141
  }]);
129
142
  };
130
143
  };
131
- var handleSubmit = function handleSubmit(_ref5) {
132
- var node = _ref5.node;
144
+ var handleSubmit = function handleSubmit() {
133
145
  return function (values) {
134
146
  return values;
135
147
  };
136
148
  };
137
149
  var NodeParametersForm = exports.NodeParametersForm = (0, _Form.generateForm)({
138
- formOptions: ['node', 'task', 'tasks', 'tree'],
150
+ formOptions: ['connections', 'node', 'task', 'tasks', 'tree'],
139
151
  dataSources: dataSources,
140
152
  fields: fields,
141
153
  handleSubmit: handleSubmit