@elyra/canvas 12.39.1 → 12.40.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 (117) hide show
  1. package/dist/{_baseIteratee-64ab55d0.js → _baseIteratee-f4715b87.js} +2 -2
  2. package/dist/_baseIteratee-f4715b87.js.map +1 -0
  3. package/dist/_baseIteratee-fb637d17.js +7 -0
  4. package/dist/_baseIteratee-fb637d17.js.map +1 -0
  5. package/dist/canvas-constants-c5e07e1c.js +2 -0
  6. package/dist/{canvas-constants-be5521b9.js.map → canvas-constants-c5e07e1c.js.map} +1 -1
  7. package/dist/canvas-constants-ef23ad87.js +2 -0
  8. package/dist/{canvas-constants-45f5f039.js.map → canvas-constants-ef23ad87.js.map} +1 -1
  9. package/dist/canvas-controller-95ecdee5.js +2 -0
  10. package/dist/{canvas-controller-ad1c218a.js.map → canvas-controller-95ecdee5.js.map} +1 -1
  11. package/dist/canvas-controller-bde80f8a.js +2 -0
  12. package/dist/{canvas-controller-c8b0d574.js.map → canvas-controller-bde80f8a.js.map} +1 -1
  13. package/dist/common-canvas-32d7e405.js +2 -0
  14. package/dist/{common-canvas-c16aeb7c.js.map → common-canvas-32d7e405.js.map} +1 -1
  15. package/dist/common-canvas-b32c379e.js +2 -0
  16. package/dist/{common-canvas-891b7b38.js.map → common-canvas-b32c379e.js.map} +1 -1
  17. package/dist/common-canvas.es.js +1 -1
  18. package/dist/common-canvas.es.js.map +1 -1
  19. package/dist/common-canvas.js +1 -1
  20. package/dist/common-canvas.js.map +1 -1
  21. package/dist/common-properties-06008d04.js +2 -0
  22. package/dist/common-properties-06008d04.js.map +1 -0
  23. package/dist/common-properties-f0e8fedb.js +2 -0
  24. package/dist/common-properties-f0e8fedb.js.map +1 -0
  25. package/dist/context-menu-wrapper-96f437f2.js +2 -0
  26. package/dist/{context-menu-wrapper-4dc8d351.js.map → context-menu-wrapper-96f437f2.js.map} +1 -1
  27. package/dist/context-menu-wrapper-a55b8cb4.js +2 -0
  28. package/dist/{context-menu-wrapper-5b795ee5.js.map → context-menu-wrapper-a55b8cb4.js.map} +1 -1
  29. package/dist/{datarecord-metadata-v3-schema-618b308b.js → datarecord-metadata-v3-schema-76e8fa3e.js} +2 -2
  30. package/dist/{datarecord-metadata-v3-schema-618b308b.js.map → datarecord-metadata-v3-schema-76e8fa3e.js.map} +1 -1
  31. package/dist/{datarecord-metadata-v3-schema-ee0f5c4c.js → datarecord-metadata-v3-schema-9b4a5306.js} +2 -2
  32. package/dist/{datarecord-metadata-v3-schema-ee0f5c4c.js.map → datarecord-metadata-v3-schema-9b4a5306.js.map} +1 -1
  33. package/dist/flexible-table-93144915.js +2 -0
  34. package/dist/flexible-table-93144915.js.map +1 -0
  35. package/dist/flexible-table-9de9d023.js +2 -0
  36. package/dist/flexible-table-9de9d023.js.map +1 -0
  37. package/dist/icon-1995d07f.js +2 -0
  38. package/dist/{icon-86ee98d5.js.map → icon-1995d07f.js.map} +1 -1
  39. package/dist/icon-9bf1b1d0.js +2 -0
  40. package/dist/{icon-630b5bba.js.map → icon-9bf1b1d0.js.map} +1 -1
  41. package/dist/index-2974f99f.js +2 -0
  42. package/dist/{index-11b62489.js.map → index-2974f99f.js.map} +1 -1
  43. package/dist/index-86e4c622.js +2 -0
  44. package/dist/{index-7bf8508e.js.map → index-86e4c622.js.map} +1 -1
  45. package/dist/inherits-226dfdb2.js +2 -0
  46. package/dist/inherits-226dfdb2.js.map +1 -0
  47. package/dist/{getPrototypeOf-d346567e.js → inherits-41673c87.js} +2 -2
  48. package/dist/inherits-41673c87.js.map +1 -0
  49. package/dist/lib/canvas-controller.es.js +1 -1
  50. package/dist/lib/canvas-controller.js +1 -1
  51. package/dist/lib/canvas.es.js +1 -1
  52. package/dist/lib/canvas.js +1 -1
  53. package/dist/lib/context-menu.es.js +1 -1
  54. package/dist/lib/context-menu.js +1 -1
  55. package/dist/lib/properties/field-picker.es.js +1 -1
  56. package/dist/lib/properties/field-picker.js +1 -1
  57. package/dist/lib/properties/flexible-table.es.js +1 -1
  58. package/dist/lib/properties/flexible-table.js +1 -1
  59. package/dist/lib/properties.es.js +1 -1
  60. package/dist/lib/properties.js +1 -1
  61. package/dist/lib/tooltip.es.js +1 -1
  62. package/dist/lib/tooltip.es.js.map +1 -1
  63. package/dist/lib/tooltip.js +1 -1
  64. package/dist/lib/tooltip.js.map +1 -1
  65. package/dist/styles/common-canvas.min.css +1 -1
  66. package/dist/styles/common-canvas.min.css.map +1 -1
  67. package/dist/toolbar-8ed1e188.js +2 -0
  68. package/dist/{toolbar-d69430a2.js.map → toolbar-8ed1e188.js.map} +1 -1
  69. package/dist/toolbar-dbe39e96.js +2 -0
  70. package/dist/{toolbar-b1b9f37d.js.map → toolbar-dbe39e96.js.map} +1 -1
  71. package/locales/common-properties/locales/en.json +1 -0
  72. package/package.json +1 -1
  73. package/src/common-canvas/canvas-controller-menu-utils.js +2 -2
  74. package/src/common-canvas/canvas-controller.js +34 -28
  75. package/src/common-canvas/constants/canvas-constants.js +0 -5
  76. package/src/common-canvas/svg-canvas-d3.scss +37 -2
  77. package/src/common-canvas/svg-canvas-renderer.js +9 -2
  78. package/src/common-properties/components/flexible-table/flexible-table.jsx +15 -2
  79. package/src/common-properties/components/virtualized-table/virtualized-table.jsx +1 -1
  80. package/src/common-properties/constants/constants.js +1 -0
  81. package/src/common-properties/controls/expression/expression-builder/expression-select-field-function.jsx +86 -28
  82. package/src/common-properties/controls/expression/expressionInfo-parser.js +0 -1
  83. package/src/common-properties/properties-controller.js +26 -4
  84. package/src/object-model/object-model.js +12 -0
  85. package/src/object-model/redux/reducers/canvasinfo.js +13 -1
  86. package/src/object-model/redux/reducers/comments.js +0 -1
  87. package/src/object-model/redux/reducers/links.js +16 -0
  88. package/src/object-model/redux/reducers/nodes.js +16 -0
  89. package/stats.html +1 -1
  90. package/dist/_baseIteratee-64ab55d0.js.map +0 -1
  91. package/dist/_baseIteratee-82d2e94c.js +0 -7
  92. package/dist/_baseIteratee-82d2e94c.js.map +0 -1
  93. package/dist/canvas-constants-45f5f039.js +0 -2
  94. package/dist/canvas-constants-be5521b9.js +0 -2
  95. package/dist/canvas-controller-ad1c218a.js +0 -2
  96. package/dist/canvas-controller-c8b0d574.js +0 -2
  97. package/dist/common-canvas-891b7b38.js +0 -2
  98. package/dist/common-canvas-c16aeb7c.js +0 -2
  99. package/dist/common-properties-9cfe3daa.js +0 -2
  100. package/dist/common-properties-9cfe3daa.js.map +0 -1
  101. package/dist/common-properties-bbe82be2.js +0 -2
  102. package/dist/common-properties-bbe82be2.js.map +0 -1
  103. package/dist/context-menu-wrapper-4dc8d351.js +0 -2
  104. package/dist/context-menu-wrapper-5b795ee5.js +0 -2
  105. package/dist/flexible-table-41beff38.js +0 -2
  106. package/dist/flexible-table-41beff38.js.map +0 -1
  107. package/dist/flexible-table-52f85f0b.js +0 -2
  108. package/dist/flexible-table-52f85f0b.js.map +0 -1
  109. package/dist/getPrototypeOf-11f2726a.js +0 -2
  110. package/dist/getPrototypeOf-11f2726a.js.map +0 -1
  111. package/dist/getPrototypeOf-d346567e.js.map +0 -1
  112. package/dist/icon-630b5bba.js +0 -2
  113. package/dist/icon-86ee98d5.js +0 -2
  114. package/dist/index-11b62489.js +0 -2
  115. package/dist/index-7bf8508e.js +0 -2
  116. package/dist/toolbar-b1b9f37d.js +0 -2
  117. package/dist/toolbar-d69430a2.js +0 -2
@@ -4204,7 +4204,12 @@ export default class SVGCanvasRenderer {
4204
4204
 
4205
4205
  // Returns the class string to be appled to the link group object.
4206
4206
  getLinkGroupClass(d) {
4207
- return "d3-link-group " + this.getLinkTypeClass(d) + " " + this.getLinkCustomClass(d);
4207
+ return "d3-link-group " + this.getLinkTypeClass(d) + " " + this.getLinkBranchHighlightCLass(d) + " " + this.getLinkCustomClass(d);
4208
+ }
4209
+
4210
+ // Returns the class to be used for branch highlighting if the branchHighlight flag id set for the link.
4211
+ getLinkBranchHighlightCLass(d) {
4212
+ return (d.branchHighlight ? "d3-branch-highlight" : "");
4208
4213
  }
4209
4214
 
4210
4215
  // Returns the custom class string for the link object passed in.
@@ -4282,7 +4287,9 @@ export default class SVGCanvasRenderer {
4282
4287
  ? " d3-resized"
4283
4288
  : "";
4284
4289
 
4285
- return "d3-node-group" + supernodeClass + resizeClass + draggableClass + customClass;
4290
+ const branchHighlightClass = d.branchHighlight ? " d3-branch-highlight" : "";
4291
+
4292
+ return "d3-node-group" + supernodeClass + resizeClass + draggableClass + branchHighlightClass + customClass;
4286
4293
  }
4287
4294
 
4288
4295
  // Pushes the links to be below nodes within the nodesLinksGrp group.
@@ -61,6 +61,7 @@ class FlexibleTable extends React.Component {
61
61
  this.onSort = this.onSort.bind(this);
62
62
  this.sortHeaderClick = this.sortHeaderClick.bind(this);
63
63
  this._updateTableWidth = this._updateTableWidth.bind(this);
64
+ this._updateRows = this._updateRows.bind(this);
64
65
  this._adjustTableHeight = this._adjustTableHeight.bind(this);
65
66
  this.handleCheckedRow = this.handleCheckedRow.bind(this);
66
67
  this.handleCheckedAllRows = this.handleCheckedAllRows.bind(this);
@@ -74,8 +75,11 @@ class FlexibleTable extends React.Component {
74
75
  }
75
76
 
76
77
  componentDidUpdate(prevProps, prevState) {
77
- if (prevProps.rows !== this.props.rows ||
78
- prevProps.columns !== this.props.columns ||
78
+ if (prevProps.rows !== this.props.rows) {
79
+ this._updateRows();
80
+ }
81
+
82
+ if (prevProps.columns !== this.props.columns ||
79
83
  prevProps.noAutoSize !== this.props.noAutoSize) {
80
84
  this._adjustTableHeight();
81
85
  }
@@ -243,10 +247,19 @@ class FlexibleTable extends React.Component {
243
247
  }
244
248
  }
245
249
 
250
+ _updateRows() {
251
+ if (this.props.rows && this.props.rows !== this.state.rows) {
252
+ this.setState({ rows: this.props.rows }, () => {
253
+ this._adjustTableHeight();
254
+ });
255
+ }
256
+ }
257
+
246
258
  _adjustTableHeight() {
247
259
  if (this.props.noAutoSize) {
248
260
  return;
249
261
  }
262
+
250
263
  let newHeight = this.state.tableHeight;
251
264
  let dynamicH = this.state.dynamicHeight;
252
265
  const multiSelectTableHeight = REM_ROW_HEIGHT + REM_HEADER_HEIGHT;
@@ -380,7 +380,7 @@ class VirtualizedTable extends React.Component {
380
380
  }
381
381
 
382
382
  if (this.props.selectable) {
383
- const rowSelected = this.isRowSelected(rowData.originalRowIndex);
383
+ const rowSelected = this.props.sortDirection ? this.isRowSelected(rowData.index) : this.isRowSelected(rowData.originalRowIndex); // use current row index when Sorted
384
384
  selectedRow = this.props.selectable && rowSelected;
385
385
  if (this.props.rowSelection !== ROW_SELECTION.SINGLE) {
386
386
  const translatedRowCheckboxLabel = this.props.intl.formatMessage(
@@ -73,6 +73,7 @@ export const MESSAGE_KEYS = {
73
73
  EXPRESSION_FIELDS_TITLE: "expression.fields.title",
74
74
  EXPRESSION_VALUES_TITLE: "expression.values.title",
75
75
  EXPRESSION_FIELD_COLUMN: "expression.field.column",
76
+ EXPRESSION_ADD_COLUMN: "expression.add.column",
76
77
  EXPRESSION_FIELD_COLUMN_DESCRIPTION: "expression.field.column.description",
77
78
  EXPRESSION_STORAGE_COLUMN: "expression.storage.column",
78
79
  EXPRESSION_VALUE_COLUMN: "expression.value.column",
@@ -16,6 +16,8 @@
16
16
 
17
17
  import React from "react";
18
18
  import PropTypes from "prop-types";
19
+ import { Add16 } from "@carbon/icons-react";
20
+ import { Button } from "carbon-components-react";
19
21
  import { Switch, ContentSwitcher, Dropdown } from "carbon-components-react";
20
22
  import FlexibleTable from "./../../../components/flexible-table/flexible-table";
21
23
  import TruncatedContentTooltip from "./../../../components/truncated-content-tooltip";
@@ -38,6 +40,9 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
38
40
  id: this.recentUseCat,
39
41
  locLabel: this.recentUseCat,
40
42
  field_columns: {
43
+ add_column_info: {
44
+ locLabel: formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_ADD_COLUMN)
45
+ },
41
46
  field_column_info: {
42
47
  locLabel: formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_RECENTLY_USED_COLUMN)
43
48
  },
@@ -71,11 +76,11 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
71
76
  this.language = props.language;
72
77
 
73
78
  this.onFieldTableClick = this.onFieldTableClick.bind(this);
74
- this.onFieldTableDblClick = this.onFieldTableDblClick.bind(this);
79
+ this.onAddFieldClick = this.onAddFieldClick.bind(this);
75
80
  this.onFunctionTableClick = this.onFunctionTableClick.bind(this);
76
- this.onFunctionTableDblClick = this.onFunctionTableDblClick.bind(this);
81
+ this.onAddFunctionClick = this.onAddFunctionClick.bind(this);
77
82
  this.onValueTableClick = this.onValueTableClick.bind(this);
78
- this.onValueTableDblClick = this.onValueTableDblClick.bind(this);
83
+ this.onAddValueClick = this.onAddValueClick.bind(this);
79
84
 
80
85
  this.sortTableRows = this.sortTableRows.bind(this);
81
86
  this.shouldQuoteField = this.shouldQuoteField.bind(this);
@@ -120,7 +125,7 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
120
125
 
121
126
  }
122
127
 
123
- onFieldTableDblClick(evt, rowKey, index) {
128
+ onAddFieldClick(rowKey) {
124
129
  const field = this.state.currentFieldDataset[rowKey];
125
130
  let value = field.id;
126
131
  if (this.state.fieldCategory !== this.recentUseCat) {
@@ -145,7 +150,7 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
145
150
  });
146
151
  }
147
152
 
148
- onValueTableDblClick(evt, rowKey, index) {
153
+ onAddValueClick(rowKey) {
149
154
  if (this.props.onChange) {
150
155
  const field = this.state.currentFieldDataset[this.state.fieldSelected];
151
156
  const quote = "\"";
@@ -174,7 +179,7 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
174
179
  });
175
180
  }
176
181
 
177
- onFunctionTableDblClick(evt, rowKey, index) {
182
+ onAddFunctionClick(rowKey) {
178
183
  let field;
179
184
  if (this.state.functionCategory === this.recentUseCat) {
180
185
  field = this.props.controller.getExpressionRecentlyUsed()[rowKey];
@@ -265,7 +270,40 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
265
270
  return contentObject;
266
271
  }
267
272
 
273
+ createAddButtonContent(index, tableType) {
274
+ const addValueButtonContent = (
275
+ <Button
276
+ className="expression-add-field-button properties-expr-table-cell"
277
+ onClick={this.handleAddButtonClick.bind(this, index, tableType)}
278
+ kind="ghost"
279
+ size="small"
280
+ >
281
+ <Add16 aria-label={formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_ADD_COLUMN)} />
282
+ </Button>
283
+ );
284
+ return addValueButtonContent;
285
+ }
286
+
287
+ handleAddButtonClick(index, tableType) {
288
+ switch (tableType) {
289
+ case "value": {
290
+ this.onAddValueClick(index);
291
+ break;
292
+ }
293
+ case "field": {
294
+ this.onAddFieldClick(index);
295
+ break;
296
+ }
297
+ case "function": {
298
+ this.onAddFunctionClick(index);
299
+ break;
300
+ }
301
+ default:
302
+ }
303
+ }
304
+
268
305
  _makeDatasetFields(dataset, fieldDataset) {
306
+ const addNewColumn = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_ADD_COLUMN);
269
307
  const fieldColumn = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_FIELD_COLUMN);
270
308
  const fieldColumnDesc = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_FIELD_COLUMN_DESCRIPTION);
271
309
  const storageColumn = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_STORAGE_COLUMN);
@@ -274,6 +312,9 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
274
312
  id: "fields",
275
313
  locLabel: dropdownLabel,
276
314
  field_columns: {
315
+ add_column_info: {
316
+ locLabel: addNewColumn
317
+ },
277
318
  field_column_info: {
278
319
  locLabel: fieldColumn,
279
320
  descLabel: fieldColumnDesc
@@ -377,17 +418,31 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
377
418
  }
378
419
 
379
420
  if (categoryInfo) {
380
- fieldHeaders.push({
381
- key: "fieldName",
382
- label: categoryInfo.field_columns.field_column_info.locLabel,
383
- description: categoryInfo.field_columns.field_column_info.descLabel,
384
- resizable: true
385
- });
386
- valueHeader.push({
387
- key: "values",
388
- label: categoryInfo.field_columns.value_column_info.locLabel,
389
- description: categoryInfo.field_columns.value_column_info.descLabel
390
- });
421
+ fieldHeaders.push(
422
+ {
423
+ key: "addColumn",
424
+ label: formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_ADD_COLUMN),
425
+ width: "50px",
426
+ staticWidth: true
427
+ },
428
+ {
429
+ key: "fieldName",
430
+ label: categoryInfo.field_columns.field_column_info.locLabel,
431
+ description: categoryInfo.field_columns.field_column_info.descLabel,
432
+ resizable: true
433
+ });
434
+ valueHeader.push(
435
+ {
436
+ key: "addColumn",
437
+ label: formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_ADD_COLUMN),
438
+ width: "50px",
439
+ staticWidth: true
440
+ },
441
+ {
442
+ key: "values",
443
+ label: categoryInfo.field_columns.value_column_info.locLabel,
444
+ description: categoryInfo.field_columns.value_column_info.descLabel
445
+ });
391
446
  if (categoryInfo.field_columns.additional_column_info) {
392
447
  for (let i = 0; i < categoryInfo.field_columns.additional_column_info.length; i++) {
393
448
  sortable.push(categoryInfo.field_columns.additional_column_info[i].id);
@@ -404,8 +459,9 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
404
459
  const field = tableContents.field_value_groups[index];
405
460
  const fieldColumns = [];
406
461
  if (!this.state.fieldFilterText || this.state.fieldFilterText.length === 0 ||
407
- (field.id.toLowerCase().indexOf(this.state.fieldFilterText.toLowerCase()) > -1)) {
408
- fieldColumns.push({ column: "fieldName", content: this.createContentObject(field.id), value: field.id });
462
+ (field.id.toLowerCase().indexOf(this.state.fieldFilterText.toLowerCase()) > -1)) {
463
+ fieldColumns.push({ column: "addColumn", content: this.createAddButtonContent(index, "field"), value: field.id },
464
+ { column: "fieldName", content: this.createContentObject(field.id), value: field.id });
409
465
  if (field.additional_column_entries) {
410
466
  this._makeAdditionalColumnsContent(field, fieldColumns);
411
467
  }
@@ -453,7 +509,6 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
453
509
  rowSelection={ROW_SELECTION.SINGLE}
454
510
  updateRowSelections={this.onFieldTableClick}
455
511
  selectedRows={[selectedField]}
456
- onRowDoubleClick={this.onFieldTableDblClick}
457
512
  onSort={this.setSortColumn.bind(this, "fieldTable")}
458
513
  light={this.props.controller.getLight()}
459
514
  emptyTablePlaceholder={emptyFieldsLabel}
@@ -471,7 +526,6 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
471
526
  rowSelection={ROW_SELECTION.SINGLE}
472
527
  updateRowSelections={this.onValueTableClick}
473
528
  selectedRows={[selectedValue]}
474
- onRowDoubleClick={this.onValueTableDblClick}
475
529
  onSort={this.setSortColumn.bind(this, "valuesTable")}
476
530
  light={this.props.controller.getLight()}
477
531
  emptyTablePlaceholder={emptyValuesLabel}
@@ -504,9 +558,11 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
504
558
 
505
559
  _addValueRow(content, index, valuesTableData) {
506
560
  if (!this.state.valueFilterText || this.state.valueFilterText.length === 0 ||
507
- (String(content).toLowerCase()
508
- .indexOf(this.state.valueFilterText.toLowerCase()) > -1)) {
509
- const valueColumns = [{ column: "values", content: this.createContentObject(content), value: content }];
561
+ (String(content).toLowerCase()
562
+ .indexOf(this.state.valueFilterText.toLowerCase()) > -1)) {
563
+ const valueColumns = [
564
+ { column: "addColumn", content: this.createAddButtonContent(index, "value"), value: content },
565
+ { column: "values", content: this.createContentObject(content), value: content }];
510
566
  valuesTableData.push({ columns: valueColumns, rowKey: index });
511
567
  }
512
568
  }
@@ -597,10 +653,12 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
597
653
  MESSAGE_KEYS.EXPRESSION_FUNCTION_COLUMN);
598
654
  const returnColumn = formatMessage(this.reactIntl,
599
655
  MESSAGE_KEYS.EXPRESSION_RETURN_COLUMN);
656
+ const addNewColumn = formatMessage(this.reactIntl,
657
+ MESSAGE_KEYS.EXPRESSION_ADD_COLUMN);
600
658
 
601
-
602
- headers.push({ key: "function", label: functionColumn, width: 73, resizable: true });
603
- headers.push({ key: "return", label: returnColumn, width: 27 });
659
+ headers.push({ key: "addColumn", label: addNewColumn, width: "50px", staticWidth: true });
660
+ headers.push({ key: "function", label: functionColumn, width: 50, resizable: true });
661
+ headers.push({ key: "return", label: returnColumn, width: 30 });
604
662
  const table = this._buildFunctionTable(this.state.functionCategory);
605
663
 
606
664
  let data = table.rows;
@@ -627,7 +685,6 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
627
685
  rowSelection={ROW_SELECTION.SINGLE}
628
686
  updateRowSelections={this.onFunctionTableClick}
629
687
  selectedRows={[selectedFunction]}
630
- onRowDoubleClick={this.onFunctionTableDblClick}
631
688
  onSort={this.setSortColumn.bind(this, "functionTable")}
632
689
  light={this.props.controller.getLight()}
633
690
  emptyTablePlaceholder={functionsEmptyLabel}
@@ -650,6 +707,7 @@ export default class ExpressionSelectFieldOrFunction extends React.Component {
650
707
  if (!this.state.functionFilterText || this.state.functionFilterText.length === 0 ||
651
708
  (catFunction.locLabel.toLowerCase().indexOf(this.state.functionFilterText.toLowerCase()) > -1)) {
652
709
  const returnType = catFunction.locReturnType ? catFunction.locReturnType : catFunction.return_type;
710
+ columns.push({ column: "addColumn", content: this.createAddButtonContent(index, "function"), value: catFunction.id });
653
711
  columns.push({ column: "function", content: this.createContentObject(catFunction.locLabel), value: catFunction.locLabel });
654
712
  columns.push({ column: "return", content: this.createContentObject(returnType), value: returnType });
655
713
  table.rows.push({ columns: columns, rowKey: index });
@@ -57,7 +57,6 @@ function setExpressionInfo(inExpressionInfo) {
57
57
  if (inExpressionInfo.fields.field_categories) {
58
58
  inExpressionInfo.fields.field_categories.forEach((fieldCat) => {
59
59
  fieldCat.locLabel = l10nProvider.l10nLabel(fieldCat, fieldCat.id);
60
-
61
60
  fieldCat.field_columns.field_column_info.locLabel = l10nProvider.l10nLabel(fieldCat.field_columns.field_column_info, fieldCat.id + ".field_column_info");
62
61
  fieldCat.field_columns.value_column_info.locLabel = l10nProvider.l10nLabel(fieldCat.field_columns.value_column_info, fieldCat.id + ".value_column_info");
63
62
 
@@ -395,7 +395,8 @@ export default class PropertiesController {
395
395
  parseUiContent(this.panelTree, this.form, PANEL_TREE_ROOT);
396
396
  }
397
397
 
398
- _addToControlValues(sameParameterDefRendered, resolveParameterRefs) {
398
+ _addToControlValues(sameParameterDefRendered, resolveParameterRefs, setDefaultValues) {
399
+ const defaultControlValues = {};
399
400
  for (const keyName in this.controls) {
400
401
  if (!has(this.controls, keyName)) {
401
402
  continue;
@@ -421,8 +422,11 @@ export default class PropertiesController {
421
422
  controlValue = PropertyUtils.convertObjectStructureToArray(control.valueDef.isList, control.subControls, controlValue);
422
423
  }
423
424
 
424
- // When parameterDef is dynamically updated, don't set INITIAL_LOAD on pre-existing properties
425
- if (sameParameterDefRendered && !this.differentProperties.includes(control.name)) {
425
+ if (setDefaultValues) {
426
+ // When setDefaultValues is set, update all default values in a single call
427
+ defaultControlValues[control.name] = controlValue;
428
+ } else if (sameParameterDefRendered && !this.differentProperties.includes(control.name)) {
429
+ // When parameterDef is dynamically updated, don't set INITIAL_LOAD on pre-existing properties
426
430
  this.updatePropertyValue(propertyId, controlValue, true);
427
431
  } else {
428
432
  this.updatePropertyValue(propertyId, controlValue, true, UPDATE_TYPE.INITIAL_LOAD);
@@ -435,6 +439,24 @@ export default class PropertiesController {
435
439
  }
436
440
  }
437
441
  }
442
+
443
+ if (setDefaultValues) {
444
+ this.setDefaultControlValues(defaultControlValues);
445
+ }
446
+ }
447
+
448
+ setDefaultControlValues(defaultControlValues) {
449
+ // Update all default values
450
+ this.propertiesStore.setPropertyValues(defaultControlValues);
451
+
452
+ // Single call to the propertyListener
453
+ if (this.handlers.propertyListener) {
454
+ this.handlers.propertyListener(
455
+ {
456
+ action: ACTIONS.SET_PROPERTIES // Setting the default control values
457
+ }
458
+ );
459
+ }
438
460
  }
439
461
 
440
462
  _populateFieldData(controlValue, control) {
@@ -1271,7 +1293,7 @@ export default class PropertiesController {
1271
1293
  }
1272
1294
 
1273
1295
  if (options && options.setDefaultValues) {
1274
- this._addToControlValues(true);
1296
+ this._addToControlValues(false, false, true);
1275
1297
  }
1276
1298
  }
1277
1299
 
@@ -2302,6 +2302,18 @@ export default class ObjectModel {
2302
2302
  return port;
2303
2303
  }
2304
2304
 
2305
+ setObjectsBranchHighlight(pipelineObjIds) {
2306
+ this.store.dispatch({ type: "SET_OBJECTS_BRANCH_HIGHLIGHT", data: { pipelineObjIds: pipelineObjIds } });
2307
+ }
2308
+
2309
+ setLinksBranchHighlight(pipelineLinkIds) {
2310
+ this.store.dispatch({ type: "SET_LINKS_BRANCH_HIGHLIGHT", data: { pipelineObjIds: pipelineLinkIds } });
2311
+ }
2312
+
2313
+ unsetAllBranchHighlight() {
2314
+ this.store.dispatch({ type: "UNSET_OBJECTS_BRANCH_HIGHLIGHT" });
2315
+ }
2316
+
2305
2317
  // ---------------------------------------------------------------------------
2306
2318
  // Clipboard methods
2307
2319
  // ---------------------------------------------------------------------------
@@ -445,7 +445,9 @@ export default (state = {}, action) => {
445
445
  }
446
446
 
447
447
  case "SET_OBJECTS_STYLE":
448
- case "SET_LINKS_STYLE": {
448
+ case "SET_LINKS_STYLE":
449
+ case "SET_OBJECTS_BRANCH_HIGHLIGHT":
450
+ case "SET_LINKS_BRANCH_HIGHLIGHT": {
449
451
  const pipelineIds = Object.keys(action.data.pipelineObjIds);
450
452
  const canvasInfoPipelines = state.pipelines.map((pipeline) => {
451
453
  if (pipelineIds.indexOf(pipeline.id) > -1) {
@@ -461,6 +463,16 @@ export default (state = {}, action) => {
461
463
  return Object.assign({}, state, { pipelines: canvasInfoPipelines });
462
464
  }
463
465
 
466
+ case "UNSET_OBJECTS_BRANCH_HIGHLIGHT": {
467
+ const canvasInfoPipelines = state.pipelines.map((pipeline) => {
468
+ return Object.assign({}, pipeline, {
469
+ nodes: nodes(pipeline.nodes, action),
470
+ comments: comments(pipeline.comments, action),
471
+ links: links(pipeline.links, action) });
472
+ });
473
+ return Object.assign({}, state, { pipelines: canvasInfoPipelines });
474
+ }
475
+
464
476
  case "SET_OBJECTS_MULTI_STYLE":
465
477
  case "SET_LINKS_MULTI_STYLE": {
466
478
  const canvasInfoPipelines = state.pipelines.map((pipeline) => {
@@ -206,7 +206,6 @@ export default (state = [], action) => {
206
206
  return comment;
207
207
  });
208
208
 
209
-
210
209
  default:
211
210
  return state;
212
211
  }
@@ -251,6 +251,22 @@ export default (state = [], action) => {
251
251
  return link;
252
252
  });
253
253
 
254
+ case "SET_LINKS_BRANCH_HIGHLIGHT":
255
+ return state.map((link) => {
256
+ if (action.data.objIds.indexOf(link.id) > -1) {
257
+ return Object.assign({}, link, { branchHighlight: true });
258
+ }
259
+ return link;
260
+ });
261
+
262
+ case "UNSET_OBJECTS_BRANCH_HIGHLIGHT":
263
+ return state.map((link) => {
264
+ if (link.branchHighlight) {
265
+ return Object.assign({}, link, { branchHighlight: false });
266
+ }
267
+ return link;
268
+ });
269
+
254
270
  case "SET_LINK_DECORATIONS":
255
271
  return state.map((link, index) => {
256
272
  if (action.data.linkId === link.id) {
@@ -287,6 +287,22 @@ export default (state = [], action) => {
287
287
  return node;
288
288
  });
289
289
 
290
+ case "SET_OBJECTS_BRANCH_HIGHLIGHT":
291
+ return state.map((node) => {
292
+ if (action.data.objIds.indexOf(node.id) > -1) {
293
+ return Object.assign({}, node, { branchHighlight: true });
294
+ }
295
+ return node;
296
+ });
297
+
298
+ case "UNSET_OBJECTS_BRANCH_HIGHLIGHT":
299
+ return state.map((node) => {
300
+ if (node.branchHighlight) {
301
+ return Object.assign({}, node, { branchHighlight: false });
302
+ }
303
+ return node;
304
+ });
305
+
290
306
  case "SET_INPUT_PORT_LABEL":
291
307
  case "SET_INPUT_PORT_SUBFLOW_NODE_REF":
292
308
  return state.map((node, index) => {