@elyra/canvas 12.32.2 → 12.34.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.
- package/dist/{_baseIteratee-eabd2a94.js → _baseIteratee-2a601011.js} +2 -2
- package/dist/{_baseIteratee-eabd2a94.js.map → _baseIteratee-2a601011.js.map} +1 -1
- package/dist/{_baseIteratee-e1311552.js → _baseIteratee-7fb1949c.js} +2 -2
- package/dist/{_baseIteratee-e1311552.js.map → _baseIteratee-7fb1949c.js.map} +1 -1
- package/dist/{canvas-constants-72222288.js → canvas-constants-29b7f65c.js} +2 -2
- package/dist/{canvas-constants-72222288.js.map → canvas-constants-29b7f65c.js.map} +1 -1
- package/dist/{canvas-constants-903046ab.js → canvas-constants-85883d4c.js} +2 -2
- package/dist/{canvas-constants-903046ab.js.map → canvas-constants-85883d4c.js.map} +1 -1
- package/dist/{canvas-controller-c0b65951.js → canvas-controller-273d4b5b.js} +2 -2
- package/dist/{canvas-controller-c0b65951.js.map → canvas-controller-273d4b5b.js.map} +1 -1
- package/dist/{canvas-controller-2df80dc3.js → canvas-controller-96abce12.js} +2 -2
- package/dist/{canvas-controller-2df80dc3.js.map → canvas-controller-96abce12.js.map} +1 -1
- package/dist/{canvas-logger-6f90b136.js → canvas-logger-34ca361a.js} +2 -2
- package/dist/{canvas-logger-6f90b136.js.map → canvas-logger-34ca361a.js.map} +1 -1
- package/dist/{canvas-logger-3bfbcf85.js → canvas-logger-fec87cd1.js} +2 -2
- package/dist/{canvas-logger-3bfbcf85.js.map → canvas-logger-fec87cd1.js.map} +1 -1
- package/dist/common-canvas-5ccce28e.js +2 -0
- package/dist/common-canvas-5ccce28e.js.map +1 -0
- package/dist/common-canvas-f471a9f3.js +2 -0
- package/dist/common-canvas-f471a9f3.js.map +1 -0
- package/dist/common-canvas.es.js +1 -1
- package/dist/common-canvas.js +1 -1
- package/dist/common-properties-51bd2ecc.js +2 -0
- package/dist/common-properties-51bd2ecc.js.map +1 -0
- package/dist/common-properties-e82771ef.js +2 -0
- package/dist/common-properties-e82771ef.js.map +1 -0
- package/dist/{context-menu-wrapper-5846a20e.js → context-menu-wrapper-19a1cf72.js} +2 -2
- package/dist/{context-menu-wrapper-5846a20e.js.map → context-menu-wrapper-19a1cf72.js.map} +1 -1
- package/dist/{context-menu-wrapper-ac5e8c7a.js → context-menu-wrapper-c3a98c63.js} +2 -2
- package/dist/{context-menu-wrapper-ac5e8c7a.js.map → context-menu-wrapper-c3a98c63.js.map} +1 -1
- package/dist/{createClass-826941b3.js → createClass-09bc08f7.js} +1 -1
- package/dist/createClass-09bc08f7.js.map +1 -0
- package/dist/{createClass-be661622.js → createClass-ffbbe837.js} +1 -1
- package/dist/createClass-ffbbe837.js.map +1 -0
- package/dist/{datarecord-metadata-v3-schema-64329ae4.js → datarecord-metadata-v3-schema-531c7b07.js} +2 -2
- package/dist/{datarecord-metadata-v3-schema-64329ae4.js.map → datarecord-metadata-v3-schema-531c7b07.js.map} +1 -1
- package/dist/{datarecord-metadata-v3-schema-dd7370da.js → datarecord-metadata-v3-schema-db5150c5.js} +2 -2
- package/dist/{datarecord-metadata-v3-schema-dd7370da.js.map → datarecord-metadata-v3-schema-db5150c5.js.map} +1 -1
- package/dist/{flexible-table-23d61157.js → flexible-table-8c6db0fc.js} +2 -2
- package/dist/flexible-table-8c6db0fc.js.map +1 -0
- package/dist/{flexible-table-4259d869.js → flexible-table-b9c08069.js} +2 -2
- package/dist/flexible-table-b9c08069.js.map +1 -0
- package/dist/{getPrototypeOf-3751add9.js → getPrototypeOf-012c454b.js} +2 -2
- package/dist/{getPrototypeOf-3751add9.js.map → getPrototypeOf-012c454b.js.map} +1 -1
- package/dist/{getPrototypeOf-1e698126.js → getPrototypeOf-5f227292.js} +2 -2
- package/dist/{getPrototypeOf-1e698126.js.map → getPrototypeOf-5f227292.js.map} +1 -1
- package/dist/{icon-04f858ce.js → icon-a9c3f51e.js} +2 -2
- package/dist/{icon-04f858ce.js.map → icon-a9c3f51e.js.map} +1 -1
- package/dist/{icon-8cc7816d.js → icon-de9c6b33.js} +2 -2
- package/dist/{icon-8cc7816d.js.map → icon-de9c6b33.js.map} +1 -1
- package/dist/{index-101f9560.js → index-9960d3bf.js} +2 -2
- package/dist/{index-101f9560.js.map → index-9960d3bf.js.map} +1 -1
- package/dist/{index-2788d55d.js → index-d4a58ddb.js} +2 -2
- package/dist/{index-2788d55d.js.map → index-d4a58ddb.js.map} +1 -1
- package/dist/lib/canvas-controller.es.js +1 -1
- package/dist/lib/canvas-controller.js +1 -1
- package/dist/lib/canvas.es.js +1 -1
- package/dist/lib/canvas.js +1 -1
- package/dist/lib/command-stack.es.js +1 -1
- package/dist/lib/command-stack.js +1 -1
- package/dist/lib/context-menu.es.js +1 -1
- package/dist/lib/context-menu.js +1 -1
- package/dist/lib/properties/field-picker.es.js +1 -1
- package/dist/lib/properties/field-picker.js +1 -1
- package/dist/lib/properties/flexible-table.es.js +1 -1
- package/dist/lib/properties/flexible-table.js +1 -1
- package/dist/lib/properties.es.js +1 -1
- package/dist/lib/properties.js +1 -1
- package/dist/lib/tooltip.es.js +1 -1
- package/dist/lib/tooltip.js +1 -1
- package/dist/styles/common-canvas.min.css +1 -1
- package/dist/styles/common-canvas.min.css.map +1 -1
- package/dist/toolbar-233c09a8.js +2 -0
- package/dist/toolbar-233c09a8.js.map +1 -0
- package/dist/toolbar-cdb38f4a.js +2 -0
- package/dist/toolbar-cdb38f4a.js.map +1 -0
- package/package.json +3 -3
- package/src/common-canvas/cc-central-items.jsx +81 -17
- package/src/common-canvas/cc-contents.jsx +3 -19
- package/src/common-canvas/cc-right-flyout.jsx +1 -1
- package/src/common-canvas/common-canvas.jsx +1 -50
- package/src/common-canvas/common-canvas.scss +23 -45
- package/src/common-canvas/svg-canvas-d3.js +2 -1
- package/src/common-canvas/svg-canvas-renderer.js +255 -90
- package/src/common-canvas/svg-canvas-utils-nodes.js +0 -4
- package/src/common-properties/components/flexible-table/flexible-table.jsx +5 -5
- package/src/common-properties/constants/constants.js +1 -1
- package/src/common-properties/controls/dropdown/dropdown.jsx +8 -1
- package/src/common-properties/controls/numberfield/numberfield.jsx +21 -2
- package/src/notification-panel/notification-panel.scss +1 -0
- package/src/toolbar/toolbar-action-item.jsx +1 -1
- package/stats.html +1 -1
- package/dist/common-canvas-55d8916f.js +0 -2
- package/dist/common-canvas-55d8916f.js.map +0 -1
- package/dist/common-canvas-8eb241dc.js +0 -2
- package/dist/common-canvas-8eb241dc.js.map +0 -1
- package/dist/common-properties-96c9c88a.js +0 -2
- package/dist/common-properties-96c9c88a.js.map +0 -1
- package/dist/common-properties-c5292c66.js +0 -2
- package/dist/common-properties-c5292c66.js.map +0 -1
- package/dist/createClass-826941b3.js.map +0 -1
- package/dist/createClass-be661622.js.map +0 -1
- package/dist/flexible-table-23d61157.js.map +0 -1
- package/dist/flexible-table-4259d869.js.map +0 -1
- package/dist/toolbar-12f6def6.js +0 -2
- package/dist/toolbar-12f6def6.js.map +0 -1
- package/dist/toolbar-55e2020e.js +0 -2
- package/dist/toolbar-55e2020e.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"common-properties-96c9c88a.js","sources":["../node_modules/lodash/_basePickBy.js","../node_modules/lodash/_basePick.js","../node_modules/lodash/pick.js","../src/common-properties/components/properties-modal/properties-modal.jsx","../src/common-properties/components/properties-modal/index.js","../src/common-properties/components/properties-editor/properties-editor.jsx","../src/common-properties/components/properties-editor/index.js","../src/common-properties/panels/tearsheet/tearsheet.jsx","../src/common-properties/components/main-editor-properties-buttons/main-editor-properties-buttons.jsx","../node_modules/lodash/_baseFilter.js","../node_modules/lodash/filter.js","../src/common-properties/actions.js","../src/common-properties/panels/selector/selector.jsx","../src/common-properties/components/wide-flyout/wide-flyout.jsx","../src/common-properties/components/wide-flyout/index.js","../src/common-properties/util/control-utils.js","../src/common-properties/panels/summary/summary.jsx","../src/common-properties/panels/twisty/twisty.jsx","../src/common-properties/panels/sub-panel/invoker.jsx","../src/common-properties/panels/sub-panel/button.jsx","../src/common-properties/panels/column/column.jsx","../src/common-properties/panels/control/control.jsx","../src/common-properties/panels/subtabs/subtabs.jsx","../src/common-properties/panels/text-panel/text-panel.jsx","../src/common-properties/panels/action-panel/action-panel.jsx","../src/common-properties/actions/button/button.jsx","../src/common-properties/actions/image/image.jsx","../src/common-properties/actions/action-factory.js","../src/common-properties/components/editor-form/editor-form.jsx","../node_modules/lodash/propertyOf.js","../src/common-properties/util/L10nProvider.js","../src/common-properties/form/GroupInfo.js","../src/common-properties/form/ActionInfo.js","../src/common-properties/form/ParameterInfo.js","../src/common-properties/form/ButtonInfo.js","../src/common-properties/form/StructureInfo.js","../src/common-properties/form/PropertyDef.js","../src/common-properties/form/ControlInfo.js","../src/common-properties/form/UIItem.js","../src/common-properties/form/EditorForm.js","../src/common-properties/form/Conditions.js","../src/common-properties/form/Form.js","../src/command-actions/commonPropertiesAction.js","../node_modules/lodash/_createAssigner.js","../node_modules/lodash/assign.js","../src/common-properties/reducers/properties.js","../src/common-properties/reducers/control-states.js","../src/common-properties/reducers/panel-states.js","../src/common-properties/reducers/action-states.js","../src/common-properties/reducers/error-messages.js","../src/common-properties/reducers/dataset-metadata.js","../src/common-properties/reducers/row-selections.js","../src/common-properties/reducers/row-static.js","../src/common-properties/reducers/component-metadata.js","../src/common-properties/reducers/disable-row-move-buttons.js","../src/common-properties/reducers/save-button-disable.js","../src/common-properties/reducers/wide-flyout-primary-button-disable.js","../src/common-properties/reducers/properties-settings.js","../src/common-properties/reducers/tearsheet-states.js","../src/common-properties/properties-store.js","../src/common-properties/ui-conditions/ui-conditions-parser.js","../src/common-properties/controls/expression/expressionInfo-parser.js","../src/common-properties/ui-conditions/ui-groups-parser.js","../node_modules/lodash/unionWith.js","../node_modules/lodash/_baseIntersection.js","../node_modules/lodash/_castArrayLikeObject.js","../node_modules/lodash/intersectionWith.js","../src/common-properties/ui-conditions/ui-conditions.js","../src/common-properties/ui-conditions/conditions-utils.js","../node_modules/lodash/intersection.js","../src/common-properties/components/validation-message/validation-message.jsx","../src/common-properties/components/validation-message/index.js","../src/common-properties/util/date-utils.js","../src/common-properties/controls/readonly/readonly.jsx","../src/common-properties/controls/textfield/textfield.jsx","../src/common-properties/controls/toggletext/toggletext.jsx","../src/common-properties/controls/textarea/textarea.jsx","../src/common-properties/controls/numberfield/numberfield.jsx","../node_modules/lodash/findIndex.js","../src/common-properties/components/table-buttons/table-buttons.jsx","../src/common-properties/panels/sub-panel/cell.jsx","../src/common-properties/controls/abstract-table.jsx","../src/common-properties/components/empty-table/empty-table.jsx","../src/common-properties/components/empty-table/index.js","../src/common-properties/components/moveable-table-rows/moveable-table-rows.jsx","../src/common-properties/controls/list/list.jsx","../src/common-properties/controls/expression/expression-builder/expression-select-field-function.jsx","../src/common-properties/controls/expression/expression-builder/expression-select-operator.jsx","../src/common-properties/controls/expression/expression-builder/expression-selection-panel.jsx","../src/common-properties/controls/expression/expression-builder/expression-builder.jsx","../src/common-properties/controls/expression/expression-toggle/expression-toggle.jsx","../src/common-properties/controls/expression/languages/python-hint.js","../src/common-properties/controls/expression/languages/r-hint.js","../src/common-properties/controls/expression/languages/CLEM-hint.js","../src/common-properties/controls/expression/expression.jsx","../src/common-properties/controls/passwordfield/passwordfield.jsx","../src/common-properties/controls/datefield/datefield.jsx","../src/common-properties/controls/datepicker/datepicker.jsx","../src/common-properties/controls/datepicker-range/datepicker-range.jsx","../src/common-properties/controls/timefield/timefield.jsx","../src/common-properties/controls/checkbox/checkbox.jsx","../src/common-properties/controls/toggle/toggle.jsx","../src/common-properties/controls/checkboxset/checkboxset.jsx","../src/common-properties/controls/radioset/radioset.jsx","../src/common-properties/controls/dropdown/dropdown.jsx","../src/common-properties/controls/multiselect/multiselect.jsx","../src/common-properties/controls/someofselect/someofselect.jsx","../src/common-properties/controls/selectcolumns/selectcolumns.jsx","../src/common-properties/controls/structureeditor/structureeditor.jsx","../node_modules/lodash/reject.js","../node_modules/lodash/negate.js","../src/common-properties/controls/structuretable/structuretable.jsx","../src/common-properties/controls/structurelisteditor/structurelisteditor.jsx","../src/common-properties/controls/readonlytable/readonlytable.jsx","../src/common-properties/components/control-item/control-item.jsx","../src/common-properties/controls/control-factory.js","../src/common-properties/ui-conditions/condition-ops/cellNotEmpty.js","../src/common-properties/ui-conditions/condition-ops/colNotExists.js","../src/common-properties/ui-conditions/condition-ops/colDoesExists.js","../node_modules/lodash/_baseValues.js","../node_modules/lodash/values.js","../node_modules/lodash/includes.js","../src/common-properties/ui-conditions/condition-ops/contains.js","../src/common-properties/ui-conditions/condition-ops/equals.js","../src/common-properties/ui-conditions/condition-ops/greaterThan.js","../src/common-properties/ui-conditions/condition-ops/isEmpty.js","../src/common-properties/ui-conditions/condition-ops/isNotEmpty.js","../src/common-properties/ui-conditions/condition-ops/lessThan.js","../src/common-properties/ui-conditions/condition-ops/matches.js","../src/common-properties/ui-conditions/condition-ops/notContains.js","../src/common-properties/ui-conditions/condition-ops/notEquals.js","../src/common-properties/ui-conditions/condition-ops/notMatches.js","../src/common-properties/ui-conditions/condition-ops/isDateTime.js","../src/common-properties/ui-conditions/condition-ops/dmTypeEquals.js","../src/common-properties/ui-conditions/condition-ops/dmTypeNotEquals.js","../src/common-properties/ui-conditions/condition-ops/dmMeasurementEquals.js","../src/common-properties/ui-conditions/condition-ops/dmMeasurementNotEquals.js","../src/common-properties/ui-conditions/condition-ops/dmRoleEquals.js","../src/common-properties/ui-conditions/condition-ops/dmRoleNotEquals.js","../src/common-properties/ui-conditions/condition-ops/lengthEquals.js","../src/common-properties/ui-conditions/condition-ops/lengthLessThan.js","../src/common-properties/ui-conditions/condition-ops/lengthGreaterThan.js","../src/common-properties/ui-conditions/condition-ops/condition-ops.js","../src/common-properties/properties-controller.js","../src/common-properties/schema-validator/properties-schema-validator.js","../src/common-properties/components/title-editor/title-editor.jsx","../src/common-properties/properties-main/properties-main.jsx","../src/common-properties/common-properties.jsx"],"sourcesContent":["var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n","var basePickBy = require('./_basePickBy'),\n hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nmodule.exports = basePick;\n","var basePick = require('./_basePick'),\n flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Modal } from \"carbon-components-react\";\nimport classNames from \"classnames\";\nimport { Portal } from \"react-portal\";\nimport { Size } from \"./../../constants/form-constants\";\nimport { CARBON_MODAL_SIZE_XSMALL, CARBON_MODAL_SIZE_SMALL, CARBON_MODAL_SIZE_LARGE } from \"./../../constants/constants\";\n\nexport default class PropertiesModal extends Component {\n\n\t// Map the editor_size in paramDef to the Carbon modal sizes\n\tgetCarbonModalSize() {\n\t\tswitch (this.props.bsSize) {\n\t\tcase Size.SMALL: return CARBON_MODAL_SIZE_XSMALL;\n\t\tcase Size.LARGE: return CARBON_MODAL_SIZE_LARGE;\n\t\tcase Size.MAX: return CARBON_MODAL_SIZE_LARGE;\n\t\tcase Size.MEDIUM:\n\t\tdefault: return CARBON_MODAL_SIZE_SMALL;\n\t\t}\n\t}\n\n\trender() {\n\t\tconst modalSize = this.getCarbonModalSize();\n\n\t\treturn (\n\t\t\t<Portal>\n\t\t\t\t<Modal\n\t\t\t\t\tclassName={classNames(\"properties-modal\", { \"noButtons\": this.props.showPropertiesButtons === false }, this.props.classNames)}\n\t\t\t\t\topen\n\t\t\t\t\tmodalHeading={this.props.title}\n\t\t\t\t\tprimaryButtonText={this.props.applyLabel}\n\t\t\t\t\tsecondaryButtonText={this.props.rejectLabel}\n\t\t\t\t\tonRequestSubmit={this.props.okHandler}\n\t\t\t\t\tonSecondarySubmit={this.props.cancelHandler}\n\t\t\t\t\taria-label=\"\"\n\t\t\t\t\tsize={modalSize}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"properties-modal-children\">\n\t\t\t\t\t\t{this.props.children}\n\t\t\t\t\t</div>\n\t\t\t\t</Modal>\n\t\t\t</Portal>\n\t\t);\n\t}\n}\n\nPropertiesModal.propTypes = {\n\tcancelHandler: PropTypes.func,\n\tokHandler: PropTypes.func,\n\tbsSize: PropTypes.string,\n\ttitle: PropTypes.string,\n\tchildren: PropTypes.element,\n\tshowPropertiesButtons: PropTypes.bool,\n\tapplyLabel: PropTypes.string,\n\trejectLabel: PropTypes.string,\n\tclassNames: PropTypes.string\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport PropertiesModal from \"./properties-modal.jsx\";\nexport default PropertiesModal;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport PropertiesButtons from \"./../properties-buttons\";\n\nexport default class PropertiesEditor extends Component {\n\n\trender() {\n\t\tconst classSize = (typeof this.props.bsSize === \"undefined\") ? \"large\" : this.props.bsSize;\n\t\tconst propertyEditingClass = \"properties-editing properties-\" + classSize;\n\t\tconst buttons = (<PropertiesButtons\n\t\t\tokHandler={this.props.okHandler}\n\t\t\tcancelHandler={this.props.cancelHandler}\n\t\t\tapplyLabel={this.props.applyLabel}\n\t\t\trejectLabel={this.props.rejectLabel}\n\t\t\tshowPropertiesButtons={this.props.showPropertiesButtons}\n\t\t/>);\n\n\t\treturn (\n\t\t\t<div className={propertyEditingClass} >\n\t\t\t\t<h2>{this.props.title}</h2>\n\t\t\t\t<div className=\"properties-body\">\n\t\t\t\t\t{this.props.children}\n\t\t\t\t</div>\n\t\t\t\t{buttons}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nPropertiesEditor.propTypes = {\n\tcancelHandler: PropTypes.func,\n\tokHandler: PropTypes.func,\n\tbsSize: PropTypes.string,\n\ttitle: PropTypes.string,\n\tapplyLabel: PropTypes.string,\n\trejectLabel: PropTypes.string,\n\tchildren: PropTypes.element,\n\tshowPropertiesButtons: PropTypes.bool\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport PropertiesEditor from \"./properties-editor.jsx\";\nexport default PropertiesEditor;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { injectIntl } from \"react-intl\";\nimport classNames from \"classnames\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport { ComposedModal, ModalHeader, ModalBody } from \"carbon-components-react\";\nimport { Portal } from \"react-portal\";\nimport { MESSAGE_KEYS } from \"./../../constants/constants\";\nimport PropertiesButtons from \"../../components/properties-buttons\";\n\nclass TearSheet extends Component {\n\trender() {\n\t\tconst title = this.props.tearsheet ? this.props.tearsheet.title : null;\n\t\tconst description = this.props.tearsheet ? this.props.tearsheet.description : null;\n\t\tconst content = this.props.tearsheet ? this.props.tearsheet.content : null;\n\t\tconst displayFooterButtons = this.props.showPropertiesButtons && !this.props.applyOnBlur;\n\t\tconst displayTabs = !Array.isArray(content);\n\n\t\tconst buttons = this.props.applyOnBlur\n\t\t\t? null\n\t\t\t: (<PropertiesButtons\n\t\t\t\tokHandler={this.props.okHandler}\n\t\t\t\tcancelHandler={this.props.cancelHandler}\n\t\t\t\tapplyLabel={this.props.applyLabel}\n\t\t\t\trejectLabel={this.props.rejectLabel}\n\t\t\t\tshowPropertiesButtons={this.props.showPropertiesButtons}\n\t\t\t/>);\n\n\t\treturn (\n\t\t\t<Portal>\n\t\t\t\t<ComposedModal\n\t\t\t\t\tclassName={classNames(\"properties-tearsheet-panel\", { \"properties-tearsheet-stacked\": this.props.stacked })}\n\t\t\t\t\topen={this.props.open}\n\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\taria-label={formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_LABEL, { label: title })}\n\t\t\t\t\tpreventCloseOnClickOutside\n\t\t\t\t>\n\t\t\t\t\t{title === null\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: (<ModalHeader\n\t\t\t\t\t\t\tclassName={classNames(\"properties-tearsheet-header\",\n\t\t\t\t\t\t\t\t{ \"with-buttons\": displayFooterButtons },\n\t\t\t\t\t\t\t\t{ \"with-tabs\": displayTabs },\n\t\t\t\t\t\t\t\t{ \"hide-close-button\": typeof this.props.onCloseCallback !== \"function\" })}\n\t\t\t\t\t\t\ttitle={title}\n\t\t\t\t\t\t\tbuttonOnClick={this.props.onCloseCallback}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{description ? (<p>{description}</p>) : null}\n\t\t\t\t\t\t</ModalHeader>)\n\t\t\t\t\t}\n\t\t\t\t\t<ModalBody className={classNames(\"properties-tearsheet-body\",\n\t\t\t\t\t\t{ \"with-buttons\": displayFooterButtons },\n\t\t\t\t\t\t{ \"with-tabs\": displayTabs })}\n\t\t\t\t\t>\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</ModalBody>\n\t\t\t\t\t{buttons}\n\t\t\t\t</ComposedModal>\n\t\t\t</Portal>);\n\t}\n}\nTearSheet.propTypes = {\n\topen: PropTypes.bool,\n\tstacked: PropTypes.bool,\n\tonCloseCallback: PropTypes.func,\n\ttearsheet: PropTypes.shape({\n\t\ttitle: PropTypes.string,\n\t\tdescription: PropTypes.string,\n\t\tcontent: PropTypes.oneOfType([\n\t\t\tPropTypes.array,\n\t\t\tPropTypes.object\n\t\t])\n\t}),\n\tshowPropertiesButtons: PropTypes.bool,\n\tapplyLabel: PropTypes.string, // Required if showPropertiesButtons is true\n\trejectLabel: PropTypes.string, // Required if showPropertiesButtons is true\n\tokHandler: PropTypes.func, // Required if showPropertiesButtons is true\n\tcancelHandler: PropTypes.func, // Required if showPropertiesButtons is true\n\tapplyOnBlur: PropTypes.bool.isRequired,\n\tintl: PropTypes.object.isRequired\n};\n\nTearSheet.defaultProps = {\n\topen: false,\n\tshowPropertiesButtons: false,\n\tapplyOnBlur: false,\n\tstacked: false\n};\n\nexport default injectIntl(TearSheet);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport PropertiesButtons from \"../properties-buttons\";\n\n\nclass MainEditorPropertiesButtons extends Component {\n\n\tshouldEnabledSaveButton() {\n\t\tif (this.props.saveButtonEnabled) {\n\t\t\tif (this.props.disableSaveOnRequiredErrors) {\n\t\t\t\t// Return false if any required fields are not filled in\n\t\t\t\treturn Object.keys(this.props.requiredErrorMessages).length === 0;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\trender() {\n\t\tconst saveButtonEnabled = this.shouldEnabledSaveButton();\n\t\treturn (<PropertiesButtons\n\t\t\tokHandler={this.props.okHandler}\n\t\t\tcancelHandler={this.props.cancelHandler}\n\t\t\tapplyLabel={this.props.applyLabel}\n\t\t\trejectLabel={this.props.rejectLabel}\n\t\t\tshowPropertiesButtons={this.props.showPropertiesButtons}\n\t\t\tapplyButtonEnabled={saveButtonEnabled}\n\t\t/>);\n\t}\n}\n\nMainEditorPropertiesButtons.propTypes = {\n\tcontroller: PropTypes.object.isRequired,\n\tokHandler: PropTypes.func,\n\tcancelHandler: PropTypes.func,\n\tapplyLabel: PropTypes.string,\n\trejectLabel: PropTypes.string,\n\tshowPropertiesButtons: PropTypes.bool,\n\tdisableSaveOnRequiredErrors: PropTypes.bool,\n\tsaveButtonEnabled: PropTypes.bool, // pass in by redux\n\trequiredErrorMessages: PropTypes.object // pass in by redux\n};\n\nMainEditorPropertiesButtons.defaultProps = {\n\tsaveButtonEnabled: true\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tsaveButtonEnabled: !ownProps.controller.getSaveButtonDisable(),\n\trequiredErrorMessages: ownProps.controller.getRequiredErrorMessages()\n});\n\nexport default connect(mapStateToProps, null)(MainEditorPropertiesButtons);\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nmodule.exports = baseFilter;\n","var arrayFilter = require('./_arrayFilter'),\n baseFilter = require('./_baseFilter'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * action types\n */\n\nexport const SET_PROPERTY_VALUES = \"SET_PROPERTY_VALUES\";\nexport const UPDATE_PROPERTY_VALUE = \"UPDATE_PROPERTY_VALUE\";\nexport const REMOVE_PROPERTY_VALUE = \"REMOVE_PROPERTY_VALUE\";\nexport const SET_CONTROL_STATES = \"SET_CONTROL_STATES\";\nexport const UPDATE_CONTROL_STATE = \"UPDATE_CONTROL_STATE\";\nexport const SET_PANEL_STATES = \"SET_PANEL_STATES\";\nexport const UPDATE_PANEL_STATE = \"UPDATE_PANEL_STATE\";\nexport const SET_ACTION_STATES = \"SET_ACTION_STATES\";\nexport const UPDATE_ACTION_STATE = \"UPDATE_ACTION_STATE\";\nexport const SET_ERROR_MESSAGES = \"SET_ERROR_MESSAGES\";\nexport const UPDATE_ERROR_MESSAGE = \"UPDATE_ERROR_MESSAGE\";\nexport const CLEAR_ERROR_MESSAGE = \"CLEAR_ERROR_MESSAGE\";\nexport const SET_DATASET_METADATA = \"SET_DATASET_METADATA\";\nexport const UPDATE_SELECTED_ROWS = \"UPDATE_SELECTED_ROWS\";\nexport const CLEAR_SELECTED_ROWS = \"CLEAR_SELECTED_ROWS\";\nexport const SET_TITLE = \"SET_TITLE\";\nexport const SET_ACTIVE_TAB = \"SET_ACTIVE_TAB\";\nexport const DISABLE_ROW_MOVE_BUTTONS = \"DISABLE_ROW_MOVE_BUTTONS\";\nexport const SET_SAVE_BUTTON_DISABLE = \"SET_SAVE_BUTTON_DISABLE\";\nexport const SET_WIDE_FLYOUT_PRIMARY_BUTTON_DISABLED = \"SET_WIDE_FLYOUT_PRIMARY_BUTTON_DISABLED\";\nexport const SET_ADD_REMOVE_ROWS = \"SET_ADD_REMOVE_ROWS\";\nexport const UPDATE_STATIC_ROWS = \"UPDATE_STATIC_ROWS\";\nexport const CLEAR_STATIC_ROWS = \"CLEAR_STATIC_ROWS\";\nexport const SET_TABLE_BUTTON_ENABLED = \"SET_TABLE_BUTTON_ENABLED\";\nexport const SET_HIDE_EDIT_BUTTON = \"SET_HIDE_EDIT_BUTTON\";\nexport const SET_ACTIVE_TEARSHEET = \"SET_ACTIVE_TEARSHEET\";\n\n\n/*\n * action creators\n */\nexport function setHideEditButton(disableState) {\n\treturn { type: SET_HIDE_EDIT_BUTTON, info: disableState };\n}\n\nexport function setPropertyValues(properties) {\n\treturn { type: SET_PROPERTY_VALUES, properties };\n}\n\nexport function updatePropertyValue(property) {\n\treturn { type: UPDATE_PROPERTY_VALUE, property };\n}\n\nexport function removePropertyValue(property) {\n\treturn { type: REMOVE_PROPERTY_VALUE, property };\n}\n\n\nexport function setControlStates(states) {\n\treturn { type: SET_CONTROL_STATES, states };\n}\n\nexport function updateControlState(state) {\n\treturn { type: UPDATE_CONTROL_STATE, state };\n}\n\nexport function setPanelStates(states) {\n\treturn { type: SET_PANEL_STATES, states };\n}\n\nexport function updatePanelState(state) {\n\treturn { type: UPDATE_PANEL_STATE, state };\n}\n\nexport function setActionStates(states) {\n\treturn { type: SET_ACTION_STATES, states };\n}\n\nexport function updateActionState(state) {\n\treturn { type: UPDATE_ACTION_STATE, state };\n}\n\n\nexport function setErrorMessages(messages) {\n\treturn { type: SET_ERROR_MESSAGES, messages };\n}\n\nexport function updateErrorMessage(message) {\n\treturn { type: UPDATE_ERROR_MESSAGE, message };\n}\n\nexport function clearErrorMessage(message) {\n\treturn { type: CLEAR_ERROR_MESSAGE, message };\n}\n\nexport function setDatasetMetadata(datasetMetadata) {\n\treturn { type: SET_DATASET_METADATA, datasetMetadata };\n}\n\nexport function updateSelectedRows(info) {\n\treturn { type: UPDATE_SELECTED_ROWS, info };\n}\n\nexport function clearSelectedRows(info) {\n\treturn { type: CLEAR_SELECTED_ROWS, info };\n}\n\nexport function setTitle(title) {\n\treturn { type: SET_TITLE, title };\n}\n\nexport function setActiveTab(activeTab) {\n\treturn { type: SET_ACTIVE_TAB, activeTab };\n}\n\nexport function disableRowMoveButtons(propertyIds) {\n\treturn { type: DISABLE_ROW_MOVE_BUTTONS, propertyIds };\n}\n\nexport function setSaveButtonDisable(disableState) {\n\treturn { type: SET_SAVE_BUTTON_DISABLE, disableState };\n}\n\nexport function setWideFlyoutPrimaryButtonDisabled(info) {\n\treturn { type: SET_WIDE_FLYOUT_PRIMARY_BUTTON_DISABLED, info };\n}\n\nexport function setAddRemoveRows(info) {\n\treturn { type: SET_ADD_REMOVE_ROWS, info };\n}\n\nexport function updateStaticRows(info) {\n\treturn { type: UPDATE_STATIC_ROWS, info };\n}\n\nexport function clearStaticRows(info) {\n\treturn { type: CLEAR_STATIC_ROWS, info };\n}\n\nexport function setTableButtonEnabled(info) {\n\treturn { type: SET_TABLE_BUTTON_ENABLED, info };\n}\n\nexport function setTearsheetState(tearsheetId) {\n\treturn { type: SET_ACTIVE_TEARSHEET, tearsheetId };\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\n\nclass SelectorPanel extends React.Component {\n\n\trender() {\n\t\tlet panel = this.props.panel;\n\t\tif (typeof panel === \"undefined\") {\n\t\t\tpanel = <div className=\"properties-control-panel\" />;\n\t\t}\n\t\treturn (panel);\n\t}\n}\n\nSelectorPanel.propTypes = {\n\tpanels: PropTypes.object,\n\tdependsOn: PropTypes.string,\n\tcontroller: PropTypes.object.isRequired,\n\tpanel: PropTypes.object // set by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tpanel: ownProps.panels[ownProps.controller.getPropertyValue({ name: ownProps.dependsOn })]\n});\n\nexport default connect(mapStateToProps, null)(SelectorPanel);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport PropTypes from \"prop-types\";\nimport PropertiesButtons from \"./../properties-buttons\";\nimport classNames from \"classnames\";\nimport { Portal } from \"react-portal\";\n\nexport default class WideFlyout extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tstyle: {\n\t\t\t\theight: 0\n\t\t\t}\n\t\t};\n\t\tthis.updateDimensions = this.updateDimensions.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.updateDimensions();\n\t\twindow.addEventListener(\"resize\", this.updateDimensions);\n\t}\n\n\tcomponentWillUnmount() {\n\t\twindow.removeEventListener(\"resize\", this.updateDimensions);\n\t}\n\n\tupdateDimensions() {\n\t\tif (this.wideFlyout) {\n\t\t\t// used to find correct parent\n\t\t\tif (!this.commonPropertiesParent) {\n\t\t\t\tthis.commonPropertiesParent = this.findPropertyWrapper(this.wideFlyout);\n\t\t\t}\n\t\t\tif (this.commonPropertiesParent) {\n\t\t\t\tconst commonProperties = ReactDOM.findDOMNode(this.commonPropertiesParent).getBoundingClientRect();\n\t\t\t\tthis.setState({\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\theight: commonProperties.height + \"px\",\n\t\t\t\t\t\ttop: commonProperties.top + \"px\",\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tfindPropertyWrapper(node) {\n\t\tif (node && node.parentNode && node.parentNode.className && node.parentNode.className.includes(\"properties-right-flyout\")) {\n\t\t\treturn node.parentNode;\n\t\t} else if (node && node.parentNode) {\n\t\t\treturn this.findPropertyWrapper(node.parentNode);\n\t\t}\n\t\treturn null;\n\t}\n\n\trender() {\n\t\tconst overlay = (<div className={classNames(\"properties-wf-overlay\", { \"show\": this.props.show })} />);\n\t\tlet title;\n\t\tlet buttons;\n\t\tlet children;\n\t\tif (this.props.show) {\n\t\t\tif (this.props.title) {\n\t\t\t\ttitle = (<div className=\"properties-wf-title\">{this.props.title}</div>);\n\t\t\t}\n\t\t\tbuttons = (<PropertiesButtons\n\t\t\t\tokHandler={this.props.okHandler}\n\t\t\t\tcancelHandler={this.props.cancelHandler}\n\t\t\t\tshowPropertiesButtons={this.props.showPropertiesButtons}\n\t\t\t\tapplyLabel={this.props.applyLabel}\n\t\t\t\trejectLabel={this.props.rejectLabel}\n\t\t\t\tapplyButtonEnabled={this.props.okButtonEnabled}\n\t\t\t/>);\n\t\t\tchildren = (<div className=\"properties-wf-children\"> {this.props.children} </div>);\n\t\t}\n\t\treturn (\n\t\t\t<div className=\"properties-wf-modal\" ref={ (ref) => (this.wideFlyout = ref) }>\n\t\t\t\t<Portal node={this.commonPropertiesParent}>\n\t\t\t\t\t{ overlay }\n\t\t\t\t\t<div className={classNames(\"properties-wf-content\", { \"show\": this.props.show, \"properties-light-disabled\": !this.props.light })} style={this.state.style}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t\t{buttons}\n\t\t\t\t\t</div>\n\t\t\t\t</Portal>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nWideFlyout.propTypes = {\n\tchildren: PropTypes.element,\n\tcancelHandler: PropTypes.func,\n\tokHandler: PropTypes.func,\n\tshow: PropTypes.bool,\n\tshowPropertiesButtons: PropTypes.bool,\n\tapplyLabel: PropTypes.string,\n\trejectLabel: PropTypes.string,\n\ttitle: PropTypes.string,\n\tlight: PropTypes.bool,\n\tokButtonEnabled: PropTypes.bool\n};\n\nWideFlyout.defaultProps = {\n\tshow: false,\n\tokButtonEnabled: true\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport WideFlyout from \"./wide-flyout.jsx\";\nexport default WideFlyout;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { v4 as uuid4 } from \"uuid\";\nimport { TRUNCATE_LIMIT, DEFAULT_DATEPICKER_FORMAT, DEFAULT_DATE_FORMAT, DEFAULT_TIME_FORMAT } from \"../constants/constants\";\nimport { ControlType } from \"../constants/form-constants\";\n\n/**\n* Used to return a unique id for a control that requires an html id\n* @param propertyId (required)\n* @param id (optional)\n* @return returns a unique id used for control DOM ids\n*/\nfunction getControlId(propertyId, id) {\n\tconst uuid = id ? id : uuid4();\n\treturn `${getDataId(propertyId)}-${uuid}`;\n}\n\nfunction getDataId(propertyId) {\n\tlet id = propertyId.name;\n\tif (typeof propertyId.row !== \"undefined\") {\n\t\tid += \"_\" + propertyId.row;\n\t\tif (typeof propertyId.col !== \"undefined\") {\n\t\t\tid += \"_\" + propertyId.col;\n\t\t}\n\t} else if (typeof propertyId.col !== \"undefined\") {\n\t\tid += \"_\" + propertyId.col;\n\t}\n\treturn \"properties-\" + id;\n}\n\nfunction\tgetCharLimit(control, defaultLimit) {\n\tlet limit = defaultLimit;\n\tif (control.charLimit) {\n\t\tlimit = control.charLimit;\n\t}\n\treturn limit;\n}\n\nfunction splitNewlines(text, splitValue) {\n\tif (text.length > 0) {\n\t\tconst split = text.split(splitValue);\n\t\tif (Array.isArray(split)) {\n\t\t\treturn split;\n\t\t}\n\t\treturn [split];\n\t}\n\treturn [];\n}\n\n// returns an object\n//\tvalue = string: the concatenated string\n//\ttruncated = boolean: indicating if any value was too long and had to be truncated\nfunction joinNewlines(list, joinValue) {\n\tlet truncated = false;\n\tif (Array.isArray(list)) {\n\t\tif (list.length === 0) {\n\t\t\treturn { value: \"\", truncated };\n\t\t}\n\n\t\tlet concatenatedValue = \"\";\n\t\tlist.forEach((value, index) => {\n\t\t\tconst truncatedValue = truncateDisplayValue(value);\n\t\t\tconst join = index === list.length - 1 ? \"\" : joinValue; // Do not add joinValue to last value in array\n\t\t\tconcatenatedValue += truncatedValue + join;\n\t\t\tif (!truncated) { // we only need this to be set true once\n\t\t\t\ttruncated = truncatedValue.length !== value.length;\n\t\t\t}\n\t\t});\n\t\treturn {\n\t\t\tvalue: concatenatedValue,\n\t\t\ttruncated\n\t\t};\n\t}\n\treturn { value: list, truncated };\n}\n\n// truncate the value that gets displayed if its too long\nfunction truncateDisplayValue(value) {\n\tif (value.length > TRUNCATE_LIMIT) {\n\t\treturn value.substring(0, TRUNCATE_LIMIT) + \"...\";\n\t}\n\treturn value;\n}\n\nfunction getValidationProps(messageInfo, inTable) {\n\tconst validationProps = {};\n\t// inline in tables don't show carbon error/warn\n\tif (!messageInfo || inTable) {\n\t\treturn validationProps;\n\t}\n\tif (messageInfo.type === \"error\") {\n\t\tvalidationProps.invalid = true;\n\t\tvalidationProps.invalidText = messageInfo.text;\n\t} else if (messageInfo.type === \"warning\") {\n\t\tvalidationProps.warn = true;\n\t\tvalidationProps.warnText = messageInfo.text;\n\t}\n\treturn validationProps;\n}\n\n// Get the format of the date/time control\nfunction getDateTimeFormat(control) {\n\tlet dtFormat;\n\tif (control.controlType === ControlType.DATEPICKER || control.controlType === ControlType.DATEPICKERRANGE) {\n\t\tdtFormat = (control.dateFormat) ? control.dateFormat : DEFAULT_DATEPICKER_FORMAT;\n\t} else if (control.controlType === ControlType.DATEFIELD) {\n\t\tdtFormat = (control.dateFormat) ? control.dateFormat : DEFAULT_DATE_FORMAT;\n\t} else { // time\n\t\tdtFormat = (control.timeFormat) ? control.timeFormat : DEFAULT_TIME_FORMAT;\n\t}\n\treturn dtFormat;\n}\n\nexport {\n\tgetCharLimit,\n\tgetControlId,\n\tgetDataId,\n\tsplitNewlines,\n\tjoinNewlines,\n\ttruncateDisplayValue,\n\tgetValidationProps,\n\tgetDateTimeFormat\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint max-depth: [\"error\", 6] */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { Button } from \"carbon-components-react\";\nimport { Add16 } from \"@carbon/icons-react\";\nimport WideFlyout from \"./../../components/wide-flyout\";\nimport Icon from \"./../../../icons/icon.jsx\";\n\nimport { isEmpty } from \"lodash\";\nimport * as PropertyUtils from \"./../../util/property-utils\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { MESSAGE_KEYS, CONDITION_MESSAGE_TYPE } from \"./../../constants/constants\";\nimport { STATES } from \"./../../constants/constants.js\";\nimport { Type, ParamRole } from \"./../../constants/form-constants.js\";\nimport classNames from \"classnames\";\n\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport TruncatedContentTooltip from \"../../components/truncated-content-tooltip\";\n\nclass SummaryPanel extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tshowWideFlyout: false\n\t\t};\n\t\tthis.handleLinkClicked = this.handleLinkClicked.bind(this);\n\t\tthis.hideWideFlyout = this.hideWideFlyout.bind(this);\n\t\tthis.cancelWideFlyout = this.cancelWideFlyout.bind(this);\n\t\tthis._getSummaryTables = this._getSummaryTables.bind(this);\n\t}\n\n\thideWideFlyout() {\n\t\tthis.props.controller.setIsSummaryPanelShowing(false);\n\t\tthis.setState({ showWideFlyout: false });\n\t\t// on close clear *all* selected rows\n\t\tthis.props.controller.clearSelectedRows();\n\t}\n\tcancelWideFlyout() {\n\t\t// on cancel reset back to original value\n\t\tthis.props.controller.setPropertyValues(this.initialControlValues);\n\t\tthis.props.controller.setErrorMessages(this.initialMessages);\n\t\tthis.props.controller.setControlStates(this.initialStates);\n\t\tthis.hideWideFlyout();\n\t}\n\n\thandleLinkClicked() {\n\t\tif (this.props.children) {\n\t\t\tthis.props.controller.setIsSummaryPanelShowing(true);\n\t\t\tthis.setState({ showWideFlyout: true });\n\t\t}\n\t\t// sets the current value for parameter. Used on cancel\n\t\tthis.initialControlValues = this.props.controller.getPropertyValues();\n\t\tthis.initialMessages = this.props.controller.getAllErrorMessages();\n\t\tthis.initialStates = this.props.controller.getControlStates();\n\t}\n\n\t/*\n\t* Returns summary tables to be displayed in summary panel\n\t*/\n\t_getSummaryTables() {\n\t\tconst summaryTables = [];\n\t\tconst summaryControls = this.props.controller.getSummaryPanelControls(this.props.panel.id);\n\t\t// no controls in summary panel\n\t\tif (!Array.isArray(summaryControls)) {\n\t\t\treturn summaryTables;\n\t\t}\n\t\tfor (const controlName of summaryControls) {\n\t\t\tconst propertyId = { name: controlName };\n\t\t\tconst summaryControl = this.props.controller.getControl(propertyId);\n\t\t\t// get filtered controlValue (filters out hidden and disabled values)\n\t\t\tlet controlValue = this.props.controller.getPropertyValue(propertyId, { filterHiddenDisabled: true });\n\n\t\t\t// let custom control set their own value to be displayed\n\t\t\tconst customValue = this.props.controller.getCustPropSumPanelValue(propertyId);\n\t\t\tlet showCustom = false;\n\t\t\tif (typeof customValue !== \"undefined\" && customValue !== null) {\n\t\t\t\tcontrolValue = customValue.value;\n\t\t\t\tsummaryControl.summaryLabel = customValue.label;\n\t\t\t\tshowCustom = true;\n\t\t\t}\n\t\t\tconst summaryValues = [];\n\t\t\tif (Array.isArray(controlValue)) {\n\t\t\t\tlet summaryColumns = 0;\n\t\t\t\tif (summaryControl.subControls) {\n\t\t\t\t\tfor (let idx = 0; idx < summaryControl.subControls.length; idx++) {\n\t\t\t\t\t\tconst colPropertyId = {\n\t\t\t\t\t\t\tname: propertyId.name,\n\t\t\t\t\t\t\tcol: idx\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (this.props.controller.isSummary(colPropertyId) || showCustom) {\n\t\t\t\t\t\t\tsummaryColumns++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (summaryControl.summary) {\n\t\t\t\t\tsummaryColumns = 1;\n\t\t\t\t}\n\t\t\t\t// subtract 2 px for some buffer between columns\n\t\t\t\tconst colWidth = summaryColumns !== 0 ? \"calc((100% / \" + summaryColumns + \") - 2px)\" : \"100%\";\n\n\t\t\t\tfor (let rowIdx = 0; rowIdx < controlValue.length; rowIdx++) {\n\t\t\t\t\tconst rowValue = controlValue[rowIdx];\n\t\t\t\t\tconst rowData = [];\n\t\t\t\t\t// table value\n\t\t\t\t\tif (Array.isArray(rowValue)) {\n\t\t\t\t\t\tfor (let colIdx = 0; colIdx < rowValue.length; colIdx++) {\n\t\t\t\t\t\t\tconst colPropertyId = {\n\t\t\t\t\t\t\t\tname: propertyId.name,\n\t\t\t\t\t\t\t\tcol: colIdx\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (this.props.controller.isSummary(colPropertyId) || showCustom) {\n\t\t\t\t\t\t\t\t// This allows array cell content to look acceptable\n\t\t\t\t\t\t\t\tconst displayValue = this._getSummaryDisplayValue(rowValue[colIdx], colPropertyId);\n\t\t\t\t\t\t\t\tconst contentValue = typeof displayValue === \"undefined\" ? \"\"\n\t\t\t\t\t\t\t\t\t: JSON.stringify(displayValue).replace(\"\\\"\", \"\")\n\t\t\t\t\t\t\t\t\t\t.replace(new RegExp(\"\\\"\", \"g\"), \"\") + \" \";\n\t\t\t\t\t\t\t\trowData.push(\n\t\t\t\t\t\t\t\t\t<td key={\"summary-table-data-\" + colIdx}\n\t\t\t\t\t\t\t\t\t\tclassName={\"properties-summary-row-data \"}\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: colWidth }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<TruncatedContentTooltip\n\t\t\t\t\t\t\t\t\t\t\tcontent={<span>{contentValue}</span>}\n\t\t\t\t\t\t\t\t\t\t\ttooltipText={contentValue}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={false}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</td>);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this.props.controller.isSummary(propertyId) || showCustom) { // only push row data if control is in summary\n\t\t\t\t\t\tconst displayValue = this._getSummaryDisplayValue(rowValue, propertyId);\n\t\t\t\t\t\trowData.push(\n\t\t\t\t\t\t\t<td key={\"summary-table-row-data-\" + rowIdx} className={\"properties-summary-row-data \"}>\n\t\t\t\t\t\t\t\t<TruncatedContentTooltip\n\t\t\t\t\t\t\t\t\tcontent={<span>{displayValue}</span>}\n\t\t\t\t\t\t\t\t\ttooltipText={displayValue}\n\t\t\t\t\t\t\t\t\tdisabled={false}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</td>);\n\t\t\t\t\t}\n\t\t\t\t\tif (rowData.length > 0) {\n\t\t\t\t\t\tsummaryValues.push(\n\t\t\t\t\t\t\t<tr key={\"summary-table-row-\" + rowIdx} className={\"properties-summary-row\"}>\n\t\t\t\t\t\t\t\t{rowData}\n\t\t\t\t\t\t\t</tr>);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (controlValue) {\n\t\t\t\t// assume simple parameter\n\t\t\t\tif (this.props.controller.isSummary(propertyId) || showCustom) {\n\t\t\t\t\tconst displayValue = this._getSummaryDisplayValue(controlValue, propertyId);\n\t\t\t\t\tsummaryValues.push(\n\t\t\t\t\t\t<tr key={\"summary-row-\" + controlName} className=\"properties-summary-row\">\n\t\t\t\t\t\t\t<td key={\"summary-table-row-data-\" + controlName} className={\"properties-summary-rows-data\"}>\n\t\t\t\t\t\t\t\t{ displayValue }\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (summaryValues.length > 0) {\n\t\t\t\t// Added role presentation to fix a11y violation - no headers in the table\n\t\t\t\tlet summaryBody = (<table role=\"presentation\" key={\"summary-table-\" + controlName} className=\"properties-summary-table\">\n\t\t\t\t\t<tbody key={\"summary-body-\" + controlName}>\n\t\t\t\t\t\t{summaryValues}\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>);\n\t\t\t\tif (summaryValues.length > 10) {\n\t\t\t\t\tconst largeTableLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\t\t\t\tMESSAGE_KEYS.LONG_TABLE_SUMMARY_PLACEHOLDER);\n\t\t\t\t\tsummaryBody = (<div className={\"properties-summary-table\"}><span>{largeTableLabel}</span></div>);\n\t\t\t\t}\n\t\t\t\tsummaryTables.push(\n\t\t\t\t\t<div key={\"summary-container-\" + controlName} className={\"properties-summary-values\"}>\n\t\t\t\t\t\t<span key={\"summary-text-\" + controlName} className={\"properties-summary-label\"}>{summaryControl.summaryLabel}</span>\n\t\t\t\t\t\t{summaryBody}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn summaryTables;\n\t}\n\n\t/**\n\t * Retrieves a properly formatted summary display value.\n\t *\n\t * @param displayValue The default value to display\n\t * @param propertyId The id of the property to display\n\t * @return A formatted display value\n\t */\n\t_getSummaryDisplayValue(displayValue, propertyId) {\n\t\tlet returnValue = displayValue;\n\t\tconst control = this.props.controller.getControl(propertyId);\n\n\t\t// Use label for controlValue if possible\n\t\tif (control.values && control.valueLabels) {\n\t\t\tconst displayIndex = control.values.indexOf(displayValue);\n\t\t\tif (displayIndex > -1 && control.valueLabels[displayIndex]) {\n\t\t\t\treturnValue = control.valueLabels[displayIndex];\n\t\t\t}\n\t\t}\n\t\tif (PropertyUtils.toType(returnValue) === \"object\") {\n\t\t\tif (control.valueDef.propType === Type.STRUCTURE && control.role === ParamRole.COLUMN) {\n\t\t\t\treturnValue = PropertyUtils.stringifyFieldValue(displayValue, control);\n\t\t\t} else {\n\t\t\t\t// We don't know what this object is, but we know we can't display it as an object\n\t\t\t\treturnValue = JSON.stringify(returnValue);\n\t\t\t}\n\t\t}\n\n\t\treturn returnValue;\n\t}\n\n\t_getSummaryIconState() {\n\t\tconst controls = this.props.controller.getSummaryPanelControls(this.props.panel.id);\n\t\tlet msg = {};\n\t\tlet errorCount = 0;\n\t\tlet warningCount = 0;\n\t\tif (Array.isArray(controls)) {\n\t\t\tcontrols.forEach((controlId) => {\n\t\t\t\tconst controlMsg = this.props.controller.getErrorMessage({ name: controlId }, true);\n\t\t\t\tif (!isEmpty(controlMsg)) {\n\t\t\t\t\tif (controlMsg.type === CONDITION_MESSAGE_TYPE.WARNING) {\n\t\t\t\t\t\twarningCount += 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (controlMsg.type === CONDITION_MESSAGE_TYPE.ERROR) {\n\t\t\t\t\t\terrorCount += 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isEmpty(controlMsg) && (!isEmpty(msg) || msg.type !== \"error\")) {\n\t\t\t\t\tmsg = controlMsg;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (!isEmpty(msg)) {\n\t\t\tlet descriptionText = \"\";\n\t\t\tif (errorCount > 0 && warningCount === 0) {\n\t\t\t\tdescriptionText = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\t\t\tMESSAGE_KEYS.CONTROL_SUMMARY_ERROR, { errorMsgCount: errorCount });\n\t\t\t} else if (errorCount > 0 && warningCount > 0) {\n\t\t\t\tdescriptionText = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\t\t\tMESSAGE_KEYS.CONTROL_SUMMARY_ERROR_WARNING,\n\t\t\t\t\t{ errorMsgCount: errorCount, warningMsgCount: warningCount });\n\t\t\t} else if (errorCount === 0 && warningCount > 0) {\n\t\t\t\tdescriptionText = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\t\t\tMESSAGE_KEYS.CONTROL_SUMMARY_WARNING, { warningMsgCount: warningCount });\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<Tooltip\n\t\t\t\t\tid= \"summary-icon\"\n\t\t\t\t\ttip={descriptionText}\n\t\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\t>\n\t\t\t\t\t{<Icon type={msg.type} className={`properties-summary-link-icon ${msg.type}`} />}\n\t\t\t\t</Tooltip>\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n\n\trender() {\n\t\tconst icon = this._getSummaryIconState();\n\t\tconst link = (<div className=\"properties-summary-link-container\">\n\t\t\t<Button\n\t\t\t\tclassName=\"properties-summary-link-button\"\n\t\t\t\tonClick={this.handleLinkClicked}\n\t\t\t\tsize=\"small\"\n\t\t\t\tkind=\"ghost\"\n\t\t\t\trenderIcon={Add16}\n\t\t\t>\n\t\t\t\t{this.props.panel.label}\n\t\t\t</Button>\n\t\t\t{icon}\n\t\t</div>);\n\t\tconst applyLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.APPLYBUTTON_LABEL);\n\t\tconst rejectLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.REJECTBUTTON_LABEL);\n\t\tconst flyout = this.state.showWideFlyout ? (<WideFlyout\n\t\t\tcancelHandler={this.cancelWideFlyout}\n\t\t\tokHandler={this.hideWideFlyout}\n\t\t\tshow\n\t\t\tapplyLabel={applyLabel}\n\t\t\trejectLabel={rejectLabel}\n\t\t\ttitle={this.props.panel.label}\n\t\t\tlight={this.props.controller.getLight()}\n\t\t\tokButtonEnabled={this.props.okButtonEnabled}\n\t\t>\n\t\t\t<div>\n\t\t\t\t{this.props.children}\n\t\t\t</div>\n\t\t</WideFlyout>) : <div />;\n\t\tconst panelClassName = this.props.panel.className ? this.props.panel.className : \"\";\n\t\tconst className = classNames(\n\t\t\t\"properties-summary-panel\",\n\t\t\t\"properties-control-panel\",\n\t\t\t{ \"hide\": this.props.panelState === STATES.HIDDEN },\n\t\t\t{ \"properties-control-nested-panel\": this.props.panel.nestedPanel },\n\t\t\tpanelClassName\n\t\t);\n\t\treturn (\n\t\t\t<div className={className} disabled={this.props.panelState === STATES.DISABLED} data-id={ControlUtils.getDataId({ name: this.props.panel.id })}>\n\t\t\t\t{flyout}\n\t\t\t\t{link}\n\t\t\t\t{this._getSummaryTables()}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nSummaryPanel.propTypes = {\n\tcontroller: PropTypes.object.isRequired,\n\tchildren: PropTypes.array,\n\tpanel: PropTypes.object.isRequired,\n\tpanelState: PropTypes.string, // set by redux\n\tokButtonEnabled: PropTypes.bool // set by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tpanelState: ownProps.controller.getPanelState({ name: ownProps.panel.id }),\n\tokButtonEnabled: !ownProps.controller.getWideFlyoutPrimaryButtonDisabled({ name: ownProps.panel.id })\n});\n\nexport default connect(mapStateToProps, null)(SummaryPanel);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport classNames from \"classnames\";\nimport { Accordion, AccordionItem } from \"carbon-components-react\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { STATES } from \"./../../constants/constants.js\";\n\n\nclass TwistyPanel extends React.Component {\n\n\trender() {\n\t\tconst className = this.props.panel.className ? this.props.panel.className : \"\";\n\t\tconst disabled = this.props.panelState === STATES.DISABLED;\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={classNames(\n\t\t\t\t\t\"properties-twisty-panel\",\n\t\t\t\t\t{ \"hide\": this.props.panelState === STATES.HIDDEN },\n\t\t\t\t\t{ \"properties-control-nested-panel\": this.props.panel.nestedPanel },\n\t\t\t\t\tclassName\n\t\t\t\t)} data-id={ControlUtils.getDataId({ name: this.props.panel.id })}\n\t\t\t>\n\t\t\t\t<Accordion disabled={disabled}>\n\t\t\t\t\t<AccordionItem disabled={disabled} open={this.props.panel.open} title={this.props.panel.label}>\n\t\t\t\t\t\t{this.props.children}\n\t\t\t\t\t</AccordionItem>\n\t\t\t\t</Accordion>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nTwistyPanel.propTypes = {\n\tpanel: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tchildren: PropTypes.array,\n\tpanelState: PropTypes.string // set by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tpanelState: ownProps.controller.getPanelState({ name: ownProps.panel.id })\n});\n\nexport default connect(mapStateToProps, null)(TwistyPanel);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport PropertiesModal from \"./../../components/properties-modal\";\nimport WideFlyout from \"./../../components/wide-flyout\";\n\nexport default class SubPanelInvoker extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tpanel: null,\n\t\t\ttitle: null,\n\t\t\thideHandler: null,\n\t\t\tsubPanelVisible: false\n\t\t};\n\t\tthis.showSubDialog = this.showSubDialog.bind(this);\n\t\tthis.hideSubDialog = this.hideSubDialog.bind(this);\n\t}\n\n\tshowSubDialog(title, panel, hideHandler) {\n\t\tthis.props.controller.increaseVisibleSubPanelCounter();\n\t\tthis.setState({\n\t\t\tpanel: panel,\n\t\t\ttitle: title,\n\t\t\thideHandler: hideHandler,\n\t\t\tsubPanelVisible: true\n\t\t});\n\t}\n\n\thideSubDialog(applyChanges) {\n\t\tthis.props.controller.decreaseVisibleSubPanelCounter();\n\t\tthis.state.hideHandler(applyChanges);\n\t\tthis.setState({\n\t\t\tpanel: null,\n\t\t\ttitle: null,\n\t\t\thideHandler: null,\n\t\t\tsubPanelVisible: false\n\t\t});\n\t}\n\n\trender() {\n\t\tlet propertiesDialog = [];\n\t\tif (this.state.subPanelVisible && !this.props.rightFlyout) {\n\t\t\tconst className = this.props.controller.isTearsheetContainer() ? \"properties-subpanel-modal-in-tearsheet\" : \"\";\n\t\t\tpropertiesDialog = (<PropertiesModal\n\t\t\t\ttitle={this.state.title}\n\t\t\t\tokHandler={this.hideSubDialog.bind(this, true)}\n\t\t\t\tcancelHandler={this.hideSubDialog.bind(this, false)}\n\t\t\t\tapplyLabel={this.props.applyLabel}\n\t\t\t\trejectLabel={this.props.rejectLabel}\n\t\t\t\tclassNames={className}\n\t\t\t>\n\t\t\t\t{this.state.panel}\n\t\t\t</PropertiesModal>);\n\t\t} else if (this.props.rightFlyout && this.state.subPanelVisible) {\n\t\t\tpropertiesDialog = (<WideFlyout\n\t\t\t\tcancelHandler={this.hideSubDialog.bind(this, false)}\n\t\t\t\tokHandler={this.hideSubDialog.bind(this, true)}\n\t\t\t\tshow\n\t\t\t\tapplyLabel={this.props.applyLabel}\n\t\t\t\trejectLabel={this.props.rejectLabel}\n\t\t\t\ttitle={this.state.title}\n\t\t\t\tlight={this.props.controller.getLight()}\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t{this.state.panel}\n\t\t\t\t</div>\n\t\t\t</WideFlyout>);\n\t\t}\n\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t{propertiesDialog}\n\t\t\t\t{this.props.children}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nSubPanelInvoker.propTypes = {\n\tchildren: PropTypes.element,\n\tapplyLabel: PropTypes.string,\n\trejectLabel: PropTypes.string,\n\trightFlyout: PropTypes.bool,\n\tcontroller: PropTypes.object.isRequired\n};\n\nSubPanelInvoker.defaultProps = {\n\trightFlyout: false\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Button } from \"carbon-components-react\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport { MESSAGE_KEYS } from \"./../../constants/constants\";\n\n\nimport SubPanelInvoker from \"./invoker.jsx\";\n\nexport default class SubPanelButton extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.showSubPanel = this.showSubPanel.bind(this);\n\t\tthis.onSubPanelHidden = this.onSubPanelHidden.bind(this);\n\t}\n\n\n\tonSubPanelHidden(applyChanges) {\n\t\tlogger.info(\"onSubPanelHidden(): applyChanges=\" + applyChanges);\n\t}\n\n\tshowSubPanel() {\n\t\tthis.subPanelInvoker.showSubDialog(this.props.title, this.props.panel, this.onSubPanelHidden);\n\t}\n\n\trender() {\n\t\tconst applyLabel = formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.APPLYBUTTON_LABEL);\n\t\tconst rejectLabel = formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.REJECTBUTTON_LABEL);\n\n\t\tconst button = (<Button\n\t\t\tclassName=\"properties-subpanel-button\"\n\t\t\ttype=\"button\"\n\t\t\tsmall\n\t\t\tkind=\"secondary\"\n\t\t\tonClick={this.showSubPanel}\n\t\t>\n\t\t\t{this.props.label || \"\"}\n\t\t</Button>);\n\t\treturn (\n\t\t\t<SubPanelInvoker ref={ (ref) => (this.subPanelInvoker = ref) }\n\t\t\t\trightFlyout={this.props.rightFlyout}\n\t\t\t\tapplyLabel={applyLabel}\n\t\t\t\trejectLabel={rejectLabel}\n\t\t\t\tcontroller={this.props.controller}\n\t\t\t>\n\t\t\t\t{button}\n\t\t\t</SubPanelInvoker>\n\t\t);\n\t}\n}\n\nSubPanelButton.propTypes = {\n\tlabel: PropTypes.string,\n\ttitle: PropTypes.string.isRequired,\n\tpanel: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\trightFlyout: PropTypes.bool,\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport classNames from \"classnames\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { STATES } from \"./../../constants/constants.js\";\n\n\nclass ColumnPanel extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tlet gridColumns = \"\";\n\t\tprops.children.forEach((item, idx) => {\n\t\t\tif (idx === 0) {\n\t\t\t\tgridColumns = \"1fr\";\n\t\t\t} else {\n\t\t\t\tgridColumns += \" 1fr\";\n\t\t\t}\n\t\t});\n\t\tthis.style = {\n\t\t\t\"gridTemplateColumns\": gridColumns\n\t\t};\n\t}\n\n\trender() {\n\t\tconst className = this.props.panel.className ? this.props.panel.className : \"\";\n\t\t// grid-template-columns\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={classNames(\n\t\t\t\t\t\"properties-column-panel\",\n\t\t\t\t\t{ \"hide\": this.props.panelState === STATES.HIDDEN },\n\t\t\t\t\t{ \"properties-control-nested-panel\": this.props.panel.nestedPanel },\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\tdisabled={this.props.panelState === STATES.DISABLED} data-id={ControlUtils.getDataId({ name: this.props.panel.id })}\n\t\t\t\tstyle={this.style}\n\t\t\t>\n\t\t\t\t{this.props.children}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nColumnPanel.propTypes = {\n\tpanel: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tchildren: PropTypes.array.isRequired,\n\tpanelState: PropTypes.string // set by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tpanelState: ownProps.controller.getPanelState({ name: ownProps.panel.id })\n});\n\nexport default connect(mapStateToProps, null)(ColumnPanel);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport classNames from \"classnames\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { STATES } from \"./../../constants/constants.js\";\n\n\nclass ControlPanel extends React.Component {\n\n\trender() {\n\t\tconst className = this.props.panel.className ? this.props.panel.className : \"\";\n\t\tconst controlPanel = this.props.children.length > 0\n\t\t\t? (\n\t\t\t\t<div\n\t\t\t\t\tclassName={classNames(\n\t\t\t\t\t\t\"properties-control-panel\",\n\t\t\t\t\t\t{ \"hide\": this.props.panelState === STATES.HIDDEN },\n\t\t\t\t\t\t{ \"properties-control-nested-panel\": this.props.panel.nestedPanel },\n\t\t\t\t\t\t{ \"tearsheet-container\": this.props.controller.isTearsheetContainer() },\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\tdisabled={this.props.panelState === STATES.DISABLED} data-id={ControlUtils.getDataId({ name: this.props.panel.id })}\n\t\t\t\t>\n\t\t\t\t\t{this.props.children}\n\t\t\t\t</div>\n\t\t\t)\n\t\t\t: null;\n\t\treturn controlPanel;\n\t}\n}\n\nControlPanel.propTypes = {\n\tpanel: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tchildren: PropTypes.array.isRequired,\n\tpanelState: PropTypes.string // set by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tpanelState: ownProps.controller.getPanelState({ name: ownProps.panel.id })\n});\n\nexport default connect(mapStateToProps, null)(ControlPanel);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport classNames from \"classnames\";\nimport { Tabs, Tab } from \"carbon-components-react\";\nimport { getDataId } from \"./../../util/control-utils\";\nimport { STATES } from \"./../../constants/constants.js\";\nimport { v4 as uuid4 } from \"uuid\";\n\nclass Subtabs extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tactiveTabId: \"\"\n\t\t};\n\t\tthis.uuid = uuid4();\n\t}\n\n\tonClick(tabId) {\n\t\tthis.setState({ activeTabId: tabId });\n\t}\n\n\trender() {\n\t\tconst subTabs = [];\n\t\tlet activeTab = 0;\n\t\tlet tabIdx = 0;\n\t\tconst className = this.props.className ? this.props.className : \"\";\n\t\tfor (let i = 0; i < this.props.tabs.length; i++) {\n\t\t\tconst tab = this.props.tabs[i];\n\t\t\t// TODO this might not work once we don't rerender on each change\n\t\t\tconst panelState = this.props.controller.getPanelState({ name: tab.group });\n\t\t\tif (panelState !== STATES.HIDDEN) {\n\t\t\t\tconst subPanelItems = this.props.genUIItem(i, tab.content);\n\t\t\t\tif (this.state.activeTabId === tab.group && panelState !== STATES.DISABLED) {\n\t\t\t\t\tactiveTab = tabIdx;\n\t\t\t\t}\n\n\t\t\t\tsubTabs.push(\n\t\t\t\t\t<Tab\n\t\t\t\t\t\tid={`subtabs.tab.${i}-${this.uuid}`}\n\t\t\t\t\t\tkey={`subtabs.tab.${i}-${this.uuid}`}\n\t\t\t\t\t\tdisabled={panelState === STATES.DISABLED}\n\t\t\t\t\t\tclassName={classNames(\"properties-subtab\", { \"properties-leftnav-subtab-item\": this.props.leftnav })}\n\t\t\t\t\t\ttabIndex={tabIdx}\n\t\t\t\t\t\tlabel={tab.text}\n\t\t\t\t\t\ttitle={tab.text}\n\t\t\t\t\t\tonClick={this.onClick.bind(this, tab.group)}\n\t\t\t\t\t\tdata-id={getDataId({ name: tab.group })}\n\t\t\t\t\t>\n\t\t\t\t\t\t{subPanelItems}\n\t\t\t\t\t</Tab>\n\t\t\t\t);\n\t\t\t\ttabIdx++;\n\t\t\t}\n\t\t}\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={classNames(\n\t\t\t\t\t\"properties-sub-tab-container\",\n\t\t\t\t\t{ vertical: !this.props.rightFlyout },\n\t\t\t\t\t{ \"properties-control-nested-panel\": this.props.nestedPanel },\n\t\t\t\t\t{ \"properties-leftnav-container\": this.props.leftnav },\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Tabs className={classNames(\"properties-subtabs\", { \"properties-leftnav-subtabs\": this.props.leftnav })}\n\t\t\t\t\tselected={activeTab}\n\t\t\t\t\tlight={this.props.controller.getLight()}\n\t\t\t\t\ttabContentClassName=\"properties-subtab-panel\"\n\t\t\t\t>\n\t\t\t\t\t{subTabs}\n\t\t\t\t</Tabs>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nSubtabs.propTypes = {\n\ttabs: PropTypes.array.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\trightFlyout: PropTypes.bool,\n\tgenUIItem: PropTypes.func.isRequired,\n\tclassName: PropTypes.string,\n\tnestedPanel: PropTypes.bool,\n\tleftnav: PropTypes.bool\n};\n\nSubtabs.defaultProps = {\n\tleftnav: false\n};\n\nexport default Subtabs;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { evaluateText } from \"./../../util/property-utils.js\";\nimport classNames from \"classnames\";\nimport { STATES, CARBON_ICONS } from \"./../../constants/constants\";\nimport { isEmpty } from \"lodash\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport Icon from \"./../../../icons/icon.jsx\";\n\nclass TextPanel extends Component {\n\trender() {\n\t\tconst className = this.props.panel.className ? this.props.panel.className : \"\";\n\t\tconst hidden = this.props.panelState === STATES.HIDDEN;\n\t\tconst disabled = this.props.panelState === STATES.DISABLED;\n\t\tlet label = this.props.panel.label ? (<div className=\"panel-label\">{this.props.panel.label}</div>) : null;\n\t\tlet description;\n\t\tif (this.props.panel.description && !isEmpty(this.props.panel.description.text)) {\n\t\t\tconst dynamicDescriptionText = evaluateText(this.props.panel.description.text, this.props.controller);\n\t\t\tif (this.props.panel.description.placement === \"as_tooltip\") {\n\t\t\t\t// If tooltip has a link, add propertyId in the link object\n\t\t\t\tif (this.props.panel.description.link) {\n\t\t\t\t\tthis.props.panel.description.link.propertyId = { name: this.props.panel.id };\n\t\t\t\t}\n\t\t\t\tconst tooltip = (<Tooltip\n\t\t\t\t\tid={`tooltip-label-${this.props.panel.id}`}\n\t\t\t\t\ttip={dynamicDescriptionText}\n\t\t\t\t\tlink={this.props.panel.description.link ? this.props.panel.description.link : null}\n\t\t\t\t\ttooltipLinkHandler={this.props.controller.getHandlers().tooltipLinkHandler}\n\t\t\t\t\tdirection=\"bottom\"\n\t\t\t\t\tdisable={hidden || disabled}\n\t\t\t\t\tshowToolTipOnClick\n\t\t\t\t>\n\t\t\t\t\t<Icon type={CARBON_ICONS.INFORMATION} className=\"properties-control-description-icon-info\" />\n\t\t\t\t</Tooltip>);\n\t\t\t\tlabel = (\n\t\t\t\t\t<div className={classNames(\"properties-label-container\")}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t\t{tooltip}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tdescription = <div className=\"panel-description\">{dynamicDescriptionText}</div>;\n\t\t\t}\n\t\t}\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={classNames(\n\t\t\t\t\t\"properties-text-panel\",\n\t\t\t\t\t{ \"hide\": hidden },\n\t\t\t\t\t{ \"properties-control-nested-panel\": this.props.panel.nestedPanel },\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\t{label}\n\t\t\t\t{description}\n\t\t\t</div>);\n\t}\n}\n\nTextPanel.propTypes = {\n\tpanel: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tpanelState: PropTypes.string // set by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tpanelState: ownProps.controller.getPanelState({ name: ownProps.panel.id }),\n\tpropertyValues: ownProps.controller.getPropertyValues() // not used locally but needed to cause a rerender to evaluate text with a property value\n});\n\nexport default connect(mapStateToProps, null)(TextPanel);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport classNames from \"classnames\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { STATES, CARBON_ICONS } from \"./../../constants/constants\";\nimport { evaluateText } from \"./../../util/property-utils.js\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport Icon from \"./../../../icons/icon.jsx\";\nimport { isEmpty } from \"lodash\";\n\nclass ActionPanel extends Component {\n\trender() {\n\t\tconst className = this.props.panel.className ? this.props.panel.className : \"\";\n\t\tconst hidden = this.props.panelState === STATES.HIDDEN;\n\t\tconst disabled = this.props.panelState === STATES.DISABLED;\n\t\tlet label;\n\t\tif (this.props.panel.label) {\n\t\t\tlet tooltip;\n\t\t\tif (this.props.panel.description && !isEmpty(this.props.panel.description.text)) {\n\t\t\t\tconst dynamicDescriptionText = evaluateText(this.props.panel.description.text, this.props.controller);\n\t\t\t\t// If tooltip has a link, add propertyId in the link object\n\t\t\t\tif (this.props.panel.description.link) {\n\t\t\t\t\tthis.props.panel.description.link.propertyId = { name: this.props.panel.id };\n\t\t\t\t}\n\t\t\t\ttooltip = (<Tooltip\n\t\t\t\t\tid={`tooltip-label-${this.props.panel.id}`}\n\t\t\t\t\ttip={dynamicDescriptionText}\n\t\t\t\t\tlink={this.props.panel.description.link ? this.props.panel.description.link : null}\n\t\t\t\t\ttooltipLinkHandler={this.props.controller.getHandlers().tooltipLinkHandler}\n\t\t\t\t\tdirection=\"bottom\"\n\t\t\t\t\tdisable={hidden || disabled}\n\t\t\t\t\tshowToolTipOnClick\n\t\t\t\t>\n\t\t\t\t\t<Icon type={CARBON_ICONS.INFORMATION} className=\"properties-control-description-icon-info\" />\n\t\t\t\t</Tooltip>);\n\t\t\t}\n\t\t\tlabel = (\n\t\t\t\t<div className={classNames(\"properties-label-container\")}>\n\t\t\t\t\t<label className=\"properties-control-label\">{this.props.panel.label}</label>\n\t\t\t\t\t{tooltip}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={classNames(\n\t\t\t\t\t\"properties-action-panel\",\n\t\t\t\t\t{ \"hide\": hidden },\n\t\t\t\t\t{ \"properties-control-nested-panel\": this.props.panel.nestedPanel },\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\tdata-id={ControlUtils.getDataId({ name: this.props.panel.id })}\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\t{label}\n\t\t\t\t{this.props.children}\n\t\t\t</div>);\n\t}\n}\n\nActionPanel.propTypes = {\n\tpanel: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tchildren: PropTypes.oneOfType([\n\t\tPropTypes.element,\n\t\tPropTypes.array\n\t]),\n\tpanelState: PropTypes.string // set by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tpanelState: ownProps.controller.getPanelState({ name: ownProps.panel.id })\n});\n\nexport default connect(mapStateToProps, null)(ActionPanel);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { Button } from \"carbon-components-react\";\nimport { STATES, CARBON_BUTTON_KIND, CARBON_BUTTON_SIZE } from \"./../../constants/constants.js\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport classNames from \"classnames\";\nimport { has } from \"lodash\";\n\nclass ButtonAction extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t};\n\t\tthis.applyAction = this.applyAction.bind(this);\n\t}\n\n\tgetActionButtonKind() {\n\t\tif (!has(this.props, \"action.button.kind\")) {\n\t\t\treturn CARBON_BUTTON_KIND.TERTIARY;\n\t\t}\n\t\tswitch (this.props.action.button.kind) {\n\t\tcase CARBON_BUTTON_KIND.PRIMARY: return CARBON_BUTTON_KIND.PRIMARY;\n\t\tcase CARBON_BUTTON_KIND.SECONDARY: return CARBON_BUTTON_KIND.SECONDARY;\n\t\tcase CARBON_BUTTON_KIND.TERTIARY: return CARBON_BUTTON_KIND.TERTIARY;\n\t\tcase CARBON_BUTTON_KIND.GHOST: return CARBON_BUTTON_KIND.GHOST;\n\t\tcase CARBON_BUTTON_KIND.DANGER: return CARBON_BUTTON_KIND.DANGER;\n\t\tcase CARBON_BUTTON_KIND.DANGER_TERTIARY: return CARBON_BUTTON_KIND.DANGER_TERTIARY;\n\t\tcase CARBON_BUTTON_KIND.DANGER_GHOST: return CARBON_BUTTON_KIND.DANGER_GHOST;\n\t\tdefault: return CARBON_BUTTON_KIND.TERTIARY;\n\t\t}\n\t}\n\n\tgetActionButtonSize() {\n\t\tif (!has(this.props, \"action.button.size\")) {\n\t\t\treturn CARBON_BUTTON_SIZE.SMALL;\n\t\t}\n\t\tswitch (this.props.action.button.size) {\n\t\tcase CARBON_BUTTON_SIZE.SMALL: return CARBON_BUTTON_SIZE.SMALL;\n\t\tcase CARBON_BUTTON_SIZE.MEDIUM: return CARBON_BUTTON_SIZE.DEFAULT; // TODO: update this after upgrading to carbon 11.x\n\t\tcase CARBON_BUTTON_SIZE.LARGE: return CARBON_BUTTON_SIZE.LARGE;\n\t\tcase CARBON_BUTTON_SIZE.EXTRA_LARGE: return CARBON_BUTTON_SIZE.EXTRA_LARGE;\n\t\tdefault: return CARBON_BUTTON_SIZE.SMALL;\n\t\t}\n\t}\n\n\tapplyAction() {\n\t\t// fire event and let the application determine how to handle the action\n\t\tconst actionHandler = this.props.controller.getHandlers().actionHandler;\n\t\tif (typeof actionHandler === \"function\") {\n\t\t\tactionHandler(this.props.action.name,\n\t\t\t\tthis.props.controller.getAppData(), this.props.action.data);\n\t\t}\n\t}\n\n\trender() {\n\t\tconst customClassName = this.props.action.className ? this.props.action.className : \"\";\n\t\tconst className = classNames(\"properties-action-button\", { \"hide\": this.props.state === STATES.HIDDEN }, customClassName);\n\t\tconst disabled = this.props.state === STATES.DISABLED;\n\t\tconst actionButtonKind = this.getActionButtonKind();\n\t\tconst actionButtonSize = this.getActionButtonSize();\n\t\tconst button = (\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tsize={actionButtonSize}\n\t\t\t\tkind={actionButtonKind}\n\t\t\t\tonClick={this.applyAction}\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\t{this.props.action.label.text}\n\t\t\t</Button>\n\t\t);\n\n\t\tlet display = button;\n\t\tif (this.props.action.description) {\n\t\t\tconst tooltipId = \"tooltip-action-\" + this.props.action.name;\n\t\t\tconst tooltip = (\n\t\t\t\t<div className=\"properties-tooltips\">\n\t\t\t\t\t{this.props.action.description.text}\n\t\t\t\t</div>\n\t\t\t);\n\n\t\t\tdisplay = (<Tooltip\n\t\t\t\tid={tooltipId}\n\t\t\t\ttip={tooltip}\n\t\t\t\tdirection=\"bottom\"\n\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\tdisable={disabled}\n\t\t\t>\n\t\t\t\t{button}\n\t\t\t</Tooltip>);\n\t\t}\n\n\t\treturn (\n\t\t\t<div className={className} data-id={this.props.action.name}>\n\t\t\t\t{display}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nButtonAction.propTypes = {\n\taction: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tstate: PropTypes.string, // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tstate: ownProps.controller.getActionState(ownProps.controller.convertPropertyId(ownProps.action.name)),\n});\n\nexport default connect(mapStateToProps, null)(ButtonAction);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { STATES } from \"./../../constants/constants.js\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport classNames from \"classnames\";\n\nclass ImageAction extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t};\n\t\tthis.applyAction = this.applyAction.bind(this);\n\t}\n\n\tapplyAction() {\n\t\tif (this.props.state !== STATES.DISABLED) { // this is needed to mimic disabled action button\n\t\t\t// fire event and let the application determine how to handle the action\n\t\t\tconst actionHandler = this.props.controller.getHandlers().actionHandler;\n\t\t\tif (typeof actionHandler === \"function\") {\n\t\t\t\tactionHandler(this.props.action.name,\n\t\t\t\t\tthis.props.controller.getAppData(), this.props.action.data);\n\t\t\t}\n\t\t}\n\t}\n\n\trender() {\n\t\tlet height = {};\n\t\tlet width = {};\n\t\tif (this.props.action.image.size) {\n\t\t\theight = this.props.action.image.size.height ? { \"height\": this.props.action.image.size.height } : {};\n\t\t\twidth = this.props.action.image.size.width ? { \"width\": this.props.action.image.size.width } : {};\n\t\t}\n\n\t\tconst disabled = this.props.state === STATES.DISABLED;\n\t\tconst customClassName = this.props.action.className ? this.props.action.className : \"\";\n\t\tconst className = classNames(\"properties-action-image\", { \"left\": this.props.action.image.placement === \"left\" },\n\t\t\t{ \"right\": this.props.action.image.placement === \"right\" }, { \"hide\": this.props.state === STATES.HIDDEN },\n\t\t\t{ \"disabled\": disabled }, customClassName);\n\n\t\tconst image = (\n\t\t\t<div data-id={this.props.action.name}>\n\t\t\t\t<img\n\t\t\t\t\tsrc={this.props.action.image.url}\n\t\t\t\t\tonClick={this.applyAction}\n\t\t\t\t\t{...height}\n\t\t\t\t\t{...width}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\n\t\tlet display = image;\n\t\tif (this.props.action.description) {\n\t\t\tconst tooltipId = \"tooltip-action-\" + this.props.action.name;\n\t\t\tconst tooltip = (\n\t\t\t\t<div className=\"properties-tooltips\">\n\t\t\t\t\t{this.props.action.description.text}\n\t\t\t\t</div>\n\t\t\t);\n\t\t\tconst directions = [\"left\", \"right\", \"top\", \"bottom\"];\n\t\t\tconst tooltipDirection = this.props.action.image.tooltip_direction && directions.includes(this.props.action.image.tooltip_direction.toLowerCase())\n\t\t\t\t? this.props.action.image.tooltip_direction.toLowerCase()\n\t\t\t\t: \"bottom\";\n\n\t\t\tdisplay = (<Tooltip\n\t\t\t\tid={tooltipId}\n\t\t\t\ttip={tooltip}\n\t\t\t\tdirection={tooltipDirection}\n\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\tdisable={disabled}\n\t\t\t>\n\t\t\t\t{image}\n\t\t\t</Tooltip>);\n\t\t}\n\n\t\treturn (\n\t\t\t<div className={className}>\n\t\t\t\t{display}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nImageAction.propTypes = {\n\taction: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tstate: PropTypes.string, // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tstate: ownProps.controller.getActionState(ownProps.controller.convertPropertyId(ownProps.action.name)),\n});\n\nexport default connect(mapStateToProps, null)(ImageAction);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\n\nimport ButtonAction from \"./button\";\nimport ImageAction from \"./image\";\n\n\nexport default class ActionFactory {\n\n\tconstructor(controller) {\n\t\tthis.controller = controller;\n\t}\n\n\n\tgenerateAction(key, action) {\n\t\tif (action) {\n\t\t\tif (action.actionType === \"button\") {\n\t\t\t\treturn (\n\t\t\t\t\t<ButtonAction\n\t\t\t\t\t\tkey={\"action.\" + key}\n\t\t\t\t\t\taction={action}\n\t\t\t\t\t\tcontroller={this.controller}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} else if (action.actionType === \"image\") {\n\t\t\t\treturn (\n\t\t\t\t\t<ImageAction\n\t\t\t\t\t\tkey={\"action.\" + key}\n\t\t\t\t\t\taction={action}\n\t\t\t\t\t\tcontroller={this.controller}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { setActiveTab } from \"./../../actions\";\nimport { Tab, Tabs, Link } from \"carbon-components-react\";\nimport * as PropertyUtil from \"./../../util/property-utils\";\nimport { MESSAGE_KEYS, CARBON_ICONS, CONDITION_MESSAGE_TYPE, STATES, CATEGORY_VIEW } from \"./../../constants/constants\";\nimport { cloneDeep, isEmpty, sortBy, get, filter } from \"lodash\";\nimport logger from \"./../../../../utils/logger\";\nimport classNames from \"classnames\";\n\nimport SelectorPanel from \"./../../panels/selector\";\nimport SummaryPanel from \"./../../panels/summary\";\nimport TwistyPanel from \"./../../panels/twisty\";\nimport SubPanelButton from \"./../../panels/sub-panel/button\";\nimport ColumnPanel from \"./../../panels/column\";\nimport ControlPanel from \"./../../panels/control\";\nimport Subtabs from \"./../../panels/subtabs\";\n\nimport WideFlyout from \"./../wide-flyout\";\nimport TearSheet from \"../../panels/tearsheet\";\nimport FieldPicker from \"./../field-picker\";\nimport TextPanel from \"./../../panels/text-panel\";\nimport ActionPanel from \"./../../panels/action-panel\";\n\nimport ActionFactory from \"./../../actions/action-factory\";\nimport Icon from \"./../../../icons/icon\";\nimport { ItemType } from \"../../constants/form-constants\";\n\nconst ALERT_TAB_GROUP = \"alertMsgs\";\nclass EditorForm extends React.Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tshowFieldPicker: false\n\t\t};\n\n\t\tthis.genPanel = this.genPanel.bind(this);\n\t\tthis.genUIContent = this.genUIContent.bind(this);\n\t\tthis.genUIItem = this.genUIItem.bind(this);\n\t\tthis._getGroupedMessages = this._getGroupedMessages.bind(this);\n\n\t\tthis.closeFieldPicker = this.closeFieldPicker.bind(this);\n\t\tthis.openFieldPicker = this.openFieldPicker.bind(this);\n\t\tthis.generateSharedControlNames = this.generateSharedControlNames.bind(this);\n\n\t\tthis.messages = this._getGroupedMessages(props.messages);\n\n\t\t// initialize ControlFactory with correct values\n\t\tthis.ControlFactory = props.controller.getControlFactory();\n\t\tthis.ControlFactory.setFunctions(this.openFieldPicker, this.genUIItem);\n\t\tthis.ControlFactory.setRightFlyout(props.rightFlyout);\n\n\t\tthis.actionFactory = new ActionFactory(this.props.controller);\n\n\t\tthis.FIRST_TEARSHEET_ID = null;\n\t\tthis.TEARSHEETS = {};\n\t\tthis.visibleTearsheet = null;\n\n\t}\n\n\tshouldComponentUpdate(nextProps, nextState) {\n\t\tif (!this.props.controller.isSummaryPanelShowing() && !this.props.controller.isSubPanelsShowing()) {\n\t\t\t// only update list of error messages when no summary panel or sub-panel is shown,\n\t\t\t// otherwise changes in the summary/sub panel might trigger a re-render and the\n\t\t\t// summary/sub panel to disappear because the alerts tab is added/removed\n\t\t\tthis.messages = this._getGroupedMessages(nextProps.messages);\n\t\t}\n\t\treturn true;\n\t}\n\n\t_getMessageCountForCategory(tab) {\n\t\tif (tab.group === ALERT_TAB_GROUP) {\n\t\t\treturn \" (\" + this.messages.length + \")\";\n\t\t}\n\t\tlet result = 0;\n\t\tthis.messages.forEach((msg) => {\n\t\t\tconst ctrl = this.props.controller.getControl({ \"name\": msg.id_ref });\n\t\t\tif (ctrl && ctrl.parentCategoryId === tab.group) {\n\t\t\t\tresult++;\n\t\t\t}\n\t\t});\n\t\treturn result > 0 ? \" (\" + result + \")\" : null;\n\t}\n\n\t_getGroupedMessages(messages) {\n\t\t// returns messages grouped by type, first errors, then warnings\n\t\tif (!isEmpty(messages)) {\n\t\t\treturn sortBy(messages, [\"type\"]);\n\t\t}\n\t\treturn [];\n\t}\n\n\t_getTabId(tab) {\n\t\treturn tab.group;\n\t}\n\n\t_showCategoryPanel(panelId) {\n\t\tlet activeTab = panelId;\n\t\tif (this.props.activeTab === panelId) {\n\t\t\tactiveTab = \"\";\n\t\t}\n\t\tthis.props.setActiveTab(activeTab);\n\t}\n\n\t_handleMessageClick(controlId, ev) {\n\t\tconst control = this.props.controller.getControl(controlId);\n\t\tthis.props.setActiveTab(control.parentCategoryId);\n\t}\n\n\t_modalTabsOnClick(tabId) {\n\t\tthis.props.setActiveTab(tabId);\n\t}\n\n\tgenPrimaryTabs(key, tabs, propertyId, indexof) {\n\t\tconst tabContent = [];\n\t\tlet hasAlertsTab = false;\n\t\tlet modalSelected = 0;\n\t\tconst nonTearsheetTabs = tabs.filter((t) => t.content.itemType !== ItemType.TEARSHEET);\n\t\tconst tearsheetTabs = tabs.filter((t) => t.content.itemType === ItemType.TEARSHEET);\n\t\tconst totalTabs = tearsheetTabs.concat(nonTearsheetTabs);\n\n\t\tfor (let i = 0; i < totalTabs.length; i++) {\n\t\t\tconst tab = totalTabs[i];\n\t\t\tconst tabState = this.props.controller.getPanelState({ name: tab.group });\n\t\t\tif (tabState === STATES.HIDDEN) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (i === 0 && tab.group === ALERT_TAB_GROUP) {\n\t\t\t\thasAlertsTab = true;\n\t\t\t}\n\t\t\tconst panelItems = this.genUIItem(this._getContainerIndex(hasAlertsTab, i), tab.content, propertyId, indexof);\n\t\t\tlet additionalComponent = null;\n\t\t\tif (this.props.additionalComponents) {\n\t\t\t\tadditionalComponent = this.props.additionalComponents[tab.group];\n\t\t\t}\n\t\t\t// if only 1 tab AND\n\t\t\t// if total non-tearsheet tabs is 1; don't show any tabs\n\t\t\tif (totalTabs.length === 1 && nonTearsheetTabs.length === 1) {\n\t\t\t\treturn (\n\t\t\t\t\t<div key={\"cat.\" + key} className=\"properties-single-category\">\n\t\t\t\t\t\t{panelItems}\n\t\t\t\t\t\t{additionalComponent}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.props.rightFlyout && this.props.categoryView !== CATEGORY_VIEW.TABS) {\n\t\t\t\tlet panelArrow = <Icon type={CARBON_ICONS.CHEVRONARROWS.DOWN} className=\"properties-category-caret-down\" />;\n\t\t\t\tlet categoryOpen = false;\n\t\t\t\tif (this.props.activeTab === tab.group) {\n\t\t\t\t\tpanelArrow = <Icon type={CARBON_ICONS.CHEVRONARROWS.UP} className=\"properties-category-caret-up\" />;\n\t\t\t\t\tcategoryOpen = true;\n\t\t\t\t}\n\t\t\t\tif (tab.content.itemType !== ItemType.TEARSHEET && nonTearsheetTabs.length === 1) {\n\t\t\t\t\ttabContent.push(\n\t\t\t\t\t\t<div key={\"cat.\" + key} className=\"properties-single-category\">\n\t\t\t\t\t\t\t{panelItems}\n\t\t\t\t\t\t\t{additionalComponent}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\ttabContent.push(\n\t\t\t\t\t\t<div key={this._getContainerIndex(hasAlertsTab, i) + \"-\" + key}\n\t\t\t\t\t\t\tclassName={classNames(\"properties-category-container\", { \"properties-hidden-container\": tab.content.itemType === ItemType.TEARSHEET })}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button type=\"button\" onClick={this._showCategoryPanel.bind(this, tab.group)}\n\t\t\t\t\t\t\t\tclassName={classNames(\"properties-category-title\", { \"properties-light-enabled\": this.props.controller.getLight() }) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{tab.text}{this._getMessageCountForCategory(tab)}\n\t\t\t\t\t\t\t\t{panelArrow}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<div className={classNames(\"properties-category-content\", { \"show\": categoryOpen }) }>\n\t\t\t\t\t\t\t\t{panelItems}\n\t\t\t\t\t\t\t\t{additionalComponent}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.props.activeTab === tab.group) {\n\t\t\t\t\tmodalSelected = i;\n\t\t\t\t}\n\t\t\t\ttabContent.push(\n\t\t\t\t\t<Tab\n\t\t\t\t\t\tid={\"tab.\" + this._getContainerIndex(hasAlertsTab, i) + \"-\" + key}\n\t\t\t\t\t\tkey={this._getContainerIndex(hasAlertsTab, i) + \"-\" + key}\n\t\t\t\t\t\ttabIndex={i}\n\t\t\t\t\t\tlabel={filter([tab.text, this._getMessageCountForCategory(tab)]).join(\"\")}\n\t\t\t\t\t\ttitle={filter([tab.text, this._getMessageCountForCategory(tab)]).join(\"\")}\n\t\t\t\t\t\tclassName={classNames({ \"properties-hidden-container\": tab.content.itemType === ItemType.TEARSHEET })}\n\t\t\t\t\t\tonClick={this._modalTabsOnClick.bind(this, tab.group)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{panelItems}\n\t\t\t\t\t\t{additionalComponent}\n\t\t\t\t\t</Tab>\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (this.props.rightFlyout && this.props.categoryView !== CATEGORY_VIEW.TABS) {\n\t\t\treturn (\n\t\t\t\t<div key={\"cat.\" + key} className=\"properties-categories\">\n\t\t\t\t\t{tabContent}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<Tabs key={\"tab.\" + key}\n\t\t\t\tclassName=\"properties-primaryTabs\"\n\t\t\t\tselected={modalSelected}\n\t\t\t\tlight={this.props.controller.getLight()}\n\t\t\t\ttabContentClassName={classNames(\"properties-primary-tab-panel\",\n\t\t\t\t\t{ \"tearsheet-container\": this.props.controller.isTearsheetContainer() },\n\t\t\t\t\t{ \"right-flyout-tabs-view\": this.props.rightFlyout && this.props.categoryView === CATEGORY_VIEW.TABS })}\n\t\t\t>\n\t\t\t\t{tabContent}\n\t\t\t</Tabs>\n\t\t);\n\t}\n\n\t_getContainerIndex(hasAlertsTab, index) {\n\t\t// need to ensure that when alert tab is rendered, the existing tabs get the same id\n\t\t// otherwise re-render will cause controls to lose focus\n\t\tif (hasAlertsTab && index === 0) {\n\t\t\treturn \"alerts\";\n\t\t}\n\t\tif (hasAlertsTab) {\n\t\t\treturn index - 1;\n\t\t}\n\t\treturn index;\n\t}\n\n\tgenPanelSelector(key, tabs, dependsOn, propertyId, indexof, panelId, className) {\n\t\tconst subPanels = this.generateAdditionalPanels(tabs, key, propertyId, indexof, false, className);\n\t\treturn (\n\t\t\t<SelectorPanel\n\t\t\t\tkey={\"selectorPanel\" + key}\n\t\t\t\tpanels={subPanels}\n\t\t\t\tdependsOn={dependsOn}\n\t\t\t\tcontroller={this.props.controller}\n\t\t\t/>\n\t\t);\n\t}\n\n\tgenerateAdditionalPanels(tabs, key, propertyId, indexof, indent, groupClassName) {\n\t\tconst subPanels = {};\n\t\tfor (let i = 0; i < tabs.length; i++) {\n\t\t\tconst tab = tabs[i];\n\t\t\tlet className = \"properties-control-panel\";\n\t\t\tif (tab.content && tab.content.itemType === \"textPanel\") {\n\t\t\t\tclassName = \"\";\n\t\t\t}\n\t\t\t// Always show indentation when insert_panels set to true\n\t\t\tif (indent) {\n\t\t\t\tclassName += \" properties-control-nested-panel\";\n\t\t\t}\n\t\t\tsubPanels[tab.group] = (\n\t\t\t\t<div className={classNames(className, groupClassName)} key={tab.group + key}>\n\t\t\t\t\t{this.genUIItem(i, tab.content, propertyId, indexof)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn subPanels;\n\t}\n\n\tgenUIContent(uiItems, propertyId, indexof) {\n\t\tvar uiContent = [];\n\t\tfor (var i = 0; i < uiItems.length; i++) {\n\t\t\tuiContent.push(this.genUIItem(i, uiItems[i], propertyId, indexof));\n\t\t}\n\t\treturn uiContent;\n\t}\n\n\t/*\n\t* inPropertyId and indexOf only used for subpanel in tables\n\t*/\n\tgenUIItem(key, uiItem, inPropertyId, indexof) {\n\t\tlet textClass = \"\";\n\t\tlet icon = null;\n\t\tlet text = \"\";\n\t\tswitch (uiItem.itemType) {\n\t\tcase (\"control\"): {\n\t\t\t// If the uiItem has additonalPanels, this indicates that the uiItem is\n\t\t\t// a vertical radio button set followed by a SelectorPanel which has the\n\t\t\t// insert_panels boolean set to true.\n\t\t\tif (uiItem.additionalItems && uiItem.additionalItems.length > 0) {\n\t\t\t\tuiItem.control.additionalItems = uiItem.additionalItems;\n\t\t\t\tuiItem.control.optionalPanels =\n\t\t\t\t\tthis.generateAdditionalPanels(uiItem.additionalItems, key, null, indexof, true);\n\t\t\t}\n\n\t\t\tconst propertyId = { name: uiItem.control.name };\n\n\t\t\t// Used for subpanels in tables\n\t\t\tif (inPropertyId) {\n\t\t\t\tconst parentPropertyId = cloneDeep(inPropertyId);\n\t\t\t\t// This control is the last child in parentPropertyId, need to update the child's col index\n\t\t\t\tthis.props.controller.updateLastChildPropertyId(parentPropertyId, { col: indexof(uiItem.control.name) });\n\t\t\t\treturn this.ControlFactory.createControlItem(uiItem.control, parentPropertyId);\n\t\t\t}\n\n\t\t\treturn this.ControlFactory.createControlItem(uiItem.control, propertyId);\n\t\t}\n\t\tcase (\"additionalLink\"):\n\t\t\tvar subPanel = this.genPanel(key, uiItem.panel, inPropertyId, indexof);\n\t\t\treturn (<SubPanelButton key={\"sub-panel-button.\" + key}\n\t\t\t\tlabel={uiItem.text}\n\t\t\t\ttitle={uiItem.secondaryText}\n\t\t\t\tpanel={subPanel}\n\t\t\t\tcontroller={this.props.controller}\n\t\t\t\trightFlyout={this.props.rightFlyout}\n\t\t\t/>);\n\t\tcase (\"staticText\"):\n\t\t\ttextClass = classNames(\"properties-static-text\", uiItem.textType);\n\t\t\ticon = uiItem.textType === \"info\" ? <div><Icon type={CARBON_ICONS.INFORMATION} className=\"properties-static-text-icon-info\" /></div> : null;\n\t\t\ttext = <div className={textClass}>{PropertyUtil.evaluateText(uiItem.text, this.props.controller)}</div>;\n\t\t\treturn <div key={\"static-text.\" + key} className=\"properties-static-text-container\">{icon}{text}</div>;\n\t\tcase (\"linkText\"): // linkText used for Alerts tab. Only used internally\n\t\t\ttextClass = classNames(\"properties-link-text-container\", uiItem.textType);\n\t\t\tif (uiItem.textType === \"warning\") {\n\t\t\t\ticon = <Icon type={CONDITION_MESSAGE_TYPE.WARNING} />;\n\t\t\t} else if (uiItem.textType === \"error\") {\n\t\t\t\ticon = <Icon type={CONDITION_MESSAGE_TYPE.ERROR} />;\n\t\t\t}\n\t\t\ttext = (\n\t\t\t\t<Link className=\"properties-link-text\" onClick={this._handleMessageClick.bind(this, uiItem.controlId)} >\n\t\t\t\t\t{PropertyUtil.evaluateText(uiItem.text, this.props.controller)}\n\t\t\t\t</Link>);\n\t\t\treturn <div key={\"link-text.\" + key} className={textClass} >{icon}{text}</div>;\n\t\tcase (\"hSeparator\"):\n\t\t\treturn <hr key={\"h-separator.\" + key} className=\"properties-h-separator\" />;\n\t\tcase (\"panel\"):\n\t\tcase (\"tearsheet\"):\n\t\t\treturn this.genPanel(key, uiItem.panel, inPropertyId, indexof);\n\t\tcase (\"subTabs\"):\n\t\t\t// All Subtabs will become a LeftNav if displayed inside a Tearsheet container\n\t\t\treturn (<Subtabs key={\"subtabs.\" + key}\n\t\t\t\ttabs={uiItem.tabs}\n\t\t\t\tclassName={uiItem.className}\n\t\t\t\tcontroller={this.props.controller}\n\t\t\t\trightFlyout={this.props.rightFlyout}\n\t\t\t\tgenUIItem={this.genUIItem}\n\t\t\t\tnestedPanel={uiItem.nestedPanel}\n\t\t\t\tleftnav={this.props.controller.isTearsheetContainer()}\n\t\t\t/>);\n\t\tcase (\"primaryTabs\"):\n\t\t\treturn this.genPrimaryTabs(key, uiItem.tabs, inPropertyId, indexof);\n\t\tcase (\"panelSelector\"):\n\t\t\treturn this.genPanelSelector(key, uiItem.tabs, uiItem.dependsOn, inPropertyId, indexof, uiItem.id, uiItem.className);\n\t\tcase (\"checkboxSelector\"):\n\t\t\treturn this.genPanel(key, uiItem.panel, inPropertyId, indexof);\n\t\tcase (\"customPanel\"):\n\t\t\treturn this.generateCustomPanel(key, uiItem.panel);\n\t\t\t// only generate summary panel for right side flyout\n\t\tcase (\"action\"):\n\t\t\treturn this.actionFactory.generateAction(key, uiItem.action);\n\t\tcase (\"textPanel\"):\n\t\t\tif (uiItem.panel) {\n\t\t\t\treturn (<TextPanel key={\"text-panel-\" + key} panel={uiItem.panel} controller={this.props.controller} />);\n\t\t\t}\n\t\t\treturn <div key={\"unknown.\" + key}>Unknown: {uiItem.itemType}</div>;\n\t\tdefault:\n\t\t\treturn <div key={\"unknown.\" + key}>Unknown: {uiItem.itemType}</div>;\n\t\t}\n\t}\n\n\tgenerateCustomPanel(key, panel) {\n\t\tif (this.props.customPanels) {\n\t\t\tfor (const custPanel of this.props.customPanels) {\n\t\t\t\tif (custPanel.id() === panel.id) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={classNames(\"properties-custom-panel\", { \"properties-control-nested-panel\": get(panel, \"nestedPanel\", false) }) }\n\t\t\t\t\t\t\t\tkey={\"custom.\" + key}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{new custPanel(panel.parameters, this.props.controller, panel.data).renderPanel()}\n\t\t\t\t\t\t\t</div>);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlogger.warn(\"Error thrown creating custom panel: \" + error);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn <div key={\"custom.\" + key}>Panel Not Found: {panel.id}</div>;\n\t}\n\n\tgenerateSharedControlNames(panel) {\n\t\tfor (const info of this.props.controller.getSharedCtrlInfo()) {\n\t\t\tif (typeof info.id !== \"undefined\" && info.id === panel.id) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tconst sharedCtrlNames = [];\n\t\tfor (const panelItem of panel.uiItems) {\n\t\t\t// only push uiItems with controls. Some uiItems are for display only and shouldn't be added.\n\t\t\tif (panelItem.control && panelItem.control.name) {\n\t\t\t\tconst controlName = panelItem.control.name;\n\t\t\t\tsharedCtrlNames.push({\n\t\t\t\t\t\"controlName\": controlName\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis.props.controller.addSharedControls(panel.id, sharedCtrlNames);\n\t}\n\n\tgenPanel(key, panel, propertyId, indexof) {\n\t\tlet content = this.genUIContent(panel.uiItems, propertyId, indexof);\n\t\tconst id = \"panel.\" + key;\n\t\tswitch (panel.panelType) {\n\t\tcase (\"columnSelection\"):\n\t\t\tthis.generateSharedControlNames(panel);\n\t\t\t// needs to be ran after setting shared controls to get correct fields in shared controls\n\t\t\tcontent = this.genUIContent(panel.uiItems, propertyId, indexof);\n\t\t\treturn (<ControlPanel\n\t\t\t\tkey={id}\n\t\t\t\tcontroller={this.props.controller}\n\t\t\t\tpanel={panel}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</ControlPanel>);\n\t\tcase (\"summary\"):\n\t\t\tif (this.props.rightFlyout) {\n\t\t\t\treturn (\n\t\t\t\t\t<SummaryPanel\n\t\t\t\t\t\tkey={\"summary-panel-\" + id}\n\t\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\t\tpanel={panel}\n\t\t\t\t\t>\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</SummaryPanel>);\n\t\t\t}\n\t\t\treturn content;\n\t\tcase (\"actionPanel\"):\n\t\t\treturn (\n\t\t\t\t<ActionPanel key={\"action-panel-\" + key} controller={this.props.controller} panel={panel}>\n\t\t\t\t\t{content}\n\t\t\t\t</ActionPanel>);\n\t\tcase (\"twisty\"):\n\t\t\treturn (\n\t\t\t\t<TwistyPanel\n\t\t\t\t\tkey={id}\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\tpanel={panel}\n\t\t\t\t>\n\t\t\t\t\t{content}\n\t\t\t\t</TwistyPanel>);\n\t\tcase (\"tearsheet\"):\n\t\t\tthis.TEARSHEETS[panel.id] = {\n\t\t\t\tpanel: panel,\n\t\t\t\ttitle: panel.label,\n\t\t\t\tdescription: panel.description ? panel.description.text : null,\n\t\t\t\tcontent: content\n\t\t\t};\n\t\t\tif (this.props.controller.getActiveTearsheet() !== null) {\n\t\t\t\tthis.visibleTearsheet = this.TEARSHEETS[this.props.controller.getActiveTearsheet()];\n\t\t\t} else {\n\t\t\t\tthis.visibleTearsheet = null;\n\t\t\t}\n\t\t\tif (!this.FIRST_TEARSHEET_ID || this.FIRST_TEARSHEET_ID === panel.id) {\n\t\t\t\tthis.FIRST_TEARSHEET_ID = panel.id;\n\t\t\t\tconst onCloseCallback = () => {\n\t\t\t\t\tthis.props.controller.clearActiveTearsheet();\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\t<TearSheet\n\t\t\t\t\t\topen={this.props.controller.getActiveTearsheet() !== null}\n\t\t\t\t\t\tonCloseCallback={onCloseCallback}\n\t\t\t\t\t\tkey={panel.id}\n\t\t\t\t\t\ttearsheet={this.visibleTearsheet}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn null;\n\t\tcase (\"column\"):\n\t\t\treturn (\n\t\t\t\t<ColumnPanel\n\t\t\t\t\tkey={id}\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\tpanel={panel}\n\t\t\t\t>\n\t\t\t\t\t{content}\n\t\t\t\t</ColumnPanel>);\n\t\tdefault:\n\t\t\treturn (<ControlPanel\n\t\t\t\tkey={id}\n\t\t\t\tcontroller={this.props.controller}\n\t\t\t\tpanel={panel}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</ControlPanel>);\n\t\t}\n\t}\n\n\t/**\n\t* Close the field picker and invoke callback function\n\t* @param newSelectedFields all fields selected, includes newSelections\n\t* @param newSelections the newly selected rows\n\t*/\n\tcloseFieldPicker(newSelectedFields, newSelections) {\n\t\tif (this.closeFieldPickerCallback) {\n\t\t\tthis.closeFieldPickerCallback(newSelectedFields, newSelections);\n\t\t\tthis.closeFieldPickerCallback = null;\n\t\t}\n\t\tthis.props.showPropertiesButtons(true);\n\t\tthis.fieldPickerPropertyId = null;\n\t\tthis.setState({\n\t\t\tshowFieldPicker: false\n\t\t});\n\t}\n\n\t/**\n\t* Opens the field picker\n\t* @param propertyId of the control opening the field picker\n\t* @param callback function to invoke when closing the field picker\n\t*/\n\topenFieldPicker(propertyId, callback) {\n\t\tthis.props.showPropertiesButtons(false);\n\t\tthis.fieldPickerPropertyId = propertyId;\n\t\tthis.closeFieldPickerCallback = callback;\n\t\tthis.setState({\n\t\t\tshowFieldPicker: true\n\t\t});\n\t}\n\n\t/**\n\t* Renders the field picker with the control's current selected values and fields\n\t* @param title string to display as the field picker's title\n\t*/\n\tfieldPicker(title) {\n\t\tif (this.fieldPickerPropertyId && this.fieldPickerPropertyId.name) {\n\t\t\tconst currentControlValues = this.props.controller.getPropertyValue(this.fieldPickerPropertyId);\n\t\t\t// if in columnSelectionPanel, filter out fields that are in the other controls\n\t\t\tconst fields = this.props.controller.getFilteredDatasetMetadata(this.fieldPickerPropertyId);\n\n\t\t\t// create a list of field names to be passed into the field picker\n\t\t\tconst control = this.props.controller.getControl(this.fieldPickerPropertyId);\n\t\t\tlet dmImage;\n\t\t\tconst tableFieldIndex = PropertyUtil.getTableFieldIndex(control);\n\t\t\tconst subControls = control.subControls;\n\t\t\tif (tableFieldIndex !== -1) {\n\t\t\t\tif (!subControls) {\n\t\t\t\t\tdmImage = control.dmImage;\n\t\t\t\t} else {\n\t\t\t\t\tdmImage = subControls[tableFieldIndex].dmImage;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst formattedFieldsList = PropertyUtil.getFieldsFromControlValues(control, currentControlValues, fields);\n\n\t\t\treturn (<div className=\"properties-fp-table\">\n\t\t\t\t<FieldPicker\n\t\t\t\t\tkey=\"field-picker-control\"\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\tcloseFieldPicker={this.closeFieldPicker}\n\t\t\t\t\tcurrentFields={formattedFieldsList}\n\t\t\t\t\tfields={fields}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\trightFlyout={this.props.rightFlyout}\n\t\t\t\t\tdmIcon={dmImage}\n\t\t\t\t/>\n\t\t\t</div>);\n\t\t}\n\t\treturn <div />;\n\t}\n\n\tgenAlertsTab(messages) {\n\t\tconst msgUIItems = messages.map((msg) => (\n\t\t\t{\n\t\t\t\t\"itemType\": \"linkText\",\n\t\t\t\t\"text\": msg.text,\n\t\t\t\t\"textType\": msg.type,\n\t\t\t\t\"controlId\": { \"name\": msg.id_ref }\n\t\t\t}));\n\n\t\treturn {\n\t\t\t\"text\": PropertyUtil.formatMessage(\n\t\t\t\tthis.props.controller.getReactIntl(),\n\t\t\t\tMESSAGE_KEYS.ALERTS_TAB_TITLE),\n\t\t\t\"group\": ALERT_TAB_GROUP,\n\t\t\t\"content\":\n\t\t\t\t{ \"itemType\": \"panel\",\n\t\t\t\t\t\"panel\": {\n\t\t\t\t\t\t\"id\": \"alerts-panel\",\n\t\t\t\t\t\t\"panelType\": \"general\",\n\t\t\t\t\t\t\"uiItems\": msgUIItems\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t};\n\t}\n\n\trender() {\n\t\tlet uiItems = this.props.controller.getUiItems();\n\t\tif (!isEmpty(this.messages) && uiItems[0].itemType === \"primaryTabs\" && uiItems[0].tabs && uiItems[0].tabs.length > 1) {\n\t\t\t// create a new copy for uiItems object so that alerts are not added multiple times\n\t\t\tuiItems = cloneDeep(uiItems);\n\t\t\tuiItems[0].tabs.unshift(this.genAlertsTab(this.messages)); // add alerts tab to the beginning of the tabs array\n\t\t}\n\n\t\tlet content = this.genUIContent(uiItems);\n\t\tlet wideFly = <div />;\n\t\tlet stackedTearsheet;\n\n\t\tconst form = this.props.controller.getForm();\n\t\tconst title = PropertyUtil.formatMessage(this.props.controller.getReactIntl(),\n\t\t\tMESSAGE_KEYS.FIELDPICKER_SAVEBUTTON_LABEL) + \" \" + form.label;\n\n\t\tif (this.state.showFieldPicker) {\n\t\t\tif (this.props.rightFlyout) {\n\t\t\t\twideFly = (<WideFlyout\n\t\t\t\t\tshowPropertiesButtons={false}\n\t\t\t\t\tshow\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tlight={this.props.controller.getLight()}\n\t\t\t\t>\n\t\t\t\t\t{this.fieldPicker(title)}\n\t\t\t\t</WideFlyout>);\n\t\t\t} else if (this.props.controller.isTearsheetContainer()) {\n\t\t\t\tstackedTearsheet = (<TearSheet\n\t\t\t\t\topen\n\t\t\t\t\tstacked\n\t\t\t\t\ttearsheet={{\n\t\t\t\t\t\ttitle: title,\n\t\t\t\t\t\tcontent: this.fieldPicker()\n\t\t\t\t\t}}\n\t\t\t\t/>);\n\t\t\t} else {\n\t\t\t\tcontent = this.fieldPicker(title);\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t<div className={classNames(\"properties-editor-form\",\n\t\t\t\t{ \"tearsheet-container\": this.props.controller.isTearsheetContainer() },\n\t\t\t\t{ \"right-flyout-tabs-view\": this.props.rightFlyout && this.props.categoryView === CATEGORY_VIEW.TABS },\n\t\t\t\t{ \"field-picker\": this.state.showFieldPicker })}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t\t{wideFly}\n\t\t\t\t{stackedTearsheet}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nEditorForm.propTypes = {\n\tcontroller: PropTypes.object.isRequired,\n\tadditionalComponents: PropTypes.object,\n\tshowPropertiesButtons: PropTypes.func,\n\tcustomPanels: PropTypes.array,\n\trightFlyout: PropTypes.bool,\n\tcategoryView: PropTypes.oneOf([CATEGORY_VIEW.ACCORDIONS, CATEGORY_VIEW.TABS]),\n\tactiveTab: PropTypes.string, // set by redux\n\tsetActiveTab: PropTypes.func, // set by redux\n\tmessages: PropTypes.array // set by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tactiveTab: state.componentMetadataReducer.activeTab,\n\tmessages: ownProps.controller.getErrorMessages(true, true, true)\n});\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n\tsetActiveTab: (tabId) => {\n\t\tdispatch(setActiveTab(tabId));\n\t}\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EditorForm);\n","var baseGet = require('./_baseGet');\n\n/**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\nfunction propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n}\n\nmodule.exports = propertyOf;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { propertyOf } from \"lodash\";\n\nexport class L10nProvider {\n\tconstructor(resources) {\n\t\tthis.resources = resources;\n\t}\n\n\t/**\n\t * Look up a localised resource using the supplied key.\n\t */\n\tl10n(key, defaultVal) {\n\t\tif (this.resources) {\n\t\t\tconst value = propertyOf(this.resources)(key);\n\t\t\tif (value || value === \"\") {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\tif (defaultVal) {\n\t\t\treturn defaultVal;\n\t\t}\n\t\treturn key;\n\t}\n\n\t/**\n\t * Look up a localised resource. Check for resource first, then fall back to default value\n\t */\n\tl10nResource(resourceObj) {\n\t\tlet text;\n\t\tif (resourceObj) {\n\t\t\tif (resourceObj.resource_key) {\n\t\t\t\ttext = this.l10n(resourceObj.resource_key);\n\t\t\t\tif ((!text || text === resourceObj.resource_key) && resourceObj.default) {\n\t\t\t\t\ttext = resourceObj.default;\n\t\t\t\t}\n\t\t\t} else if (resourceObj.default) {\n\t\t\t\ttext = resourceObj.default;\n\t\t\t}\n\t\t}\n\t\treturn text;\n\t}\n\n\t/**\n\t * Look up a localised resource label using the supplied base key with \".label\" appended.\n\t */\n\tl10nLabel(uiObject, key) {\n\t\treturn this.l10nResource(uiObject.label) ? this.l10nResource(uiObject.label) : this.l10n(key + \".label\", key);\n\t}\n\n\t/**\n\t * Look up a localised resource description/tooltip using the supplied base key with \".desc\" appended.\n\t */\n\tl10nDesc(uiObject, key) {\n\t\treturn this.l10nResource(uiObject.description) ? this.l10nResource(uiObject.description) : this.l10n(key + \".desc\", key);\n\t}\n\n\t/**\n\t * Look up a localised resource label for an enumerated value using the supplied\n\t * base key with the value and \".label\" appended e.g. \"measurement.continous.label\".\n\t */\n\tl10nValueLabel(baseKey, value) {\n\t\tconst lookupKey = baseKey + \".\" + value + \".label\";\n\t\treturn this.l10n(lookupKey, value);\n\t}\n\n\tl10nValueDesc(baseKey, value) {\n\t\tconst lookupKey = baseKey + \".\" + value + \".desc\";\n\t\tconst desc = this.l10n(lookupKey, value);\n\t\treturn (desc !== value ? desc : null);\n\t}\n}\n\nexport class ResourceDef {\n\tstatic make(resourceObj) {\n\t\tlet resource;\n\t\tif (resourceObj) {\n\t\t\tresource = new ResourceDef();\n\t\t\tresource.default = resourceObj.default;\n\t\t\tresource.resource_key = resourceObj.resource_key;\n\t\t\tif (resourceObj.placement) {\n\t\t\t\tresource.placement = resourceObj.placement;\n\t\t\t}\n\t\t\tif (resourceObj.type) {\n\t\t\t\tresource.type = resourceObj.type;\n\t\t\t}\n\t\t\tif (resourceObj.link) {\n\t\t\t\tresource.link = resourceObj.link;\n\t\t\t}\n\t\t}\n\t\treturn resource;\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { GroupType } from \"../constants/form-constants\";\nimport { ResourceDef } from \"../util/L10nProvider\";\nimport { has, propertyOf } from \"lodash\";\nimport { v4 as uuid4 } from \"uuid\";\n\nclass Group {\n\tconstructor(cname, parameters, actions, type, label, dependsOn, insertPanels, nestedPanel, subGroups, description, data, className, copen) {\n\t\tthis.name = cname;\n\t\tthis.parameters = parameters;\n\t\tthis.actions = actions;\n\t\tthis.type = type;\n\t\tthis.label = ResourceDef.make(label);\n\t\tthis.dependsOn = dependsOn;\n\t\tthis.insertPanels = insertPanels;\n\t\tthis.nestedPanel = nestedPanel;\n\t\tthis.subGroups = subGroups;\n\t\tthis.description = ResourceDef.make(description);\n\t\tthis.data = data;\n\t\tthis.className = className;\n\t\tthis.open = copen;\n\t}\n\n\tparameterNames() {\n\t\treturn this.parameters;\n\t}\n\n\tactionIds() {\n\t\treturn this.actions;\n\t}\n\n\tgroupType() {\n\t\treturn (this.type ? this.type : GroupType.CONTROLS);\n\t}\n\n\tstatic makeGroup(uiGroup) {\n\t\tif (uiGroup) {\n\t\t\tlet subGroups;\n\t\t\tif (has(uiGroup, \"group_info\")) {\n\t\t\t\tsubGroups = [];\n\t\t\t\tfor (const group of uiGroup.group_info) {\n\t\t\t\t\tconst newGroup = Group.makeGroup(group);\n\t\t\t\t\tif (newGroup !== null) {\n\t\t\t\t\t\tsubGroups.push(newGroup);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn new Group(\n\t\t\t\tpropertyOf(uiGroup)(\"id\"),\n\t\t\t\tpropertyOf(uiGroup)(\"parameter_refs\"),\n\t\t\t\tpropertyOf(uiGroup)(\"action_refs\"),\n\t\t\t\tpropertyOf(uiGroup)(\"type\"),\n\t\t\t\tpropertyOf(uiGroup)(\"label\"),\n\t\t\t\tpropertyOf(uiGroup)(\"depends_on_ref\"),\n\t\t\t\tpropertyOf(uiGroup)(\"insert_panels\"),\n\t\t\t\tpropertyOf(uiGroup)(\"nested_panel\"),\n\t\t\t\tsubGroups,\n\t\t\t\tpropertyOf(uiGroup)(\"description\"),\n\t\t\t\tpropertyOf(uiGroup)(\"data\"),\n\t\t\t\tpropertyOf(uiGroup)(\"class_name\"),\n\t\t\t\tpropertyOf(uiGroup)(\"open\")\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport class GroupMetadata {\n\tconstructor(groups) {\n\t\tthis.groups = groups;\n\t}\n\n\tstatic makeGroupMetadata(uiGroups, parameters) {\n\t\tconst groups = [];\n\t\tif (uiGroups) {\n\t\t\tfor (const group of uiGroups) {\n\t\t\t\tconst newGroup = Group.makeGroup(group);\n\t\t\t\tif (newGroup !== null) {\n\t\t\t\t\tgroups.push(newGroup);\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// if no group create a default group with controls\n\t\t\tgroups.push(new Group(uuid4(), parameters, null, GroupType.CONTROLS));\n\t\t}\n\t\treturn new GroupMetadata(groups);\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport { ResourceDef } from \"../util/L10nProvider\";\n\nexport class Action {\n\tconstructor(actionName, label, description, control, data, image, button, className) {\n\t\tthis.name = actionName;\n\t\tthis.label = label;\n\t\tthis.description = description;\n\t\tthis.actionType = control;\n\t\tthis.data = data;\n\t\tthis.image = image;\n\t\tthis.button = button;\n\t\tthis.className = className;\n\t}\n}\n\nclass ActionDef {\n\tstatic makeActionDef(action) {\n\t\tif (action) {\n\t\t\tconst actionDef = new ActionDef();\n\t\t\tactionDef.id = action.id;\n\t\t\tactionDef.label = ResourceDef.make(action.label);\n\t\t\tactionDef.description = ResourceDef.make(action.description);\n\t\t\tactionDef.control = action.control;\n\t\t\tactionDef.data = action.data;\n\t\t\tactionDef.image = action.image;\n\t\t\tactionDef.button = action.button;\n\t\t\tactionDef.className = action.class_name;\n\t\t\treturn actionDef;\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport class ActionMetadata {\n\tconstructor(actionDefs) {\n\t\tthis.actionDefs = actionDefs;\n\t}\n\n\t// Return a single action\n\tgetAction(actionId) {\n\t\tlet actionDef;\n\t\tthis.actionDefs.forEach(function(action) {\n\t\t\tif (action.id === actionId) {\n\t\t\t\tactionDef = action;\n\t\t\t}\n\t\t});\n\t\treturn actionDef;\n\t}\n\n\tstatic makeActionMetadata(uihintsActions) {\n\t\tif (uihintsActions) {\n\t\t\tconst actionsDefs = [];\n\t\t\tfor (const action of uihintsActions) {\n\t\t\t\tconst actionDef = ActionDef.makeActionDef(action);\n\t\t\t\tif (actionDef) {\n\t\t\t\t\tactionsDefs.push(actionDef);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn new ActionMetadata(actionsDefs);\n\t\t}\n\t\treturn null;\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Separator } from \"../constants/form-constants\";\nimport { Type, ParamRole, EditStyle } from \"../constants/form-constants\";\nimport { ResourceDef } from \"../util/L10nProvider\";\nimport { propertyOf } from \"lodash\";\nimport { toType } from \"../util/property-utils\";\n\nexport class ParameterDef {\n\tconstructor(settings) {\n\t\tif (settings.id) {\n\t\t\tthis.name = settings.id;\n\t\t}\n\t\tif (settings.label) {\n\t\t\tthis.label = ResourceDef.make(settings.label);\n\t\t}\n\t\tif (settings.description) {\n\t\t\tthis.description = ResourceDef.make(settings.description);\n\t\t}\n\t\tif (settings.type) {\n\t\t\tthis.type = settings.type;\n\t\t}\n\t\tif (settings.role) {\n\t\t\tthis.role = settings.role;\n\t\t}\n\t\tif (settings.valueRestriction) {\n\t\t\tthis.valueRestriction = settings.valueRestriction;\n\t\t}\n\t\tif (settings.defaultValue !== null && toType(settings.defaultValue) !== \"undefined\") {\n\t\t\tif (settings.defaultValue.parameter_ref) {\n\t\t\t\tthis.defaultValue = {};\n\t\t\t\tthis.defaultValue.parameterRef = settings.defaultValue.parameter_ref;\n\t\t\t} else {\n\t\t\t\tthis.defaultValue = settings.defaultValue;\n\t\t\t}\n\t\t} else if (typeof settings.defaultValue === \"undefined\" && (this.isList() || this.isMapValue())) {\n\t\t\tthis.defaultValue = []; // This is a nested structure\n\t\t}\n\t\tif (typeof settings.labelVisible === \"boolean\") {\n\t\t\tthis.labelVisible = settings.labelVisible;\n\t\t}\n\t\tif (settings.control) {\n\t\t\tthis.control = settings.control;\n\t\t}\n\t\tif (settings.orientation) {\n\t\t\tthis.orientation = settings.orientation;\n\t\t}\n\t\tif (settings.width) {\n\t\t\tthis.width = settings.width;\n\t\t}\n\t\tif (settings.charLimit) {\n\t\t\tthis.charLimit = settings.charLimit;\n\t\t}\n\t\tif (settings.placeHolderText) {\n\t\t\tthis.placeHolderText = ResourceDef.make(settings.placeHolderText);\n\t\t}\n\t\tif (settings.separator) {\n\t\t\tthis.separator = settings.separator;\n\t\t}\n\t\tif (settings.resource_key) {\n\t\t\tthis.resource_key = settings.resource_key;\n\t\t}\n\t\tif (toType(settings.visible) === \"boolean\") {\n\t\t\tthis.visible = settings.visible;\n\t\t} else {\n\t\t\tthis.visible = true;\n\t\t}\n\t\tif (settings.valueIcons) {\n\t\t\tthis.valueIcons = settings.valueIcons;\n\t\t}\n\t\tif (toType(settings.sortable) === \"boolean\") {\n\t\t\tthis.sortable = settings.sortable;\n\t\t}\n\t\tif (toType(settings.filterable) === \"boolean\") {\n\t\t\tthis.filterable = settings.filterable;\n\t\t}\n\t\tif (toType(settings.resizable) === \"boolean\") {\n\t\t\tthis.resizable = settings.resizable;\n\t\t}\n\t\tif (settings.editStyle) {\n\t\t\tthis.editStyle = settings.editStyle;\n\t\t}\n\t\tif (toType(settings.required) === \"boolean\") {\n\t\t\tthis.required = settings.required;\n\t\t}\n\t\tif (settings.numberGenerator) {\n\t\t\tsettings.numberGenerator.label = ResourceDef.make(settings.numberGenerator.label);\n\t\t\tthis.numberGenerator = settings.numberGenerator;\n\t\t}\n\t\tif (settings.isKey) {\n\t\t\tthis.isKey = settings.isKey;\n\t\t}\n\t\tif (settings.dmDefault) {\n\t\t\tthis.dmDefault = settings.dmDefault;\n\t\t}\n\t\tif (settings.dmImage) {\n\t\t\tthis.dmImage = settings.dmImage;\n\t\t}\n\t\tif (settings.language) {\n\t\t\tthis.language = settings.language;\n\t\t}\n\t\tif (settings.enableMaximize) {\n\t\t\tthis.enableMaximize = settings.enableMaximize;\n\t\t}\n\n\t\tif (toType(settings.summary) === \"boolean\") {\n\t\t\tthis.summary = settings.summary;\n\t\t}\n\t\tif (settings.increment) {\n\t\t\tthis.increment = settings.increment;\n\t\t}\n\t\tif (settings.textAfter) {\n\t\t\tthis.textAfter = ResourceDef.make(settings.textAfter);\n\t\t}\n\t\tif (settings.textBefore) {\n\t\t\tthis.textBefore = ResourceDef.make(settings.textBefore);\n\t\t}\n\t\tif (toType(settings.moveableRows) === \"boolean\") {\n\t\t\tthis.moveableRows = settings.moveableRows;\n\t\t}\n\t\tif (settings.generatedValues) {\n\t\t\tthis.generatedValues = settings.generatedValues;\n\t\t}\n\t\tif (settings.dateFormat) {\n\t\t\tthis.dateFormat = settings.dateFormat;\n\t\t}\n\t\tif (settings.timeFormat) {\n\t\t\tthis.timeFormat = settings.timeFormat;\n\t\t}\n\t\tif (settings.customControlId) {\n\t\t\tthis.customControlId = settings.customControlId;\n\t\t}\n\t\tif (settings.data) {\n\t\t\tthis.data = settings.data;\n\t\t}\n\t\tif (settings.rows) {\n\t\t\tthis.rows = settings.rows;\n\t\t}\n\t\tif (settings.displayChars) {\n\t\t\tthis.displayChars = settings.displayChars;\n\t\t}\n\t\tif (settings.uionly) {\n\t\t\tthis.uionly = settings.uionly;\n\t\t}\n\t\tif (settings.actionRef) {\n\t\t\tthis.actionRef = settings.actionRef;\n\t\t}\n\t\tif (toType(settings.customValueAllowed) === \"boolean\") {\n\t\t\tthis.customValueAllowed = settings.customValueAllowed;\n\t\t}\n\t\tif (settings.className) {\n\t\t\tthis.className = settings.className;\n\t\t}\n\t}\n\n\tisList() {\n\t\tif (this.type) {\n\t\t\treturn this.type.startsWith(\"array[\");\n\t\t}\n\t\treturn false;\n\t}\n\n\tisMapValue() {\n\t\tif (this.type) {\n\t\t\treturn this.type.startsWith(\"map[\");\n\t\t}\n\t\treturn false;\n\t}\n\n\tisSubPanelEdit() {\n\t\tif (this.editStyle === EditStyle.SUBPANEL) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determines if the given parameter object represents a compound field.\n\t *\n\t * @return True if the parameter represents a compound field\n\t */\n\tisCompoundField() {\n\t\tif (this.role && this.type) {\n\t\t\tconst isObject = this.type === Type.OBJECT || this.baseType() === Type.OBJECT;\n\t\t\treturn isObject && this.role === ParamRole.COLUMN;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpropType() {\n\t\t// If we don't recognize the base type as one of the built-in types, assume it's a structure\n\t\tlet value;\n\t\tfor (const key in Type) {\n\t\t\tif (this.baseType() === Type[key]) {\n\t\t\t\tvalue = Type[key];\n\t\t\t}\n\t\t}\n\t\tif (!value) {\n\t\t\tvalue = Type.STRUCTURE;\n\t\t}\n\t\treturn value;\n\t}\n\n\tgetRole() {\n\t\tif (this.role) {\n\t\t\treturn this.role;\n\t\t} else if (this.getValidValues()) {\n\t\t\t// Assume valueRestriction implies ENUM\n\t\t\treturn ParamRole.ENUM;\n\t\t}\n\t\treturn ParamRole.UNSPECIFIED;\n\t}\n\n\t/**\n\t * Returns the type of a parameter.\n\t */\n\tbaseType() {\n\t\tconst typ = this.type;\n\t\tif (this.isList()) {\n\t\t\t// \"array[<value-type>]\" so remove the leading \"array[\" and trailing \"]\"\n\t\t\treturn typ.substring(6, this.type.length - 1);\n\t\t} else if (this.isMapValue()) {\n\t\t\t// \"map[<key-type>,<value-type>]\" so remove everything up to and including \",\" and drop the trailing \"]\"\n\t\t\treturn typ.substring(typ.indexOf(\",\") + 1, this.type.length - 1).trim();\n\t\t} else if (this.valueRestriction && !this.type) { // assume String for enums\n\t\t\treturn Type.STRING;\n\t\t}\n\t\treturn typ;\n\t}\n\n\tgetValidValues() {\n\t\tvar undef;\n\t\tif (this.valueRestriction) {\n\t\t\treturn this.valueRestriction;\n\t\t} else if (this.type === Type.BOOLEAN) {\n\t\t\treturn [true, false];\n\t\t}\n\t\treturn undef;\n\t}\n\n\tgetValidValueCount() {\n\t\treturn (this.getValidValues() ? this.getValidValues().length : 0);\n\t}\n\n\t/**\n\t * Returns the \"additionalText\" attribute which can be used to include additional\n\t * text associated with the property control on the UI.\n\t */\n\tgetAdditionalText(l10nProvider) {\n\t\treturn l10nProvider.l10nResource(this.placeHolderText);\n\t}\n\n\tgetTextAfter(l10nProvider) {\n\t\treturn l10nProvider.l10nResource(this.textAfter);\n\t}\n\tgetTextAfterType() {\n\t\treturn this.textAfter ? this.textAfter.type : null;\n\t}\n\tgetTextBefore(l10nProvider) {\n\t\treturn l10nProvider.l10nResource(this.textBefore);\n\t}\n\tgetTextBeforeType() {\n\t\treturn this.textBefore ? this.textBefore.type : null;\n\t}\n\n\t/**\n\t * Returns the \"control\" attribute which can be used to define which control should be used\n\t * for editing a property. The control should be valid for the associated property.\n\t */\n\tgetControl(defaultControl) {\n\t\treturn (this.control ? this.control : defaultControl);\n\t}\n\n\t/**\n\t * Returns the \"columns\" uihint or the default value if a \"columns\" hint has not been supplied.\n\t */\n\tcolumns(defaultCol) {\n\t\treturn (this.width ? this.width : defaultCol);\n\t}\n\n\t/**\n\t * Returns the \"separatorAfter\" attribute which can be used to insert a horizontal\n\t * separator before the control in the UI.\n\t */\n\tseparatorAfter() {\n\t\tif (this.separator === Separator.AFTER) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Returns the \"separatorBefore\" attribute which can be used to insert a horizontal\n\t * separator before the control in the UI.\n\t */\n\tseparatorBefore() {\n\t\tif (this.separator === Separator.BEFORE) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tstatic makeParameterDef(param, uihint, isKey) {\n\t\tif (param) {\n\t\t\treturn new ParameterDef({\n\t\t\t\t\"id\": propertyOf(param)(\"id\"),\n\t\t\t\t\"enableMaximize\": propertyOf(uihint)(\"enable_maximize\"),\n\t\t\t\t\"label\": propertyOf(uihint)(\"label\"),\n\t\t\t\t\"description\": propertyOf(uihint)(\"description\"),\n\t\t\t\t\"type\": propertyOf(param)(\"type\"),\n\t\t\t\t\"role\": propertyOf(param)(\"role\"),\n\t\t\t\t\"valueRestriction\": propertyOf(param)(\"enum\"),\n\t\t\t\t\"defaultValue\": propertyOf(param)(\"default\"),\n\t\t\t\t\"labelVisible\": propertyOf(uihint)(\"label_visible\"),\n\t\t\t\t\"control\": propertyOf(uihint)(\"control\"),\n\t\t\t\t\"orientation\": propertyOf(uihint)(\"orientation\"),\n\t\t\t\t\"width\": propertyOf(uihint)(\"width\"),\n\t\t\t\t\"charLimit\": propertyOf(uihint)(\"char_limit\"),\n\t\t\t\t\"placeHolderText\": propertyOf(uihint)(\"place_holder_text\"),\n\t\t\t\t\"separator\": propertyOf(uihint)(\"separator\"),\n\t\t\t\t\"resource_key\": propertyOf(uihint)(\"resource_key\"),\n\t\t\t\t\"visible\": propertyOf(uihint)(\"visible\"),\n\t\t\t\t\"valueIcons\": propertyOf(uihint)(\"value_icons\"),\n\t\t\t\t\"sortable\": propertyOf(uihint)(\"sortable\"),\n\t\t\t\t\"filterable\": propertyOf(uihint)(\"filterable\"),\n\t\t\t\t\"resizable\": propertyOf(uihint)(\"resizable\"),\n\t\t\t\t\"editStyle\": propertyOf(uihint)(\"edit_style\"),\n\t\t\t\t\"required\": propertyOf(param)(\"required\"),\n\t\t\t\t\"numberGenerator\": propertyOf(uihint)(\"number_generator\"),\n\t\t\t\t\"isKey\": isKey,\n\t\t\t\t\"dmDefault\": propertyOf(uihint)(\"dm_default\"),\n\t\t\t\t\"dmImage\": propertyOf(uihint)(\"dm_image\"),\n\t\t\t\t\"language\": propertyOf(uihint)(\"language\"),\n\t\t\t\t\"summary\": propertyOf(uihint)(\"summary\"),\n\t\t\t\t\"increment\": propertyOf(uihint)(\"increment\"),\n\t\t\t\t\"textAfter\": propertyOf(uihint)(\"text_after\"),\n\t\t\t\t\"textBefore\": propertyOf(uihint)(\"text_before\"),\n\t\t\t\t\"moveableRows\": propertyOf(uihint)(\"moveable_rows\"),\n\t\t\t\t\"generatedValues\": propertyOf(uihint)(\"generated_values\"),\n\t\t\t\t\"dateFormat\": propertyOf(uihint)(\"date_format\"),\n\t\t\t\t\"timeFormat\": propertyOf(uihint)(\"time_format\"),\n\t\t\t\t\"customControlId\": propertyOf(uihint)(\"custom_control_id\"),\n\t\t\t\t\"data\": propertyOf(uihint)(\"data\"),\n\t\t\t\t\"rows\": propertyOf(uihint)(\"rows\"),\n\t\t\t\t\"displayChars\": propertyOf(uihint)(\"display_chars\"),\n\t\t\t\t\"uionly\": propertyOf(param)(\"uionly\"),\n\t\t\t\t\"actionRef\": propertyOf(uihint)(\"action_ref\"),\n\t\t\t\t\"customValueAllowed\": propertyOf(uihint)(\"custom_value_allowed\"),\n\t\t\t\t\"className\": propertyOf(uihint)(\"class_name\")\n\t\t\t});\n\t\t}\n\t\treturn null;\n\t}\n}\n\n// searches uihints to match up with parameter\nfunction getParamUIHint(paramName, uihints) {\n\tif (uihints) {\n\t\tfor (const uihint of uihints) {\n\t\t\tif (paramName === uihint.parameter_ref) {\n\t\t\t\treturn uihint;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\n// PropertyProvider\nexport class ParameterMetadata {\n\tconstructor(paramDefs) {\n\t\tthis.paramDefs = paramDefs;\n\t}\n\n\t// Return a single parameter\n\tgetParameter(paramName) {\n\t\tlet paramDef;\n\t\tthis.paramDefs.forEach(function(param) {\n\t\t\tif (param.name === paramName) {\n\t\t\t\tparamDef = param;\n\t\t\t}\n\t\t});\n\t\treturn paramDef;\n\t}\n\n\t// Return a single parameter\n\tgetParameters() {\n\t\treturn this.paramDefs.map((param) => param.name);\n\t}\n\n\t// operation arguments\n\tstatic makeParameterMetadata(parameters, uihintsParams, uihintsUiParams) {\n\t\tconst paramDefs = [];\n\t\tif (Array.isArray(parameters)) {\n\t\t\tfor (const param of parameters) {\n\t\t\t\tconst paramDef = ParameterDef.makeParameterDef(param, getParamUIHint(param.id, uihintsParams));\n\t\t\t\tif (paramDef) {\n\t\t\t\t\tparamDefs.push(paramDef);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Add any ui_parameters\n\t\tif (Array.isArray(uihintsUiParams)) {\n\t\t\tfor (const param of uihintsUiParams) {\n\t\t\t\tconst paramDef = ParameterDef.makeParameterDef(param, getParamUIHint(param.id, uihintsParams));\n\t\t\t\tif (paramDef) {\n\t\t\t\t\tparamDef.uionly = true;\n\t\t\t\t\tparamDefs.push(paramDef);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new ParameterMetadata(paramDefs);\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport { ResourceDef } from \"../util/L10nProvider\";\n\nexport class Button {\n\tconstructor(id, label, description, icon, carbonIcon, enabled, divider) {\n\t\tthis.id = id;\n\t\tthis.label = label;\n\t\tthis.description = description;\n\t\tthis.icon = icon;\n\t\tthis.carbonIcon = carbonIcon;\n\t\tthis.enabled = enabled;\n\t\tthis.divider = divider;\n\t}\n}\n\nclass ButtonDef {\n\tstatic makeButtonDef(button) {\n\t\tif (button) {\n\t\t\tconst buttonDef = new ButtonDef();\n\t\t\tbuttonDef.id = button.id;\n\t\t\tbuttonDef.label = ResourceDef.make(button.label);\n\t\t\tbuttonDef.description = ResourceDef.make(button.description);\n\t\t\tbuttonDef.icon = button.icon;\n\t\t\tbuttonDef.carbonIcon = button.carbon_icon;\n\t\t\tbuttonDef.enabled = button.enabled;\n\t\t\tbuttonDef.divider = button.divider;\n\t\t\treturn buttonDef;\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport class ButtonMetadata {\n\tconstructor(buttonDefs) {\n\t\tthis.buttonDefs = buttonDefs;\n\t}\n\n\tgetButton(buttonId) {\n\t\tlet buttonDef;\n\t\tthis.buttonDefs.forEach(function(button) {\n\t\t\tif (button.id === buttonId) {\n\t\t\t\tbuttonDef = button;\n\t\t\t}\n\t\t});\n\t\treturn buttonDef;\n\t}\n\n\tstatic makeButtonMetadata(uihintsButtons) {\n\t\tif (uihintsButtons) {\n\t\t\tconst buttonDefs = [];\n\t\t\tfor (const button of uihintsButtons) {\n\t\t\t\tconst buttonDef = ButtonDef.makeButtonDef(button);\n\t\t\t\tif (buttonDef) {\n\t\t\t\t\tbuttonDefs.push(buttonDef);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn new ButtonMetadata(buttonDefs);\n\t\t}\n\t\treturn null;\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ParameterDef, ParameterMetadata } from \"./ParameterInfo\";\nimport { ButtonMetadata } from \"./ButtonInfo\";\nimport { propertyOf } from \"lodash\";\nimport { ResourceDef } from \"../util/L10nProvider\";\n\nexport class StructureDef {\n\tconstructor(cname, keyDefinition, parameterMetadata, moveableRows, label,\n\t\trowSelection, addRemoveRows, header, includeAllFields, layout, buttons, type) {\n\t\tthis.name = cname;\n\t\tthis.keyDefinition = keyDefinition;\n\t\tthis.parameterMetadata = parameterMetadata;\n\t\tthis.moveableRows = moveableRows;\n\t\tthis.label = ResourceDef.make(label);\n\t\tthis.rowSelection = rowSelection;\n\t\tthis.buttons = buttons;\n\t\tif (typeof addRemoveRows === \"boolean\") {\n\t\t\tthis.addRemoveRows = addRemoveRows;\n\t\t} else {\n\t\t\tthis.addRemoveRows = true; // set the default value\n\t\t}\n\t\tif (typeof header === \"boolean\") {\n\t\t\tthis.header = header;\n\t\t} else {\n\t\t\tthis.header = true; // set the default value\n\t\t}\n\t\tif (typeof includeAllFields === \"boolean\") {\n\t\t\tthis.includeAllFields = includeAllFields;\n\t\t}\n\t\tif (Array.isArray(layout)) {\n\t\t\tthis.layout = layout;\n\t\t}\n\t\tif (typeof type === \"undefined\") {\n\t\t\tthis.type = \"array\"; // set the default value\n\t\t} else {\n\t\t\tthis.type = type;\n\t\t}\n\t}\n\n\t/**\n\t * Returns a array of parameter names\n\t */\n\tparameterNames() {\n\t\tconst params = [];\n\t\tif (this.parameterMetadata) {\n\t\t\tfor (const param of this.parameterMetadata.paramDefs) {\n\t\t\t\tparams.push(param.name);\n\t\t\t}\n\t\t}\n\t\treturn params;\n\t}\n\thasSubPanel() {\n\t\tif (this.parameterMetadata) {\n\t\t\tfor (const param of this.parameterMetadata.paramDefs) {\n\t\t\t\tif (param.isSubPanelEdit()) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tkeyAttributeIndex() {\n\t\tif (this.keyDefinition) {\n\t\t\t// Assume the key is always in the first column\n\t\t\treturn 0;\n\t\t}\n\t\treturn -1;\n\t}\n\n\tdefaultStructure() {\n\t\tconst defaults = [];\n\t\tthis.parameterMetadata.paramDefs.forEach(function(param) {\n\t\t\tdefaults.push(param.defaultValue);\n\t\t});\n\t\tif (this.keyDefinition) {\n\t\t\t// Assume the key is always in the first column\n\t\t\tdefaults.unshift(this.keyDefinition.defaultValue);\n\t\t}\n\t\treturn defaults;\n\t}\n\n\tstatic makeStructure(structure, uihints) {\n\t\tif (structure) {\n\t\t\treturn new StructureDef(\n\t\t\t\tpropertyOf(structure)(\"id\"),\n\t\t\t\tParameterDef.makeParameterDef(propertyOf(structure)(\"key_definition\"), propertyOf(uihints)(\"key_definition\"), true),\n\t\t\t\tParameterMetadata.makeParameterMetadata(propertyOf(structure)(\"parameters\"), propertyOf(uihints)(\"parameters\")),\n\t\t\t\tpropertyOf(uihints)(\"moveable_rows\"),\n\t\t\t\tpropertyOf(uihints)(\"label\"),\n\t\t\t\tpropertyOf(uihints)(\"row_selection\"),\n\t\t\t\tpropertyOf(uihints)(\"add_remove_rows\"),\n\t\t\t\tpropertyOf(uihints)(\"header\"),\n\t\t\t\tpropertyOf(uihints)(\"include_all_fields\"),\n\t\t\t\tpropertyOf(uihints)(\"layout\"),\n\t\t\t\tButtonMetadata.makeButtonMetadata(propertyOf(uihints)(\"buttons\")),\n\t\t\t\tpropertyOf(structure)(\"type\")\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n}\n\n// searches uihints to match up with parameter\nfunction getStructureUIHint(structureName, uihints) {\n\tif (uihints) {\n\t\tfor (const uihint of uihints) {\n\t\t\tif (structureName === uihint.complex_type_ref) {\n\t\t\t\treturn uihint;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nexport class StructureMetadata {\n\tconstructor(structures) {\n\t\tthis.structures = structures;\n\t}\n\n\tgetStructure(structName) {\n\t\tlet structureDef;\n\t\tthis.structures.forEach(function(structure) {\n\t\t\tif (structure.name === structName) {\n\t\t\t\tstructureDef = structure;\n\t\t\t}\n\t\t});\n\t\treturn structureDef;\n\t}\n\n\n\tstatic makeStructureMetadata(structures, uihintsStructures) {\n\t\tif (structures) {\n\t\t\tconst structureDefs = [];\n\t\t\tfor (const structure of structures) {\n\t\t\t\tconst struct = StructureDef.makeStructure(structure, getStructureUIHint(structure.id, uihintsStructures));\n\t\t\t\tif (struct !== null) {\n\t\t\t\t\tstructureDefs.push(struct);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn new StructureMetadata(structureDefs);\n\t\t}\n\t\treturn null;\n\t}\n\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { GroupMetadata } from \"./GroupInfo\";\nimport { ActionMetadata } from \"./ActionInfo\";\nimport { ParameterMetadata } from \"./ParameterInfo\";\nimport { StructureMetadata } from \"./StructureInfo\";\nimport { DEFAULT_LABEL_EDITABLE } from \"../constants/constants\";\nimport { Size } from \"../constants/form-constants\";\nimport { ResourceDef } from \"../util/L10nProvider\";\nimport { propertyOf } from \"lodash\";\n\nexport class PropertyDef {\n\tconstructor(cname, icon, editorSize, pixelWidth, label, labelEditable, help, description, structureMetadata, parameterMetadata, groupMetadata, actionMetadata, heading) {\n\t\tthis.name = cname;\n\t\tthis.icon = icon;\n\t\tthis.editorSize = editorSize;\n\t\tthis.pixelWidth = pixelWidth;\n\t\tthis.label = label;\n\t\tthis.labelEditable = labelEditable;\n\t\tthis.help = help;\n\t\tthis.description = ResourceDef.make(description);\n\t\tthis.structureMetadata = structureMetadata;\n\t\tthis.parameterMetadata = parameterMetadata;\n\t\tthis.groupMetadata = groupMetadata;\n\t\tthis.actionMetadata = actionMetadata;\n\t\tthis.heading = heading;\n\t}\n\n\t/**\n\t * Returns the \"editorSize\" attribute which can be used to define how large\n\t * a node editor should be in the UI. Default to small editor unless defaultValue is set.\n\t */\n\teditorSizeHint(defaultValue) {\n\t\tif (this.editorSize) {\n\t\t\treturn this.editorSize;\n\t\t}\n\t\tif (defaultValue) {\n\t\t\treturn defaultValue;\n\t\t}\n\t\treturn Size.SMALL;\n\t}\n\n\n\tstatic makePropertyDef(titleDefinition, parameters, structures, uihints) {\n\t\tconst structureMetadata = StructureMetadata.makeStructureMetadata(structures, propertyOf(uihints)(\"complex_type_info\"));\n\t\tconst parameterMetadata = ParameterMetadata.makeParameterMetadata(parameters,\n\t\t\tpropertyOf(uihints)(\"parameter_info\"), propertyOf(uihints)(\"ui_parameters\"));\n\t\tconst actionMetadata = ActionMetadata.makeActionMetadata(propertyOf(uihints)(\"action_info\"));\n\t\tconst groupMetadata = GroupMetadata.makeGroupMetadata(propertyOf(uihints)(\"group_info\"), parameterMetadata.getParameters());\n\n\t\tconst label = titleDefinition && titleDefinition.title ? titleDefinition.title : null;\n\t\tconst labelEditable = titleDefinition && typeof titleDefinition.editable !== \"undefined\" ? titleDefinition.editable : DEFAULT_LABEL_EDITABLE;\n\n\t\treturn new PropertyDef(\n\t\t\tpropertyOf(uihints)(\"id\"),\n\t\t\tpropertyOf(uihints)(\"icon\"),\n\t\t\tpropertyOf(uihints)(\"editor_size\"),\n\t\t\tpropertyOf(uihints)(\"pixel_width\"),\n\t\t\tlabel,\n\t\t\tlabelEditable,\n\t\t\tpropertyOf(uihints)(\"help\"),\n\t\t\tpropertyOf(uihints)(\"description\"),\n\t\t\tstructureMetadata,\n\t\t\tparameterMetadata,\n\t\t\tgroupMetadata,\n\t\t\tactionMetadata,\n\t\t\tpropertyOf(uihints)(\"label\")\n\t\t);\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { get } from \"lodash\";\n\nimport { EditStyle } from \"../constants/form-constants\";\n\n\nexport class Control {\n\tconstructor(settings) {\n\t\tthis.name = settings.name;\n\t\tif (settings.label) {\n\t\t\tthis.label = settings.label;\n\t\t}\n\t\tif (settings.description) {\n\t\t\tthis.description = settings.description;\n\t\t}\n\t\tif (typeof settings.labelVisible === \"boolean\") {\n\t\t\tthis.labelVisible = settings.labelVisible;\n\t\t}\n\t\tif (settings.controlType) {\n\t\t\tthis.controlType = settings.controlType;\n\t\t}\n\t\tif (settings.valueDef) {\n\t\t\tthis.valueDef = settings.valueDef;\n\t\t}\n\t\tif (settings.role) {\n\t\t\tthis.role = settings.role;\n\t\t}\n\t\tif (settings.additionalText) {\n\t\t\tthis.additionalText = settings.additionalText;\n\t\t}\n\t\tif (settings.orientation) {\n\t\t\tthis.orientation = settings.orientation;\n\t\t}\n\t\tif (settings.values) {\n\t\t\tthis.values = settings.values;\n\t\t}\n\t\tif (settings.valueLabels) {\n\t\t\tthis.valueLabels = settings.valueLabels;\n\t\t}\n\t\tif (settings.valueDescs) {\n\t\t\tthis.valueDescs = settings.valueDescs;\n\t\t}\n\t\tif (settings.valueIcons) {\n\t\t\tthis.valueIcons = settings.valueIcons;\n\t\t}\n\t\tif (typeof settings.sortable === \"boolean\") {\n\t\t\tthis.sortable = settings.sortable;\n\t\t}\n\t\tif (typeof settings.filterable === \"boolean\") {\n\t\t\tthis.filterable = settings.filterable;\n\t\t}\n\t\tif (typeof settings.resizable === \"boolean\") {\n\t\t\tthis.resizable = settings.resizable;\n\t\t}\n\t\tif (settings.language) {\n\t\t\tthis.language = settings.language;\n\t\t}\n\t\tif (settings.enableMaximize) {\n\t\t\tthis.enableMaximize = settings.enableMaximize;\n\t\t}\n\t\tif (settings.charLimit) {\n\t\t\tthis.charLimit = settings.charLimit;\n\t\t}\n\t\tif (settings.summary) {\n\t\t\tthis.summary = settings.summary;\n\t\t}\n\t\tif (settings.increment) {\n\t\t\tthis.increment = settings.increment;\n\t\t}\n\t\tif (settings.generatedValues) {\n\t\t\tthis.generatedValues = {};\n\t\t\tif (settings.generatedValues.operation) {\n\t\t\t\tthis.generatedValues.operation = settings.generatedValues.operation;\n\t\t\t}\n\t\t\tif (settings.generatedValues.start_value) {\n\t\t\t\tthis.generatedValues.startValue = settings.generatedValues.start_value;\n\t\t\t}\n\t\t}\n\t\tif (settings.dateFormat) {\n\t\t\tthis.dateFormat = settings.dateFormat;\n\t\t}\n\t\tif (settings.timeFormat) {\n\t\t\tthis.timeFormat = settings.timeFormat;\n\t\t}\n\t\tif (settings.customControlId) {\n\t\t\tthis.customControlId = settings.customControlId;\n\t\t}\n\t\tif (settings.data) {\n\t\t\tthis.data = settings.data;\n\t\t}\n\t\tif (settings.rows) {\n\t\t\tthis.rows = settings.rows;\n\t\t}\n\t\tif (settings.displayChars) {\n\t\t\tthis.displayChars = settings.displayChars;\n\t\t}\n\t\tif (settings.action) {\n\t\t\tthis.action = settings.action;\n\t\t}\n\t\tif (settings.structureType) {\n\t\t\tthis.structureType = settings.structureType;\n\t\t}\n\t\tif (settings.subControls) {\n\t\t\tthis.subControls = settings.subControls;\n\t\t}\n\t\tif (settings.childItem) {\n\t\t\tthis.childItem = settings.childItem;\n\t\t}\n\t\tif (settings.layout) {\n\t\t\tthis.layout = settings.layout;\n\t\t}\n\t\tif (typeof settings.keyIndex === \"number\") {\n\t\t\tthis.keyIndex = settings.keyIndex;\n\t\t}\n\t\tif (settings.defaultRow) {\n\t\t\tthis.defaultRow = settings.defaultRow;\n\t\t}\n\t\tif (typeof settings.moveableRows === \"boolean\") {\n\t\t\tthis.moveableRows = settings.moveableRows;\n\t\t}\n\t\tif (typeof settings.required === \"boolean\") {\n\t\t\tthis.required = settings.required;\n\t\t}\n\t\tif (settings.rowSelection) {\n\t\t\tthis.rowSelection = settings.rowSelection;\n\t\t}\n\t\tif (typeof settings.addRemoveRows === \"boolean\") {\n\t\t\tthis.addRemoveRows = settings.addRemoveRows;\n\t\t}\n\n\t\tif (typeof settings.hideEditButton === \"boolean\") {\n\t\t\tthis.hideEditButton = settings.hideEditButton;\n\t\t}\n\n\t\tif (typeof settings.header === \"boolean\") {\n\t\t\tthis.header = settings.header;\n\t\t}\n\t\tif (typeof settings.uionly === \"boolean\") {\n\t\t\tthis.uionly = settings.uionly;\n\t\t}\n\t\tif (typeof settings.includeAllFields === \"boolean\") {\n\t\t\tthis.includeAllFields = settings.includeAllFields;\n\t\t}\n\t\tif (settings.dmImage) {\n\t\t\tthis.dmImage = settings.dmImage;\n\t\t}\n\n\t\tif (typeof settings.visible === \"boolean\") {\n\t\t\tthis.visible = settings.visible;\n\t\t}\n\t\tif (typeof settings.width === \"number\") {\n\t\t\tthis.width = settings.width;\n\t\t}\n\t\tif (settings.editStyle) {\n\t\t\tthis.editStyle = settings.editStyle;\n\t\t} else if (!settings.isKeyField && typeof settings.structureType !== \"undefined\") {\n\t\t\tthis.editStyle = EditStyle.INLINE; // Should only be set for structure controls\n\t\t}\n\t\tif (settings.dmDefault) {\n\t\t\tthis.dmDefault = settings.dmDefault;\n\t\t}\n\t\tif (settings.dmImage) {\n\t\t\tthis.dmImage = settings.dmImage;\n\t\t}\n\t\tif (settings.customValueAllowed) {\n\t\t\tthis.customValueAllowed = settings.customValueAllowed;\n\t\t}\n\t\tif (settings.className) {\n\t\t\tthis.className = settings.className;\n\t\t}\n\t\tif (settings.buttons) {\n\t\t\tthis.buttons = settings.buttons;\n\t\t}\n\t\tthis.light = get(settings, \"light\", true);\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ItemType } from \"../constants/form-constants\";\nimport { propertyOf } from \"lodash\";\n\nexport class UIItem {\n\tconstructor(elements) {\n\t\tthis.id = propertyOf(elements)(\"id\");\n\t\tthis.itemType = propertyOf(elements)(\"itemType\");\n\t\tthis.tabs = propertyOf(elements)(\"tabs\"); // when PRIMARY_TABS, SUB_TABS or PANEL_SELECTOR\n\t\tthis.panel = propertyOf(elements)(\"panel\"); // when PANEL or ADDITIONAL_LINK\n\t\tthis.control = propertyOf(elements)(\"control\"); // when CONTROL\n\t\tthis.text = propertyOf(elements)(\"text\"); // when ADDITIONAL_LINK (link label) or STATIC_TEXT\n\t\tthis.textType = propertyOf(elements)(\"textType\"); // when STATIC_TEXT\n\t\tthis.secondaryText = propertyOf(elements)(\"secondaryText\"); // when ADDITIONAL_LINK (subpanel label)\n\t\tthis.dependsOn = propertyOf(elements)(\"dependsOn\"); // when PANEL_SELECTOR (control to obtain value from)\n\t\tthis.action = propertyOf(elements)(\"action\"); // when ACTION\n\t\tthis.className = propertyOf(elements)(\"className\");\n\t\tthis.nestedPanel = propertyOf(elements)(\"nestedPanel\"); // when SUB_TABS\n\t}\n\n\tstatic makePrimaryTabs(tabs) {\n\t\treturn new UIItem({\n\t\t\titemType: ItemType.PRIMARY_TABS,\n\t\t\ttabs: tabs\n\t\t});\n\t}\n\n\tstatic makeSubTabs(tabs, className, nestedPanel) {\n\t\treturn new UIItem({\n\t\t\titemType: ItemType.SUB_TABS,\n\t\t\ttabs: tabs,\n\t\t\tclassName: className,\n\t\t\tnestedPanel: nestedPanel\n\t\t});\n\t}\n\n\tstatic makePanelSelector(groupName, tabs, dependsOn, className) {\n\t\treturn new UIItem({\n\t\t\tid: groupName,\n\t\t\titemType: ItemType.PANEL_SELECTOR,\n\t\t\ttabs: tabs,\n\t\t\tdependsOn: dependsOn,\n\t\t\tclassName: className\n\t\t});\n\t}\n\n\tstatic makePanel(panel) {\n\t\treturn new UIItem({\n\t\t\titemType: ItemType.PANEL,\n\t\t\tpanel: panel\n\t\t});\n\t}\n\n\tstatic makeAdditionalLink(text, dialogText, panel) {\n\t\treturn new UIItem({\n\t\t\titemType: ItemType.ADDITIONAL_LINK,\n\t\t\tpanel: panel,\n\t\t\ttext: text,\n\t\t\tsecondaryText: dialogText\n\t\t});\n\t}\n\n\tstatic makeControl(control) {\n\t\treturn new UIItem({\n\t\t\titemType: ItemType.CONTROL,\n\t\t\tcontrol: control\n\t\t});\n\t}\n\n\tstatic makeAction(action) {\n\t\treturn new UIItem({\n\t\t\titemType: ItemType.ACTION,\n\t\t\taction: action\n\t\t});\n\t}\n\n\tstatic makeHSeparator() {\n\t\treturn new UIItem({\n\t\t\titemType: ItemType.HORIZONTAL_SEPARATOR\n\t\t});\n\t}\n\n\tstatic makeStaticText(text, textType) {\n\t\treturn new UIItem({\n\t\t\titemType: ItemType.STATIC_TEXT,\n\t\t\ttext: text,\n\t\t\ttextType: textType\n\t\t});\n\t}\n\n\tstatic makeTextPanel(groupName, label, description, className, nestedPanel) {\n\t\treturn new UIItem({\n\t\t\titemType: ItemType.TEXT_PANEL,\n\t\t\tpanel: {\n\t\t\t\tid: groupName,\n\t\t\t\tlabel: label,\n\t\t\t\tdescription: description,\n\t\t\t\tclassName: className,\n\t\t\t\tnestedPanel: nestedPanel\n\t\t\t}\n\t\t});\n\t}\n\n\tstatic makeCustomPanel(panel, className) {\n\t\treturn new UIItem({\n\t\t\titemType: ItemType.CUSTOM_PANEL,\n\t\t\tpanel: panel,\n\t\t\tclassName: className\n\t\t});\n\t}\n\n\tstatic makeTearsheetPanel(control, description) {\n\t\treturn new UIItem({\n\t\t\titemType: ItemType.TEARSHEET,\n\t\t\tpanel: {\n\t\t\t\t...control,\n\t\t\t\tdescription\n\t\t\t}\n\t\t});\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint max-depth: [\"error\", 5] */\n\nimport { Control } from \"./ControlInfo\";\nimport { UIItem } from \"./UIItem\";\nimport { GroupType, PanelType, Type, ControlType, ParamRole, ORIENTATIONS } from \"../constants/form-constants\";\nimport { CONTAINER_TYPE } from \"../constants/constants\";\nimport logger from \"../../../utils/logger\";\nimport { StructureDef } from \"./StructureInfo\";\nimport { Action } from \"./ActionInfo\";\nimport { Button } from \"./ButtonInfo\";\nimport { get } from \"lodash\";\n\n/**\n * The Editor is the primary container for the editing controls. It defines the tabs within the\n * form which themselves contain the controls and other UI artifacts.\n */\nexport class EditorTab {\n\tconstructor(label, cname, uiItem) {\n\t\tthis.text = label;\n\t\tthis.group = cname;\n\t\tthis.content = uiItem;\n\t}\n}\n\nclass ValueDef {\n\tconstructor(propType, isList, isMap, defaultValue) {\n\t\tthis.propType = propType === Type.OBJECT ? Type.STRUCTURE : propType;\n\t\tthis.isList = isList;\n\t\tthis.isMap = isMap;\n\t\tthis.defaultValue = defaultValue;\n\t}\n\tstatic make(parameter) {\n\t\treturn new ValueDef(parameter.propType(), parameter.isList(),\n\t\t\tparameter.isMapValue(), parameter.defaultValue);\n\t}\n}\n\nclass Label {\n\tconstructor(text, numberGenerator) {\n\t\tthis.text = text;\n\t\tif (numberGenerator) {\n\t\t\tthis.numberGenerator = numberGenerator;\n\t\t}\n\t}\n}\n\nclass Description {\n\tconstructor(text, placement, link) {\n\t\tthis.text = text;\n\t\tif (placement) {\n\t\t\tthis.placement = placement;\n\t\t}\n\t\tif (link) {\n\t\t\tthis.link = link;\n\t\t}\n\t}\n}\n\nclass ControlPanel {\n\tconstructor(id, panelType, className, nestedPanel, controls, label, copen = false) {\n\t\tthis.id = id;\n\t\tthis.panelType = panelType;\n\t\tthis.nestedPanel = nestedPanel;\n\t\tthis.uiItems = controls;\n\t\tthis.open = copen;\n\t\tif (label) {\n\t\t\tthis.label = label;\n\t\t}\n\t\tif (className) {\n\t\t\tthis.className = className;\n\t\t}\n\t}\n}\n\nclass ActionPanel {\n\tconstructor(id, panelType, className, nestedPanel, actions, label, description) {\n\t\tthis.id = id;\n\t\tthis.panelType = panelType;\n\t\tthis.nestedPanel = nestedPanel;\n\t\tthis.uiItems = actions;\n\t\tif (className) {\n\t\t\tthis.className = className;\n\t\t}\n\t\tif (label) {\n\t\t\tthis.label = label;\n\t\t}\n\t\tif (description) {\n\t\t\tthis.description = description;\n\t\t}\n\t}\n}\n\nclass CustomControlPanel {\n\tconstructor(id, panelType, className, nestedPanel, parameters, data) {\n\t\tthis.id = id;\n\t\tthis.panelType = panelType;\n\t\tthis.nestedPanel = nestedPanel;\n\t\tthis.parameters = parameters;\n\t\tthis.data = data;\n\t\tif (className) {\n\t\t\tthis.className = className;\n\t\t}\n\t}\n}\n\nclass NumberGenerator {\n\tconstructor(text, numberGenerator) {\n\t\tthis.text = text;\n\t\tif (numberGenerator.range) {\n\t\t\tthis.range = numberGenerator.range;\n\t\t}\n\t}\n}\n\n/**\n * Creates tab based on parameter definition\n */\nfunction makePrimaryTab(propertyDef, group, l10nProvider, containerType) {\n\tconst label = l10nProvider.l10nLabel(group, group.name);\n\tconst additionalInfo = {\n\t\tlight: true,\n\t\tcontainerType\n\t};\n\treturn new EditorTab(label, group.name,\n\t\t_makeUIItem(propertyDef.parameterMetadata, propertyDef.actionMetadata, group, propertyDef.structureMetadata, l10nProvider, additionalInfo));\n}\n\nfunction _makeUIItem(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, additionalInfo) {\n\tconst groupName = group.name;\n\tlet groupItem = null;\n\tlet groupLabel = null;\n\tconst groupClassName = group.className;\n\tconst nestedPanel = get(group, \"nestedPanel\", false);\n\tswitch (group.groupType()) {\n\tcase GroupType.CONTROLS:\n\t\treturn UIItem.makePanel(new ControlPanel(groupName, PanelType.GENERAL, groupClassName, nestedPanel,\n\t\t\t_makeControls(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, additionalInfo)));\n\tcase GroupType.COLUMN_SELECTION:\n\t\treturn UIItem.makePanel(new ControlPanel(groupName, PanelType.COLUMN_SELECTION, groupClassName, nestedPanel,\n\t\t\t_makeControls(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, additionalInfo)));\n\tcase GroupType.ADDITIONAL: {\n\t\tconst panel = new ControlPanel(groupName, PanelType.GENERAL, groupClassName, nestedPanel,\n\t\t\t_makeControls(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, additionalInfo));\n\t\tgroupLabel = l10nProvider.l10nLabel(group, group.name);\n\t\treturn UIItem.makeAdditionalLink(groupLabel, groupLabel, panel);\n\t}\n\tcase GroupType.SUB_TABS: {\n\t\t// Defines a sub-tab group where each child group represents a sub-tab.\n\t\tconst subTabItems = [];\n\t\tif (Array.isArray(group.subGroups)) {\n\t\t\tgroup.subGroups.forEach(function(subGroup) {\n\t\t\t\tconst subGroupName = subGroup.name;\n\t\t\t\tgroupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, additionalInfo);\n\t\t\t\tgroupLabel = l10nProvider.l10nLabel(subGroup, subGroup.name);\n\t\t\t\tsubTabItems.push(new EditorTab(groupLabel, subGroupName, groupItem));\n\t\t\t});\n\t\t}\n\t\treturn UIItem.makeSubTabs(subTabItems, groupClassName, nestedPanel);\n\t}\n\tcase GroupType.PANEL_SELECTOR: {\n\t\t// Defines a sub-tab group where each child group represents a sub-tab.\n\t\tconst panSelSubItems = _genPanelSelectorPanels(group, parameterMetadata, actionMetadata, structureMetadata, l10nProvider, additionalInfo);\n\t\treturn UIItem.makePanelSelector(groupName, panSelSubItems, group.dependsOn, groupClassName);\n\t}\n\tcase GroupType.PANELS: {\n\t\tconst panSubItems = [];\n\t\tif (Array.isArray(group.subGroups)) {\n\t\t\tgroup.subGroups.forEach(function(subGroup) {\n\t\t\t\tgroupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, additionalInfo);\n\t\t\t\tpanSubItems.push(groupItem);\n\t\t\t});\n\t\t}\n\t\treturn UIItem.makePanel(new ControlPanel(groupName, PanelType.GENERAL, groupClassName, nestedPanel, panSubItems));\n\t}\n\tcase GroupType.COLUMN_PANEL: {\n\t\tconst panSubItems = [];\n\t\tif (Array.isArray(group.subGroups)) {\n\t\t\tgroup.subGroups.forEach(function(subGroup) {\n\t\t\t\tgroupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, additionalInfo);\n\t\t\t\tpanSubItems.push(groupItem);\n\t\t\t});\n\t\t}\n\t\treturn UIItem.makePanel(new ControlPanel(groupName, PanelType.COLUMN_PANEL, groupClassName, nestedPanel, panSubItems));\n\t}\n\tcase GroupType.CUSTOM_PANEL: {\n\t\treturn UIItem.makeCustomPanel(new CustomControlPanel(groupName, PanelType.CUSTOM, groupClassName, nestedPanel, group.parameterNames(), group.data));\n\t}\n\tcase GroupType.SUMMARY_PANEL: {\n\t\tgroupLabel = l10nProvider.l10nLabel(group, group.name);\n\t\tconst panSubItems = [];\n\t\tif (Array.isArray(group.subGroups)) {\n\t\t\tgroup.subGroups.forEach(function(subGroup) {\n\t\t\t\tgroupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, additionalInfo);\n\t\t\t\tpanSubItems.push(groupItem);\n\t\t\t});\n\t\t}\n\t\treturn UIItem.makePanel(new ControlPanel(groupName, PanelType.SUMMARY, groupClassName, nestedPanel, panSubItems, groupLabel));\n\t}\n\tcase GroupType.ACTION_PANEL: {\n\t\tgroupLabel = l10nProvider.l10nResource(group.label);\n\t\tlet groupDesc;\n\t\tif (group.description) {\n\t\t\tgroupDesc = new Description(l10nProvider.l10nResource(group.description),\n\t\t\t\tnull,\n\t\t\t\tgroup.description ? group.description.link : null);\n\t\t}\n\t\treturn UIItem.makePanel(new ActionPanel(groupName, PanelType.ACTION_PANEL, groupClassName, nestedPanel,\n\t\t\t_makeActions(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider), groupLabel, groupDesc));\n\t}\n\tcase GroupType.TEXT_PANEL: {\n\t\tgroupLabel = l10nProvider.l10nResource(group.label);\n\t\tlet groupDesc;\n\t\tif (group.description) {\n\t\t\tgroupDesc = new Description(l10nProvider.l10nResource(group.description),\n\t\t\t\tgroup.description ? group.description.placement : null,\n\t\t\t\tgroup.description ? group.description.link : null);\n\t\t}\n\t\treturn UIItem.makeTextPanel(groupName, groupLabel, groupDesc, groupClassName, nestedPanel);\n\t}\n\tcase GroupType.TWISTY_PANEL: {\n\t\tgroupLabel = l10nProvider.l10nLabel(group, group.name);\n\t\tconst panSubItems = [];\n\t\tif (Array.isArray(group.subGroups)) {\n\t\t\tgroup.subGroups.forEach(function(subGroup) {\n\t\t\t\tgroupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, additionalInfo);\n\t\t\t\tpanSubItems.push(groupItem);\n\t\t\t});\n\t\t}\n\t\treturn UIItem.makePanel(new ControlPanel(groupName, PanelType.TWISTY_PANEL, groupClassName, nestedPanel, panSubItems, groupLabel, group.open));\n\t}\n\tcase GroupType.TEARSHEET_PANEL: {\n\t\tgroupLabel = l10nProvider.l10nLabel(group, group.name);\n\t\tlet groupDesc;\n\t\tif (group.description) {\n\t\t\tgroupDesc = new Description(l10nProvider.l10nResource(group.description));\n\t\t}\n\t\tconst panSubItems = [];\n\t\tif (Array.isArray(group.subGroups)) {\n\t\t\tgroup.subGroups.forEach(function(subGroup) {\n\t\t\t\tconst additionalInfoUpdated = Object.assign({}, additionalInfo, { light: false });\n\t\t\t\tgroupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, additionalInfoUpdated);\n\t\t\t\tpanSubItems.push(groupItem);\n\t\t\t});\n\t\t}\n\t\treturn UIItem.makeTearsheetPanel(new ControlPanel(groupName, PanelType.TEARSHEET, groupClassName, nestedPanel, panSubItems, groupLabel, false), groupDesc);\n\t}\n\tdefault:\n\t\tlogger.warn(\"(Unknown group type '\" + group.groupType() + \"')\");\n\t\treturn null;\n\t}\n}\n\n/**\n * Called on a base property group.\n */\nfunction _makeControls(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider, additionalInfo) {\n\tconst uiItems = [];\n\tconst panelInsertedFor = [];\n\tif (!Array.isArray(group.parameterNames())) {\n\t\treturn uiItems;\n\t}\n\tgroup.parameterNames().forEach(function(paramName) {\n\t\t// Assume property definition exists\n\t\tconst prop = parameterMetadata.getParameter(paramName);\n\t\tlet structureDef;\n\t\tif (prop.propType() === Type.STRUCTURE && structureMetadata) {\n\t\t\tstructureDef = structureMetadata.getStructure(prop.baseType());\n\t\t}\n\t\tif (!(group instanceof StructureDef) || (group instanceof StructureDef && prop.isSubPanelEdit())) {\n\t\t\tconst ctrl = _makeControl(parameterMetadata, paramName, group, structureDef, l10nProvider, actionMetadata, structureMetadata, null, additionalInfo);\n\t\t\tconst control = UIItem.makeControl(ctrl);\n\t\t\tif (prop.separatorBefore()) {\n\t\t\t\tuiItems.push(UIItem.makeHSeparator());\n\t\t\t}\n\t\t\tif (prop.textBefore) {\n\t\t\t\tuiItems.push(UIItem.makeStaticText(prop.getTextBefore(l10nProvider), prop.getTextBeforeType()));\n\t\t\t}\n\t\t\tuiItems.push(control);\n\t\t\tif (prop.textAfter) {\n\t\t\t\tuiItems.push(UIItem.makeStaticText(prop.getTextAfter(l10nProvider), prop.getTextAfterType()));\n\t\t\t}\n\t\t\tif (prop.separatorAfter()) {\n\t\t\t\tuiItems.push(UIItem.makeHSeparator());\n\t\t\t}\n\n\t\t\t// If this control is a vertical radio button set and any element of\n\t\t\t// the associated subgroups is a panel of type panelSelector which has\n\t\t\t// the insertPanels boolean set to true and has its 'depends on' field\n\t\t\t// set to the name of the parameter being displayed by this radio\n\t\t\t// button control, then process the subgroup in the usual way but add\n\t\t\t// each to the additionalItems in the control. This allows them to be\n\t\t\t// inserted into the radio button set at display time.\n\t\t\tif (group.subGroups && group.subGroups.length > 0) {\n\t\t\t\tfor (var i = 0; i < group.subGroups.length; i++) {\n\t\t\t\t\tif (control.control.controlType === ControlType.RADIOSET &&\n\t\t\t\t\t\t\tcontrol.control.orientation === ORIENTATIONS.VERTICAL &&\n\t\t\t\t\t\t\tgroup.subGroups[i].type === GroupType.PANEL_SELECTOR &&\n\t\t\t\t\t\t\tgroup.subGroups[i].insertPanels === true &&\n\t\t\t\t\t\t\tgroup.subGroups[i].dependsOn === control.control.name) {\n\t\t\t\t\t\tpanelInsertedFor.push(group.subGroups[i].dependsOn);\n\t\t\t\t\t\tcontrol.additionalItems =\n\t\t\t\t\t\t\t_genPanelSelectorPanels(group.subGroups[i], parameterMetadata, actionMetadata, structureMetadata, l10nProvider, additionalInfo);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Process any subgroups which have not already been inserted into a\n\t// radio button set (see code in loop above).\n\tif (Array.isArray(group.subGroups)) {\n\t\tgroup.subGroups.forEach(function(subGroup) {\n\t\t\tif (!_hasPanelBeenInserted(panelInsertedFor, subGroup.dependsOn)) {\n\t\t\t\tconst uiItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, additionalInfo);\n\t\t\t\tuiItems.push(uiItem);\n\t\t\t}\n\t\t});\n\t}\n\treturn uiItems;\n}\n\n/* Returns true if the panelInsertedFor array contains the dependsOn\n * value passed in.\n */\nfunction _hasPanelBeenInserted(panelInsertedFor, dependsOn) {\n\tif (dependsOn) {\n\t\tfor (var i = 0; i < panelInsertedFor.length; i++) {\n\t\t\tif (panelInsertedFor[i] === dependsOn) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n/* Creates a set of panel objects for a panelSelector panel. The UIItem for\n * each panel is wrapped in an EditorTab object which pairs together the UIItem\n * and its ID. The ID is subsequently used by the radioset control to decide\n * which panel is displayed with which radio button.\n */\nfunction _genPanelSelectorPanels(group, parameterMetadata, actionMetadata, structureMetadata, l10nProvider, additionalInfo) {\n\tconst panSelSubItems = [];\n\tif (Array.isArray(group.subGroups)) {\n\t\tgroup.subGroups.forEach(function(subGroup) {\n\t\t\tconst subGroupName = subGroup.name;\n\t\t\tconst groupItem = _makeUIItem(parameterMetadata, actionMetadata, subGroup, structureMetadata, l10nProvider, additionalInfo);\n\t\t\tconst groupLabel = l10nProvider.l10nLabel(subGroup, subGroup.name);\n\t\t\tpanSelSubItems.push(new EditorTab(groupLabel, subGroupName, groupItem));\n\t\t});\n\t}\n\treturn panSelSubItems;\n}\n\nfunction _makeStringControl(parameter, isSubControl) {\n\tlet controlType;\n\tlet role = parameter.getRole();\n\tif (parameter.isList()) {\n\t\tconst controlObj = _processListParameter(parameter);\n\t\tcontrolType = controlObj.controlType;\n\t\tif (controlObj.role) {\n\t\t\trole = controlObj.role;\n\t\t}\n\t} else {\n\t\tswitch (parameter.getRole()) {\n\t\tcase ParamRole.TEXT:\n\t\t\tcontrolType = ControlType.TEXTAREA;\n\t\t\tbreak;\n\t\tcase ParamRole.ENUM:\n\t\t\t// show oneofselect when inside a table cell\n\t\t\tif (parameter.getValidValueCount() > 4 || (isSubControl && !_isEmbeddedOption(parameter))) {\n\t\t\t\tcontrolType = ControlType.ONEOFSELECT;\n\t\t\t} else {\n\t\t\t\tcontrolType = ControlType.RADIOSET;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ParamRole.COLUMN:\n\t\t\trole = ParamRole.COLUMN;\n\t\t\tif (isSubControl && _isEmbeddedMultiOption(parameter)) {\n\t\t\t\tcontrolType = ControlType.SELECTCOLUMNS;\n\t\t\t} else {\n\t\t\t\tcontrolType = ControlType.SELECTCOLUMN;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ParamRole.EXPRESSION:\n\t\t\tcontrolType = ControlType.EXPRESSION;\n\t\t\tbreak;\n\t\tcase ParamRole.EMAIL:\n\t\t\trole = ParamRole.EMAIL;\n\t\t\tcontrolType = ControlType.TEXTFIELD;\n\t\t\tbreak;\n\t\tcase ParamRole.URL:\n\t\t\trole = ParamRole.URL;\n\t\t\tcontrolType = ControlType.TEXTFIELD;\n\t\t\tbreak;\n\t\tcase ParamRole.COLOR:\n\t\t\trole = ParamRole.COLOR;\n\t\t\tcontrolType = ControlType.TEXTFIELD;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tcontrolType = ControlType.TEXTFIELD;\n\t\t}\n\t}\n\treturn { controlType: controlType, role: role };\n}\n\n/**\n * Creates a control for the supplied property.\n */\nfunction _makeControl(parameterMetadata, paramName, group, structureDefinition, l10nProvider, actionMetadata, structureMetadata, subControl, additionalInfo) {\n\tconst isSubControl = typeof subControl !== \"undefined\" && subControl;\n\n\t// Assume the property is defined\n\tconst parameter = isSubControl ? subControl : parameterMetadata.getParameter(paramName);\n\n\tconst additionalText = parameter.getAdditionalText(l10nProvider);\n\tconst orientation = parameter.orientation;\n\tconst required = parameter.required;\n\tif (parameter.numberGenerator) {\n\t\tparameter.numberGenerator = new NumberGenerator(l10nProvider.l10nLabel(parameter.numberGenerator, parameter.name), parameter.numberGenerator);\n\t}\n\tconst controlLabel = new Label(l10nProvider.l10nLabel(parameter, parameter.name), parameter.numberGenerator);\n\tlet controlDesc;\n\tif (parameter.description) {\n\t\tcontrolDesc = new Description(l10nProvider.l10nDesc(parameter, parameter.name),\n\t\t\tparameter.description ? parameter.description.placement : null,\n\t\t\tparameter.description ? parameter.description.link : null);\n\t}\n\n\t// The role is used to modify the behaviour of certain controls\n\tlet labelVisible = true;\n\tlet role;\n\tlet controlType;\n\tlet subControls;\n\tlet keyIndex;\n\tlet defaultRow;\n\tlet childItem;\n\tlet moveableRows = parameter.moveableRows;\n\tlet rowSelection;\n\tlet addRemoveRows;\n\tlet header;\n\tlet includeAllFields;\n\tlet layout;\n\tlet buttons;\n\tlet structureType = parameter.structureType;\n\n\t// The control type defines the basic UI element that should be used to edit the property\n\tif (!isSubControl && parameter.getRole() === ParamRole.CUSTOM) {\n\t\tcontrolType = ControlType.CUSTOM;\n\t} else {\n\t\tswitch (parameter.propType()) {\n\t\tcase Type.STRING: {\n\t\t\tconst returnObject = _makeStringControl(parameter, isSubControl);\n\t\t\tcontrolType = returnObject.controlType;\n\t\t\trole = returnObject.role;\n\t\t\tbreak;\n\t\t}\n\t\tcase Type.PASSWORD:\n\t\t\tcontrolType = ControlType.PASSWORDFIELD;\n\t\t\tbreak;\n\t\tcase Type.BOOLEAN:\n\t\t\tif (!parameter.control || parameter.control === ControlType.CHECKBOX) {\n\t\t\t\tlabelVisible = false;\n\t\t\t\tcontrolType = ControlType.CHECKBOX;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase Type.INTEGER:\n\t\tcase Type.LONG:\n\t\tcase Type.DOUBLE:\n\t\t\tif (parameter.isList()) {\n\t\t\t\tcontrolType = ControlType.TEXTAREA;\n\t\t\t} else {\n\t\t\t\tcontrolType = ControlType.NUMBERFIELD;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase Type.DATE:\n\t\t\trole = Type.DATE;\n\t\t\tif (parameter.control === ControlType.DATEPICKER) {\n\t\t\t\tcontrolType = ControlType.DATEPICKER;\n\t\t\t} else if (parameter.control === ControlType.DATEPICKERRANGE) {\n\t\t\t\tcontrolType = ControlType.DATEPICKERRANGE;\n\t\t\t} else if (parameter.isList()) {\n\t\t\t\tcontrolType = ControlType.TEXTAREA;\n\t\t\t} else {\n\t\t\t\tcontrolType = ControlType.DATEFIELD;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase Type.TIME:\n\t\t\trole = Type.TIME;\n\t\t\tif (parameter.isList()) {\n\t\t\t\tcontrolType = ControlType.TEXTAREA;\n\t\t\t} else {\n\t\t\t\tcontrolType = ControlType.TIMEFIELD;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase Type.TIMESTAMP:\n\t\t\tcontrolType = ControlType.TIMESTAMP;\n\t\t\tbreak;\n\t\tcase Type.STRUCTURE: {\n\t\t\tconst structureDef = isSubControl && structureMetadata ? structureMetadata.getStructure(parameter.baseType()) : structureDefinition;\n\n\t\t\tif (structureDef) {\n\t\t\t\tif (structureDef.hasSubPanel()) {\n\t\t\t\t\tchildItem = _makeEditStyleSubPanel(structureDef, l10nProvider, structureMetadata, additionalInfo);\n\t\t\t\t}\n\t\t\t\tkeyIndex = structureDef.keyAttributeIndex();\n\t\t\t\t// The defaultRow allows the UI to create a new row with sensible settings\n\t\t\t\t// when needed\n\t\t\t\tdefaultRow = structureDef.defaultStructure();\n\t\t\t\t// For inline/row editing, create definitions for all the columns that can be edited\n\t\t\t\tsubControls = [];\n\t\t\t\tif (structureDef.parameterMetadata && Array.isArray(structureDef.parameterMetadata.paramDefs)) {\n\t\t\t\t\tstructureDef.parameterMetadata.paramDefs.forEach(function(param) {\n\t\t\t\t\t\tconst newSubControl = _makeSubControl(param, l10nProvider, structureMetadata, additionalInfo);\n\t\t\t\t\t\tsubControls.push(newSubControl);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// If the property is a keyed property or a structure list then the key should not be included in the\n\t\t\t\t// structure definition. However it will still need to be included in the table column definitions.\n\t\t\t\tif ((parameter.isMapValue() || parameter.isList()) && structureDef.keyDefinition) {\n\t\t\t\t\tconst newSubControl = _makeSubControl(structureDef.keyDefinition, l10nProvider, structureMetadata, additionalInfo);\n\t\t\t\t\tsubControls.unshift(newSubControl);\n\t\t\t\t}\n\t\t\t\tif (parameter.isList() || parameter.isMapValue()) {\n\t\t\t\t\tif ((!isSubControl && group && typeof group.groupType !== \"undefined\" && group.groupType() === GroupType.COLUMN_SELECTION) ||\n\t\t\t\t\t\t\tparameter.control === ControlType.STRUCTURETABLE ||\n\t\t\t\t\t\t\tparameter.getRole() === ParamRole.COLUMN) {\n\t\t\t\t\t\tcontrolType = ControlType.STRUCTURETABLE;\n\t\t\t\t\t\tmoveableRows = structureDef.moveableRows;\n\t\t\t\t\t\trowSelection = structureDef.rowSelection;\n\t\t\t\t\t\taddRemoveRows = structureDef.addRemoveRows;\n\t\t\t\t\t\theader = structureDef.header;\n\t\t\t\t\t\tincludeAllFields = structureDef.includeAllFields;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontrolType = ControlType.STRUCTURELISTEDITOR;\n\t\t\t\t\t\tmoveableRows = structureDef.moveableRows;\n\t\t\t\t\t\trowSelection = structureDef.rowSelection;\n\t\t\t\t\t\taddRemoveRows = structureDef.addRemoveRows;\n\t\t\t\t\t\theader = structureDef.header;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (structureDef.buttons) {\n\t\t\t\t\t\tbuttons = _makeButtons(structureDef.buttons, l10nProvider);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcontrolType = ControlType.STRUCTUREEDITOR;\n\t\t\t\t\tif (structureDef.layout) {\n\t\t\t\t\t\tlayout = structureDef.layout;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstructureType = structureDef.type;\n\t\t\t} else {\n\t\t\t\tcontrolType = ControlType.TEXTFIELD;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase Type.OBJECT:\n\t\t\tif (isSubControl) {\n\t\t\t\trole = parameter.getRole();\n\t\t\t\tif (role === ParamRole.COLUMN) {\n\t\t\t\t\tcontrolType = ControlType.SELECTCOLUMN;\n\t\t\t\t} else {\n\t\t\t\t\tlogger.warn(\"Complex subControl type that is not a field! Name: \" + parameter.name);\n\t\t\t\t\tcontrolType = ControlType.READONLY;\n\t\t\t\t}\n\t\t\t} else if (parameter.isCompoundField()) {\n\t\t\t\tconst returnObject = _makeStringControl(parameter, isSubControl);\n\t\t\t\tcontrolType = returnObject.controlType;\n\t\t\t\trole = returnObject.role;\n\t\t\t} else {\n\t\t\t\tlogger.warn(\"Complex parameter type that is not a field! Name: \" + parameter.name);\n\t\t\t\tcontrolType = ControlType.READONLY;\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\trole = \"???\" + parameter.propType() + \"???\";\n\t\t\tcontrolType = ControlType.TEXTAREA;\n\t\t\tbreak;\n\t\t}\n\t}\n\tlet valueLabels;\n\tif (parameter.getRole() === ParamRole.ENUM) {\n\t\tvalueLabels = _parameterValueLabels(parameter, l10nProvider);\n\t}\n\n\tlet valueDescs;\n\tif (parameter.getRole() === ParamRole.ENUM) {\n\t\tvalueDescs = _parameterValueDescription(parameter, l10nProvider);\n\t}\n\tlet action;\n\tif (!isSubControl && parameter.actionRef) {\n\t\taction = _makeAction(actionMetadata.getAction(parameter.actionRef), l10nProvider);\n\t}\n\tconst settings = {};\n\tsettings.name = parameter.name;\n\tsettings.label = controlLabel;\n\tsettings.description = controlDesc;\n\tsettings.labelVisible = typeof parameter.labelVisible === \"boolean\" ? parameter.labelVisible : labelVisible;\n\tsettings.controlType = parameter.getControl(controlType);\n\tsettings.valueDef = ValueDef.make(parameter);\n\tsettings.structureType = structureType;\n\tsettings.role = role;\n\tsettings.additionalText = additionalText;\n\tsettings.orientation = orientation;\n\tsettings.values = parameter.getValidValues();\n\tsettings.valueLabels = valueLabels;\n\tsettings.valueDescs = valueDescs;\n\tsettings.valueIcons = parameter.valueIcons;\n\tsettings.sortable = parameter.sortable;\n\tsettings.filterable = parameter.filterable;\n\tsettings.resizable = parameter.resizable;\n\tsettings.charLimit = parameter.charLimit;\n\tsettings.subControls = subControls;\n\tsettings.keyIndex = keyIndex;\n\tsettings.defaultRow = defaultRow;\n\tsettings.childItem = childItem;\n\tsettings.moveableRows = moveableRows;\n\tsettings.required = required;\n\tsettings.language = parameter.language;\n\tsettings.enableMaximize = parameter.enableMaximize;\n\tsettings.summary = parameter.summary;\n\tsettings.increment = parameter.increment;\n\tsettings.rowSelection = rowSelection;\n\tsettings.generatedValues = parameter.generatedValues;\n\tsettings.addRemoveRows = addRemoveRows;\n\tsettings.dateFormat = parameter.dateFormat;\n\tsettings.timeFormat = parameter.timeFormat;\n\tsettings.customControlId = parameter.customControlId;\n\tsettings.data = parameter.data;\n\tsettings.rows = parameter.rows;\n\tsettings.displayChars = parameter.displayChars;\n\tsettings.header = header;\n\tsettings.uionly = parameter.uionly;\n\tsettings.includeAllFields = includeAllFields;\n\tsettings.layout = layout;\n\tsettings.dmImage = parameter.dmImage;\n\tsettings.action = action;\n\tsettings.customValueAllowed = parameter.customValueAllowed;\n\tsettings.className = parameter.className;\n\tsettings.buttons = buttons;\n\tsettings.light = _isControlLight(additionalInfo.light, additionalInfo.containerType, parameter.isSubPanelEdit());\n\tif (isSubControl) {\n\t\tsettings.visible = parameter.visible;\n\t\tsettings.width = parameter.columns(8);\n\t\tsettings.editStyle = parameter.editStyle;\n\t\tsettings.isKeyField = parameter.isKey;\n\t\tsettings.dmDefault = parameter.dmDefault;\n\t}\n\treturn new Control(settings);\n}\n\nfunction _isControlLight(light, containerType, isSubPanelEdit) {\n\treturn light &&\n\t\t(containerType !== CONTAINER_TYPE.TEARSHEET || // Controls displayed in a Tearsheet are not light themed\n\t\t(containerType === CONTAINER_TYPE.TEARSHEET && isSubPanelEdit)); // Controls inside a subpanel of tearsheet container are light themed\n}\n\nfunction _processListParameter(parameter) {\n\tconst controlObj = {};\n\tswitch (parameter.getRole()) {\n\tcase ParamRole.TEXT:\n\t\tcontrolObj.controlType = ControlType.TEXTAREA;\n\t\tbreak;\n\tcase ParamRole.ENUM:\n\t\tif (parameter.getValidValueCount() < 5) {\n\t\t\tcontrolObj.controlType = ControlType.CHECKBOXSET;\n\t\t} else {\n\t\t\tcontrolObj.controlType = ControlType.SOMEOFSELECT;\n\t\t}\n\t\tbreak;\n\tcase ParamRole.COLUMN:\n\t\tcontrolObj.role = ParamRole.COLUMN;\n\t\tcontrolObj.controlType = ControlType.SELECTCOLUMNS;\n\t\tbreak;\n\tdefault:\n\t\tcontrolObj.controlType = ControlType.TEXTAREA;\n\t}\n\treturn controlObj;\n}\n\nfunction _makeEditStyleSubPanel(structureDef, l10nProvider, structureMetadata, additionalInfo) {\n\t// If we\"re not editing in-line then create a sub-panel that can be used to edit the attributes\n\tconst panel = new ControlPanel(\n\t\tstructureDef.name,\n\t\tPanelType.GENERAL,\n\t\t\"properties-editstyle-sub-panel\",\n\t\tfalse,\n\t\t_makeControls(structureDef.parameterMetadata,\n\t\t\tstructureDef.actionMetadata,\n\t\t\tstructureDef,\n\t\t\tstructureMetadata,\n\t\t\tl10nProvider,\n\t\t\tadditionalInfo)\n\t);\n\tconst groupLabel = l10nProvider.l10nLabel(structureDef, structureDef.name);\n\treturn UIItem.makeAdditionalLink(\"...\", groupLabel, panel);\n}\n\n/**\n * Creates a column control for the supplied property/attribute.\n */\nfunction _makeSubControl(parameter, l10nProvider, structureMetadata, additionalInfo) {\n\tconst parameterMetadata = null;\n\tconst paramName = null;\n\tconst group = null;\n\tconst structureDef = parameter.propType() === Type.STRUCTURE && structureMetadata ? structureMetadata.getStructure(parameter.baseType()) : null;\n\tconst actionMetadata = null;\n\tconst subControl = parameter;\n\treturn _makeControl(parameterMetadata, paramName, group, structureDef, l10nProvider, actionMetadata, structureMetadata, subControl, additionalInfo);\n}\n\n/**\n * Returns true if the given parameter is a multi-option type that can be embedded within a table cell.\n */\nfunction _isEmbeddedMultiOption(parameter) {\n\tif (parameter.isList() || parameter.isMapValue()) {\n\t\treturn _isEmbeddedOption(parameter);\n\t}\n\treturn false;\n}\n\n/**\n * Returns true if the given parameter is a multi-option type that can be embedded within a table cell.\n */\nfunction _isEmbeddedOption(parameter) {\n\treturn parameter.editStyle === \"on_panel\" || parameter.editStyle === \"subpanel\";\n}\n\n/**\n * Called on a base property group.\n */\nfunction _makeActions(parameterMetadata, actionMetadata, group, structureMetadata, l10nProvider) {\n\tconst uiItems = [];\n\tif (Array.isArray(group.actionIds())) {\n\t\tgroup.actionIds().forEach(function(actionId) {\n\t\t\t// Assume property definition exists\n\t\t\tconst action = UIItem.makeAction(_makeAction(actionMetadata.getAction(actionId), l10nProvider));\n\t\t\tuiItems.push(action);\n\t\t});\n\t}\n\treturn uiItems;\n}\n\nfunction _makeAction(action, l10nProvider) {\n\tconst actionLabel = new Label(l10nProvider.l10nLabel(action, action.id));\n\tlet actionDesc;\n\tif (action.description) {\n\t\tactionDesc = new Description(l10nProvider.l10nDesc(action, action.id));\n\t}\n\treturn new Action(action.id, actionLabel, actionDesc, action.control, action.data, action.image, action.button, action.className);\n}\n\nfunction _makeButtons(buttonMetadata, l10nProvider) {\n\tconst buttons = [];\n\tbuttonMetadata.buttonDefs.forEach((buttonDef) => {\n\t\tbuttons.push(_makeButton(buttonMetadata.getButton(buttonDef.id), l10nProvider));\n\t});\n\treturn buttons;\n}\n\nfunction _makeButton(button, l10nProvider) {\n\tlet buttonLabel;\n\tif (button.label) {\n\t\tbuttonLabel = new Label(l10nProvider.l10nLabel(button, button.id));\n\t}\n\tlet buttonDescription;\n\tif (button.description) {\n\t\tbuttonDescription = new Description(l10nProvider.l10nDesc(button, button.description));\n\t}\n\treturn new Button(button.id, buttonLabel, buttonDescription, button.icon, button.carbonIcon, button.enabled, button.divider);\n}\n\nfunction _parameterValueLabels(parameter, l10nProvider) {\n\tif (Array.isArray(parameter.getValidValues())) {\n\t\tlet key;\n\t\tif (parameter.resource_key) {\n\t\t\tkey = parameter.resource_key;\n\t\t} else {\n\t\t\tkey = parameter.name;\n\t\t}\n\t\tconst paramLabels = [];\n\t\tparameter.getValidValues().forEach(function(paramValue) {\n\t\t\tparamLabels.push(l10nProvider.l10nValueLabel(key, String(paramValue)));\n\t\t});\n\t\treturn paramLabels;\n\t}\n\treturn [];\n}\n\nfunction _parameterValueDescription(parameter, l10nProvider) {\n\tif (Array.isArray(parameter.getValidValues())) {\n\t\tlet key;\n\t\tif (parameter.resource_key) {\n\t\t\tkey = parameter.resource_key;\n\t\t} else {\n\t\t\tkey = parameter.name;\n\t\t}\n\t\tconst paramDescs = [];\n\t\tparameter.getValidValues().forEach(function(paramValue) {\n\t\t\tparamDescs.push(l10nProvider.l10nValueDesc(key, String(paramValue)));\n\t\t});\n\t\treturn paramDescs;\n\t}\n\treturn [];\n}\n\n\nexport {\n\tmakePrimaryTab, _makeControl as makeControl\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { has } from \"lodash\";\n\n/*\n* Iterates over the conditions and replaces the default message with translated message\n*/\nfunction translateMessages(conditions, l10nProvider) {\n\tif (conditions && Array.isArray(conditions)) {\n\t\tfor (var condition of conditions) {\n\t\t\tsearchMessage(condition, l10nProvider);\n\t\t}\n\t}\n\treturn conditions;\n}\n\nfunction searchMessage(object, l10nProvider) {\n\tfor (var x in object) {\n\t\tif (has(object, x)) {\n\t\t\tif (typeof object[x] === \"object\" && object[x] !== null) {\n\t\t\t\tif (object[x].message) {\n\t\t\t\t\tobject[x].message.default = l10nProvider.l10nResource(object[x].message);\n\t\t\t\t} else {\n\t\t\t\t\tsearchMessage(object[x], l10nProvider);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport { translateMessages };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PropertyDef } from \"./PropertyDef\";\nimport { propertyOf } from \"lodash\";\nimport { makePrimaryTab } from \"./EditorForm\";\nimport { UIItem } from \"./UIItem\";\nimport { L10nProvider } from \"../util/L10nProvider\";\nimport { translateMessages } from \"./Conditions\";\nimport { Size } from \"../constants/form-constants\";\nimport { CONTAINER_TYPE } from \"../constants/constants\";\n\nexport default class Form {\n\tconstructor(componentId, label, labelEditable, help, editorSize, pixelWidth, uiItems, buttons, data, conditions, resources, icon, heading) {\n\t\tthis.componentId = componentId;\n\t\tthis.label = label;\n\t\tthis.labelEditable = labelEditable;\n\t\tthis.help = help;\n\t\tthis.editorSize = editorSize;\n\t\tthis.pixelWidth = pixelWidth;\n\t\tthis.uiItems = uiItems;\n\t\tthis.buttons = buttons;\n\t\tthis.data = data;\n\t\tthis.conditions = conditions;\n\t\tthis.resources = resources;\n\t\tthis.icon = icon;\n\t\tthis.heading = heading;\n\t}\n\n\t/**\n\t* Returns a new Form\n\t* @param paramDef Parameter definition\n\t* @param containerType Type of container common properties will be displayed in, set in propertiesConfig\n\t*/\n\tstatic makeForm(paramDef, containerType) {\n\t\tconst propDef = PropertyDef.makePropertyDef(propertyOf(paramDef)(\"titleDefinition\"), propertyOf(paramDef)(\"parameters\"), propertyOf(paramDef)(\"complex_types\"),\n\t\t\tpropertyOf(paramDef)(\"uihints\"));\n\t\tconst resources = propertyOf(paramDef)(\"resources\");\n\t\tconst conditions = propertyOf(paramDef)(\"conditions\");\n\t\tif (propDef) {\n\t\t\tconst l10nProvider = new L10nProvider(resources);\n\t\t\tconst tabs = [];\n\t\t\tif (propDef.groupMetadata && propDef.groupMetadata.groups) {\n\t\t\t\tfor (const group of propDef.groupMetadata.groups) {\n\t\t\t\t\ttabs.push(makePrimaryTab(propDef, group, l10nProvider, containerType));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst currentParameters = propertyOf(paramDef)(\"current_parameters\");\n\t\t\tconst data = {\n\t\t\t\tcurrentParameters: currentParameters,\n\t\t\t\tuiCurrentParameters: propertyOf(paramDef)(\"current_ui_parameters\"),\n\t\t\t\tdatasetMetadata: propertyOf(paramDef)(\"dataset_metadata\")\n\t\t\t};\n\t\t\tconst isModal = containerType === CONTAINER_TYPE.TEARSHEET || containerType === CONTAINER_TYPE.MODAL;\n\t\t\tconst editorSizeDefault = isModal ? Size.LARGE : Size.SMALL;\n\t\t\treturn new Form(propDef.name,\n\t\t\t\tpropDef.label,\n\t\t\t\tpropDef.labelEditable,\n\t\t\t\tpropDef.help,\n\t\t\t\tpropDef.editorSizeHint(editorSizeDefault),\n\t\t\t\tpropDef.pixelWidth,\n\t\t\t\t[UIItem.makePrimaryTabs(tabs)],\n\t\t\t\t_defaultButtons(),\n\t\t\t\tdata,\n\t\t\t\ttranslateMessages(conditions, l10nProvider),\n\t\t\t\tresources,\n\t\t\t\tpropDef.icon,\n\t\t\t\tl10nProvider.l10nResource(propDef.heading)\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n}\n\nfunction _defaultButtons() {\n\tconst okBtn = new Button(\"ok\", \"OK\", true, \"\");\n\tconst cancelBtn = new Button(\"cancel\", \"Cancel\", false, \"\");\n\treturn [okBtn, cancelBtn];\n}\n\nclass Button {\n\tconstructor(id, text, isPrimary, url) {\n\t\tthis.id = id;\n\t\tthis.text = text;\n\t\tthis.isPrimary = isPrimary;\n\t\tthis.url = url;\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Action from \"../command-stack/action.js\";\n\nexport default class CommonPropertiesAction extends Action {\n\tconstructor(newValues, initialValues, appData, applyPropertyChanges, propertiesActionLabel) {\n\t\tsuper(newValues);\n\t\tthis.newValues = newValues;\n\t\tthis.initialValues = initialValues;\n\t\tthis.appData = appData;\n\t\tthis.applyPropertyChanges = applyPropertyChanges;\n\t\tthis.propertiesActionLabel = propertiesActionLabel;\n\t}\n\n\t// Standard methods\n\tdo() {\n\t\tthis.applyPropertyChanges(this.newValues.properties, this.appData, this.newValues.additionalInfo, this.newValues.undoInfo, this.newValues.uiProperties);\n\t}\n\n\tundo() {\n\t\tthis.applyPropertyChanges(this.initialValues.properties, this.appData, this.initialValues.additionalInfo, this.initialValues.undoInfo, this.initialValues.uiProperties);\n\t}\n\n\tredo() {\n\t\tthis.applyPropertyChanges(this.newValues.properties, this.appData, this.newValues.additionalInfo, this.newValues.undoInfo, this.newValues.uiProperties);\n\t}\n\n\tgetLabel() {\n\t\treturn this.propertiesActionLabel;\n\t}\n}\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var assignValue = require('./_assignValue'),\n copyObject = require('./_copyObject'),\n createAssigner = require('./_createAssigner'),\n isArrayLike = require('./isArrayLike'),\n isPrototype = require('./_isPrototype'),\n keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nmodule.exports = assign;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UPDATE_PROPERTY_VALUE, SET_PROPERTY_VALUES, REMOVE_PROPERTY_VALUE } from \"../actions\";\n\nfunction properties(state = {}, action) {\n\tconst propertyId = action.property && action.property.propertyId ? action.property.propertyId : null;\n\tswitch (action.type) {\n\tcase UPDATE_PROPERTY_VALUE: {\n\t\tif (propertyId === null) {\n\t\t\treturn state;\n\t\t}\n\t\tvar newState = state;\n\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\tif (typeof newState[propertyId.name] === \"undefined\") {\n\t\t\t\tnewState[propertyId.name] = [];\n\t\t\t}\n\t\t\tif (typeof propertyId.col !== \"undefined\") {\n\t\t\t\tif (typeof newState[propertyId.name][propertyId.row] === \"undefined\") {\n\t\t\t\t\tnewState[propertyId.name][propertyId.row] = [];\n\t\t\t\t}\n\n\t\t\t\tif (typeof propertyId.propertyId !== \"undefined\") {\n\t\t\t\t\tupdateNestedPropertyValue(propertyId.propertyId, newState[propertyId.name][propertyId.row][propertyId.col], action.property.value);\n\t\t\t\t} else {\n\t\t\t\t\tnewState[propertyId.name][propertyId.row][propertyId.col] = action.property.value;\n\t\t\t\t}\n\t\t\t} else if (typeof propertyId.propertyId !== \"undefined\") { // nested structureeditor\n\t\t\t\tupdateNestedPropertyValue(propertyId.propertyId, newState[propertyId.name][propertyId.row], action.property.value);\n\t\t\t} else {\n\t\t\t\tnewState[propertyId.name][propertyId.row] = action.property.value;\n\t\t\t}\n\t\t} else {\n\t\t\tnewState[propertyId.name] = action.property.value;\n\t\t}\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tcase SET_PROPERTY_VALUES: {\n\t\treturn Object.assign({}, action.properties);\n\t}\n\tcase REMOVE_PROPERTY_VALUE: {\n\t\tconst nextState = state;\n\t\tif (propertyId !== null && typeof propertyId.name !== \"undefined\") {\n\t\t\tdelete nextState[propertyId.name];\n\t\t}\n\t\treturn Object.assign({}, state, nextState);\n\t}\n\tdefault:\n\t\treturn state;\n\t}\n}\n\nfunction updateNestedPropertyValue(propertyId, newState, value) {\n\tif (typeof propertyId.row !== \"undefined\") {\n\t\tif (typeof propertyId.col !== \"undefined\") {\n\t\t\tif (typeof newState[propertyId.row] === \"undefined\") {\n\t\t\t\tnewState[propertyId.row] = [];\n\t\t\t}\n\n\t\t\tif (typeof propertyId.propertyId !== \"undefined\") {\n\t\t\t\tupdateNestedPropertyValue(propertyId.propertyId, newState[propertyId.row][propertyId.col], value);\n\t\t\t} else {\n\t\t\t\tnewState[propertyId.row][propertyId.col] = value;\n\t\t\t}\n\t\t} else {\n\t\t\tnewState[propertyId.row] = value;\n\t\t}\n\t}\n}\n\nexport default properties;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UPDATE_CONTROL_STATE, SET_CONTROL_STATES } from \"../actions\";\n\n/*\n* Stores the state information for all controls. States are stored as objects with keys being name, row, col.\n* All keys need to be strings\n*/\nfunction states(state = {}, action) {\n\tswitch (action.type) {\n\tcase UPDATE_CONTROL_STATE: {\n\t\tconst newState = state;\n\t\tconst propertyId = action.state.propertyId;\n\t\tif (typeof newState[propertyId.name] === \"undefined\") {\n\t\t\tnewState[propertyId.name] = {};\n\t\t}\n\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\tconst strRow = propertyId.row.toString();\n\t\t\tif (typeof newState[propertyId.name][strRow] === \"undefined\") {\n\t\t\t\tnewState[propertyId.name][strRow] = {};\n\t\t\t}\n\t\t\tif (typeof propertyId.col !== \"undefined\") {\n\t\t\t\tconst strCol = propertyId.col.toString();\n\t\t\t\tif (typeof newState[propertyId.name][strRow][strCol] === \"undefined\") {\n\t\t\t\t\tnewState[propertyId.name][strRow][strCol] = {};\n\t\t\t\t}\n\t\t\t\tnewState[propertyId.name][strRow][strCol] = {\n\t\t\t\t\tvalue: action.state.value\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tnewState[propertyId.name][strRow] = {\n\t\t\t\t\tvalue: action.state.value\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tnewState[propertyId.name] = {\n\t\t\t\tvalue: action.state.value\n\t\t\t};\n\t\t}\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tcase SET_CONTROL_STATES: {\n\t\treturn Object.assign({}, action.states);\n\t}\n\tdefault: {\n\t\treturn state;\n\t}\n\t}\n}\n\nexport default states;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UPDATE_PANEL_STATE, SET_PANEL_STATES } from \"../actions\";\n\n/*\n* Stores the state information for all controls. States are stored as objects with keys being name, row, col.\n* All keys need to be strings\n*/\nfunction states(state = {}, action) {\n\tswitch (action.type) {\n\tcase UPDATE_PANEL_STATE: {\n\t\tconst newState = state;\n\t\tnewState[action.state.panelId.name] = {\n\t\t\tvalue: action.state.value\n\t\t};\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tcase SET_PANEL_STATES: {\n\t\treturn Object.assign({}, action.states);\n\t}\n\tdefault: {\n\t\treturn state;\n\t}\n\t}\n}\n\nexport default states;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UPDATE_ACTION_STATE, SET_ACTION_STATES } from \"../actions\";\n\n/*\n* Stores the state information for all controls. States are stored as objects with keys being name, row, col.\n* All keys need to be strings\n*/\nfunction states(state = {}, action) {\n\tswitch (action.type) {\n\tcase UPDATE_ACTION_STATE: {\n\t\tconst newState = state;\n\t\tnewState[action.state.actionId.name] = {\n\t\t\tvalue: action.state.value\n\t\t};\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tcase SET_ACTION_STATES: {\n\t\treturn Object.assign({}, action.states);\n\t}\n\tdefault: {\n\t\treturn state;\n\t}\n\t}\n}\n\nexport default states;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UPDATE_ERROR_MESSAGE, SET_ERROR_MESSAGES, CLEAR_ERROR_MESSAGE } from \"../actions\";\nimport { isEmpty } from \"lodash\";\n/* eslint max-depth: [\"error\", 6] */\n\n/*\n* Stores the state information for all controls. States are stored as objects with keys being name, row, col.\n* All keys need to be strings\n*/\nfunction messages(state = {}, action) {\n\tswitch (action.type) {\n\tcase UPDATE_ERROR_MESSAGE: {\n\t\tconst newState = state;\n\t\tconst propertyId = action.message.propertyId;\n\t\tif (typeof newState[propertyId.name] === \"undefined\") {\n\t\t\tnewState[propertyId.name] = {};\n\t\t}\n\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\tconst strRow = propertyId.row.toString();\n\t\t\tif (typeof newState[propertyId.name][strRow] === \"undefined\") {\n\t\t\t\tnewState[propertyId.name][strRow] = {};\n\t\t\t}\n\t\t\tif (typeof propertyId.col !== \"undefined\") {\n\t\t\t\tconst strCol = propertyId.col.toString();\n\t\t\t\tif (typeof newState[propertyId.name][strRow][strCol] === \"undefined\") {\n\t\t\t\t\tnewState[propertyId.name][strRow][strCol] = {};\n\t\t\t\t}\n\t\t\t\tnewState[propertyId.name][strRow][strCol] = action.message.value;\n\t\t\t} else {\n\t\t\t\tnewState[propertyId.name][strRow] = Object.assign({}, action.message.value);\n\t\t\t}\n\t\t} else {\n\t\t\tnewState[propertyId.name] = Object.assign({}, action.message.value);\n\t\t}\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tcase CLEAR_ERROR_MESSAGE: {\n\t\tconst newState = state;\n\t\tif (newState[action.message.propertyId.name]) {\n\t\t\tif (typeof action.message.propertyId.row !== \"undefined\") {\n\t\t\t\tif (typeof action.message.propertyId.col !== \"undefined\") {\n\t\t\t\t\tdelete newState[action.message.propertyId.name][action.message.propertyId.row][action.message.propertyId.col];\n\t\t\t\t} else {\n\t\t\t\t\tdelete newState[action.message.propertyId.name][action.message.propertyId.row];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete newState[action.message.propertyId.name].type;\n\t\t\t\tdelete newState[action.message.propertyId.name].text;\n\t\t\t\tdelete newState[action.message.propertyId.name].validation_id;\n\t\t\t\tdelete newState[action.message.propertyId.name].required;\n\t\t\t\tdelete newState[action.message.propertyId.name].propertyId;\n\t\t\t\tdelete newState[action.message.propertyId.name].displayError;\n\t\t\t\tif (isEmpty(newState[action.message.propertyId.name])) {\n\t\t\t\t\tdelete newState[action.message.propertyId.name];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tcase SET_ERROR_MESSAGES: {\n\t\treturn Object.assign({}, action.messages);\n\t}\n\tdefault: {\n\t\treturn state;\n\t}\n\t}\n}\n\nexport default messages;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SET_DATASET_METADATA } from \"../actions\";\n\nfunction datasetMetadata(state = [], action) {\n\tswitch (action.type) {\n\tcase SET_DATASET_METADATA:\n\t\treturn Object.assign({}, state, action.datasetMetadata);\n\tdefault:\n\t\treturn state;\n\t}\n}\n\nexport default datasetMetadata;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UPDATE_SELECTED_ROWS, CLEAR_SELECTED_ROWS } from \"../actions\";\n/* eslint max-depth: [\"error\", 6] */\n\n/*\n* Stores the state information for all controls. States are stored as objects with keys being name, row, col.\n* All keys need to be strings\n*/\nfunction states(state = {}, action) {\n\tswitch (action.type) {\n\tcase UPDATE_SELECTED_ROWS: {\n\t\tconst newState = state;\n\t\tconst propertyId = action.info.propertyId;\n\t\tif (!newState[propertyId.name]) {\n\t\t\tnewState[propertyId.name] = {};\n\t\t}\n\t\tif (Number.isInteger(propertyId.row)) {\n\t\t\tconst strRow = String(propertyId.row);\n\t\t\tif (!newState[propertyId.name][strRow]) {\n\t\t\t\tnewState[propertyId.name][strRow] = {};\n\t\t\t}\n\t\t\tif (Number.isInteger(propertyId.col)) {\n\t\t\t\tconst strCol = String(propertyId.col);\n\t\t\t\tif (!newState[propertyId.name][strRow][strCol]) {\n\t\t\t\t\tnewState[propertyId.name][strRow][strCol] = {};\n\t\t\t\t}\n\t\t\t\tnewState[propertyId.name][strRow][strCol].selectedRows = action.info.selectedRows;\n\t\t\t} else {\n\t\t\t\tnewState[propertyId.name][strRow].selectedRows = action.info.selectedRows;\n\t\t\t}\n\t\t} else {\n\t\t\tnewState[propertyId.name].selectedRows = action.info.selectedRows;\n\t\t}\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tcase CLEAR_SELECTED_ROWS: {\n\t\tconst newState = state;\n\t\tconst propertyId = action.info.propertyId;\n\t\tif (action.info.propertyId) {\n\t\t\tif (newState[propertyId.name]) {\n\t\t\t\tif (Number.isInteger(propertyId.row) && newState[propertyId.name][String(propertyId.row)]) {\n\t\t\t\t\tconst strRow = String(propertyId.row);\n\t\t\t\t\tif (Number.isInteger(propertyId.col) && newState[propertyId.name][strRow][String(propertyId.col)]) {\n\t\t\t\t\t\tnewState[propertyId.name][strRow][String(propertyId.col)].selectedRows = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewState[propertyId.name][strRow].selectedRows = [];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnewState[propertyId.name].selectedRows = [];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Object.assign({}, state, newState);\n\t\t}\n\t\treturn {};\n\t}\n\tdefault: {\n\t\treturn state;\n\t}\n\t}\n}\n\nexport default states;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UPDATE_STATIC_ROWS, CLEAR_STATIC_ROWS } from \"../actions\";\n/* eslint max-depth: [\"error\", 6] */\n\n/*\n* Stores the state information for all controls. States are stored as objects with keys being name, row, col.\n* All keys need to be strings\n*/\nfunction states(state = {}, action) {\n\tswitch (action.type) {\n\tcase UPDATE_STATIC_ROWS: {\n\t\tconst newState = state;\n\t\tconst propertyId = action.info.propertyId;\n\t\tif (!newState[propertyId.name]) {\n\t\t\tnewState[propertyId.name] = {};\n\t\t}\n\t\tif (Number.isInteger(propertyId.row)) {\n\t\t\tconst strRow = String(propertyId.row);\n\t\t\tif (!newState[propertyId.name][strRow]) {\n\t\t\t\tnewState[propertyId.name][strRow] = {};\n\t\t\t}\n\t\t\tif (Number.isInteger(propertyId.col)) {\n\t\t\t\tconst strCol = String(propertyId.col);\n\t\t\t\tif (!newState[propertyId.name][strRow][strCol]) {\n\t\t\t\t\tnewState[propertyId.name][strRow][strCol] = {};\n\t\t\t\t}\n\t\t\t\tnewState[propertyId.name][strRow][strCol].staticRows = action.info.staticRows;\n\t\t\t} else {\n\t\t\t\tnewState[propertyId.name][strRow].staticRows = action.info.staticRows;\n\t\t\t}\n\t\t} else {\n\t\t\tnewState[propertyId.name].staticRows = action.info.staticRows;\n\t\t}\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tcase CLEAR_STATIC_ROWS: {\n\t\tconst newState = state;\n\t\tconst propertyId = action.info.propertyId;\n\t\tif (action.info.propertyId) {\n\t\t\tif (newState[propertyId.name]) {\n\t\t\t\tif (Number.isInteger(propertyId.row) && newState[propertyId.name][String(propertyId.row)]) {\n\t\t\t\t\tconst strRow = String(propertyId.row);\n\t\t\t\t\tif (Number.isInteger(propertyId.col) && newState[propertyId.name][strRow][String(propertyId.col)]) {\n\t\t\t\t\t\tnewState[propertyId.name][strRow][String(propertyId.col)].staticRows = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewState[propertyId.name][strRow].staticRows = [];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnewState[propertyId.name].staticRows = [];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Object.assign({}, state, newState);\n\t\t}\n\t\treturn {};\n\t}\n\tdefault: {\n\t\treturn state;\n\t}\n\t}\n}\n\nexport default states;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SET_TITLE, SET_ACTIVE_TAB } from \"../actions\";\n\n\nfunction componentMetadata(state = [], action) {\n\tswitch (action.type) {\n\tcase SET_TITLE: {\n\t\tconst newState = state;\n\t\tnewState.title = action.title;\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tcase SET_ACTIVE_TAB: {\n\t\tconst newState = state;\n\t\tnewState.activeTab = action.activeTab;\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tdefault:\n\t\treturn state;\n\t}\n}\n\nexport default componentMetadata;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DISABLE_ROW_MOVE_BUTTONS } from \"../actions\";\n\nfunction disableRowMoveButtons(state = [], action) {\n\tswitch (action.type) {\n\tcase DISABLE_ROW_MOVE_BUTTONS: {\n\t\tconst newState = state;\n\t\tnewState.propertyIds = action.propertyIds;\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tdefault:\n\t\treturn state;\n\t}\n}\n\nexport default disableRowMoveButtons;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SET_SAVE_BUTTON_DISABLE } from \"../actions\";\n\nfunction setSaveButtonDisable(state = [], action) {\n\tswitch (action.type) {\n\tcase SET_SAVE_BUTTON_DISABLE: {\n\t\tconst newState = state;\n\t\tnewState.disable = action.disableState;\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tdefault:\n\t\treturn state;\n\t}\n}\n\nexport default setSaveButtonDisable;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SET_WIDE_FLYOUT_PRIMARY_BUTTON_DISABLED } from \"../actions\";\n\nfunction setWideFlyoutPrimaryButtonDisabled(state = [], action) {\n\tswitch (action.type) {\n\tcase SET_WIDE_FLYOUT_PRIMARY_BUTTON_DISABLED: {\n\t\tconst newState = state;\n\t\tnewState[action.info.panelId.name] = action.info.disableState;\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tdefault:\n\t\treturn state;\n\t}\n}\n\nexport default setWideFlyoutPrimaryButtonDisabled;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { set } from \"lodash\";\nimport { SET_ADD_REMOVE_ROWS, SET_TABLE_BUTTON_ENABLED, SET_HIDE_EDIT_BUTTON } from \"../actions\";\n\n/*\n* Stores the state information for all controls. States are stored as objects with keys being name, row, col.\n* All keys need to be strings\n*/\nfunction states(state = {}, action) {\n\tconst propertyId = action.info && action.info.propertyId ? action.info.propertyId : null;\n\tswitch (action.type) {\n\tcase SET_ADD_REMOVE_ROWS: {\n\t\tif (propertyId === null) {\n\t\t\treturn state;\n\t\t}\n\t\tconst newState = state;\n\t\tif (typeof newState[propertyId.name] === \"undefined\") {\n\t\t\tnewState[propertyId.name] = {};\n\t\t}\n\n\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\tupdateNestedPropertySetting(propertyId, newState[propertyId.name], \"addRemoveRows\", action.info.value);\n\t\t} else {\n\t\t\tnewState[propertyId.name].addRemoveRows = action.info.value;\n\t\t}\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tcase SET_TABLE_BUTTON_ENABLED: {\n\t\tif (propertyId === null) {\n\t\t\treturn state;\n\t\t}\n\t\tconst newState = state;\n\t\tif (typeof newState[propertyId.name] === \"undefined\") {\n\t\t\tnewState[propertyId.name] = { };\n\t\t}\n\n\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\tupdateNestedPropertySetting(propertyId, newState[propertyId.name], `tableButtons.${action.info.buttonId}`, action.info.value);\n\t\t} else {\n\t\t\tset(newState[propertyId.name], `tableButtons.${action.info.buttonId}`, action.info.value);\n\t\t}\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tcase SET_HIDE_EDIT_BUTTON: {\n\t\tif (propertyId === null) {\n\t\t\treturn state;\n\t\t}\n\t\tconst newState = state;\n\t\tif (typeof newState[propertyId.name] === \"undefined\") {\n\t\t\tnewState[propertyId.name] = {};\n\t\t}\n\n\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\tupdateNestedPropertySetting(propertyId, newState[propertyId.name], \"hideEditButton\", action.info.value);\n\t\t} else {\n\t\t\tnewState[propertyId.name].hideEditButton = action.info.value;\n\t\t}\n\t\treturn Object.assign({}, state, newState);\n\t}\n\tdefault: {\n\t\treturn state;\n\t}\n\t}\n}\n\nfunction updateNestedPropertySetting(propertyId, newState, setting, value) {\n\tif (typeof propertyId.row !== \"undefined\") {\n\t\tif (typeof newState[propertyId.row] === \"undefined\") {\n\t\t\tnewState[propertyId.row] = {};\n\t\t}\n\t\tif (typeof propertyId.col !== \"undefined\") {\n\t\t\tif (typeof newState[propertyId.row][propertyId.col] === \"undefined\") {\n\t\t\t\tnewState[propertyId.row][propertyId.col] = {};\n\t\t\t}\n\t\t\tif (typeof propertyId.propertyId !== \"undefined\") {\n\t\t\t\tupdateNestedPropertySetting(propertyId.propertyId, newState[propertyId.row][propertyId.col], setting, value);\n\t\t\t} else {\n\t\t\t\tset(newState[propertyId.row][propertyId.col], setting, value);\n\t\t\t}\n\t\t} else if (typeof propertyId.propertyId !== \"undefined\") { // nested structureeditor\n\t\t\tupdateNestedPropertySetting(propertyId.propertyId, newState[propertyId.row], setting, value);\n\t\t} else {\n\t\t\tset(newState[propertyId.row], setting, value);\n\t\t}\n\t}\n}\n\nexport default states;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SET_ACTIVE_TEARSHEET } from \"../actions\";\n\nfunction states(state = [], action) {\n\tswitch (action.type) {\n\tcase SET_ACTIVE_TEARSHEET: {\n\t\treturn Object.assign({}, state, action.tearsheetId);\n\t}\n\tdefault:\n\t\treturn state;\n\t}\n}\n\nexport default states;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createStore, combineReducers } from \"redux\";\nimport { has, get, isEqual, cloneDeep } from \"lodash\";\nimport { setTearsheetState } from \"./actions\";\nimport { setPropertyValues, updatePropertyValue, removePropertyValue } from \"./actions\";\nimport { setControlStates, updateControlState } from \"./actions\";\nimport { setPanelStates, updatePanelState } from \"./actions\";\nimport { setActionStates, updateActionState } from \"./actions\";\n\nimport { clearSelectedRows, updateSelectedRows, disableRowMoveButtons } from \"./actions\";\nimport { clearStaticRows, updateStaticRows } from \"./actions\";\nimport { setErrorMessages, updateErrorMessage, clearErrorMessage } from \"./actions\";\nimport { setDatasetMetadata, setSaveButtonDisable, setWideFlyoutPrimaryButtonDisabled, setAddRemoveRows, setTableButtonEnabled, setHideEditButton } from \"./actions\";\nimport { setTitle, setActiveTab } from \"./actions\";\nimport propertiesReducer from \"./reducers/properties\";\nimport controlStatesReducer from \"./reducers/control-states\";\nimport panelStatesReducer from \"./reducers/panel-states\";\nimport actionStatesReducer from \"./reducers/action-states\";\nimport errorMessagesReducer from \"./reducers/error-messages\";\nimport datasetMetadataReducer from \"./reducers/dataset-metadata\";\nimport rowSelectionsReducer from \"./reducers/row-selections\";\nimport rowFreezeReducer from \"./reducers/row-static\";\nimport componentMetadataReducer from \"./reducers/component-metadata\";\nimport disableRowMoveButtonsReducer from \"./reducers/disable-row-move-buttons\";\nimport saveButtonDisableReducer from \"./reducers/save-button-disable\";\nimport wideFlyoutPrimaryButtonDisableReducer from \"./reducers/wide-flyout-primary-button-disable\";\nimport propertiesSettingsReducer from \"./reducers/properties-settings\";\nimport tearsheetStatesReducer from \"./reducers/tearsheet-states\";\nimport * as PropertyUtils from \"./util/property-utils.js\";\nimport { CONDITION_MESSAGE_TYPE, MESSAGE_KEYS } from \"./constants/constants.js\";\n\n/* eslint max-depth: [\"error\", 6] */\n\nexport default class PropertiesStore {\n\tconstructor() {\n\t\tthis.combinedReducer = combineReducers({ propertiesReducer, controlStatesReducer, panelStatesReducer,\n\t\t\terrorMessagesReducer, datasetMetadataReducer, rowSelectionsReducer, componentMetadataReducer,\n\t\t\tdisableRowMoveButtonsReducer, actionStatesReducer, wideFlyoutPrimaryButtonDisableReducer, tearsheetStatesReducer,\n\t\t\tsaveButtonDisableReducer, propertiesSettingsReducer, rowFreezeReducer });\n\t\tlet enableDevTools = false;\n\t\tif (typeof window !== \"undefined\") {\n\t\t\tenableDevTools = window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__();\n\t\t}\n\t\tthis.store = createStore(this.combinedReducer, enableDevTools);\n\t}\n\n\tdispatch(action) {\n\t\tthis.store.dispatch(action);\n\t}\n\n\tgetStore() {\n\t\treturn this.store;\n\t}\n\tsubscribe(callback) {\n\t\tthis.store.subscribe(callback);\n\t}\n\n\tgetPropertyValue(propertyId) {\n\t\tconst state = this.store.getState();\n\t\tconst propValue = state.propertiesReducer[propertyId.name];\n\t\treturn this.getNestedPropertyValue(propertyId, propValue);\n\t}\n\n\tgetNestedPropertyValue(propertyId, propValue) {\n\t\tif (typeof propertyId.row !== \"undefined\" && (typeof propValue !== \"undefined\" && propValue !== null)) {\n\t\t\tconst rowValue = propValue[propertyId.row];\n\t\t\tif (typeof propertyId.col !== \"undefined\" && (typeof rowValue !== \"undefined\" && rowValue !== null) && Array.isArray(rowValue)) {\n\t\t\t\tif (typeof propertyId.index !== \"undefined\") {\n\t\t\t\t\treturn rowValue[propertyId.col][propertyId.index];\n\t\t\t\t}\n\n\t\t\t\tif (typeof propertyId.propertyId !== \"undefined\") {\n\t\t\t\t\treturn this.getNestedPropertyValue(propertyId.propertyId, rowValue[propertyId.col]);\n\t\t\t\t}\n\t\t\t\treturn rowValue[propertyId.col];\n\t\t\t}\n\t\t\tif (typeof propertyId.propertyId !== \"undefined\") { // nested structureeditor\n\t\t\t\treturn this.getNestedPropertyValue(propertyId.propertyId, rowValue);\n\t\t\t}\n\t\t\treturn rowValue;\n\t\t}\n\t\treturn propValue;\n\t}\n\tgetPropertyValues() {\n\t\tconst state = this.store.getState();\n\t\treturn PropertyUtils.copy(state.propertiesReducer);\n\t}\n\tsetPropertyValues(values) {\n\t\tthis.store.dispatch(setPropertyValues(values));\n\t}\n\n\tupdatePropertyValue(propertyId, value) {\n\t\tthis.store.dispatch(updatePropertyValue({ propertyId: propertyId, value: value }));\n\t}\n\n\tremovePropertyValue(propertyId) {\n\t\tthis.store.dispatch(removePropertyValue({ propertyId: propertyId }));\n\t}\n\n\tgetControlState(propertyId) {\n\t\tif (typeof propertyId === \"undefined\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst state = this.store.getState();\n\t\tlet locState = state.controlStatesReducer[propertyId.name];\n\t\t// in a table return state of parent if set.\n\t\tif (locState && (locState.value === \"hidden\" || locState.value === \"disabled\")) {\n\t\t\treturn locState;\n\t\t}\n\n\t\t// First check for control-level, then column level, and finally cell level property addressing\n\t\tconst colId = typeof propertyId.col !== \"undefined\" ? propertyId.col.toString() : null;\n\t\tconst rowId = typeof propertyId.row !== \"undefined\" ? propertyId.row.toString() : null;\n\t\tif (colId !== null && locState && locState[colId] &&\n\t\t\t\t(typeof locState[colId].value !== \"undefined\" || (locState[colId][rowId] &&\n\t\t\t\t\t(typeof locState[colId][rowId].value !== \"undefined\" ||\n\t\t\t\t\t\ttypeof locState[colId][rowId].values !== \"undefined\")))) {\n\t\t\t// Column level state\n\t\t\tlocState = locState[colId];\n\t\t\tif (rowId !== null && locState && locState[rowId] &&\n\t\t\t\t(typeof locState[rowId].value !== \"undefined\" || typeof locState[rowId].values !== \"undefined\")) {\n\t\t\t\t// Cell level state\n\t\t\t\tlocState = locState[rowId];\n\t\t\t}\n\t\t}\n\t\tif (locState) {\n\t\t\treturn locState;\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetControlStates() {\n\t\tconst state = this.store.getState();\n\t\t// get a copy and not direct reference\n\t\treturn PropertyUtils.copy(state.controlStatesReducer);\n\t}\n\n\tsetControlStates(values) {\n\t\t// check to see if values are equal before firing event\n\t\tif (!isEqual(this.getControlStates(), values)) {\n\t\t\tthis.store.dispatch(setControlStates(values));\n\t\t}\n\t}\n\n\tupdateControlState(propertyId, value) {\n\t\tthis.store.dispatch(updateControlState({ propertyId: propertyId, value: value }));\n\t}\n\n\tgetPanelState(panelId) {\n\t\tif (typeof panelId === \"undefined\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst state = this.store.getState();\n\t\tconst locState = state.panelStatesReducer[panelId.name];\n\t\tif (locState && locState.value) {\n\t\t\treturn locState.value;\n\t\t}\n\t\treturn null;\n\t}\n\tgetPanelStates() {\n\t\tconst state = this.store.getState();\n\t\t// get a copy and not direct reference\n\t\treturn PropertyUtils.copy(state.panelStatesReducer);\n\t}\n\tsetPanelStates(values) {\n\t\t// check to see if values are equal before firing event\n\t\tif (!isEqual(this.getPanelStates(), values)) {\n\t\t\tthis.store.dispatch(setPanelStates(values));\n\t\t}\n\t}\n\tupdatePanelState(panelId, value) {\n\t\tthis.store.dispatch(updatePanelState({ panelId: panelId, value: value }));\n\t}\n\n\tgetActionState(actionId) {\n\t\tif (typeof actionId === \"undefined\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst state = this.store.getState();\n\t\tconst locState = state.actionStatesReducer[actionId.name];\n\t\tif (locState && locState.value) {\n\t\t\treturn locState.value;\n\t\t}\n\t\treturn null;\n\t}\n\tgetActionStates() {\n\t\tconst state = this.store.getState();\n\t\t// get a copy and not direct reference\n\t\treturn PropertyUtils.copy(state.actionStatesReducer);\n\t}\n\tsetActionStates(values) {\n\t\t// check to see if values are equal before firing event\n\t\tif (!isEqual(this.getActionStates(), values)) {\n\t\t\tthis.store.dispatch(setActionStates(values));\n\t\t}\n\t}\n\tupdateActionState(actionId, value) {\n\t\tthis.store.dispatch(updateActionState({ actionId: actionId, value: value }));\n\t}\n\n\tsetSaveButtonDisable(disableState) {\n\t\tthis.store.dispatch(setSaveButtonDisable(disableState));\n\t}\n\n\tgetSaveButtonDisable() {\n\t\tconst state = this.store.getState();\n\t\treturn state.saveButtonDisableReducer.disable;\n\t}\n\n\tsetWideFlyoutPrimaryButtonDisabled(panelId, disableState) {\n\t\tthis.store.dispatch(setWideFlyoutPrimaryButtonDisabled({ panelId: panelId, disableState: disableState }));\n\t}\n\n\tgetWideFlyoutPrimaryButtonDisabled(panelId) {\n\t\tif (typeof panelId === \"undefined\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst state = this.store.getState();\n\t\tconst disablePrimaryButtonForPanel = state.wideFlyoutPrimaryButtonDisableReducer[panelId.name];\n\t\tif (typeof disablePrimaryButtonForPanel !== \"undefined\") {\n\t\t\treturn disablePrimaryButtonForPanel;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/*\n\t* Retrieves filtered enumeration values for the given propertyId.\n\t*/\n\tgetFilteredEnumItems(propertyId) {\n\t\tif (typeof propertyId === \"undefined\") {\n\t\t\treturn null;\n\t\t}\n\t\t// First check for control-level, then column level, and finally cell level property addressing\n\t\tconst state = this.store.getState();\n\t\tlet locState = state.controlStatesReducer[propertyId.name];\n\t\tif (typeof propertyId.col !== \"undefined\" && locState && locState[propertyId.col.toString()]) {\n\t\t\t// Column level filtering\n\t\t\tlocState = locState[propertyId.col.toString()];\n\t\t\tif (typeof propertyId.row !== \"undefined\" && locState[propertyId.row.toString()]) {\n\t\t\t\t// Cell level filtering\n\t\t\t\tlocState = locState[propertyId.row.toString()];\n\t\t\t}\n\t\t}\n\t\tif (locState) {\n\t\t\treturn locState.enumFilter;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/*\n\t* Returns the message for a propertyId. Iterates over row and cell level messages\n\t* and returns an error message summary for all cell level errors.\n\t*/\n\tgetErrorMessage(propertyId, intl) {\n\t\tif (typeof propertyId === \"undefined\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst state = this.store.getState();\n\t\tlet controlMsg = state.errorMessagesReducer[propertyId.name];\n\t\tif (typeof propertyId.row !== \"undefined\" && controlMsg) {\n\t\t\tcontrolMsg = controlMsg[propertyId.row.toString()];\n\t\t\tif (typeof propertyId.col !== \"undefined\" && controlMsg) {\n\t\t\t\treturn controlMsg[propertyId.col.toString()]; // return cell message\n\t\t\t}\n\t\t\tif (controlMsg && controlMsg.text) {\n\t\t\t\treturn controlMsg;\n\t\t\t}\n\t\t}\n\t\tlet controlMessage = null;\n\t\tlet returnMessage = null;\n\t\tif (controlMsg && controlMsg.text) { // save the control level message\n\t\t\tcontrolMessage = controlMsg;\n\t\t}\n\t\tif (controlMsg) {\n\t\t\tconst clonedControlMsg = cloneDeep(controlMsg); // Prevent modifying state directly\n\t\t\treturnMessage = this._getTableCellErrors(clonedControlMsg, intl);\n\t\t}\n\t\tif (controlMessage !== null && returnMessage !== null) {\n\t\t\tcontrolMessage.text = controlMessage.text + \" \" + returnMessage.text;\n\t\t} else if (controlMessage === null) {\n\t\t\tcontrolMessage = returnMessage;\n\t\t}\n\t\treturn controlMessage;\n\t}\n\n\t// get the table cell level error messages. if more than one cell is in error, return summary message;\n\t_getTableCellErrors(controlMsg, intl) {\n\t\tlet returnMessage = null;\n\t\tlet errorMsgCount = 0;\n\t\tlet warningMsgCount = 0;\n\t\t// search message for param and return first error message found, else first warning\n\t\tfor (const rowKey in controlMsg) {\n\t\t\tif (!has(controlMsg, rowKey)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (rowKey === \"text\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst rowMessage = controlMsg[rowKey];\n\t\t\tif (rowMessage && rowMessage.text) {\n\t\t\t\treturnMessage = rowMessage;\n\t\t\t\terrorMsgCount += (rowMessage.type === CONDITION_MESSAGE_TYPE.ERROR) ? 1 : 0;\n\t\t\t\twarningMsgCount += (rowMessage.type === CONDITION_MESSAGE_TYPE.WARNING) ? 1 : 0;\n\t\t\t}\n\t\t\tif (rowMessage) { // table cell\n\t\t\t\tfor (const colKey in rowMessage) {\n\t\t\t\t\tif (!has(rowMessage, colKey)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (colKey === \"text\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst colMessage = rowMessage[colKey];\n\t\t\t\t\tif (colMessage && colMessage.text) {\n\t\t\t\t\t\treturnMessage = colMessage;\n\t\t\t\t\t\terrorMsgCount += (colMessage.type === CONDITION_MESSAGE_TYPE.ERROR) ? 1 : 0;\n\t\t\t\t\t\twarningMsgCount += (colMessage.type === CONDITION_MESSAGE_TYPE.WARNING) ? 1 : 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif ((errorMsgCount + warningMsgCount) !== 1 && returnMessage) {\n\t\t\treturnMessage.type = (errorMsgCount > 0) ? CONDITION_MESSAGE_TYPE.ERROR : CONDITION_MESSAGE_TYPE.WARNING;\n\t\t\treturnMessage.text = (errorMsgCount > 0)\n\t\t\t\t? PropertyUtils.formatMessage(intl,\n\t\t\t\t\tMESSAGE_KEYS.TABLE_SUMMARY_ERROR, { errorMsgCount: errorMsgCount })\n\t\t\t\t: \"\";\n\t\t\treturnMessage.text += (warningMsgCount > 0)\n\t\t\t\t? PropertyUtils.formatMessage(intl,\n\t\t\t\t\tMESSAGE_KEYS.TABLE_SUMMARY_WARNING, { warningMsgCount: warningMsgCount })\n\t\t\t\t: \"\";\n\t\t}\n\t\treturn returnMessage;\n\t}\n\n\tgetErrorMessages() {\n\t\tconst state = this.store.getState();\n\t\treturn PropertyUtils.copy(state.errorMessagesReducer);\n\t}\n\tsetErrorMessages(values) {\n\t\t// check to see if values are equal before firing event\n\t\tif (!isEqual(this.getErrorMessages(), values)) {\n\t\t\tthis.store.dispatch(setErrorMessages(values));\n\t\t}\n\t}\n\tupdateErrorMessage(propertyId, value) {\n\t\tif (!isEqual(this.getErrorMessage(propertyId), value)) {\n\t\t\tthis.store.dispatch(updateErrorMessage({ propertyId: propertyId, value: value }));\n\t\t}\n\t}\n\tclearErrorMessage(propertyId) {\n\t\tif (this.getErrorMessage(propertyId) !== null) {\n\t\t\tthis.store.dispatch(clearErrorMessage({ propertyId: propertyId }));\n\t\t}\n\t}\n\n\t/*\n\t* DataModel methods\n\t*/\n\tsetDatasetMetadata(datasetMetadata) {\n\t\tthis.store.dispatch(setDatasetMetadata(datasetMetadata));\n\t}\n\tgetDatasetMetadata() {\n\t\tconst state = this.store.getState();\n\t\treturn state.datasetMetadataReducer;\n\t}\n\n\t/*\n\t* Row Selection Methods\n\t*/\n\tgetSelectedRows(propertyId) {\n\t\tif (typeof propertyId === \"undefined\") {\n\t\t\treturn [];\n\t\t}\n\t\tconst state = this.store.getState();\n\t\tlet rowSelections = state.rowSelectionsReducer[propertyId.name];\n\t\tif (Number.isInteger(propertyId.row) && rowSelections) {\n\t\t\trowSelections = rowSelections[String(propertyId.row)]; // row selection\n\t\t\tif (Number.isInteger(propertyId.col) && rowSelections) {\n\t\t\t\trowSelections = rowSelections[String(propertyId.col)]; // cell selection\n\t\t\t}\n\t\t}\n\t\treturn rowSelections && rowSelections.selectedRows ? rowSelections.selectedRows : [];\n\t}\n\n\tupdateSelectedRows(propertyId, selection) {\n\t\tthis.store.dispatch(updateSelectedRows({ propertyId: propertyId, selectedRows: selection }));\n\t}\n\n\tclearSelectedRows(propertyId) {\n\t\tthis.store.dispatch(clearSelectedRows({ propertyId: propertyId }));\n\t}\n\n\tgetStaticRows(propertyId) {\n\t\tif (typeof propertyId === \"undefined\") {\n\t\t\treturn [];\n\t\t}\n\t\tconst state = this.store.getState();\n\t\tlet rowStatic = state.rowFreezeReducer[propertyId.name];\n\t\tif (Number.isInteger(propertyId.row) && rowStatic) {\n\t\t\trowStatic = rowStatic[String(propertyId.row)]; // row selection\n\t\t\tif (Number.isInteger(propertyId.col) && rowStatic) {\n\t\t\t\trowStatic = rowStatic[String(propertyId.col)]; // cell selection\n\t\t\t}\n\t\t}\n\t\treturn rowStatic && rowStatic.staticRows ? rowStatic.staticRows : [];\n\t}\n\n\tupdateStaticRows(propertyId, staticRows) {\n\t\tthis.store.dispatch(updateStaticRows({ propertyId: propertyId, staticRows: staticRows }));\n\t}\n\n\tclearStaticRows(propertyId) {\n\t\tthis.store.dispatch(clearStaticRows({ propertyId: propertyId }));\n\t}\n\n\t/**\n\t * Disable table row move buttons for all propertyIds in given array\n\t * @param propertyIds Array of propertyIds\n\t */\n\tsetDisableRowMoveButtons(propertyIds) {\n\t\tthis.store.dispatch(disableRowMoveButtons(propertyIds));\n\t}\n\n\tgetDisableRowMoveButtons() {\n\t\tconst state = this.store.getState();\n\t\treturn state.disableRowMoveButtonsReducer.propertyIds;\n\t}\n\n\tsetTitle(title) {\n\t\tthis.store.dispatch(setTitle(title));\n\t}\n\n\tgetTitle() {\n\t\tconst state = this.store.getState();\n\t\treturn state.componentMetadataReducer.title;\n\t}\n\n\tsetActiveTab(activeTab) {\n\t\tthis.store.dispatch(setActiveTab(activeTab));\n\t}\n\n\tgetActiveTab() {\n\t\tconst state = this.store.getState();\n\t\treturn state.componentMetadataReducer.activeTab;\n\t}\n\n\t/**\n\t* Set the addRemoveRows attribute to 'enabled' for the given propertyId\n\t* @param propertyId The unique property identifier\n\t* @param enabled boolean value to enable or disable addRemoveRows\n\t*/\n\tsetAddRemoveRows(propertyId, enabled) {\n\t\tthis.store.dispatch(setAddRemoveRows({ propertyId: propertyId, value: enabled }));\n\t}\n\n\t/**\n\t* Returns true if addRemoveRows is enabled for the given propertyID\n\t* @param propertyId The unique property identifier\n\t* @return boolean\n\t*/\n\tgetAddRemoveRows(propertyId) {\n\t\tconst state = this.store.getState();\n\t\tconst defaultValue = true; // Default to true to show the addRemoveRows buttons\n\t\tif (state.propertiesSettingsReducer[propertyId.name]) {\n\t\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\t\treturn getNestedPropertySetting(propertyId, state.propertiesSettingsReducer[propertyId.name], \"addRemoveRows\", defaultValue);\n\t\t\t}\n\t\t\treturn state.propertiesSettingsReducer[propertyId.name].addRemoveRows;\n\t\t}\n\t\treturn defaultValue;\n\t}\n\n\tsetTableButtonEnabled(propertyId, buttonId, enabled) {\n\t\tthis.store.dispatch(setTableButtonEnabled({ propertyId: propertyId, buttonId: buttonId, value: enabled }));\n\t}\n\n\tgetTableButtons(propertyId) {\n\t\tconst state = this.store.getState();\n\t\tconst defaultValue = {};\n\t\tif (state.propertiesSettingsReducer[propertyId.name]) {\n\t\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\t\treturn getNestedPropertySetting(propertyId, state.propertiesSettingsReducer[propertyId.name], \"tableButtons\", defaultValue);\n\t\t\t}\n\t\t\treturn state.propertiesSettingsReducer[propertyId.name].tableButtons || defaultValue;\n\t\t}\n\t\treturn defaultValue;\n\t}\n\n\tgetTableButtonEnabled(propertyId, buttonId) {\n\t\tconst state = this.store.getState();\n\t\tconst defaultValue = false; // Disable button by default\n\t\tif (state.propertiesSettingsReducer[propertyId.name]) {\n\t\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\t\treturn getNestedPropertySetting(propertyId, state.propertiesSettingsReducer[propertyId.name], `tableButtons.${buttonId}`, defaultValue);\n\t\t\t}\n\t\t\treturn state.propertiesSettingsReducer[propertyId.name].tableButtons[buttonId];\n\t\t}\n\t\treturn defaultValue;\n\t}\n\n\t/**\n\t* Set the hideEditButton attribute to 'true' for the given propertyId\n\t* @param propertyId The unique property identifier\n\t* @param enabled boolean value for disable or enable edit button by state hideEditButton\n\t*/\n\tsetHideEditButton(propertyId, enabled) {\n\t\tthis.store.dispatch(setHideEditButton({ propertyId: propertyId, value: enabled }));\n\t}\n\n\t/**\n\t* Returns true if hideEditButton is true for the given propertyID\n\t* @param propertyId The unique property identifier\n\t* @return boolean\n\t*/\n\tgetHideEditButton(propertyId) {\n\t\tconst state = this.store.getState();\n\t\tconst defaultValue = false; // Default to false to show disable edit buttons\n\t\tif (state.propertiesSettingsReducer[propertyId.name]) {\n\t\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\t\treturn getNestedPropertySetting(propertyId, state.propertiesSettingsReducer[propertyId.name], \"hideEditButton\", defaultValue);\n\t\t\t}\n\t\t\treturn state.propertiesSettingsReducer[propertyId.name].hideEditButton;\n\t\t}\n\t\treturn defaultValue;\n\t}\n\n\tsetActiveTearsheetId(tearsheetId) {\n\t\tthis.store.dispatch(setTearsheetState({ tearsheetId: tearsheetId }));\n\t}\n\n\tgetActiveTearsheetId() {\n\t\tconst state = this.store.getState();\n\t\tconst tearsheetId = state.tearsheetStatesReducer.tearsheetId;\n\t\tif (typeof tearsheetId !== \"undefined\") {\n\t\t\treturn tearsheetId;\n\t\t}\n\t\treturn null;\n\t}\n}\n\nfunction getNestedPropertySetting(propertyId, state, setting, defaultValue) {\n\tif (typeof propertyId.row !== \"undefined\" && state[propertyId.row]) {\n\t\tif (typeof propertyId.col !== \"undefined\" && state[propertyId.row][propertyId.col]) {\n\t\t\tif (typeof propertyId.propertyId !== \"undefined\") {\n\t\t\t\treturn getNestedPropertySetting(propertyId.propertyId, state[propertyId.row][propertyId.col], setting, defaultValue);\n\t\t\t}\n\t\t\treturn get(state[propertyId.row][propertyId.col], setting);\n\t\t} else if (typeof propertyId.propertyId !== \"undefined\") { // nested structureeditor\n\t\t\treturn getNestedPropertySetting(propertyId.propertyId, state[propertyId.row], setting, defaultValue);\n\t\t}\n\t\treturn get(state[propertyId.row], setting);\n\t}\n\treturn defaultValue;\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"../../../utils/logger\";\nimport { ItemType, PanelType } from \"../constants/form-constants\";\n\n\nfunction parseInput(definition) {\n\tvar data = definition;\n\tif (data.evaluate) {\n\t\tvar paramsList = [];\n\t\tif (data.parameter_refs) {\n\t\t\tevaluate(data.evaluate, paramsList, data.parameter_refs);\n\t\t} else {\n\t\t\tevaluate(data.evaluate, paramsList, data.parameter_ref);\n\t\t}\n\t\t// remove duplicates in paramsList array\n\t\tvar uniqueList = Array.from(new Set(paramsList));\n\t\tif (uniqueList.length > 1) {\n\t\t\treturn uniqueList;\n\t\t}\n\t\t// return single control; this will never be an empty list\n\t\tvar controlName = uniqueList[0];\n\t\treturn controlName;\n\t}\n\tthrow new Error(\"Invalid validation schema\");\n}\n\n\n/**\n * Evaluate Definition\n */\nfunction evaluate(data, paramsList, defaultParameter) {\n\tif (data.or) {\n\t\tor(data.or, paramsList, defaultParameter);\n\t} else if (data.and) {\n\t\tand(data.and, paramsList, defaultParameter);\n\t} else if (data.condition) { // condition\n\t\tcondition(data.condition, paramsList, defaultParameter);\n\t} else {\n\t\tthrow new Error(\"Failed to parse definition\");\n\t}\n}\n\n/**\n * The 'or' condition.\n */\nfunction or(data, paramsList, defaultParameter) {\n\tfor (let i = 0; i < data.length; i++) {\n\t\tevaluate(data[i], paramsList, defaultParameter);\n\t}\n}\n\n/**\n * The 'and' condition. All sub-conditions evaluate to true.\n * Can nest any number of additional conditional types.\n * @param {Object} data an array of items\n * @return {boolean}\n */\nfunction and(data, paramsList, defaultParameter) {\n\tfor (let i = 0; i < data.length; i++) {\n\t\tevaluate(data[i], paramsList, defaultParameter);\n\t}\n}\n\n/**\n * A parameter condition.\n */\nfunction condition(data, paramsList, defaultParameter) {\n\tif (data.parameter_ref) {\n\t\tparamsList.push(data.parameter_ref);\n\t\tif (data.parameter_2_ref) {\n\t\t\tparamsList.push(data.parameter_2_ref);\n\t\t}\n\t} else {\n\t\t// needed for filtering of dm fields\n\t\tparamsList.push(defaultParameter);\n\t}\n}\n\n// Parse the set of Controls from the form data\nfunction parseControls(controls, actions, formData) {\n\tif (formData.uiItems) {\n\t\tfor (const uiItem of formData.uiItems) {\n\t\t\tparseUiItem(controls, actions, uiItem);\n\t\t}\n\t}\n}\n\nfunction parseControl(controls, control, parentCategoryId) {\n\tif (control.label) {\n\t\tcontrol.summaryLabel = control.label.text;\n\t}\n\tif (parentCategoryId) {\n\t\tcontrol.parentCategoryId = parentCategoryId;\n\t}\n\tcontrols.push(control);\n\tif (control.subControls) {\n\t\tfor (let idx = 0; idx < control.subControls.length; idx++) {\n\t\t\tconst subControl = control.subControls[idx];\n\t\t\tsubControl.parameterName = control.name;\n\t\t\tsubControl.columnIndex = idx;\n\t\t\tif (parentCategoryId) {\n\t\t\t\tsubControl.parentCategoryId = parentCategoryId;\n\t\t\t}\n\t\t\tcontrols.push(subControl);\n\t\t}\n\t}\n}\n\nfunction parseUiItem(controls, actions, uiItem, panelId, parentCategoryId) {\n\tswitch (uiItem.itemType) {\n\tcase ItemType.CONTROL: {\n\t\tconst control = uiItem.control;\n\t\tif (panelId) {\n\t\t\tcontrol.summaryPanelId = panelId;\n\t\t}\n\t\tif (parentCategoryId) {\n\t\t\tcontrol.parentCategoryId = parentCategoryId;\n\t\t}\n\t\tparseControl(controls, control, parentCategoryId);\n\t\t// If some panels from a Selector Panel have been inserted in a\n\t\t// radio set control the control will have additionalItems which need\n\t\t// to be parsed.\n\t\tif (uiItem.additionalItems) {\n\t\t\tfor (const additionalItem of uiItem.additionalItems) {\n\t\t\t\tparseUiItem(controls, actions, additionalItem.content, panelId, parentCategoryId);\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n\tcase ItemType.ADDITIONAL_LINK:\n\tcase ItemType.CHECKBOX_SELECTOR:\n\tcase ItemType.TEARSHEET:\n\tcase ItemType.PANEL: {\n\t\tif (uiItem.panel && uiItem.panel.uiItems) {\n\t\t\tlet locPanelId = panelId;\n\t\t\tif (uiItem.panel.panelType === PanelType.SUMMARY) {\n\t\t\t\tlocPanelId = uiItem.panel.id;\n\t\t\t}\n\t\t\tfor (const panelUiItem of uiItem.panel.uiItems) {\n\t\t\t\tparseUiItem(controls, actions, panelUiItem, locPanelId, parentCategoryId);\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n\tcase ItemType.PRIMARY_TABS:\n\tcase ItemType.PANEL_SELECTOR:\n\tcase ItemType.SUB_TABS: {\n\t\tif (uiItem.tabs) {\n\t\t\tfor (const tab of uiItem.tabs) {\n\t\t\t\tparseUiItem(controls, actions, tab.content, panelId,\n\t\t\t\t\tuiItem.itemType === ItemType.PANEL_SELECTOR || uiItem.itemType === ItemType.SUB_TABS\n\t\t\t\t\t\t? parentCategoryId\n\t\t\t\t\t\t: tab.group);\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n\tcase ItemType.CUSTOM_PANEL:\n\t\tif (uiItem.panel && uiItem.panel.parameters) {\n\t\t\tfor (const param of uiItem.panel.parameters) {\n\t\t\t\tconst control = {\n\t\t\t\t\tname: param,\n\t\t\t\t\tcontrolType: \"custom\"\n\t\t\t\t};\n\t\t\t\tif (panelId) {\n\t\t\t\t\tcontrol.summaryPanelId = panelId;\n\t\t\t\t}\n\t\t\t\tif (parentCategoryId) {\n\t\t\t\t\tcontrol.parentCategoryId = parentCategoryId;\n\t\t\t\t}\n\t\t\t\tcontrols.push(control);\n\t\t\t}\n\t\t}\n\t\tbreak; // required parameters are handled by panel\n\tcase ItemType.ACTION:\n\t\tif (uiItem.action && uiItem.action.name) {\n\t\t\tactions[uiItem.action.name] = uiItem.action;\n\t\t}\n\t\tbreak;\n\tcase ItemType.STATIC_TEXT:\n\tcase ItemType.TEXT_PANEL:\n\tcase ItemType.HORIZONTAL_SEPARATOR: {\n\t\tbreak;\n\t}\n\tdefault:\n\t\tlogger.warn(\"Unknown UiItem type when parsing ui conditions: \" + uiItem.itemType);\n\t\tbreak;\n\n\t}\n\treturn controls;\n\n}\n\n// Parse the condition section of the form data\nfunction parseConditions(container, uiCondition, conditionType) {\n\ttry {\n\t\tvar controls = parseInput(uiCondition[conditionType]);\n\t\tvar groupDef = {\n\t\t\t\"params\": controls,\n\t\t\t\"definition\": uiCondition\n\t\t};\n\t\t_setDefinitions(container.controls, controls, groupDef);\n\t\tlet refs = uiCondition[conditionType].parameter_refs;\n\t\tif (uiCondition[conditionType].group_refs) {\n\t\t\trefs = uiCondition[conditionType].group_refs;\n\t\t} else if (uiCondition[conditionType].action_refs) {\n\t\t\trefs = uiCondition[conditionType].action_refs;\n\t\t} else if (uiCondition[conditionType].target && uiCondition[conditionType].target.parameter_ref) {\n\t\t\trefs = [uiCondition[conditionType].target.parameter_ref];\n\t\t}\n\t\tif (refs) {\n\t\t\t_setDefinitions(container.refs, refs, groupDef);\n\t\t}\n\t} catch (error) { // invalid\n\t\tlogger.info(\"Error parsing ui conditions: \" + error);\n\t}\n\treturn container;\n}\n\nfunction _setDefinitions(container, controls, groupDef) {\n\tif (Array.isArray(controls) === true) {\n\t\tfor (let j = 0; j < controls.length; j++) {\n\t\t\tif (typeof container[controls[j]] === \"undefined\") {\n\t\t\t\tcontainer[controls[j]] = [];\n\t\t\t}\n\t\t\tcontainer[controls[j]].push(groupDef);\n\t\t}\n\t} else { // single control\n\t\tif (typeof container[controls] === \"undefined\") {\n\t\t\tcontainer[controls] = [];\n\t\t}\n\t\tcontainer[controls].push(groupDef);\n\t}\n}\n\nexport {\n\tparseInput,\n\tparseControls,\n\tparseConditions,\n\tparseControl\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"../../../../utils/logger\";\nimport { L10nProvider, ResourceDef } from \"../../util/L10nProvider\";\nimport { cloneDeep, propertyOf } from \"lodash\";\n\nfunction setExpressionInfo(inExpressionInfo) {\n\tconst expressionFunctionInfo = {};\n\tif (inExpressionInfo && inExpressionInfo.functions) {\n\t\tconst l10nProvider = new L10nProvider(propertyOf(inExpressionInfo)(\"resources\"));\n\t\tconst expressionInfo = cloneDeep(inExpressionInfo.functions);\n\t\tif (Array.isArray(expressionInfo.function_info) && Array.isArray(expressionInfo.function_categories)) {\n\t\t\t// build up the visible function labels from the input label and the parameter information.\n\t\t\tconst functionInfoList = expressionInfo.parmsSet ? expressionInfo.function_info : _genFunctionParameters(expressionInfo.function_info, l10nProvider);\n\t\t\texpressionInfo.parmsSet = true;\n\n\t\t\t// build up the categories for the functions and associate the category with the function info detail.\n\t\t\texpressionFunctionInfo.functionCategories = [];\n\t\t\texpressionInfo.function_categories.forEach((category) => {\n\t\t\t\texpressionFunctionInfo.functionCategories[category.id] = {};\n\t\t\t\texpressionFunctionInfo.functionCategories[category.id].locLabel = l10nProvider.l10nLabel(category, category.id);\n\t\t\t\texpressionFunctionInfo.functionCategories[category.id].functionList = [];\n\t\t\t\tcategory.function_refs.forEach((functionId) => {\n\t\t\t\t\tconst functionInfo = _getFunctionInfo(functionId, functionInfoList);\n\t\t\t\t\tif (functionInfo) {\n\t\t\t\t\t\texpressionFunctionInfo.functionCategories[category.id].functionList.push(functionInfo);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// build up the operator buttons list with the operator function info detail.\n\t\t\texpressionFunctionInfo.operators = [];\n\t\t\tif (expressionInfo.operator_refs) {\n\t\t\t\texpressionInfo.operator_refs.forEach((functionId) => {\n\t\t\t\t\tconst functionInfo = _getFunctionInfo(functionId, functionInfoList);\n\t\t\t\t\tif (functionInfo) {\n\t\t\t\t\t\texpressionFunctionInfo.operators.push(functionInfo);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\texpressionFunctionInfo.fields = { \"field_categories\": [], \"field_table_info\": [] };\n\t\t\tif (inExpressionInfo.fields) {\n\t\t\t\tif (inExpressionInfo.fields.field_categories) {\n\t\t\t\t\tinExpressionInfo.fields.field_categories.forEach((fieldCat) => {\n\t\t\t\t\t\tfieldCat.locLabel = l10nProvider.l10nLabel(fieldCat, fieldCat.id);\n\n\t\t\t\t\t\tfieldCat.field_columns.field_column_info.locLabel = l10nProvider.l10nLabel(fieldCat.field_columns.field_column_info, fieldCat.id + \".field_column_info\");\n\t\t\t\t\t\tfieldCat.field_columns.value_column_info.locLabel = l10nProvider.l10nLabel(fieldCat.field_columns.value_column_info, fieldCat.id + \".value_column_info\");\n\n\t\t\t\t\t\tconst fieldColInfoDesc = l10nProvider.l10nDesc(fieldCat.field_columns.field_column_info, fieldCat.id + \".field_column_info\");\n\t\t\t\t\t\tif (fieldColInfoDesc !== fieldCat.id + \".field_column_info\") {\n\t\t\t\t\t\t\tfieldCat.field_columns.field_column_info.descLabel = fieldColInfoDesc;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst valueColInfoDesc = l10nProvider.l10nDesc(fieldCat.field_columns.value_column_info, fieldCat.id + \".value_column_info\");\n\t\t\t\t\t\tif (valueColInfoDesc !== fieldCat.id + \".value_column_info\") {\n\t\t\t\t\t\t\tfieldCat.field_columns.value_column_info.descLabel = valueColInfoDesc;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (fieldCat.field_columns.additional_column_info) {\n\t\t\t\t\t\t\tfieldCat.field_columns.additional_column_info.forEach((col) => {\n\t\t\t\t\t\t\t\tcol.locLabel = l10nProvider.l10nLabel(col, fieldCat.id + \".additional_column_info.\" + col.id);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\texpressionFunctionInfo.fields.field_categories.push(fieldCat);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (inExpressionInfo.fields.field_table_info) {\n\t\t\t\t\tinExpressionInfo.fields.field_table_info.forEach((fieldInfo) => {\n\t\t\t\t\t\texpressionFunctionInfo.fields.field_table_info.push(fieldInfo);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (inExpressionInfo && inExpressionInfo.resources) {\n\t\texpressionFunctionInfo.resources = inExpressionInfo.resources;\n\t}\n\n\treturn expressionFunctionInfo;\n}\n\n// build up the visible function labels from the label and the parameter information.\nfunction _genFunctionParameters(functionInfoList, l10nProvider) {\n\treturn functionInfoList.map((functionInfo) => {\n\t\tconst newEntry = functionInfo;\n\t\tnewEntry.locLabel = l10nProvider.l10nLabel(newEntry, newEntry.id);\n\t\tnewEntry.help = l10nProvider.l10nDesc(newEntry, newEntry.locLabel);\n\t\tnewEntry.value = newEntry.locLabel;\n\t\t// Translatable return type of function\n\t\tif (newEntry.return_type_label) {\n\t\t\tconst returnTypeLabel = ResourceDef.make(newEntry.return_type_label);\n\t\t\tnewEntry.locReturnType = l10nProvider.l10nResource(returnTypeLabel);\n\t\t}\n\t\tif (Array.isArray(functionInfo.parameters)) {\n\t\t\t// if the function label has any parameter substituion char '?' then replace with parameter label\n\t\t\tif (newEntry.locLabel && newEntry.locLabel.indexOf(\"?\") !== -1) {\n\t\t\t\tfunctionInfo.parameters.forEach((parameter) => {\n\t\t\t\t\tconst paramIndex = newEntry.locLabel.indexOf(\"?\");\n\t\t\t\t\tif (paramIndex !== -1) {\n\t\t\t\t\t\tnewEntry.locLabel = newEntry.locLabel.replace(\"?\", \" \" + l10nProvider.l10nLabel(parameter, parameter.id) + \" \");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// build up function label as a function call with parameters.\n\t\t\t\tnewEntry.value += \"(\";\n\t\t\t\tnewEntry.locLabel += \"(\";\n\t\t\t\tfunctionInfo.parameters.forEach((parameter, index) => {\n\t\t\t\t\tconst separator = (index > 0) ? \", \" : \"\";\n\t\t\t\t\tnewEntry.locLabel += separator + l10nProvider.l10nLabel(parameter, parameter.id);\n\t\t\t\t\tnewEntry.value += separator + \"?\";\n\t\t\t\t});\n\t\t\t\tnewEntry.locLabel += \")\";\n\t\t\t\tnewEntry.value += \")\";\n\t\t\t}\n\t\t}\n\t\treturn newEntry;\n\t});\n\n}\n\nfunction _getFunctionInfo(functionId, functionInfoList) {\n\tconst functionInfo = functionInfoList.find((functionElem) => functionElem.id === functionId);\n\tif (!functionInfo) {\n\t\tlogger.warn(\"Expression function information list, no function information found for \" + functionId);\n\t\treturn null;\n\t}\n\treturn functionInfo;\n}\n\n\nexport default setExpressionInfo;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { has } from \"lodash\";\n\nimport logger from \"../../../utils/logger\";\nimport { ItemType } from \"../constants/form-constants\";\n\n// Parse the set of panelTree from the form data\nfunction parseUiContent(panelTree, formData, panelTreeRoot) {\n\tif (formData.uiItems) {\n\t\tfor (const uiItem of formData.uiItems) {\n\t\t\tparseUiItem(panelTree, uiItem, panelTreeRoot);\n\t\t}\n\t}\n\treturn panelTree;\n}\n\nfunction parseUiItem(panelTree, uiItem, currentPanel) {\n\tswitch (uiItem.itemType) {\n\tcase ItemType.PRIMARY_TABS:\n\tcase ItemType.SUB_TABS: {\n\t\tif (uiItem.tabs) {\n\t\t\tfor (const tab of uiItem.tabs) {\n\t\t\t\tparseUiItem(panelTree, tab.content, currentPanel);\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n\tcase ItemType.TEXT_PANEL:\n\tcase ItemType.PANEL:\n\tcase ItemType.CUSTOM_PANEL:\n\tcase ItemType.ADDITIONAL_LINK:\n\tcase ItemType.TEARSHEET:\n\tcase ItemType.CHECKBOX_SELECTOR: {\n\t\tif (uiItem.panel && uiItem.panel.id) {\n\t\t\tpanelTree[currentPanel].panels.push(uiItem.panel.id);\n\t\t\t_newPanelTreeObject(panelTree, uiItem.panel.id);\n\t\t\tif (uiItem.panel.uiItems) {\n\t\t\t\tfor (const panelUiItem of uiItem.panel.uiItems) {\n\t\t\t\t\tparseUiItem(panelTree, panelUiItem, uiItem.panel.id);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n\tcase ItemType.CONTROL: {\n\t\tpanelTree[currentPanel].controls.push(uiItem.control.name);\n\t\t// a control item may have an action ref associated with it.\n\t\tif (uiItem.control.action) {\n\t\t\tpanelTree[currentPanel].actions.push(uiItem.control.action.name);\n\t\t}\n\t\t// This is a special case for the radio button set which has panels\n\t\t// inserted after each radio button. Those panels are provided in the\n\t\t// additionalItems array which is an array of EditorTab objects.\n\t\tif (uiItem.control.additionalItems) {\n\t\t\tfor (const editorTab of uiItem.control.additionalItems) {\n\t\t\t\tparseUiItem(panelTree, editorTab.content, currentPanel);\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n\tcase ItemType.PANEL_SELECTOR: {\n\t\tpanelTree[currentPanel].panels.push(uiItem.id);\n\t\t_newPanelTreeObject(panelTree, uiItem.id);\n\t\tif (uiItem.dependsOn) {\n\t\t\tpanelTree[uiItem.id].controls.push(uiItem.dependsOn);\n\t\t}\n\t\tif (uiItem.tabs) {\n\t\t\tfor (const tab of uiItem.tabs) {\n\t\t\t\tparseUiItem(panelTree, tab.content, uiItem.id);\n\t\t\t}\n\t\t}\n\n\t\tbreak;\n\t}\n\n\tcase ItemType.ACTION:\n\t{\n\t\tpanelTree[currentPanel].actions.push(uiItem.action.name);\n\t\tbreak;\n\t}\n\tcase ItemType.STATIC_TEXT:\n\tcase ItemType.HORIZONTAL_SEPARATOR: {\n\t\tbreak;\n\t}\n\tdefault:\n\t\tlogger.warn(\"Unknown UiItem type when parsing ui conditions: \" + uiItem.itemType);\n\t\tbreak;\n\t}\n}\n\nfunction _newPanelTreeObject(panelTree, panelId) {\n\tif (has(panelTree, panelId)) {\n\t\tlogger.warn(\"Duplicate panel ids, each panel id must be unique. Panel id = \" + panelId);\n\t}\n\tpanelTree[panelId] = { controls: [], panels: [], actions: [] };\n}\n\nexport { parseUiContent };\n","var baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n baseUniq = require('./_baseUniq'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n last = require('./last');\n\n/**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\nvar unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n});\n\nmodule.exports = unionWith;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\nfunction baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseIntersection;\n","var isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\nfunction castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n}\n\nmodule.exports = castArrayLikeObject;\n","var arrayMap = require('./_arrayMap'),\n baseIntersection = require('./_baseIntersection'),\n baseRest = require('./_baseRest'),\n castArrayLikeObject = require('./_castArrayLikeObject'),\n last = require('./last');\n\n/**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\nvar intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n});\n\nmodule.exports = intersectionWith;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint max-depth: [\"error\", 7] */\n\nimport logger from \"./../../../utils/logger\";\nimport { cloneDeep, intersectionWith, unionWith, isEqual } from \"lodash\";\n\n/**\n* @param {Object} definition Condition definition\n* @param {Any} userInput Contains the control value entered by the user\n* @param {Object} fields Optional datasetMetadata fields\n* @param {Object} cellCoordinates Cell coordinates for tables\n*/\n\nfunction validateInput(definition, propertyId, controller) {\n\tconst data = definition;\n\tif (data.validation) {\n\t\treturn validation(data.validation, propertyId, controller);\n\t} else if (data.enabled) {\n\t\treturn enabled(data.enabled, propertyId, controller);\n\t} else if (data.visible) {\n\t\treturn visible(data.visible, propertyId, controller);\n\t} else if (data.enum_filter) {\n\t\treturn filteredEnum(data.enum_filter, propertyId, controller);\n\t} else if (data.allow_change) {\n\t\treturn allowChange(data.allow_change, propertyId, controller);\n\t} else if (data.default_value) {\n\t\treturn conditionalDefault(data.default_value, propertyId, controller);\n\t}\n\tthrow new Error(\"Invalid user input validation definition schema\");\n}\n\n/**\n * A single validation. The fail_message is displayed upon validation failure.\n * @param {Object} validationData contains an object that adheres to the validation_definition\n * @param {Any} userInput Contains the control value entered by the user\n * @param {Object} info optional dataset fields and cell coordinates info\n * @return {boolean} true if valid, failMessage {Object} if false.\n */\nfunction validation(data, propertyId, controller) {\n\tif (data.fail_message && data.evaluate) {\n\t\tconst evaluateData = data.evaluate;\n\t\tevaluateData.isValidation = true;\n\t\tconst result = evaluate(evaluateData, propertyId, controller);\n\t\tif (typeof result === \"object\") {\n\t\t\treturn result;\n\t\t}\n\t\treturn result || failedMessage(data.fail_message);\n\t}\n\tthrow new Error(\"Invalid validation schema\");\n}\n\n/**\n * Enablement test. Disables controls if evaluate is false.\n * @param {Object} enabledData contains an object that adheres to the enabled_definition\n * @return {boolean} true if valid.\n */\nfunction enabled(data, propertyId, controller) {\n\tif ((data.parameter_refs || data.group_refs || data.action_refs) && data.evaluate) {\n\t\treturn evaluate(data.evaluate, propertyId, controller);\n\t}\n\tthrow new Error(\"Invalid enabled schema\");\n}\n\n/**\n * Visibility test. Hides controls if evaluate is false.\n * @param {Object} data contains an object that adheres to the visible_definition\n * @return {boolean} true if valid.\n */\nfunction visible(data, propertyId, controller) {\n\tif ((data.parameter_refs || data.group_refs || data.action_refs) && data.evaluate) {\n\t\treturn evaluate(data.evaluate, propertyId, controller);\n\t}\n\tthrow new Error(\"Invalid visible schema\");\n}\n\n/**\n * Filters fields based on conditions.\n *\n * @param propertyId Id of the control being filtered\n * @param filterDef A filter definition for this item\n * @param controller Properties controller\n * @param fields Fields to filter\n * @return Array of filtered fields\n */\nfunction filter(propertyId, filterDef, controller, fields) {\n\tif (filterDef && filterDef.filter && filterDef.filter.evaluate) {\n\t\treturn evaluateFilter(propertyId, filterDef.filter, filterDef.filter.evaluate, controller, fields);\n\t}\n\treturn fields;\n}\n\nfunction filteredEnum(data, propertyId, controller) {\n\tif (data.target && data.evaluate) {\n\t\treturn evaluate(data.evaluate, propertyId, controller);\n\t}\n\tthrow new Error(\"Invalid filteredEnum schema\");\n}\n\nfunction allowChange(data, propertyId, controller) {\n\tif ((data.parameter_refs || data.group_refs) && data.evaluate) {\n\t\treturn evaluate(data.evaluate, propertyId, controller);\n\t}\n\tthrow new Error(\"Invalid allow change schema\");\n}\n\n/**\n * Set default value for a field if conditions evaluate to true.\n *\n * @param data conditional default definition\n * @param propertyId Id of the control\n * @param controller Properties controller\n * @return {boolean} true if conditions are met.\n */\nfunction conditionalDefault(data, propertyId, controller) {\n\tif (data.parameter_ref && data.value && data.evaluate) {\n\t\treturn evaluate(data.evaluate, propertyId, controller);\n\t}\n\tthrow new Error(\"Invalid conditional default schema\");\n}\n\n/**\n * Evaluate Definition\n */\nfunction evaluate(data, propertyId, controller) {\n\tif (data.or) {\n\t\treturn or(data.or, propertyId, controller);\n\t} else if (data.and) {\n\t\treturn and(data.and, propertyId, controller);\n\t} else if (data.condition) { // condition\n\t\treturn condition(data.condition, propertyId, controller, data.isValidation);\n\t}\n\tthrow new Error(\"Failed to parse definition\");\n}\n\n/**\n * Evaluate Definition.\n */\nfunction evaluateFilter(propertyId, filterItem, conditionItem, controller, fields) {\n\tif (conditionItem.or) {\n\t\treturn orFilter(propertyId, filterItem, conditionItem.or, controller, fields);\n\t} else if (conditionItem.and) {\n\t\treturn andFilter(propertyId, filterItem, conditionItem.and, controller, fields);\n\t} else if (conditionItem.condition) { // condition\n\t\treturn conditionFilter(propertyId, filterItem, conditionItem.condition, controller, fields);\n\t}\n\tthrow new Error(\"Failed to parse filter definition\");\n}\n\n/**\n * The 'or' condition. Any sub-condition evaluates to true.\n * Can nest any number of additional conditional types.\n * @param {Object} data an array of items\n * @param {string} userInput User-entered value to evaluate\n * @param {Object} info optional dataset fields and cell coordinates info\n * @return {boolean}\n */\nfunction or(data, propertyId, controller) {\n\tfor (let i = 0; i < data.length; i++) {\n\t\tconst evaluated = evaluate(data[i], propertyId, controller);\n\t\tif (evaluated === true) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction orFilter(propertyId, filterItem, conditionItems, controller, inFields) {\n\tlet fields = [];\n\tfor (const item of conditionItems) {\n\t\tconst newFields = evaluateFilter(propertyId, filterItem, item, controller, inFields);\n\t\tfields = unionWith(fields, newFields, isEqual);\n\t}\n\treturn fields;\n}\n\n/**\n * The 'and' condition. All sub-conditions evaluate to true.\n * Can nest any number of additional conditional types.\n * @param {Object} data an array of items\n * @param {string} userInput User-entered value to evaluate\n * @param {Object} info optional dataset fields and cell coordinates info\n * @return {boolean}\n */\nfunction and(data, propertyId, controller) {\n\tfor (let i = 0; i < data.length; i++) {\n\t\tconst evaluated = evaluate(data[i], propertyId, controller);\n\t\tif (evaluated === false) {\n\t\t\treturn false;\n\t\t} else if (typeof evaluated === \"object\") {\n\t\t\treturn evaluated;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction andFilter(propertyId, filterItem, conditionItems, controller, inFields) {\n\tlet fields = cloneDeep(inFields);\n\tfor (const item of conditionItems) {\n\t\tconst newFields = evaluateFilter(propertyId, filterItem, item, controller, fields);\n\t\tfields = intersectionWith(fields, newFields, isEqual);\n\t}\n\treturn fields;\n}\n\n/**\n * A parameter condition. Evaluates to true or false.\n * @param {Object} data.op A single operator for the properties of the condition.\n * @param {Object} data.parameter_ref required parameter the condition checks for\n * @param {Object} data.parameter_2_ref optional parameter the condition checks for\n * @param {Object} data.value optional value the condition checks for\n * @param {Object} info optional dataset fields and cell coordinates info\n * @param {boolean} isValidation optional parameter used to determine type of condition\n * @return {boolean} true if the parameter(s) satisfy the condition\n */\nfunction condition(data, propertyId, controller, isValidation) {\n\tconst op = data.op;\n\tconst param = data.parameter_ref;\n\tconst param2 = data.parameter_2_ref;\n\tconst value = data.value;\n\n\t// get configuration options to determine how properties values are handled in condition logic\n\t// get actual value for input validation (isValidation)\n\tconst options = {};\n\tconst propertiesConfig = controller.getPropertiesConfig();\n\tif (!isValidation && propertiesConfig.conditionDisabledPropertyHandling === \"null\") {\n\t\toptions.filterDisabled = true;\n\t}\n\tif (!isValidation && propertiesConfig.conditionHiddenPropertyHandling === \"null\") {\n\t\toptions.filterHidden = true;\n\t}\n\n\tconst paramInfo = { param: param, id: _getPropertyIdFromParam(propertyId, param) };\n\n\tparamInfo.value = controller.getPropertyValue(paramInfo.id, options, null);\n\tparamInfo.control = controller.getControl(paramInfo.id);\n\n\tif (typeof paramInfo.control === \"undefined\") {\n\t\tlogger.warn(\"Control not found when validating condition for \" + param);\n\t}\n\n\tlet param2Info;\n\n\tif (typeof param2 !== \"undefined\") {\n\t\tparam2Info = {\n\t\t\tparam: param2,\n\t\t\tid: _getPropertyIdFromParam(propertyId, param2),\n\t\t};\n\t\tparam2Info.value = controller.getPropertyValue(param2Info.id, options, null);\n\t\tparam2Info.control = controller.getControl(param2Info.id);\n\t}\n\tconst operation = controller.getConditionOp(op);\n\tif (operation) {\n\t\treturn operation(paramInfo, param2Info, value, controller);\n\t}\n\tlogger.warn(\"Ignoring unknown condition operation '\" + op + \"' for parameter_ref \" + param);\n\treturn true;\n}\n\n/**\n * A filter parameter condition. Evaluates to an array of field names.\n *\n * @param {Object} propertyId Id of the property being operated upon\n * @param {Object} filterItem Top level filter entry for the property\n * @param {Object} conditionItem A single condition to evaluate\n * @param {Object} controller The properties controller\n * @param {Object} fields Array of fields to filter\n * @return {Object} Array of filtered field names\n */\nfunction conditionFilter(propertyId, filterItem, conditionItem, controller, fields) {\n\tconst op = conditionItem.op;\n\tconst values = [];\n\tif (typeof conditionItem.value !== \"undefined\" && conditionItem.value !== null) {\n\t\tvalues.push(conditionItem.value);\n\t} else if (Array.isArray(conditionItem.values)) {\n\t\tvalues.push(...conditionItem.values); // add all values into array\n\t}\n\tswitch (op) {\n\tcase \"dmMeasurement\":\n\t\treturn _handleDmMeasurement(fields, values);\n\tcase \"dmType\":\n\t\treturn _handleDmType(fields, values);\n\tcase \"dmModelingRole\":\n\t\treturn _handleDmModelingRole(fields, values);\n\tcase \"dmSharedFields\":\n\t\treturn _handleSharedFields(propertyId, filterItem, controller, fields);\n\tdefault: {\n\t\tconst operation = controller.getConditionOp(op);\n\t\tif (operation && propertyId.name === filterItem.parameter_ref) { // Custom filter condition\n\t\t\treturn operation(propertyId, conditionItem, controller, fields);\n\t\t}\n\t\tlogger.warn(\"Ignoring unknown condition operation '\" + op + \"'\");\n\t\treturn fields;\n\t}\n\t}\n}\n\nfunction _handleDmMeasurement(inFields, measurementValues) {\n\tlet fields = cloneDeep(inFields);\n\tif (fields) {\n\t\tfields = fields.filter(function(field) {\n\t\t\tfor (const measurementValue of measurementValues) {\n\t\t\t\tif (field.metadata && field.metadata.measure === measurementValue) {\n\t\t\t\t\t// return true of any value meets condition\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n\treturn fields;\n}\n\nfunction _handleDmType(inFields, typeValues) {\n\tlet fields = cloneDeep(inFields);\n\tif (fields) {\n\t\tfields = fields.filter(function(field) {\n\t\t\tfor (const typeValue of typeValues) {\n\t\t\t\tif (field.type === typeValue) {\n\t\t\t\t\t// return true of any value meets condition\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n\treturn fields;\n}\n\nfunction _handleDmModelingRole(inFields, roleValues) {\n\tlet fields = cloneDeep(inFields);\n\tif (fields) {\n\t\tfields = fields.filter(function(field) {\n\t\t\tfor (const roleValue of roleValues) {\n\t\t\t\tif (field.metadata && field.metadata.modeling_role === roleValue) {\n\t\t\t\t\t// return true of any value meets condition\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n\treturn fields;\n}\n\nfunction _handleSharedFields(propertyId, filterItem, controller, fields) {\n\tlet returnFields = fields;\n\tif (filterItem.parameter_refs) {\n\t\treturnFields = controller.filterFieldsFromSharedProps(fields, filterItem.parameter_refs, propertyId.name);\n\t}\n\treturn returnFields;\n}\n\n/**\n *\n * @param {Object} failed message object with \"focus_parameter_ref\" and \"message\"\n * @return {String} failed message\n */\nfunction failedMessage(failedErrorMessage) {\n\tif (failedErrorMessage.focus_parameter_ref && failedErrorMessage.message) {\n\t\treturn {\n\t\t\t\"text\": failedErrorMessage.message.default,\n\t\t\t\"type\": failedErrorMessage.type\n\t\t};\n\t}\n\treturn \"Failed to parse failedMessage\";\n}\n\nfunction _getPropertyIdFromParam(propertyId, param) {\n\tlet paramPropertyID = {};\n\tconst offset = param.indexOf(\"[\");\n\tif (offset > -1) {\n\t\tparamPropertyID = cloneDeep(propertyId);\n\t\tparamPropertyID.name = param.substring(0, offset);\n\t\tparamPropertyID.col = _getColumnNumber(param);\n\t} else {\n\t\tparamPropertyID.name = param;\n\t}\n\treturn paramPropertyID;\n}\n\n// returns -1 if no column specified in parameter\nfunction _getColumnNumber(param) {\n\tconst startCol = param.indexOf(\"[\");\n\tif (startCol > -1) {\n\t\tconst endCol = param.indexOf(\"]\");\n\t\tif (endCol > -1) {\n\t\t\treturn parseInt(param.substring(startCol + 1, endCol), 10);\n\t\t}\n\t\treturn -1;\n\t}\n\treturn -1;\n}\n\nexport {\n\tvalidateInput,\n\tfilter\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*\teslint max-depth: [\"error\", 10]*/\n\nimport logger from \"../../../utils/logger\";\nimport * as UiConditions from \"./ui-conditions\";\nimport { formatMessage } from \"../util/property-utils\";\nimport { DEFAULT_VALIDATION_MESSAGE, STATES, PANEL_TREE_ROOT,\n\tCONDITION_TYPE, CONDITION_DEFINITION_INDEX,\n\tMESSAGE_KEYS\n} from \"../constants/constants\";\nimport { isEmpty, cloneDeep, has, union, isEqual } from \"lodash\";\nimport seedrandom from \"seedrandom\";\nimport { getDateTimeFormat } from \"../util/control-utils\";\n\n\n// ========= APIs ==================\n// ========= Validate all properties\n\n/**\n* This function will get all controls and validate each properties value.\n*\n* @param {object} properties controller. required\n* @param {boolean} showErrors. optional. Set to false to run conditions without displaying errors in the UI\n*/\nfunction validatePropertiesValues(controller, showErrors = true) {\n\tconst controls = controller.getControls();\n\tvalidatePropertiesListValues(controller, controls, showErrors);\n}\n\n/**\n* This function will get all controls and validate each one for visible,\n* enables and filteredEnum.\n*\n* @param {object} properties controller. required\n*/\nfunction validatePropertiesConditions(controller) {\n\tconst newStates = {\n\t\tcontrols: controller.getControlStates(),\n\t\tpanels: controller.getPanelStates(),\n\t\tactions: controller.getActionStates()\n\t};\n\n\tconst controls = controller.getControls();\n\tvalidatePropertiesListConditions(controller, controls, newStates);\n\t// propagate parent panel states\n\t_propagateParentPanelStates(controller.panelTree, newStates, PANEL_TREE_ROOT);\n\n\t// get property values before any states have been updated\n\tconst prevPropertyValues = _getConditionPropertyValues(controller);\n\n\tcontroller.setControlStates(newStates.controls);\n\tcontroller.setPanelStates(newStates.panels);\n\tcontroller.setActionStates(newStates.actions);\n\t// get property values before any states have been updated\n\tconst newPropertyValues = _getConditionPropertyValues(controller);\n\t// compared values to see if any values change based on state updates\n\tconst updatedPropertyIds = _comparePropertyValues(prevPropertyValues, newPropertyValues);\n\tfor (const updatePropertyId of updatedPropertyIds) {\n\t\tvalidateConditions(updatePropertyId, controller, 1);\n\t}\n}\n\n// ========= Validate a list of properties\n\n/**\n* This function will take a list of controls or properties names\n* and validate each properties value.\n*\n* @param {object} properties controller. required\n* @param {object} list of control objects or properties. required\n* @param {boolean} showErrors. optional. Set to false to run conditions without displaying errors in the UI\n*/\nfunction validatePropertiesListValues(controller, controls, showErrors) {\n\tif (Object.keys(controls).length > 0) {\n\t\tfor (const controlKey in controls) {\n\t\t\tif (!has(controls, controlKey)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst control = controls[controlKey];\n\t\t\t// control is a subcontrol\n\t\t\tif (control.parameterName) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst propertyId = control.name ? { name: control.name } : { name: control };\n\t\t\tvalidateInput(propertyId, controller, showErrors);\n\t\t}\n\t}\n}\n\n/**\n* This function will take a list of controls or properties names\n* and validate each properties for visible, enabled or filteredEnum.\n*\n* @param {object} properties controller. required\n* @param {object} list of control objects or properties. required\n* @param {object} list of states for controls and panels. required\n*/\nfunction validatePropertiesListConditions(controller, controls, newStates) {\n\tif (Object.keys(controls).length > 0) {\n\t\tfor (const controlKey in controls) {\n\t\t\tif (!has(controls, controlKey)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst control = controls[controlKey];\n\t\t\t// control is a subcontrol\n\t\t\tif (control.parameterName) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst propertyId = control.name ? { name: control.name } : { name: control };\n\t\t\tconst controlValue = controller.getPropertyValue(propertyId);\n\t\t\tif (control.subControls) {\n\t\t\t\tif (control.valueDef.isList || control.valueDef.isMap) {\n\t\t\t\t\t// validate the table as a whole\n\t\t\t\t\t_validateConditionsByType(propertyId, newStates, controller);\n\t\t\t\t\t// validate each cell\n\t\t\t\t\tif (Array.isArray(controlValue)) {\n\t\t\t\t\t\tfor (let rowIndex = 0; rowIndex < controlValue.length; rowIndex++) {\n\t\t\t\t\t\t\tfor (let colIndex = 0; colIndex < control.subControls.length; colIndex++) {\n\t\t\t\t\t\t\t\tpropertyId.row = rowIndex;\n\t\t\t\t\t\t\t\tpropertyId.col = colIndex;\n\t\t\t\t\t\t\t\t_validateConditionsByType(propertyId, newStates, controller);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// An 'unrolled' structure not within a table\n\t\t\t\t\tconst subPropId = {\n\t\t\t\t\t\tname: propertyId.name\n\t\t\t\t\t};\n\t\t\t\t\tfor (let colIndex = 0; colIndex < control.subControls.length; colIndex++) {\n\t\t\t\t\t\tsubPropId.col = colIndex;\n\t\t\t\t\t\t_validateConditionsByType(subPropId, newStates, controller);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t_validateConditionsByType(propertyId, newStates, controller);\n\t\t\t}\n\t\t}\n\t}\n}\n\n// ========= Validate a single property\n\n/**\n* This function will validate a single properties value.\n* If the propertyId is a table it will also validate each cell in the table\n*\n* @param {object} propertyId. required\n* @param {object} properties controller. required\n* @param {boolean} showErrors. optional. Set to false to run conditions without displaying errors in the UI\n*/\nfunction validateInput(inPropertyId, controller, showErrors = true) {\n\tconst control = controller.getControl(inPropertyId);\n\tif (!control) {\n\t\tlogger.warn(\"Control not found for \" + inPropertyId.name);\n\t\treturn;\n\t}\n\tconst propertyId = cloneDeep(inPropertyId);\n\tconst controlValue = controller.getPropertyValue(propertyId);\n\tif (Array.isArray(controlValue)) {\n\t// validate the table as a whole\n\t\t_validateInput(propertyId, controller, control, showErrors);\n\t\t// validate each cell\n\t\tif (control.subControls) {\n\t\t\tif (control.valueDef.isList || control.valueDef.isMap) {\n\t\t\t\t// Handle tables\n\t\t\t\tfor (let rowIndex = 0; rowIndex < controlValue.length; rowIndex++) {\n\t\t\t\t\tfor (let colIndex = 0; colIndex < control.subControls.length; colIndex++) {\n\t\t\t\t\t\tpropertyId.row = rowIndex;\n\t\t\t\t\t\tpropertyId.col = colIndex;\n\t\t\t\t\t\t_validateInput(propertyId, controller, control.subControls[colIndex], showErrors);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Handle 'unrolled' structs outside of tables\n\t\t\t\tfor (let colIndex = 0; colIndex < control.subControls.length; colIndex++) {\n\t\t\t\t\tconst subPropId = {\n\t\t\t\t\t\tname: inPropertyId.name,\n\t\t\t\t\t\tcol: colIndex\n\t\t\t\t\t};\n\t\t\t\t\t_validateInput(subPropId, controller, control.subControls[colIndex], showErrors);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof propertyId.row === \"undefined\") { // validate each row in array for controls that are not within a table.\n\t\t\tfor (let rowIndex = 0; rowIndex < controlValue.length; rowIndex++) {\n\t\t\t\tpropertyId.row = rowIndex;\n\t\t\t\tpropertyId.col = 0;\n\t\t\t\t_validateInput(propertyId, controller, control, showErrors);\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\t_validateInput(propertyId, controller, control, showErrors);\n\t}\n}\n\n/**\n* This function will validate a single properties for visible, enabled and\n* filteredEnum.\n*\n* @param {object} propertyId. required\n* @param {object} properties controller. required\n* @param {int} runCount. Used to prevent an infinite loop of rerun conditions\n*/\nfunction validateConditions(inPropertyId, controller, runCount = 0) {\n\tconst control = controller.getControl(inPropertyId);\n\tif (!control) {\n\t\tlogger.warn(\"Control not found for \" + inPropertyId.name);\n\t\treturn;\n\t}\n\tconst newStates = {\n\t\tcontrols: controller.getControlStates(),\n\t\tpanels: controller.getPanelStates(),\n\t\tactions: controller.getActionStates()\n\t};\n\tconst propertyId = cloneDeep(inPropertyId);\n\tconst controlValue = controller.getPropertyValue(propertyId);\n\tif (Array.isArray(controlValue) && control.subControls) {\n\t\tif (!(control.valueDef.isList || control.valueDef.isMap)) {\n\t\t\t// An unrolled structure on a panel (e.g. not a row in a table)\n\t\t\tfor (let colIndex = 0; colIndex < control.subControls.length; colIndex++) {\n\t\t\t\tpropertyId.col = colIndex;\n\t\t\t\t_validateConditionsByType(propertyId, newStates, controller);\n\t\t\t}\n\t\t} else {\n\t\t\t// validate the table as a whole\n\t\t\t_validateConditionsByType(propertyId, newStates, controller);\n\t\t\t// validate each cell\n\t\t\tfor (let rowIndex = 0; rowIndex < controlValue.length; rowIndex++) {\n\t\t\t\tfor (let colIndex = 0; colIndex < control.subControls.length; colIndex++) {\n\t\t\t\t\tpropertyId.row = rowIndex;\n\t\t\t\t\tpropertyId.col = colIndex;\n\t\t\t\t\t_validateConditionsByType(propertyId, newStates, controller);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\t_validateConditionsByType(propertyId, newStates, controller);\n\t}\n\t// get property values before any states have been updated\n\tconst prevPropertyValues = _getConditionPropertyValues(controller);\n\n\tcontroller.setControlStates(newStates.controls);\n\tcontroller.setPanelStates(newStates.panels);\n\tcontroller.setActionStates(newStates.actions);\n\n\t// get property values before any states have been updated\n\tconst newPropertyValues = _getConditionPropertyValues(controller);\n\t// compared values to see if any values change based on state updates\n\tconst updatedPropertyIds = _comparePropertyValues(prevPropertyValues, newPropertyValues, runCount);\n\t// rerun validation on controls where value changes based on state updates\n\tfor (const updatePropertyId of updatedPropertyIds) {\n\t\tvalidateConditions(updatePropertyId, controller, runCount + 1);\n\t}\n\tif (runCount > 0) {\n\t\t// need to make sure all children of panels get correct states after rerun\n\t\t_propagateParentPanelStates(controller.panelTree, newStates, PANEL_TREE_ROOT);\n\t}\n}\n\nfunction _comparePropertyValues(prevPropertyValues, newPropertyValues, runCount) {\n\tconst updatePropertyIds = [];\n\tif (runCount > 10) { // stop at top reruns. After this it's most likely an infinite loop\n\t\tlogger.warn(\"More than 10 iteration of processing conditions found. Check your conditions for loops. Updated properties: \" + JSON.stringify(newPropertyValues));\n\t\treturn [];\n\t}\n\tconst keys = union(Object.keys(prevPropertyValues), Object.keys(newPropertyValues));\n\tfor (const key of keys) {\n\t\tconst prevPropertyValue = prevPropertyValues[key];\n\t\tconst newPropertyValue = newPropertyValues[key];\n\t\tif (!isEqual(prevPropertyValue, newPropertyValue)) {\n\t\t\tupdatePropertyIds.push({ name: key });\n\t\t}\n\t}\n\treturn updatePropertyIds;\n}\n\nfunction _getConditionPropertyValues(controller) {\n\tconst propertiesConfig = controller.getPropertiesConfig();\n\tconst options = {};\n\tif (propertiesConfig.conditionDisabledPropertyHandling === \"null\") {\n\t\toptions.filterDisabled = true;\n\t}\n\tif (propertiesConfig.conditionHiddenPropertyHandling === \"null\") {\n\t\toptions.filterHidden = true;\n\t}\n\tif (isEmpty(options)) {\n\t\treturn {};\n\t}\n\treturn controller.getPropertyValues(options);\n}\n\n/**\n* This function will validate a single properties for allow_change.\n*\n* @param {object} propertyId. required\n* @param {object} properties controller. required\n*/\nfunction allowConditions(inPropertyId, controller) {\n\tlet result = true;\n\tconst control = controller.getControl(inPropertyId);\n\tif (!control) {\n\t\tlogger.warn(\"Control not found for \" + inPropertyId.name);\n\t\treturn result;\n\t}\n\tconst allowValidations = controller.getDefinitions(inPropertyId, CONDITION_TYPE.ALLOWCHANGE, CONDITION_DEFINITION_INDEX.CONTROLS);\n\tif (allowValidations.length > 0) {\n\t\ttry {\n\t\t\tfor (const validation of allowValidations) {\n\t\t\t\tresult = UiConditions.validateInput(validation.definition, inPropertyId, controller);\n\t\t\t\tif (!result) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error thrown in validation: \" + error);\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n* Set default value for a field if conditions evaluate to true.\n* This function sets parameter_ref and default value in conditionalDefaultValues object using pass-by-reference.\n* Return value is never used anywhere. Calling function works on the updated conditionalDefaultValues object.\n*\n* @param {object} propertyId. required\n* @param {object} properties controller. required\n* @param {object} conditionalDefaultValues. required\n*/\nfunction setConditionalDefaultValue(inPropertyId, controller, conditionalDefaultValues) {\n\tconst control = controller.getControl(inPropertyId);\n\tif (!control) {\n\t\tlogger.warn(\"Control not found for \" + inPropertyId.name);\n\t\treturn null;\n\t}\n\tconst validations = controller.getDefinitions(inPropertyId, CONDITION_TYPE.CONDITIONALDEFAULT, CONDITION_DEFINITION_INDEX.CONTROLS);\n\tif (validations.length > 0) {\n\t\ttry {\n\t\t\tfor (const validation of validations) {\n\t\t\t\tconst parameterRef = validation.definition.default_value.parameter_ref;\n\t\t\t\t// For a given parameter_ref, only the first default_value condition is used.\n\t\t\t\tif (!(parameterRef in conditionalDefaultValues)) {\n\t\t\t\t\tconst result = UiConditions.validateInput(validation.definition, inPropertyId, controller);\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\t// Condition evaluate to true\n\t\t\t\t\t\tconditionalDefaultValues[parameterRef] = validation.definition.default_value.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error thrown in validation: \" + error);\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n* Filters the datamodel fields for the given parameter.\n*\n* @param {object} propertyId. required\n* @param {object} list of filter definitions. required.\n* @param {object} properties controller. required\n* @param {object} list of fields to filter. required\n* @return {object} list of filtered fields\n*/\nfunction filterConditions(propertyId, filterDefinitions, controller, fields) {\n\t// Check each definition\n\tlet returnFields = fields;\n\tif (filterDefinitions && Array.isArray(filterDefinitions[propertyId.name])) {\n\t\ttry {\n\t\t\tconst defs = filterDefinitions[propertyId.name];\n\t\t\tfor (let i = 0; i < defs.length; i++) {\n\t\t\t\treturnFields = UiConditions.filter(propertyId, filterDefinitions[propertyId.name][i].definition, controller, returnFields);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error thrown in filter for propertyId (\" + propertyId.name + \"): \" + error);\n\t\t}\n\t}\n\treturn returnFields;\n}\n\n// ========= miscellanious APIs\n\n/**\n* Takes an array of panel IDs and updates the states of the children of\n* the panels identified by those IDs to be the same as the states of the panels.\n*/\nfunction updatePanelChildrenStatesForPanelIds(panelIds, controller) {\n\tconst newStates = {\n\t\tcontrols: controller.getControlStates(),\n\t\tpanels: controller.getPanelStates(),\n\t\tactions: controller.getActionStates()\n\t};\n\n\tfor (let i = 0; i < panelIds.length; i++) {\n\t\tconst state = controller.getPanelState({ \"name\": panelIds[i] });\n\t\t_updatePanelChildrenState(newStates, { \"name\": panelIds[i] }, state, controller);\n\t}\n\n\tcontroller.setControlStates(newStates.controls);\n\tcontroller.setPanelStates(newStates.panels);\n\tcontroller.setActionStates(newStates.actions);\n\n}\n\n/**\n* Update the stated of a property\n*\n* @param {object} a list of controls and panels states. This will be modified to contain\n* the updated state. required.\n* @param {object} propertyId. required.\n* @param {string} proposed new state value. required.\n*/\nfunction updateState(refState, propertyId, value, controller) {\n\tlet propState = refState[propertyId.name];\n\tif (!propState) {\n\t\tpropState = {};\n\t}\n\tconst newPropState = Object.assign({}, propState);\n\tconst topLevelId = typeof propertyId.row === \"undefined\" && typeof propertyId.col === \"undefined\";\n\tif (topLevelId && newPropState.value === STATES.HIDDEN && (value === STATES.DISABLED || value === STATES.ENABLED)) {\n\t\tnewPropState.value = STATES.HIDDEN;\n\t} else {\n\t\tnewPropState.value = value;\n\t}\n\n\t// First allow for table level state, then column level state, and finally cell level state\n\tif (typeof propertyId.col !== \"undefined\") {\n\t\tconst colId = propertyId.col.toString();\n\t\tif (!propState[colId]) {\n\t\t\tpropState[colId] = {};\n\t\t}\n\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\tconst rowId = propertyId.row.toString();\n\t\t\tif (!propState[colId][rowId]) {\n\t\t\t\tpropState[colId][rowId] = {};\n\t\t\t}\n\t\t\t// Table cell level\n\t\t\tpropState[colId][rowId].value = newPropState.value;\n\t\t} else {\n\t\t\t// Table column level\n\t\t\tpropState[colId].value = newPropState.value;\n\t\t\t// if all cells are \"hidden\", hide an entire column\n\t\t\tconst hideColumn = (value === \"hidden\");\n\t\t\tconst updateColumnVisibility = controller.getColumnVisibility(propertyId, propertyId.col) !== !hideColumn;\n\t\t\tif (typeof controller !== \"undefined\" && updateColumnVisibility) {\n\t\t\t\tcontroller.toggleColumnVisibility(propertyId, propertyId.col, !hideColumn);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// Control level\n\t\tpropState.value = newPropState.value;\n\t}\n\trefState[propertyId.name] = propState;\n}\n\n/**\n* Update the state of a value in an enumeration property.\n*\n* @param {object} a list of controls and panels states. This will be modified to contain\n* the updated state. required.\n* @param {object} propertyId. required.\n* @param {string} enumValue The enumeration value to operate upon. required.\n* @param {string} proposed new state value. required.\n*/\nfunction updateEnumerationState(refState, propertyId, enumValue, value) {\n\tlet propState = refState[propertyId.name];\n\tif (!propState) {\n\t\tpropState = {};\n\t}\n\tif (!propState.values) {\n\t\tpropState.values = {};\n\t}\n\tif (!propState.values[enumValue]) {\n\t\tpropState.values[enumValue] = {};\n\t}\n\tconst newPropState = Object.assign({}, propState);\n\tconst topLevelId = typeof propertyId.row === \"undefined\" && typeof propertyId.col === \"undefined\";\n\tif (topLevelId && newPropState.values[enumValue].value === STATES.HIDDEN && (value === STATES.DISABLED || value === STATES.ENABLED)) {\n\t\tnewPropState.values[enumValue].value = STATES.HIDDEN;\n\t} else {\n\t\tnewPropState.values[enumValue].value = value;\n\t}\n\n\t// First allow for table level state, then column level state, and finally cell level state\n\tif (typeof propertyId.col !== \"undefined\") {\n\t\tconst colId = propertyId.col.toString();\n\t\tif (!propState[colId]) {\n\t\t\tpropState[colId] = {};\n\t\t}\n\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\tconst rowId = propertyId.row.toString();\n\t\t\tif (!propState[colId][rowId]) {\n\t\t\t\tpropState[colId][rowId] = {};\n\t\t\t}\n\t\t\tif (!propState[colId][rowId].values) {\n\t\t\t\tpropState[colId][rowId].values = {};\n\t\t\t}\n\t\t\tif (!propState[colId][rowId].values[enumValue]) {\n\t\t\t\tpropState[colId][rowId].values[enumValue] = {};\n\t\t\t}\n\t\t\t// Table cell level\n\t\t\tpropState[colId][rowId].values[enumValue].value = newPropState.values[enumValue].value;\n\t\t} else {\n\t\t\t// Table column level\n\t\t\tif (!propState[colId].values) {\n\t\t\t\tpropState[colId].values = {};\n\t\t\t}\n\t\t\tif (!propState[colId].values[enumValue]) {\n\t\t\t\tpropState[colId].values[enumValue] = {};\n\t\t\t}\n\t\t\tpropState[colId].values[enumValue].value = newPropState.values[enumValue].value;\n\t\t}\n\t} else {\n\t\t// Control level\n\t\tpropState.values[enumValue] = newPropState.values[enumValue];\n\t}\n\trefState[propertyId.name] = propState;\n}\n\n/**\n* Generate a propertyId from a parameter_ref. The new propertyId will include the row\n* value from the control propertyId. If the controlPropertyId is a member of an\n* unrolled structure, that propertyId will be returned.\n*\n* @param {string} parameter_ref value. required.\n* @param {object} control propertyId. optional.\n* @return {object} generated propertyId.\n*/\nfunction getParamRefPropertyId(paramRef, controlPropertyId) {\n\tconst baseParam = {\n\t\tname: paramRef\n\t};\n\tconst offset = paramRef.indexOf(\"[\");\n\tif (offset > -1) {\n\t\tbaseParam.name = paramRef.substring(0, offset);\n\t\tbaseParam.col = parseInt(paramRef.substring(offset + 1, paramRef.indexOf(\"]\")), 10);\n\t}\n\tif (controlPropertyId) {\n\t\tbaseParam.row = controlPropertyId.row;\n\t}\n\treturn baseParam;\n}\n\n/**\n* This function will inject validation definitions for controls with the following attributes.\n* Required: validation definition to ensure that the required parameter is not is not empty.\n* Date format: validation definition to ensure parameter has a proper date format.\n* Time format: validation definition to ensure parameter has a propert time format.\n*\n* @param {object} a list of control objects. required.\n* @param {object} a list of validation definition objects. required.\n* @return {object} a modified validation defintion object with any injected definitions.\n*/\nfunction injectDefaultValidations(controls, validationDefinitions, requiredDefinitionsIds, intl) {\n\tfor (const keyName in controls) {\n\t\tif (!has(controls, keyName)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst control = controls[keyName];\n\t\t// for the validation id we need a repeatable random number to ensure uniqueness within the form.\n\t\tconst rng = seedrandom(keyName);\n\t\tconst controlValId = 1000 * rng();\n\n\t\tif (control.required === true) {\n\t\t\t_injectRequiredDefinition(control, validationDefinitions, requiredDefinitionsIds, keyName, controlValId, intl);\n\t\t}\n\t\tif (control.role === \"date\" || control.role === \"time\") {\n\t\t\t_injectDateTimeDefinition(control, validationDefinitions, keyName, controlValId, intl);\n\t\t}\n\t\tif (control.role === \"column\") {\n\t\t\t// used for selectcolumns control\n\t\t\tlet locKeyName = keyName;\n\t\t\tif (control.valueDef.isList) {\n\t\t\t\tlocKeyName += \"[0]\";\n\t\t\t}\n\t\t\t_injectInvalidFieldDefinition(control, validationDefinitions, locKeyName, controlValId, intl);\n\t\t}\n\n\t\tif (control.subControls) {\n\t\t\tconst subControls = {};\n\t\t\tfor (let idx = 0; idx < control.subControls.length; idx++) {\n\t\t\t\tconst subKeyName = keyName + \"[\" + idx + \"]\";\n\t\t\t\tsubControls[subKeyName] = control.subControls[idx];\n\t\t\t}\n\t\t\tinjectDefaultValidations(subControls, validationDefinitions, requiredDefinitionsIds, intl);\n\t\t}\n\t}\n}\n\n\n// ========= internal functions\n\n// This function will traverse the panel tree and propogate the state so that a higher order\n// panel state will be set for lower order panels. The disableOnly flag will only propagate the\n// disable state.\nfunction \t_propagateParentPanelStates(panelTree, newStates, currentPanel, disabledOnly) {\n\tconst currentPanelState = newStates.panels[currentPanel];\n\tconst allowUpdate = (disabledOnly) ? (currentPanelState && (currentPanelState.value === STATES.DISABLED))\n\t\t: (currentPanelState && (currentPanelState.value === STATES.HIDDEN || currentPanelState.value === STATES.DISABLED));\n\t\t// only propagate if parent panel is hidden or disabled\n\tif (allowUpdate && panelTree[currentPanel]) {\n\t\t// propagate panel state to children controls\n\t\tif (panelTree[currentPanel].controls) {\n\t\t\tfor (const control of panelTree[currentPanel].controls) {\n\t\t\t\tif (disabledOnly) {\n\t\t\t\t\tif (newStates.controls[control].value !== STATES.HIDDEN) {\n\t\t\t\t\t\tupdateState(newStates.controls, { name: control }, currentPanelState.value);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tupdateState(newStates.controls, { name: control }, currentPanelState.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// propagate panel state to children actions\n\t\tif (panelTree[currentPanel].actions) {\n\t\t\tfor (const action of panelTree[currentPanel].actions) {\n\t\t\t\tif (disabledOnly) {\n\t\t\t\t\tif (newStates.actions[action].value !== STATES.HIDDEN) {\n\t\t\t\t\t\tupdateState(newStates.actions, { name: action }, currentPanelState.value);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tupdateState(newStates.actions, { name: action }, currentPanelState.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// check all children panels\n\tif (panelTree[currentPanel] && panelTree[currentPanel].panels) {\n\t\tfor (const panel of panelTree[currentPanel].panels) {\n\t\t\tif (allowUpdate) {\n\t\t\t\tif (disabledOnly) {\n\t\t\t\t\tif (newStates.panels[panel].value !== STATES.HIDDEN) {\n\t\t\t\t\t\tupdateState(newStates.panels, { name: panel }, currentPanelState.value);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tupdateState(newStates.panels, { name: panel }, currentPanelState.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_propagateParentPanelStates(panelTree, newStates, panel, disabledOnly);\n\t\t}\n\t}\n}\n\n// This will validate a single propertyID value\nfunction _validateInput(propertyId, controller, control, showErrors) {\n\tlet errorSet = false;\n\tconst validations = controller.getDefinitions(propertyId, CONDITION_TYPE.VALIDATION, CONDITION_DEFINITION_INDEX.CONTROLS);\n\tif (validations.length > 0) {\n\t\tconst requiredDefinitionsIds = controller.getRequiredDefinitionIds();\n\t\ttry {\n\t\t\tlet output = false;\n\t\t\tfor (const validation of validations) {\n\t\t\t\tlet errorMessage = DEFAULT_VALIDATION_MESSAGE;\n\t\t\t\toutput = UiConditions.validateInput(validation.definition, propertyId, controller);\n\t\t\t\tlet isError = false;\n\t\t\t\tif (typeof output === \"object\") {\n\t\t\t\t\tisError = true;\n\t\t\t\t\terrorMessage = {\n\t\t\t\t\t\ttype: output.type,\n\t\t\t\t\t\ttext: output.text\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t// msgPropertyId is where the message should be set\n\t\t\t\tlet msgPropertyId = cloneDeep(propertyId);\n\t\t\t\tif (validation.definition.validation &&\n\t\t\t\t\tvalidation.definition.validation.fail_message &&\n\t\t\t\t\tvalidation.definition.validation.fail_message.focus_parameter_ref) {\n\t\t\t\t\tmsgPropertyId = getParamRefPropertyId(validation.definition.validation.fail_message.focus_parameter_ref, msgPropertyId);\n\t\t\t\t}\n\t\t\t\t// don't set column if not a subcontrol\n\t\t\t\tif (typeof msgPropertyId.col !== \"undefined\" && typeof control.columnIndex === \"undefined\") {\n\t\t\t\t\tdelete msgPropertyId.col;\n\t\t\t\t}\n\t\t\t\terrorMessage.validation_id = msgPropertyId.name;\n\t\t\t\tif (validation.definition.validation &&\n\t\t\t\t\tvalidation.definition.validation.id) {\n\t\t\t\t\terrorMessage.validation_id = validation.definition.validation.id;\n\t\t\t\t}\n\n\t\t\t\tif (typeof msgPropertyId.row === \"undefined\") {\n\t\t\t\t\tdelete msgPropertyId.row;\n\t\t\t\t}\n\t\t\t\terrorMessage.propertyId = msgPropertyId;\n\n\t\t\t\t// Determine if this condition is for required parameters\n\t\t\t\terrorMessage.required = requiredDefinitionsIds.indexOf(validation.definition.validation.id) > -1;\n\t\t\t\t// Only show warning messages for \"colDoesExists\" condition\n\t\t\t\tif (!showErrors && !validation.alwaysShow) {\n\t\t\t\t\terrorMessage.displayError = false;\n\t\t\t\t}\n\n\t\t\t\t// if error message has not been set for this msgPropertyId/focus_parameter_ref, clear errorSet\n\t\t\t\tif (!controller.getErrorMessage(msgPropertyId, true, true, false)) {\n\t\t\t\t\terrorSet = false;\n\t\t\t\t}\n\t\t\t\t// Before setting an error message for table cell, clear the error message for table (if any)\n\t\t\t\tif (typeof msgPropertyId.row !== \"undefined\" || typeof msgPropertyId.col !== \"undefined\") {\n\t\t\t\t\tconst tablePropertyId = controller.convertPropertyId(msgPropertyId.name);\n\t\t\t\t\tconst tableErrorMessage = controller.getErrorMessage(tablePropertyId);\n\t\t\t\t\tif (tableErrorMessage !== null) {\n\t\t\t\t\t\tcontroller.updateErrorMessage(tablePropertyId, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isError && !errorSet) {\n\t\t\t\t\tcontroller.updateErrorMessage(msgPropertyId, errorMessage);\n\t\t\t\t\tif (isError) {\n\t\t\t\t\t\terrorSet = true;\n\t\t\t\t\t}\n\t\t\t\t} else if (!isError && !errorSet) {\n\t\t\t\t\tconst msg = controller.getErrorMessage(msgPropertyId, false, false, false);\n\t\t\t\t\tif (!isEmpty(msg) && (msg.validation_id === errorMessage.validation_id)) {\n\t\t\t\t\t\tcontroller.updateErrorMessage(msgPropertyId, DEFAULT_VALIDATION_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error thrown in validation: \" + error);\n\t\t}\n\t}\n}\n\n// This function allows a single interface to perform all conditions validation.\n// It enables common code for the various APIs by delaying the exapnsion of all three\n// conditions test until this point.\nfunction _validateConditionsByType(propertyId, newStates, controller) {\n\t_validateDefinitionsByType(propertyId, newStates, controller, CONDITION_TYPE.VISIBLE);\n\t_validateDefinitionsByType(propertyId, newStates, controller, CONDITION_TYPE.ENABLED);\n\t_validateDefinitionsByType(propertyId, newStates, controller, CONDITION_TYPE.FILTEREDENUM);\n}\n\n// This is a common routine that will get the appropriate definitions for the property id\n// by type and validate that set of definitions.\nfunction _validateDefinitionsByType(propertyId, newStates, controller, condType) {\n\tconst definitions = controller.getDefinitions(propertyId, condType, CONDITION_DEFINITION_INDEX.CONTROLS);\n\t_validateByType(definitions, propertyId, newStates, controller, condType);\n}\n\n// This function will validate a set of definitions for the propertyId. This is needed because\n// it is invoked in various places in the code where we have a set of definitions that need to be validated.\nfunction _validateByType(definitions, propertyId, newStates, controller, condType) {\n\tif (definitions.length > 0) {\n\t\ttry {\n\t\t\tdefinitions.forEach((definition, idx) => {\n\t\t\t\tconst evalState = UiConditions.validateInput(definition.definition, propertyId, controller);\n\t\t\t\t// After the evalution, there is different processing of the result based on the condition type.\n\t\t\t\tswitch (condType) {\n\t\t\t\tcase CONDITION_TYPE.VISIBLE:\n\t\t\t\t\t_updateControlState(evalState, definition.definition.visible, propertyId, newStates, controller, true);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CONDITION_TYPE.ENABLED:\n\t\t\t\t\t_updateControlState(evalState, definition.definition.enabled, propertyId, newStates, controller, false);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CONDITION_TYPE.FILTEREDENUM: {\n\t\t\t\t\tconst lastDefinition = _isLastDefintiionForParameter(definitions, idx);\n\t\t\t\t\t_updateFilteredState(definition.definition, propertyId, newStates, evalState, lastDefinition);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error thrown in validation: \" + error);\n\t\t}\n\t}\n}\n\n// Returns true if the defintion is the last definition for the target.parameter_ref from the list of 'definitions'\n// This is only used for 'enum_filter' conditions\nfunction _isLastDefintiionForParameter(definitions, index) {\n\tconst currentDefinition = definitions[index];\n\tconst currentParameter = currentDefinition.definition.enum_filter.target.parameter_ref;\n\n\tlet lastDefinition = true;\n\tdefinitions.forEach((definition, idx) => {\n\t\t// definitions are evaluated in order, so assume any defition before 'idx' are already evaluated\n\t\tif (idx > index && definition.definition.enum_filter.target.parameter_ref === currentParameter) {\n\t\t\tlastDefinition = false;\n\t\t}\n\t});\n\treturn lastDefinition;\n}\n\n// This function will update the control state of the control and all it children panels and controls.\nfunction _updateControlState(stateOn, definition, propertyId, newStates, controller, visibleControl) {\n\tif (definition.parameter_refs) {\n\t\t_updateRefsState(stateOn, definition, propertyId, newStates, controller, visibleControl, definition.parameter_refs, \"control\");\n\t}\n\tif (definition.action_refs) {\n\t\t_updateRefsState(stateOn, definition, propertyId, newStates, controller, visibleControl, definition.action_refs, \"action\");\n\t}\n\tif (definition.group_refs) {\n\t\t_updateGroupRefsControlState(stateOn, definition, propertyId, newStates, controller, visibleControl);\n\t}\n}\n\n// This function will update the control state of the refs in the condition and all it children panels and controls.\nfunction _updateGroupRefsControlState(stateOn, definition, propertyId, newStates, controller, visibleControl) {\n\tconst newOnState = (visibleControl) ? STATES.VISIBLE : STATES.ENABLED;\n\tconst newOffState = (visibleControl) ? STATES.HIDDEN : STATES.DISABLED;\n\tconst notAllowedState = (visibleControl) ? STATES.ENABLED : STATES.HIDDEN;\n\n\tfor (const groupRef of definition.group_refs) {\n\t\tconst groupReferenceId = getParamRefPropertyId(groupRef);\n\t\tconst currentState = _getState(newStates.panels, groupReferenceId);\n\t\t// check for visible or enabled so we aren't resetting the state all the time\n\t\tif (stateOn === true) { // control|panel should be visible || enabled\n\t\t\tif (groupReferenceId && currentState !== newOnState && currentState !== notAllowedState) {\n\t\t\t\tconst updated = _updateStateIfParent(newStates, groupReferenceId, newOnState, controller);\n\t\t\t\t// only update the children if parent's state changed or is set for the first time\n\t\t\t\tif (updated) {\n\t\t\t\t\t_updatePanelChildrenState(newStates, groupReferenceId, newOnState, controller);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (groupReferenceId && (visibleControl || (!visibleControl && currentState !== notAllowedState))) {\n\t\t\tconst updated = _updateStateIfParent(newStates, groupReferenceId, newOffState, controller);\n\t\t\t// only update the children if parent's state changed or is set for the first time\n\t\t\tif (updated) {\n\t\t\t\t_updatePanelChildrenState(newStates, groupReferenceId, newOffState, controller);\n\t\t\t}\n\t\t}\n\t}\n}\n\n// This function will update the control state of the refs in the condition and all it children panels and controls.\nfunction _updateRefsState(stateOn, definition, propertyId, newStates, controller, visibleControl, refsList, refsType) {\n\tconst newOnState = (visibleControl) ? STATES.VISIBLE : STATES.ENABLED;\n\tconst newOffState = (visibleControl) ? STATES.HIDDEN : STATES.DISABLED;\n\tconst notAllowedState = (visibleControl) ? STATES.ENABLED : STATES.HIDDEN;\n\tconst refStates = (refsType === \"control\") ? newStates.controls : newStates.actions;\n\tfor (const ref of refsList) {\n\t\tconst referenceId = getParamRefPropertyId(ref, propertyId);\n\t\tconst currentState = _getState(refStates, referenceId);\n\t\t// check for visible or enabled so we aren't resetting the state all the time\n\t\tif (Array.isArray(definition.values)) {\n\t\t\t// Short-circuit for disabling individual enumeration items\n\t\t\tfor (const value of definition.values) {\n\t\t\t\tif (stateOn === true) { // control|panel should be visible || enabled\n\t\t\t\t\tupdateEnumerationState(refStates, referenceId, value, newOnState);\n\t\t\t\t} else { // control|panel should be hidden || disabled\n\t\t\t\t\tupdateEnumerationState(refStates, referenceId, value, newOffState);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (stateOn === true) { // control|panel should be visible || enabled\n\t\t\tif (referenceId && currentState !== newOnState && currentState !== notAllowedState) {\n\t\t\t\tupdateState(refStates, referenceId, newOnState, controller);\n\t\t\t}\n\t\t} else if (referenceId && (visibleControl || (!visibleControl && currentState !== notAllowedState))) {\n\t\t\t_updateStateIfPanel(newStates, referenceId, newOffState, refStates, controller);\n\t\t}\n\t}\n}\n\n// Filtered state is stored in objects rather than arrays\nfunction _updateFilteredState(definition, inPropertyId, newStates, filtered, lastDefinition) {\n\tif (definition.enum_filter.target && definition.enum_filter.target.parameter_ref) {\n\t\tconst refState = newStates.controls;\n\t\tconst propertyId = getParamRefPropertyId(definition.enum_filter.target.parameter_ref, inPropertyId);\n\t\tlet propState = refState[propertyId.name];\n\t\tif (!propState) {\n\t\t\tpropState = {};\n\t\t}\n\t\t// First allow for table level state, then column level state, and finally cell level state\n\t\tif (typeof propertyId.col !== \"undefined\") {\n\t\t\tconst colId = propertyId.col.toString();\n\t\t\tif (!propState[colId]) {\n\t\t\t\tpropState[colId] = {};\n\t\t\t}\n\t\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\t\tconst rowId = propertyId.row.toString();\n\t\t\t\tif (!propState[colId][rowId]) {\n\t\t\t\t\tpropState[colId][rowId] = {};\n\t\t\t\t}\n\t\t\t\t// Cells\n\t\t\t\tconst enumFilters = _getFilteredEnumItems(definition, filtered, propState[colId][rowId].enumFilter, propState[colId][rowId].enumFilterApplied, lastDefinition);\n\t\t\t\tpropState[colId][rowId].enumFilter = enumFilters.values;\n\t\t\t\tpropState[colId][rowId].enumFilterApplied = enumFilters.filterApplied;\n\t\t\t} else {\n\t\t\t\t// Columns\n\t\t\t\tconst enumFilters = _getFilteredEnumItems(definition, filtered, propState[colId].enumFilter, propState[colId].enumFilterApplied, lastDefinition);\n\t\t\t\tpropState[colId].enumFilter = enumFilters.values;\n\t\t\t\tpropState[colId].enumFilterApplied = enumFilters.filterApplied;\n\t\t\t}\n\t\t} else {\n\t\t\t// Control-level state\n\t\t\tconst enumFilters = _getFilteredEnumItems(definition, filtered, propState.enumFilter, propState.enumFilterApplied, lastDefinition);\n\t\t\tpropState.enumFilter = enumFilters.values;\n\t\t\tpropState.enumFilterApplied = enumFilters.filterApplied;\n\t\t}\n\t\trefState[propertyId.name] = propState;\n\t}\n}\n\n// This function will updatethe state all the children of a panel when that parent panel state\n// has changed. It will update the state of the child. If the state is transitioning to\n// enabled or visible, then the child state may need to be set by other conditions or panels states.\nfunction _updatePanelChildrenState(newStates, referenceId, state, controller) {\n\tif (controller.panelTree[referenceId.name]) {\n\t\tconst panelTree = controller.panelTree[referenceId.name];\n\t\tfor (const panel of panelTree.panels) {\n\t\t\tconst panelPropertyId = { name: panel };\n\t\t\tupdateState(newStates.panels, panelPropertyId, state);\n\t\t\t// recurse to get the children of the panel\n\t\t\t_updatePanelChildrenState(newStates, panelPropertyId, state, controller);\n\t\t\t// after recursing down the panelTree, re-run defintions to ensure the panel is in the proper state.\n\t\t\tif (state === STATES.ENABLED) {\n\t\t\t\t_runRefsValidateDefinitions(panelPropertyId, controller, CONDITION_TYPE.ENABLED, newStates);\n\t\t\t} else if (state === STATES.VISIBLE) {\n\t\t\t\t// if the current panel is in disable state.\n\t\t\t\tif (newStates.panels[referenceId.name].disabled) {\n\t\t\t\t\t// propagate the state to all the children in the panel.\n\t\t\t\t\t_propagateParentPanelStates(controller.panelTree, newStates, referenceId.name, true);\n\t\t\t\t}\n\t\t\t\t_runRefsValidateDefinitions(panelPropertyId, controller, CONDITION_TYPE.ENABLED, newStates);\n\t\t\t\t_runRefsValidateDefinitions(panelPropertyId, controller, CONDITION_TYPE.VISIBLE, newStates);\n\t\t\t}\n\t\t}\n\t\tfor (const control of panelTree.controls) {\n\t\t\tconst ctrlPropertyId = { name: control };\n\t\t\t_updatePanelChildrenObjectState(newStates, referenceId, state, controller, ctrlPropertyId, newStates.controls);\n\t\t}\n\t\tfor (const action of panelTree.actions) {\n\t\t\tconst ctrlPropertyId = { name: action };\n\t\t\t_updatePanelChildrenObjectState(newStates, referenceId, state, controller, ctrlPropertyId, newStates.actions);\n\t\t}\n\n\t}\n}\n\n// In this context \"Object\" menas either a control or an action.\nfunction _updatePanelChildrenObjectState(newStates, referenceId, state, controller, objectId, objectStates) {\n\tupdateState(objectStates, objectId, state);\n\t// re-run ref conditions to see if they should override this new state.\n\tif (state === STATES.ENABLED) {\n\t\t_runRefsValidateDefinitions(objectId, controller, CONDITION_TYPE.ENABLED, newStates);\n\t\t_runRefsValidateDefinitions(objectId, controller, CONDITION_TYPE.VISIBLE, newStates);\n\t} else if (state === STATES.VISIBLE) {\n\t\t// need to run the controls visible conditions in case a higher level panel changed the state.\n\t\t_validateDefinitionsByType(objectId, newStates, controller, CONDITION_TYPE.VISIBLE);\n\t\t_runRefsValidateDefinitions(objectId, controller, CONDITION_TYPE.VISIBLE, newStates);\n\t\t// if parent panel is disable then set control to disabled.\n\t\tif (newStates.panels[referenceId.name].value === STATES.DISABLED) {\n\t\t\tupdateState(objectStates, objectId, STATES.DISABLED);\n\t\t} else {\n\t\t\t// otherwise run any enable definition that would set the control.\n\t\t\t_runRefsValidateDefinitions(objectId, controller, CONDITION_TYPE.ENABLED, newStates);\n\t\t}\n\t}\n}\n\n// validate all conditions of the type that set the propertyID state as a result of the condition.\nfunction _runRefsValidateDefinitions(propertyId, controller, dfnType, newStates) {\n\tconst refsDefinitions = controller.getDefinitions(propertyId, dfnType, CONDITION_DEFINITION_INDEX.REFS);\n\tif (refsDefinitions.length > 0) {\n\t\t_validateByType(refsDefinitions, propertyId, newStates, controller, dfnType);\n\t}\n\n}\n\n// Only parent panels can override state of its children\nfunction _updateStateIfParent(newStates, panel, state, controller, referenceId) {\n\tconst panelName = panel.name;\n\tif (newStates.panels[panelName]) {\n\t\tconst prevValue = newStates.panels[panelName].value;\n\t\t// if prevState is disabled, cannot set newState to visible. if prevState is hidden, cannot set newState to enabled\n\t\tif (((prevValue === STATES.ENABLED || prevValue === STATES.VISIBLE) && (state === STATES.DISABLED || state === STATES.HIDDEN)) ||\n\t\t\t\t(prevValue === STATES.DISABLED && state === STATES.ENABLED) ||\n\t\t\t\t(prevValue === STATES.HIDDEN && state === STATES.VISIBLE)) {\n\t\t\tupdateState(newStates.panels, panel, state);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\tupdateState(newStates.panels, panel, state);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n// A control can only set a state to enabled if it was previously disabled. The same applies to hidden and visible\nfunction _updateStateIfPanel(newStates, referenceId, state, refStates, controller) {\n\tconst controlName = referenceId.name;\n\tif (refStates[controlName]) {\n\t\tlet prevValue = refStates[controlName].value;\n\t\tif (typeof referenceId.col !== \"undefined\") {\n\t\t\t// control is in a table\n\t\t\tif (refStates[controlName][referenceId.col]) {\n\t\t\t\tif (typeof referenceId.row !== \"undefined\" && refStates[controlName][referenceId.col][referenceId.row]) {\n\t\t\t\t\tprevValue = refStates[controlName][referenceId.col][referenceId.row].value;\n\t\t\t\t} else { // first time setting control state for each row in the column\n\t\t\t\t\tupdateState(refStates, referenceId, state, controller);\n\t\t\t\t}\n\t\t\t} else { // first time setting control state for the column\n\t\t\t\tupdateState(refStates, referenceId, state, controller);\n\t\t\t}\n\t\t}\n\t\t// Can only set a state to enabled if it was previously disabled. The same applies to hidden and visible\n\t\tif (((prevValue === STATES.ENABLED || prevValue === STATES.VISIBLE) && (state === STATES.DISABLED || state === STATES.HIDDEN)) ||\n\t\t\t\t(prevValue === STATES.DISABLED && state === STATES.ENABLED) ||\n\t\t\t\t(prevValue === STATES.DISABLED && state === STATES.HIDDEN) ||\n\t\t\t\t(prevValue === STATES.HIDDEN && state === STATES.VISIBLE)) {\n\t\t\tupdateState(refStates, referenceId, state, controller);\n\t\t}\n\t} else { // first time setting control state\n\t\tupdateState(refStates, referenceId, state, controller);\n\t}\n}\n\nfunction _getFilteredEnumItems(definition, filtered, previousValues, filterApplied, lastDefinition) {\n\tconst enumFilter = {\n\t\tvalues: previousValues,\n\t\tfilterApplied: lastDefinition ? false : filterApplied || true // default to true if null\n\t};\n\n\tlet filterValues = null; // original values\n\tif (filtered) {\n\t\tfilterValues = definition.enum_filter.target.values;\n\t}\n\n\t// values should be null if there are no other definitions that already modified this parameter\n\tif (filterValues || !filterApplied) {\n\t\tenumFilter.values = filterValues;\n\t\tenumFilter.filterApplied = true;\n\t}\n\n\t// reset the filters for the next validation cycle\n\tif (lastDefinition) {\n\t\tenumFilter.filterApplied = false;\n\t}\n\n\treturn enumFilter;\n}\n\n// state is stored in objects rather than arrays\nfunction _getState(refState, propertyId) {\n\tlet propState = refState[propertyId.name];\n\tif (typeof propertyId.col !== \"undefined\" && propState) {\n\t\tpropState = propState[propertyId.col.toString()];\n\t\tif (typeof propertyId.row !== \"undefined\" && propState) {\n\t\t\tpropState = propState[propertyId.row.toString()];\n\t\t}\n\t}\n\tif (propState) {\n\t\treturn propState.value;\n\t}\n\treturn null;\n}\n\nfunction _injectRequiredDefinition(control, valDefinitions, requiredDefinitionsIds, keyName, controlValId, intl) {\n\t// inject required validation definition\n\tconst label = (control.label && control.label.text) ? control.label.text : keyName;\n\tconst errorMsg = formatMessage(intl,\n\t\tMESSAGE_KEYS.REQUIRED_ERROR, { label: label });\n\tconst definitionId = \"required_\" + keyName + \"_\" + controlValId;\n\tconst injectedDefinition = {\n\t\tparams: keyName,\n\t\tdefinition: {\n\t\t\tvalidation: {\n\t\t\t\tid: definitionId,\n\t\t\t\tfail_message: {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: {\n\t\t\t\t\t\tdefault: errorMsg\n\t\t\t\t\t},\n\t\t\t\t\tfocus_parameter_ref: keyName\n\t\t\t\t},\n\t\t\t\tevaluate: {\n\t\t\t\t\tcondition: {\n\t\t\t\t\t\tparameter_ref: keyName,\n\t\t\t\t\t\top: \"isNotEmpty\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t\t// add the new definition to the set of validation definitions for this control.\n\tif (valDefinitions.controls[keyName]) {\n\t\tvalDefinitions.controls[keyName].push(injectedDefinition);\n\t} else {\n\t\tvalDefinitions.controls[keyName] = [injectedDefinition];\n\t}\n\trequiredDefinitionsIds.push(definitionId); // Save to list of required definition IDs\n}\n\nfunction _injectDateTimeDefinition(control, valDefinitions, keyName, controlValId, intl) {\n\t// inject date format validation definition\n\tconst dtFormat = getDateTimeFormat(control);\n\tconst errorMsg = formatMessage(intl,\n\t\tMESSAGE_KEYS.DATETIME_FORMAT_ERROR, { role: control.role, format: dtFormat });\n\tconst injectedDefinition = {\n\t\tparams: keyName,\n\t\tdefinition: {\n\t\t\tvalidation: {\n\t\t\t\tid: \"Format_\" + keyName + \"_\" + controlValId,\n\t\t\t\tfail_message: {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: {\n\t\t\t\t\t\tdefault: errorMsg\n\t\t\t\t\t},\n\t\t\t\t\tfocus_parameter_ref: keyName\n\t\t\t\t},\n\t\t\t\tevaluate: {\n\t\t\t\t\tcondition: {\n\t\t\t\t\t\tparameter_ref: keyName,\n\t\t\t\t\t\top: \"isDateTime\",\n\t\t\t\t\t\tvalue: control.role\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t// add the new definition to the set of validation definitions for this control.\n\tif (valDefinitions.controls[keyName]) {\n\t\tvalDefinitions.controls[keyName].push(injectedDefinition);\n\t} else {\n\t\tvalDefinitions.controls[keyName] = [injectedDefinition];\n\t}\n}\n\nfunction _injectInvalidFieldDefinition(control, valDefinitions, keyName, controlValId, intl) {\n\t// inject invalid field validation definition\n\tconst label = (control.label && control.label.text) ? control.label.text : keyName;\n\tconst errorMsg = formatMessage(intl,\n\t\tMESSAGE_KEYS.INVALID_FIELD_ERROR, { label: label });\n\t// Note: Please don't update \"validField_\" in validation id. It is used as identifier in another condition.\n\tconst injectedDefinition = {\n\t\tparams: keyName,\n\t\tdefinition: {\n\t\t\tvalidation: {\n\t\t\t\tid: \"validField_\" + keyName + \"_\" + controlValId,\n\t\t\t\tfail_message: {\n\t\t\t\t\ttype: \"warning\",\n\t\t\t\t\tmessage: {\n\t\t\t\t\t\tdefault: errorMsg\n\t\t\t\t\t},\n\t\t\t\t\tfocus_parameter_ref: keyName\n\t\t\t\t},\n\t\t\t\tevaluate: {\n\t\t\t\t\tcondition: {\n\t\t\t\t\t\tparameter_ref: keyName,\n\t\t\t\t\t\top: \"colDoesExists\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\talwaysShow: true\n\t};\n\t\t// add the new definition to the set of validation definitions for this control.\n\tif (valDefinitions.controls[keyName]) {\n\t\tvalDefinitions.controls[keyName].push(injectedDefinition);\n\t} else {\n\t\tvalDefinitions.controls[keyName] = [injectedDefinition];\n\t}\n}\n\n// key should be 'type', 'measure', or 'modeling_role'. Return the matching metadata given the paramInfo\nfunction getMetadataFieldMatch(paramInfo, metadata, key) {\n\tif (paramInfo.value) {\n\t\tif (typeof paramInfo.value === \"string\") {\n\t\t\tfor (let i = 0; i < metadata.length; i++) {\n\t\t\t\tvar field = metadata[i];\n\t\t\t\tif (field.name === paramInfo.value) {\n\t\t\t\t\tif (key === \"type\") {\n\t\t\t\t\t\treturn field.type;\n\t\t\t\t\t}\n\t\t\t\t\treturn field.metadata[key];\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof paramInfo.value === \"object\") {\n\t\t\tfor (var j = 0; j < metadata.length; j++) {\n\t\t\t\tvar field2 = metadata[j];\n\t\t\t\tif (field2.origName === paramInfo.value.field_name && field2.schema === paramInfo.value.link_ref) {\n\t\t\t\t\tif (key === \"type\") {\n\t\t\t\t\t\treturn field2.type;\n\t\t\t\t\t}\n\t\t\t\t\treturn field2.metadata[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nexport {\n\tvalidatePropertiesValues,\n\tvalidateConditions,\n\tvalidatePropertiesConditions,\n\tvalidateInput,\n\tfilterConditions,\n\tallowConditions,\n\tsetConditionalDefaultValue,\n\tupdateState,\n\tgetParamRefPropertyId,\n\tinjectDefaultValidations,\n\tupdatePanelChildrenStatesForPanelIds,\n\tgetMetadataFieldMatch\n};\n","var arrayMap = require('./_arrayMap'),\n baseIntersection = require('./_baseIntersection'),\n baseRest = require('./_baseRest'),\n castArrayLikeObject = require('./_castArrayLikeObject');\n\n/**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\nvar intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n});\n\nmodule.exports = intersection;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Icon from \"./../../../icons/icon.jsx\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport { STATES } from \"./../../constants/constants.js\";\nimport classNames from \"classnames\";\n\nexport default class ValidationMessage extends React.Component {\n\n\trender() {\n\t\t// some controls use carbon's error/warnings instead of this component\n\t\tif (!this.props.messageInfo || (this.props.tableOnly && !this.props.inTable)) {\n\t\t\treturn null;\n\t\t}\n\t\tconst msgText = this.props.inTable ? null : <span>{this.props.messageInfo.text}</span>;\n\t\tconst icon = (<div className=\"icon\">\n\t\t\t{<Icon type={this.props.messageInfo.type} />}\n\t\t</div>);\n\t\tconst msgIcon = this.props.inTable\n\t\t\t? (<div className=\"properties-tooltips-container table-cell-msg-icon\">\n\t\t\t\t<Tooltip\n\t\t\t\t\tid=\"table-cell-msg-icon\"\n\t\t\t\t\ttip={this.props.messageInfo.text}\n\t\t\t\t\tdirection=\"bottom\"\n\t\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\t>\n\t\t\t\t\t{icon}\n\t\t\t\t</Tooltip>\n\t\t\t</div>)\n\t\t\t: null;\n\t\tconst className = classNames(\"properties-validation-message\", this.props.messageInfo.type,\n\t\t\t{ \"hide\": this.props.state === STATES.HIDDEN || this.props.state === STATES.DISABLED, \"inTable\": this.props.inTable });\n\t\treturn (\n\t\t\t<div className={className}>\n\t\t\t\t{msgIcon}\n\t\t\t\t{msgText}\n\t\t\t</div>);\n\t}\n}\n\nValidationMessage.propTypes = {\n\tmessageInfo: PropTypes.shape({\n\t\ttext: PropTypes.string,\n\t\ttype: PropTypes.string\n\t}),\n\tstate: PropTypes.string,\n\tinTable: PropTypes.bool,\n\ttableOnly: PropTypes.bool\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport ValidationMessage from \"./validation-message.jsx\";\nexport default ValidationMessage;\n","/*\n * Copyright 2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Don't use 'd' in regex to avoid problems with replacing date token 'd'\nconst FLATPICKR_DATE_TOKENS_REGEX = {\n\tY: \"([1-9][0-9][0-9][0-9])\", // 4 digit year\n\ty: \"([0-9][0-9])\", // 2 digit year\n\tm: \"([0][1-9]|[1][0-2])\", // 2 digit month\n\tn: \"([1-9]|[1-2][0-2])\", // month without leading 0\n\td: \"([0][1-9]|[1-2][0-9]|3[01])\", // 2 digit day\n\tj: \"([1-9]|[1-2][0-9]|3[01])\" // day without leading 0\n};\n\nfunction getDateFormatRegex(dateFormat) {\n\tlet dateRegex = dateFormat;\n\tdateRegex = dateRegex.replace(\"Y\", FLATPICKR_DATE_TOKENS_REGEX.Y);\n\tdateRegex = dateRegex.replace(\"y\", FLATPICKR_DATE_TOKENS_REGEX.y);\n\tdateRegex = dateRegex.replace(\"m\", FLATPICKR_DATE_TOKENS_REGEX.m);\n\tdateRegex = dateRegex.replace(\"n\", FLATPICKR_DATE_TOKENS_REGEX.n);\n\tdateRegex = dateRegex.replace(\"d\", FLATPICKR_DATE_TOKENS_REGEX.d);\n\tdateRegex = dateRegex.replace(\"j\", FLATPICKR_DATE_TOKENS_REGEX.j);\n\tdateRegex = dateRegex.replaceAll(\".\", \"[.]\"); // escape decimals\n\tdateRegex = \"^\" + dateRegex + \"$\";\n\treturn dateRegex;\n}\n\n// 'datepicker' and 'datepickerRange' uses flatpickr internally through Carbon\n// dateFormat tokens: https://flatpickr.js.org/formatting/#date-formatting-tokens\n// Gets the formatted date to display in the control\nfunction getFormattedDate(inDate, dateFormat) {\n\tconst date = new Date(inDate);\n\tif (!isNaN(date)) {\n\t\tconst year = date.getFullYear().toString();\n\t\tlet month = (date.getMonth() + 1).toString(); // month is 0 indexed\n\t\tif (month.length === 1) {\n\t\t\tmonth = \"0\" + month;\n\t\t}\n\t\tlet day = date.getDate().toString();\n\t\tif (day.length === 1) {\n\t\t\tday = \"0\" + day;\n\t\t}\n\n\t\tlet formattedDate = dateFormat;\n\t\tformattedDate = formattedDate.replace(\"Y\", year); // 4 digit year\n\t\tformattedDate = formattedDate.replace(\"y\", year.substring(2)); // 2 digit year\n\t\tformattedDate = formattedDate.replace(\"m\", month); // 2 digit month\n\t\tformattedDate = formattedDate.replace(\"n\", parseInt(month, 10)); // month without leading 0\n\t\tformattedDate = formattedDate.replace(\"d\", day); // 2 digit day\n\t\tformattedDate = formattedDate.replace(\"j\", parseInt(day, 10)); // day without leading 0\n\t\treturn formattedDate;\n\t}\n\treturn inDate;\n}\n\n// Get the ISO date format that is stored internally\nfunction getISODate(inDate, dateFormat) {\n\tconst date = new Date(inDate);\n\tif (!isNaN(date)) {\n\t\tif (inDate instanceof Date) {\n\t\t\treturn date.toISOString();\n\t\t} else if (typeof inDate === \"string\" && inDate.trim().length > 0 && dateFormat) {\n\t\t\tconst dateRegex = getDateFormatRegex(dateFormat);\n\t\t\tconst { year, month, day } = getYearMonthDay(inDate, dateRegex, dateFormat);\n\t\t\treturn new Date(`${year}-${month}-${day}T00:00:00.00`).toISOString();\n\t\t}\n\t}\n\treturn inDate;\n}\n\n// Date libraries are able to parse dates such as 2023-02-31 into an actual Date object: Jan 31 2023\n// Given a date string (internal ISO format) and dateFormat,\n// test to see if the date is valid byt first parsing the given date for the year, month, and day\n// then compare the values of the created Date object to see if it matches\nfunction isValidDate(dateString, dateFormat) {\n\tconst date = new Date(dateString);\n\tif (isNaN(date)) {\n\t\treturn false;\n\t}\n\n\tconst dateRegex = getDateFormatRegex(dateFormat);\n\tconst validRegex = new RegExp(dateRegex).test(dateString);\n\tif (validRegex) {\n\t\tconst { year, month, day } = getYearMonthDay(dateString, dateRegex, dateFormat);\n\t\tconst newDate = new Date(`${year}-${month}-${day}T00:00:00`); // ISO format\n\t\tconst newYear = newDate.getFullYear();\n\t\tconst newMonth = newDate.getMonth() + 1;\n\t\tconst newDay = newDate.getDate();\n\t\treturn newYear === parseInt(year, 10) && newMonth === parseInt(month, 10) && newDay === parseInt(day, 10);\n\t}\n\treturn false;\n}\n\n// Given the date in string format \"03-22-2023\" and corresponding dateFormat m-d-Y,\n// return the year, month, and day as separate fields\nfunction getYearMonthDay(dateString, dateRegex, dateFormat) {\n\tlet year = \"\";\n\tlet month = \"\";\n\tlet day = \"\";\n\n\tconst groups = dateString.match(dateRegex);\n\tif (groups) {\n\t\tlet groupIdx = 1; // Index 0 is the entire match\n\t\tfor (let formatIdx = 0; formatIdx < dateFormat.length; formatIdx++) {\n\t\t\tconst formatToken = dateFormat.charAt(formatIdx);\n\t\t\tswitch (formatToken) {\n\t\t\tcase \"Y\":\n\t\t\tcase \"y\": {\n\t\t\t\tyear = groups[groupIdx];\n\t\t\t\tgroupIdx++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"m\":\n\t\t\tcase \"n\": {\n\t\t\t\tmonth = groups[groupIdx];\n\t\t\t\tgroupIdx++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"d\":\n\t\t\tcase \"j\": {\n\t\t\t\tday = groups[groupIdx];\n\t\t\t\tgroupIdx++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn { year, month, day };\n\t}\n\treturn null;\n}\n\nexport {\n\tgetDateFormatRegex,\n\tgetFormattedDate,\n\tgetISODate,\n\tisValidDate,\n\tgetYearMonthDay\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { FormattedDate } from \"react-intl\";\nimport { isValid } from \"date-fns\";\nimport { isEqual, intersection } from \"lodash\";\nimport classNames from \"classnames\";\n\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport TruncatedContentTooltip from \"./../../components/truncated-content-tooltip\";\nimport { STATES, DATA_TYPE } from \"./../../constants/constants\";\nimport Icon from \"./../../../icons/icon\";\n\nimport { ControlType } from \"./../../constants/form-constants\";\nimport { stringifyFieldValue } from \"./../../util/property-utils\";\nimport { getFormattedDate } from \"./../../util/date-utils\";\n\nclass ReadonlyControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.updateValueFromFilterEnum = this.updateValueFromFilterEnum.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.updateValueFromFilterEnum(true);\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\t// only update if filter options have changed. Fixes issue where filter options are updated after value in setProperties\n\t\tif (!isEqual(this.props.controlOpts, prevProps.controlOpts)) {\n\t\t\tthis.updateValueFromFilterEnum();\n\t\t}\n\t}\n\n\t// this is needed in order to reset the property value when a value is filtered out.\n\tupdateValueFromFilterEnum(skipValidateInput) {\n\t\t// update property value if value isn't in current enum value. Don't filter custom control values.\n\t\tif (Array.isArray(this.props.value) && Array.isArray(this.props.controlOpts.values) && this.props.control.controlType !== ControlType.CUSTOM) {\n\t\t\tconst newValue = intersection(this.props.value, this.props.controlOpts.values);\n\t\t\tif (!isEqual(this.props.value, newValue)) {\n\t\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, newValue, skipValidateInput);\n\t\t\t}\n\t\t}\n\t}\n\n\trender() {\n\t\tlet controlValue = this.props.value;\n\n\t\t// Use label for controlValue if possible\n\t\tif (this.props.control.values && this.props.control.valueLabels) {\n\t\t\tconst controlIndex = this.props.control.values.indexOf(this.props.value);\n\t\t\tif (controlIndex > -1 && this.props.control.valueLabels[controlIndex]) {\n\t\t\t\tcontrolValue = this.props.control.valueLabels[controlIndex];\n\t\t\t}\n\t\t}\n\t\tif (typeof controlValue === \"undefined\" || controlValue === null) {\n\t\t\tcontrolValue = \"\";\n\t\t} else if (typeof controlValue === \"object\" && controlValue.link_ref) {\n\t\t\tcontrolValue = stringifyFieldValue(controlValue, this.props.control);\n\t\t} else if (Array.isArray(controlValue)) {\n\t\t\t// this is needed to comma separate an array of readonly strings.\n\t\t\tcontrolValue = controlValue.join(\", \");\n\t\t} else if (typeof controlValue === \"boolean\") {\n\t\t\tcontrolValue = controlValue.toString();\n\t\t}\n\n\t\tcontrolValue = ControlUtils.truncateDisplayValue(controlValue);\n\n\t\tif (this.props.control.controlType === ControlType.CUSTOM) {\n\t\t\tcontrolValue = this.props.controller.getCustomControl(this.props.propertyId, this.props.control, { table: true, editStyle: \"summary\" });\n\t\t} else if (this.props.control.controlType === ControlType.TIMESTAMP ||\n\t\t\t(this.props.control.valueDef && this.props.control.valueDef.propType === DATA_TYPE.TIMESTAMP)) {\n\t\t\tconst date = new Date(controlValue);\n\t\t\tif (isValid(date)) {\n\t\t\t\tif (this.props.tableControl) {\n\t\t\t\t\tcontrolValue = <FormattedDate value={date} day=\"numeric\" month=\"long\" year=\"numeric\" hour=\"numeric\" minute=\"numeric\" />;\n\t\t\t\t} else {\n\t\t\t\t\tcontrolValue = <FormattedDate value={date} day=\"numeric\" month=\"long\" year=\"numeric\" hour=\"numeric\" minute=\"numeric\" weekday=\"long\" />;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcontrolValue = \"\"; // invalid timestamp\n\t\t\t}\n\t\t} else if (this.props.control.controlType === ControlType.DATEPICKER) {\n\t\t\tcontrolValue = controlValue ? getFormattedDate(controlValue, this.props.control.dateFormat) : \"\";\n\t\t} else if (this.props.control.controlType === ControlType.DATEPICKERRANGE) {\n\t\t\tconst startDate = this.props.value && this.props.value[0] ? getFormattedDate(this.props.value[0], this.props.control.dateFormat) : \"\";\n\t\t\tconst endDate = this.props.value && this.props.value[1] ? getFormattedDate(this.props.value[1], this.props.control.dateFormat) : \"\";\n\t\t\tcontrolValue = [startDate, endDate].toString();\n\t\t}\n\t\tconst readOnly = <span className=\"properties-field-type\" disabled={this.props.state === STATES.DISABLED}>{controlValue}</span>;\n\t\tlet display = readOnly;\n\t\tif (this.props.tableControl) {\n\t\t\tlet disabled = true;\n\t\t\tif (controlValue) {\n\t\t\t\tdisabled = false;\n\t\t\t}\n\t\t\tlet content = readOnly;\n\t\t\tif (this.props.control.icon) {\n\t\t\t\tcontent = (\n\t\t\t\t\t<div className={\"properties-field-readonly\"}>\n\t\t\t\t\t\t<div className={\"properties-field-type-icon\"}>\n\t\t\t\t\t\t\t<Icon type={this.props.control.icon} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{readOnly}\n\t\t\t\t\t</div>);\n\t\t\t}\n\t\t\tdisplay = (\n\t\t\t\t<TruncatedContentTooltip\n\t\t\t\t\tcontent={content}\n\t\t\t\t\ttooltipText={controlValue}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={classNames(\"properties-readonly\", { \"hide\": this.props.state === STATES.HIDDEN })}\n\t\t\t\tdata-id={ControlUtils.getDataId(this.props.propertyId)}\n\t\t\t>\n\t\t\t\t{this.props.tableControl ? null : this.props.controlItem}\n\t\t\t\t{display}\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nReadonlyControl.propTypes = {\n\ticon: PropTypes.string,\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.any, // pass in by redux\n\tcontrolOpts: PropTypes.oneOfType([\n\t\tPropTypes.object,\n\t\tPropTypes.array\n\t]), // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => {\n\tconst props = {\n\t\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\t\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\t\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n\t};\n\tprops.controlOpts = ownProps.controller.getFilteredEnumItems(ownProps.propertyId, ownProps.control);\n\treturn props;\n};\n\nexport default connect(mapStateToProps, null)(ReadonlyControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { TextInput } from \"carbon-components-react\";\nimport ReadonlyControl from \"./../readonly\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport { STATES } from \"./../../constants/constants.js\";\nimport { CONDITION_MESSAGE_TYPE, MESSAGE_KEYS, TRUNCATE_LIMIT } from \"./../../constants/constants.js\";\nimport TruncatedContentTooltip from \"./../../components/truncated-content-tooltip\";\nimport classNames from \"classnames\";\nimport { v4 as uuid4 } from \"uuid\";\n\n\nconst arrayValueDelimiter = \", \";\n\nclass TextfieldControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t\tthis.charLimit = ControlUtils.getCharLimit(props.control, props.controller.getMaxLengthForSingleLineControls());\n\t\tthis.uuid = uuid4();\n\t\tthis.id = ControlUtils.getControlId(props.propertyId, this.uuid);\n\t\tthis.isList = false;\n\t\tif (this.props.control.valueDef) {\n\t\t\tif (this.props.control.valueDef.isList) {\n\t\t\t\tthis.isList = true;\n\t\t\t}\n\t\t\tthis.defaultValue = this.props.control.valueDef.defaultValue;\n\t\t}\n\t}\n\n\thandleChange(evt) {\n\t\tlet value = evt.target.value;\n\t\tif (this.charLimit !== -1 && value) {\n\t\t\tvalue = value.substring(0, this.charLimit);\n\t\t}\n\t\tif (this.isList) {\n\t\t\tvalue = ControlUtils.splitNewlines(value, arrayValueDelimiter);\n\t\t}\n\t\tif (value.length === 0 && (typeof this.defaultValue === \"undefined\" || this.defaultValue === null)) {\n\t\t\tvalue = null;\n\t\t}\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, value);\n\t}\n\n\trender() {\n\t\tlet value = this.props.value ? this.props.value : \"\";\n\t\tlet truncated = false;\n\t\tif (this.isList) {\n\t\t\tconst joined = ControlUtils.joinNewlines(value, arrayValueDelimiter);\n\t\t\tvalue = joined.value;\n\t\t\ttruncated = joined.truncated;\n\t\t} else {\n\t\t\tvalue = ControlUtils.truncateDisplayValue(value);\n\t\t\ttruncated = value.length !== 0 && value.length !== this.props.value.length;\n\t\t}\n\t\tconst className = classNames(\"properties-textfield\", \"properties-input-control\", { \"hide\": this.props.state === STATES.HIDDEN },\n\t\t\tthis.props.messageInfo ? this.props.messageInfo.type : null);\n\n\t\tlet textInput = null;\n\t\tif (truncated) {\n\t\t\tconst errorMessage = {\n\t\t\t\ttext: formatMessage(this.reactIntl, MESSAGE_KEYS.TRUNCATE_LONG_STRING_ERROR, { truncate_limit: TRUNCATE_LIMIT }),\n\t\t\t\ttype: CONDITION_MESSAGE_TYPE.ERROR,\n\t\t\t\tvalidation_id: this.props.control.name\n\t\t\t};\n\t\t\ttextInput = (<div className=\"properties-textinput-readonly\">\n\t\t\t\t{this.props.tableControl ? null : this.props.controlItem}\n\t\t\t\t<ReadonlyControl\n\t\t\t\t\tcontrol={this.props.control}\n\t\t\t\t\tpropertyId={this.props.propertyId}\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\ttableControl={this.props.tableControl}\n\t\t\t\t/>\n\t\t\t\t// TODO this could conflict with the below ValidationMessage.\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} state={\"\"} messageInfo={errorMessage} />\n\t\t\t</div>);\n\t\t} else {\n\t\t\tconst validationProps = ControlUtils.getValidationProps(this.props.messageInfo, this.props.tableControl);\n\t\t\ttextInput = (<TextInput\n\t\t\t\t{...validationProps}\n\t\t\t\tautoComplete={this.props.tableControl === true ? \"off\" : \"on\"}\n\t\t\t\tid={this.id}\n\t\t\t\tdisabled={ this.props.state === STATES.DISABLED}\n\t\t\t\tplaceholder={this.props.control.additionalText}\n\t\t\t\tonChange={this.handleChange.bind(this)}\n\t\t\t\tvalue={value}\n\t\t\t\tlabelText={this.props.controlItem}\n\t\t\t\thideLabel={this.props.tableControl}\n\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\tref={(ref) => (this.textInputRef = ref)}\n\t\t\t/>);\n\t\t}\n\n\t\tlet display = textInput;\n\t\tif (this.props.tableControl) {\n\t\t\tconst tooltipProps = {};\n\t\t\tif (this.textInputRef) {\n\t\t\t\ttooltipProps.truncatedRef = this.textInputRef;\n\t\t\t}\n\t\t\tlet disabled = true;\n\t\t\tif (value && this.props.state !== STATES.DISABLED) {\n\t\t\t\tdisabled = false;\n\t\t\t}\n\t\t\tdisplay = (<TruncatedContentTooltip\n\t\t\t\t{...tooltipProps}\n\t\t\t\tcontent={textInput}\n\t\t\t\ttooltipText={value}\n\t\t\t\tdisabled={disabled}\n\t\t\t/>);\n\t\t}\n\t\treturn (\n\t\t\t<div className={className} data-id={ControlUtils.getDataId(this.props.propertyId)}>\n\t\t\t\t{display}\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} tableOnly state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nTextfieldControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.oneOfType([\n\t\tPropTypes.string,\n\t\tPropTypes.element\n\t]), // list control passes string\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.oneOfType([\n\t\tPropTypes.string,\n\t\tPropTypes.array\n\t]), // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(TextfieldControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { Button } from \"carbon-components-react\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport { STATES, MESSAGE_KEYS } from \"./../../constants/constants.js\";\nimport classNames from \"classnames\";\nimport Isvg from \"react-inlinesvg\";\n\nclass ToggletextControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t\tthis.valuesMap = {};\n\t\tthis.iconsMap = {};\n\t\tfor (let i = 0; i < props.control.values.length; ++i) {\n\t\t\tthis.valuesMap[props.control.values[i]] = props.control.valueLabels[i];\n\t\t\tif (typeof props.control.valueIcons !== \"undefined\") {\n\t\t\t\tthis.iconsMap[props.control.values[i]] = props.control.valueIcons[i];\n\t\t\t}\n\t\t}\n\t}\n\n\tonClick(evt) {\n\t\tconst renderValue = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tconst newValue = (renderValue === this.props.control.values[0]) ? this.props.control.values[1] : this.props.control.values[0];\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, newValue);\n\n\t}\n\n\trenderIcon() {\n\t\tlet icon = null;\n\t\tif (typeof this.iconsMap[this.props.value] !== \"undefined\") {\n\t\t\tconst imgSource = this.iconsMap[this.props.value];\n\t\t\tif (typeof imgSource === \"string\" && imgSource.slice(imgSource.length - 4) === \".svg\") {\n\t\t\t\t// svg image\n\t\t\t\ticon = <Isvg className=\"bx--btn__icon\" src={imgSource} />;\n\t\t\t} else {\n\t\t\t\ticon = (<img\n\t\t\t\t\tclassName=\"bx--btn__icon\"\n\t\t\t\t\tsrc={imgSource}\n\t\t\t\t\talt=\"\"\n\t\t\t\t/>);\n\t\t\t}\n\t\t}\n\t\treturn icon;\n\t}\n\n\trender() {\n\t\tlet rendered = this.valuesMap[this.props.value];\n\t\tif (typeof rendered === \"undefined\") {\n\t\t\trendered = this.props.value;\n\t\t}\n\t\tlet button = null;\n\t\tconst buttonType = this.props.tableControl ? \"ghost\" : \"tertiary\";\n\t\tif (typeof rendered !== \"undefined\") {\n\t\t\tbutton = (\n\t\t\t\t<Button\n\t\t\t\t\tkind={buttonType}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tonClick={this.onClick.bind(this)}\n\t\t\t\t\trenderIcon={this.renderIcon.bind(this)}\n\t\t\t\t\ticonDescription={formatMessage(this.reactIntl, MESSAGE_KEYS.TOGGLETEXT_ICON_DESCRIPTION, { toggletext_label: this.props.value })}\n\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t>\n\t\t\t\t\t{rendered}\n\t\t\t\t</Button>\n\t\t\t);\n\t\t}\n\n\t\tconst className = classNames(\"properties-toggletext\", { \"hide\": this.props.state === STATES.HIDDEN }, this.props.messageInfo ? this.props.messageInfo.type : null);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\taria-label={(this.props.control.label && this.props.control.label.text) ? this.props.control.label.text : \"\"}\n\t\t\t\tclassName={className}\n\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\tdata-id={ControlUtils.getDataId(this.props.propertyId)}\n\t\t\t>\n\t\t\t\t{this.props.tableControl ? null : this.props.controlItem}\n\t\t\t\t{button}\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nToggletextControl.propTypes = {\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrol: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.string, // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(ToggletextControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { TextArea } from \"carbon-components-react\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport { STATES } from \"./../../constants/constants.js\";\nimport { CONDITION_MESSAGE_TYPE, MESSAGE_KEYS, TRUNCATE_LIMIT } from \"./../../constants/constants.js\";\nimport classNames from \"classnames\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport { v4 as uuid4 } from \"uuid\";\n\nconst newLine = \"\\n\";\n\nclass TextareaControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t\tthis.charLimit = ControlUtils.getCharLimit(props.control, props.controller.getMaxLengthForMultiLineControls());\n\t\tthis.uuid = uuid4();\n\t\tthis.id = ControlUtils.getControlId(this.props.propertyId, this.uuid);\n\t}\n\n\thandleChange(evt) {\n\t\tlet value = evt.target.value;\n\t\tif (this.charLimit !== -1 && value) {\n\t\t\tvalue = value.substring(0, this.charLimit);\n\t\t}\n\t\tif (this.props.control.valueDef && this.props.control.valueDef.isList) { // array\n\t\t\tvalue = ControlUtils.splitNewlines(value, newLine);\n\t\t}\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, value);\n\t}\n\n\trender() {\n\t\tlet value = this.props.value ? this.props.value : \"\";\n\t\tconst joined = ControlUtils.joinNewlines(value, newLine);\n\t\tvalue = joined.value;\n\t\tconst truncated = joined.truncated;\n\n\t\tlet textArea = null;\n\t\tlet validationProps = ControlUtils.getValidationProps(this.props.messageInfo, this.props.tableControl);\n\t\tlet showValidationMessage = false;\n\t\t// carbon textarea doesn't support warn yet\n\t\tif (validationProps.warn) {\n\t\t\tshowValidationMessage = true;\n\t\t\tvalidationProps = {};\n\t\t}\n\t\tif (truncated) { // A value is too long to show for editing, display as readonly\n\t\t\tconst errorMessage = {\n\t\t\t\ttext: formatMessage(this.reactIntl, MESSAGE_KEYS.TRUNCATE_LONG_STRING_ERROR, { truncate_limit: TRUNCATE_LIMIT }),\n\t\t\t\ttype: CONDITION_MESSAGE_TYPE.ERROR,\n\t\t\t\tvalidation_id: this.props.control.name\n\t\t\t};\n\t\t\tvalidationProps = ControlUtils.getValidationProps(errorMessage, this.props.tableControl);\n\t\t\ttextArea = (<div>\n\t\t\t\t<TextArea\n\t\t\t\t\t{...validationProps}\n\t\t\t\t\tid={this.id}\n\t\t\t\t\tdisabled\n\t\t\t\t\tplaceholder={this.props.control.additionalText}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tlabelText={this.props.controlItem}\n\t\t\t\t\thideLabel={this.props.tableControl}\n\t\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\t/>\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} tableOnly={!showValidationMessage} state={\"\"} messageInfo={errorMessage} />\n\t\t\t</div>);\n\t\t} else {\n\t\t\ttextArea = (<TextArea\n\t\t\t\t{...validationProps}\n\t\t\t\tid={this.id}\n\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\tplaceholder={this.props.control.additionalText}\n\t\t\t\tonChange={this.handleChange.bind(this)}\n\t\t\t\tvalue={value}\n\t\t\t\tlabelText={this.props.controlItem}\n\t\t\t\thideLabel={this.props.tableControl}\n\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t/>);\n\t\t}\n\n\t\tlet display = textArea;\n\t\tif (this.props.tableControl) {\n\t\t\tconst tooltipId = \"tooltip-column-textarea\";\n\t\t\tlet disabled = true;\n\t\t\tif (value && this.props.state !== STATES.DISABLED) {\n\t\t\t\tdisabled = false;\n\t\t\t}\n\t\t\tconst tooltip = (\n\t\t\t\t<div className=\"properties-tooltips\">\n\t\t\t\t\t{String(value)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t\tdisplay = (<Tooltip\n\t\t\t\tid={tooltipId}\n\t\t\t\ttip={tooltip}\n\t\t\t\tdirection=\"bottom\"\n\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\tdisable={disabled}\n\t\t\t>\n\t\t\t\t{textArea}\n\t\t\t</Tooltip>);\n\t\t}\n\t\tconst className = classNames(\"properties-textarea\", { \"hide\": this.props.state === STATES.HIDDEN }, this.props.messageInfo ? this.props.messageInfo.type : null);\n\t\treturn (\n\t\t\t<div className={className} data-id={ControlUtils.getDataId(this.props.propertyId)}>\n\t\t\t\t{display}\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} tableOnly={!showValidationMessage} state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>\n\n\t\t);\n\t}\n}\n\nTextareaControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.oneOfType([\n\t\tPropTypes.string,\n\t\tPropTypes.array\n\t]), // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(TextareaControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { NumberInput, Button } from \"carbon-components-react\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport { STATES, MESSAGE_KEYS } from \"./../../constants/constants.js\";\nimport classNames from \"classnames\";\nimport { ControlType } from \"./../../constants/form-constants\";\nimport { Shuffle16 } from \"@carbon/icons-react\";\nimport { has } from \"lodash\";\n\nclass NumberfieldControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.onDirection = this.onDirection.bind(this);\n\t\tthis.generateNumber = this.generateNumber.bind(this);\n\t\tthis.id = ControlUtils.getControlId(this.props.propertyId);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t}\n\n\tonDirection(direction) {\n\t\tlet originalValue = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tif (typeof originalValue === \"undefined\" || originalValue === null) {\n\t\t\toriginalValue = 0;\n\t\t}\n\t\tconst decimalsInOriginalValue = (originalValue.toString()).split(\".\")[1];\n\t\tthis.props.control.increment = this.props.control.increment ? this.props.control.increment : 1;\n\t\tconst decimalsInIncrement = (this.props.control.increment.toString()).split(\".\")[1];\n\t\tconst numValue = direction === \"up\" ? Number(originalValue) + this.props.control.increment : Number(originalValue) - this.props.control.increment;\n\t\tif (decimalsInIncrement) {\n\t\t\tlet decimalPrecision = decimalsInIncrement.length;\n\t\t\tif (decimalsInOriginalValue) {\n\t\t\t\tdecimalPrecision = decimalsInOriginalValue.length >= decimalsInIncrement.length ? decimalsInOriginalValue.length : decimalsInIncrement.length;\n\t\t\t}\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, Number(numValue.toFixed(decimalPrecision)));\n\t\t} else {\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, numValue);\n\t\t}\n\t}\n\n\thandleChange(evt, direction) {\n\t\tif (typeof direction === \"string\") {\n\t\t\tthis.onDirection(direction);\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tevt.target.validity && evt.target.validity.badInput ||\n\t\t\t(!isFinite(evt.target.value))\n\t\t) {\n\t\t\t// Note - When user enters an invalid number, evt.target.value is set to \"\".\n\t\t\t// It is difficult to differentiate between empty value and invalid input because both return \"\".\n\t\t\t// It's not possible to add a seaparte condition for invalid input because we never get the actual invalid number entered by the user.\n\t\t\t// So, setting error message for invalid input here instead of using conditions.\n\t\t\tif (this.props.controller.getErrorMessage(this.props.propertyId) === null) {\n\t\t\t\tconst errorMessage = {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\ttext: formatMessage(this.reactIntl, MESSAGE_KEYS.INVALID_NUMBER_ERROR),\n\t\t\t\t\tpropertyId: this.props.propertyId,\n\t\t\t\t\tvalidation_id: \"invalid_number\"\n\t\t\t\t};\n\t\t\t\tthis.props.controller.updateErrorMessage(this.props.propertyId, errorMessage);\n\t\t\t}\n\t\t\t// Return without updating property value\n\t\t\treturn;\n\t\t}\n\t\t// Number is valid, clear invalid number error if it exists\n\t\tconst invalidNumberError = this.props.controller.getErrorMessage(this.props.propertyId) !== null &&\n\t\tthis.props.controller.getErrorMessage(this.props.propertyId).validation_id === \"invalid_number\";\n\t\tif (invalidNumberError) {\n\t\t\tthis.props.controller.updateErrorMessage(this.props.propertyId, null);\n\t\t}\n\n\t\tconst actualValue = evt.target.value;\n\t\tif (typeof actualValue === \"undefined\" || actualValue === null || actualValue === \"\") {\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, null);\n\t\t} else {\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, Number(actualValue));\n\t\t}\n\t\t// TODO need to check for integer in validations\n\t}\n\n\tgenerateNumber() {\n\t\tconst generator = this.props.control.label.numberGenerator;\n\t\tconst min = generator.range && generator.range.min ? generator.range.min : 10000;\n\t\tconst max = generator.range && generator.range.max ? generator.range.max : 99999;\n\t\tconst newValue = Math.floor(Math.random() * (max - min + 1) + min);\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, newValue);\n\t}\n\n\trender() {\n\t\tlet controlValue = \"\"; // Default to empty string to avoid '0' appearing when value is 'null'\n\t\tif (this.props.value !== null && typeof this.props.value !== \"undefined\") {\n\t\t\tcontrolValue = this.props.value;\n\t\t}\n\n\t\tconst disabled = this.props.state === STATES.DISABLED;\n\t\tconst hidden = this.props.state === STATES.HIDDEN;\n\t\tlet numberGenerator;\n\t\tif (has(this.props.control, \"label.numberGenerator\")) {\n\t\t\tnumberGenerator = (<Button\n\t\t\t\tclassName={classNames(\"properties-number-generator\", { \"hide\": hidden })}\n\t\t\t\tonClick={this.generateNumber}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tkind=\"tertiary\"\n\t\t\t\trenderIcon={Shuffle16}\n\t\t\t\ttooltipPosition=\"bottom\"\n\t\t\t\ttooltipAlignment=\"end\"\n\t\t\t\ticonDescription={this.props.control.label.numberGenerator.text}\n\t\t\t\thasIconOnly\n\t\t\t/>);\n\t\t}\n\t\tconst className = classNames(\n\t\t\t\"properties-numberfield\",\n\t\t\t{ \"numberfield-with-number-generator\": has(this.props.control, \"label.numberGenerator\") ? this.props.control.label.numberGenerator : null },\n\t\t\t{ \"hide\": hidden },\n\t\t\tthis.props.messageInfo ? this.props.messageInfo.type : null\n\t\t);\n\t\tconst validationProps = ControlUtils.getValidationProps(this.props.messageInfo, this.props.tableControl);\n\t\treturn (\n\t\t\t<div className={className} data-id={ControlUtils.getDataId(this.props.propertyId)}>\n\t\t\t\t<NumberInput\n\t\t\t\t\t{...validationProps}\n\t\t\t\t\tref= { (ref) => (this.numberInput = ref)}\n\t\t\t\t\tid={this.id}\n\t\t\t\t\tonChange={this.handleChange.bind(this)}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tstep={this.props.control.increment}\n\t\t\t\t\tvalue={controlValue}\n\t\t\t\t\tplaceholder={this.props.control.additionalText}\n\t\t\t\t\tlabel={this.props.controlItem}\n\t\t\t\t\thideLabel={this.props.tableControl}\n\t\t\t\t\tallowEmpty\n\t\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\t\thideSteppers={this.props.tableControl || (this.props.control.controlType === ControlType.NUMBERFIELD)}\n\t\t\t\t/>\n\t\t\t\t{numberGenerator}\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} tableOnly state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nNumberfieldControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.oneOfType([\n\t\tPropTypes.string,\n\t\tPropTypes.element\n\t]), // list control passes string\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.number, // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(NumberfieldControl);\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Base class for table controls\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Toolbar from \"../../../toolbar/toolbar\";\n\nimport { STATES } from \"./../../constants/constants\";\n\nclass TableButtons extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.getCustomButtonEnabled = this.getCustomButtonEnabled.bind(this);\n\t\tthis.customButtonIconCallback = this.customButtonIconCallback.bind(this);\n\t\tthis.customButtonOnClick = this.customButtonOnClick.bind(this);\n\t\tthis.convertToolbarConfig = this.convertToolbarConfig.bind(this);\n\t}\n\n\tgetCustomButtonEnabled(tableState, buttonConfig) {\n\t\tconst tableDisabled = typeof tableState !== \"undefined\" && tableState === STATES.DISABLED;\n\t\tconst buttonEnabled = this.props.customButtonsState && typeof this.props.customButtonsState[buttonConfig.id] !== \"undefined\"\n\t\t\t? this.props.customButtonsState[buttonConfig.id] // set to true in redux if enabled, override the default from uihints\n\t\t\t: buttonConfig.enabled || false; // fallback to default value\n\t\treturn !tableDisabled && buttonEnabled;\n\t}\n\n\tcustomButtonIconCallback(buttonId, carbonIcon) {\n\t\tconst buttonIconHandler = this.props.controller.getHandlers().buttonIconHandler;\n\t\tlet icon;\n\t\tif (buttonIconHandler) {\n\t\t\tbuttonIconHandler({\n\t\t\t\ttype: \"customButtonIcon\",\n\t\t\t\tpropertyId: this.props.propertyId,\n\t\t\t\tbuttonId: buttonId,\n\t\t\t\tcarbonIcon: carbonIcon\n\t\t\t}, (appIcon) => {\n\t\t\t\ticon = appIcon;\n\t\t\t});\n\t\t}\n\t\treturn icon;\n\t}\n\n\tcustomButtonOnClick(buttonId) {\n\t\tconst buttonHandler = this.props.controller.getHandlers().buttonHandler;\n\t\tif (buttonHandler) {\n\t\t\tbuttonHandler({\n\t\t\t\ttype: \"custom_button\",\n\t\t\t\tpropertyId: this.props.propertyId,\n\t\t\t\tbuttonId: buttonId\n\t\t\t});\n\t\t}\n\t}\n\n\tconvertToolbarConfig(tableState, customButtons = []) {\n\t\tconst toolbarConfig = [];\n\t\tcustomButtons.forEach((buttonConfig) => {\n\t\t\tconst buttonEnabled = this.getCustomButtonEnabled(tableState, buttonConfig);\n\t\t\tconst buttonDef = {\n\t\t\t\taction: buttonConfig.id,\n\t\t\t\tenable: buttonEnabled\n\t\t\t};\n\n\t\t\tif (buttonConfig.icon) {\n\t\t\t\tbuttonDef.iconEnabled = buttonConfig.icon;\n\t\t\t} else if (buttonConfig.carbonIcon) {\n\t\t\t\tbuttonDef.iconEnabled = this.customButtonIconCallback(buttonConfig.id, buttonConfig.carbonIcon);\n\t\t\t}\n\n\t\t\tif (buttonConfig.label) {\n\t\t\t\tbuttonDef.label = buttonConfig.label.text;\n\t\t\t\tbuttonDef.incLabelWithIcon = \"before\";\n\t\t\t\tbuttonDef.kind = \"ghost\";\n\t\t\t}\n\n\t\t\tif (buttonConfig.description) {\n\t\t\t\tbuttonDef.tooltip = buttonConfig.description.text;\n\t\t\t}\n\n\t\t\tif (buttonConfig.divider && buttonConfig.divider === \"before\") {\n\t\t\t\ttoolbarConfig.push({ divider: true });\n\t\t\t}\n\t\t\ttoolbarConfig.push(buttonDef);\n\t\t\tif (buttonConfig.divider && buttonConfig.divider === \"after\") {\n\t\t\t\ttoolbarConfig.push({ divider: true });\n\t\t\t}\n\t\t});\n\t\treturn toolbarConfig;\n\t}\n\n\trender() {\n\t\tconst toolbarConfig = {\n\t\t\tleftBar: this.convertToolbarConfig(this.props.tableState, this.props.customButtons)\n\t\t};\n\t\treturn (<div className=\"properties-custom-table-buttons\">\n\t\t\t<Toolbar\n\t\t\t\tconfig={toolbarConfig}\n\t\t\t\tinstanceId={0}\n\t\t\t\tsize=\"sm\"\n\t\t\t\ttoolbarActionHandler={this.customButtonOnClick}\n\t\t\t/>\n\t\t</div>);\n\t}\n}\n\nTableButtons.propTypes = {\n\tcontroller: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcustomButtons: PropTypes.array.isRequired,\n\ttableState: PropTypes.string,\n\tcustomButtonsState: PropTypes.object // set in by redux\n};\n\nexport default TableButtons;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Button } from \"carbon-components-react\";\nimport { Settings16 } from \"@carbon/icons-react\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport { cloneDeep } from \"lodash\";\n\nimport { MESSAGE_KEYS } from \"./../../constants/constants\";\n\n\nimport SubPanelInvoker from \"./invoker.jsx\";\n\nexport default class SubPanelCell extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.showSubPanel = this.showSubPanel.bind(this);\n\t\tthis.onSubPanelHidden = this.onSubPanelHidden.bind(this);\n\t}\n\n\tonSubPanelHidden(applyChanges) {\n\t\t// on cancel reset back to original value\n\t\tif (!applyChanges) {\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, this.initialControlValue);\n\t\t\tthis.props.controller.setErrorMessages(this.initialMessages);\n\t\t\tthis.props.controller.setControlStates(this.initialStates);\n\t\t}\n\t}\n\n\tshowSubPanel() {\n\t\t// sets the current value for parameter. Used on cancel\n\t\tthis.initialControlValue = cloneDeep(this.props.controller.getPropertyValue(this.props.propertyId));\n\t\tthis.initialMessages = this.props.controller.getAllErrorMessages();\n\t\tthis.initialStates = this.props.controller.getControlStates();\n\t\tthis.subPanelInvoker.showSubDialog(this.props.title, this.props.panel, this.onSubPanelHidden);\n\t}\n\n\trender() {\n\t\tconst tooltipId = \"tooltip-subpanel-cell\";\n\t\tconst disabled = typeof this.props.disabled !== \"undefined\" ? this.props.disabled : false;\n\t\tconst subPanelToolTip = formatMessage(this.props.controller.getReactIntl(),\n\t\t\tMESSAGE_KEYS.SUBPANEL_BUTTON_TOOLTIP);\n\t\tconst applyLabel = formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.APPLYBUTTON_LABEL);\n\t\tconst rejectLabel = formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.REJECTBUTTON_LABEL);\n\t\treturn (\n\n\t\t\t<SubPanelInvoker ref={ (ref) => (this.subPanelInvoker = ref) }\n\t\t\t\trightFlyout={this.props.rightFlyout}\n\t\t\t\tapplyLabel={applyLabel}\n\t\t\t\trejectLabel={rejectLabel}\n\t\t\t\tcontroller={this.props.controller}\n\t\t\t>\n\t\t\t\t<Tooltip\n\t\t\t\t\tid={tooltipId}\n\t\t\t\t\ttip={subPanelToolTip}\n\t\t\t\t\tdirection=\"left\"\n\t\t\t\t\tclassName=\"properties-tooltips icon-tooltip\"\n\t\t\t\t>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tclassName=\"properties-subpanel-button\"\n\t\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\t\trenderIcon={Settings16}\n\t\t\t\t\t\tonClick={this.showSubPanel}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\ticonDescription={subPanelToolTip}\n\t\t\t\t\t\thasIconOnly\n\t\t\t\t\t/>\n\t\t\t\t</Tooltip>\n\t\t\t</SubPanelInvoker>\n\t\t);\n\t}\n}\n\nSubPanelCell.propTypes = {\n\tlabel: PropTypes.string,\n\ttitle: PropTypes.string,\n\tpanel: PropTypes.object.isRequired,\n\tdisabled: PropTypes.bool,\n\tcontroller: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object,\n\trightFlyout: PropTypes.bool\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Base class for table controls\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Button, Checkbox } from \"carbon-components-react\";\nimport FlexibleTable from \"./../components/flexible-table\";\nimport TableButtons from \"./../components/table-buttons\";\nimport SubPanelCell from \"./../panels/sub-panel/cell.jsx\";\nimport ReadonlyControl from \"./readonly\";\nimport * as PropertyUtils from \"./../util/property-utils\";\nimport classNames from \"classnames\";\nimport { Add16, TrashCan16, Edit16 } from \"@carbon/icons-react\";\nimport { ControlType, EditStyle } from \"./../constants/form-constants\";\nimport { v4 as uuid4 } from \"uuid\";\n\nimport { MESSAGE_KEYS, STATES, TABLE_SUBPANEL_BUTTON_WIDTH, SORT_DIRECTION, ROW_SELECTION, UPDATE_TYPE } from \"./../constants/constants\";\n\nimport { isEqual, findIndex, sortBy, cloneDeep } from \"lodash\";\n\n/* eslint max-depth: [\"error\", 5] */\n\nexport default class AbstractTable extends React.Component {\n\n\tstatic getDerivedStateFromProps(nextProps, prevState) {\n\t\tconst enableRemoveIcon = (nextProps.selectedRows.length !== 0);\n\t\tif (prevState.enableRemoveIcon !== enableRemoveIcon) {\n\t\t\treturn ({ enableRemoveIcon: enableRemoveIcon });\n\t\t}\n\t\treturn ({});\n\t}\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tfilterText: null,\n\t\t\tenableRemoveIcon: false\n\t\t};\n\t\tthis.onPanelContainer = [];\n\t\t// used to determine if column controls can be inline or if field picker is used\n\t\tthis.allowColumnControls = false;\n\n\t\tthis.isReadonlyTable = this.isReadonlyTable.bind(this);\n\t\tthis.indexOfColumn = this.indexOfColumn.bind(this);\n\t\tthis.setCurrentControlValueSelected = this.setCurrentControlValueSelected.bind(this);\n\t\tthis.setReadOnlyColumnValue = this.setReadOnlyColumnValue.bind(this);\n\t\tthis.removeSelected = this.removeSelected.bind(this);\n\t\tthis.updateRowSelections = this.updateRowSelections.bind(this);\n\t\tthis.handleRowClick = this.handleRowClick.bind(this);\n\t\tthis.createTable = this.createTable.bind(this);\n\t\tthis.onFilter = this.onFilter.bind(this);\n\t\tthis.onSort = this.onSort.bind(this);\n\t\tthis.setScrollToRow = this.setScrollToRow.bind(this);\n\t\tthis.includeInFilter = this.includeInFilter.bind(this);\n\t\tthis.makeAddRemoveButtonPanel = this.makeAddRemoveButtonPanel.bind(this);\n\t\tthis.makeEditButtonPanel = this.makeEditButtonPanel.bind(this);\n\t\tthis.makeCustomButtonsPanel = this.makeCustomButtonsPanel.bind(this);\n\t\tthis.buildChildItem = this.buildChildItem.bind(this);\n\t\tthis.makeCells = this.makeCells.bind(this);\n\t\tthis.checkedAll = this.checkedAll.bind(this);\n\t\tthis.isLightTheme = this.isLightTheme.bind(this);\n\n\t\tif (props.selectedRows && props.selectedRows.length > 0) {\n\t\t\tthis.scrollToRow = props.selectedRows[props.selectedRows.length - 1];\n\t\t}\n\n\t\tthis.selectSummaryPropertyName = \"table-multi-select-edit-property-\" + props.control.name;\n\t\tprops.controller.saveControls([{ name: this.selectSummaryPropertyName }]);\n\t\tthis.setSelectedSummaryRowValue(props.selectedRows);\n\t\tthis.uuid = uuid4();\n\t}\n\n\tcomponentDidMount() {\n\t\tif (this.props.control.subControls) {\n\t\t\tconst updatedControlValues = this.setReadOnlyColumnValue();\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, updatedControlValues, true, UPDATE_TYPE.INITIAL_LOAD);\n\t\t}\n\t}\n\n\tcomponentDidUpdate() {\n\t\tif (this.isSelectSummaryEdit(this.props.selectedRows)) {\n\t\t\tthis.updateSelectedRowsValues();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.props.controller.removePropertyValue({ name: this.selectSummaryPropertyName });\n\t}\n\n\tonFilter(filterString) {\n\t\tthis.setState({ filterText: filterString });\n\t}\n\n\tonSort(spec) {\n\t\tlet controlValue = this.props.value;\n\t\tlet col = -1;\n\t\tfor (var colIndex = 0; colIndex < this.props.control.subControls.length; colIndex++) {\n\t\t\tif (this.props.control.subControls[colIndex].name === spec.column) {\n\t\t\t\tcol = colIndex;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (col > -1) {\n\t\t\tcontrolValue = sortBy(controlValue, function(row) {\n\t\t\t\treturn row[col];\n\t\t\t});\n\t\t\tif (spec.direction === SORT_DIRECTION.DESC) {\n\t\t\t\tcontrolValue.reverse();\n\t\t\t}\n\t\t\tthis.setCurrentControlValueSelected(controlValue, []);\n\t\t}\n\t}\n\n\tgetOnPanelContainer(selectedRows) {\n\t\tif (this.onPanelContainer.length === 0 || selectedRows.length === 0 ||\n\t\t\tthis.isSelectSummaryEdit(selectedRows)) {\n\t\t\treturn (<div />);\n\t\t}\n\n\t\treturn (<div className=\"properties-onpanel-container\">{this.onPanelContainer[selectedRows[0]]}</div>);\n\t}\n\n\tgetDefaultRow() {\n\t\tconst row = [];\n\t\tif (this.props.control.defaultRow) {\n\t\t\tfor (const colValue of this.props.control.defaultRow) {\n\t\t\t\tif (typeof colValue !== \"undefined\" && colValue !== null && colValue.parameterRef) {\n\t\t\t\t\trow.push(this.props.controller.getPropertyValue({ name: colValue.parameterRef }));\n\t\t\t\t} else {\n\t\t\t\t\trow.push(colValue);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn row;\n\t}\n\n\tsetScrollToRow(row) {\n\t\tthis.scrollToRow = row;\n\t}\n\n\tsetCurrentControlValueSelected(controlValue, inSelectedRows) {\n\t\tlet updatedControlValues = controlValue;\n\t\tif (this.props.control.subControls) {\n\t\t\tupdatedControlValues = this.setReadOnlyColumnValue(controlValue);\n\t\t}\n\n\t\t// Here we convert any compound field strings into compound values for storage\n\t\tif (Array.isArray(updatedControlValues)) {\n\t\t\tfor (let idx = 0; idx < updatedControlValues.length; idx++) {\n\t\t\t\tconst value = updatedControlValues[idx];\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tfor (let idx2 = 0; idx2 < this.props.control.subControls.length; idx2++) {\n\t\t\t\t\t\tconst subControl = this.props.control.subControls[idx2];\n\t\t\t\t\t\tif (subControl.role === \"column\" && subControl.valueDef.propType === \"structure\") {\n\t\t\t\t\t\t\tupdatedControlValues[idx][idx2] = PropertyUtils.fieldStringToValue(\n\t\t\t\t\t\t\t\tvalue[idx2], subControl, this.props.controller);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (this.props.control.role === \"column\" && this.props.control.valueDef.propType === \"structure\") {\n\t\t\t\t\tupdatedControlValues[idx] = PropertyUtils.fieldStringToValue(\n\t\t\t\t\t\tvalue, this.props.control, this.props.controller);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update the property value\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, updatedControlValues);\n\t\tconst selectedRows = Array.isArray(inSelectedRows) ? inSelectedRows : [];\n\t\tthis.updateRowSelections(selectedRows);\n\t}\n\n\tsetReadOnlyColumnValue(controlValue) {\n\t\tconst controlValues = controlValue ? controlValue : this.props.value;\n\t\tif (!Array.isArray(controlValues)) {\n\t\t\treturn controlValues;\n\t\t}\n\t\tfor (var rowIndex = 0; rowIndex < controlValues.length; rowIndex++) {\n\t\t\tfor (var colIndex = 0; colIndex < this.props.control.subControls.length; colIndex++) {\n\t\t\t\tconst columnDef = this.props.control.subControls[colIndex];\n\t\t\t\tif (columnDef.controlType === ControlType.READONLY && columnDef.generatedValues && columnDef.generatedValues.operation === \"index\") {\n\t\t\t\t\tconst index = typeof columnDef.generatedValues.startValue !== \"undefined\" ? columnDef.generatedValues.startValue + rowIndex : rowIndex + 1;\n\t\t\t\t\tcontrolValues[rowIndex][colIndex] = index;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn controlValues;\n\t}\n\n\t// This will set the select summary row values either from the property value or the default values.\n\tsetSelectedSummaryRowValue(selection) {\n\t\tif (this.isSelectSummaryEdit(selection)) {\n\t\t\tconst summaryPropertyId = {\n\t\t\t\tname: this.selectSummaryPropertyName\n\t\t\t};\n\t\t\tlet value = this.props.controller.getPropertyValue(summaryPropertyId);\n\t\t\tif (!value) {\n\t\t\t\tvalue = [this.getDefaultRow()];\n\t\t\t\tthis.props.controller.updatePropertyValue(summaryPropertyId, value, true);\n\t\t\t}\n\t\t\tthis.selectedSummaryRowValue = cloneDeep(value);\n\t\t}\n\t}\n\n\tisSelectSummaryEdit(selectedRows) {\n\t\treturn (this.props.control.rowSelection === ROW_SELECTION.MULTIPLE && selectedRows.length > 1);\n\t}\n\n\tisReadonlyTable() {\n\t\treturn this.props.control.controlType === ControlType.READONLYTABLE;\n\t}\n\n\tindexOfColumn(controlId) {\n\t\treturn findIndex(this.props.control.subControls, function(columnControl) {\n\t\t\treturn columnControl.name === controlId;\n\t\t});\n\t}\n\n\thandleRowClick(rowIndex, evt) {\n\t\tlet selectedRows = this.props.selectedRows;\n\t\tif (this.props.control.rowSelection === ROW_SELECTION.SINGLE) {\n\t\t\tselectedRows = [rowIndex];\n\t\t} else if (evt.metaKey === true || evt.ctrlKey === true) {\n\t\t\t// If already selected then remove otherwise add\n\t\t\tconst index = selectedRows.indexOf(rowIndex);\n\t\t\tif (index >= 0) {\n\t\t\t\tselectedRows.splice(index, 1);\n\t\t\t} else {\n\t\t\t\tselectedRows = selectedRows.concat(rowIndex);\n\t\t\t}\n\t\t} else if (evt.shiftKey === true) {\n\t\t\tconst anchor = selectedRows.length > 0 ? selectedRows[0] : rowIndex;\n\t\t\tconst start = anchor > rowIndex ? rowIndex : anchor;\n\t\t\tconst end = (anchor > rowIndex ? anchor : rowIndex) + 1;\n\t\t\tconst newSelns = [];\n\t\t\tfor (let i = start; i < end; i++) {\n\t\t\t\tnewSelns.push(i);\n\t\t\t}\n\t\t\tselectedRows = newSelns;\n\t\t}\n\t\tthis.updateRowSelections(selectedRows);\n\t}\n\n\t// this will got through all selected rows and update any column value in the row with the\n\t// column value in the selected summary row that has changed.\n\tupdateSelectedRowsValues() {\n\t\tconst summaryPropertyId = {\n\t\t\tname: this.selectSummaryPropertyName\n\t\t};\n\t\tconst tableControl = this.props.controller.getControl({ name: this.props.control.name });\n\t\tconst newSelectedSummaryRow = this.props.controller.getPropertyValue(summaryPropertyId);\n\t\tif (newSelectedSummaryRow && Array.isArray(newSelectedSummaryRow)) {\n\t\t\tnewSelectedSummaryRow[0].forEach((cellValue, colIndex) => {\n\t\t\t\tif (cellValue !== null && !isEqual(cellValue, this.selectedSummaryRowValue[0][colIndex])) {\n\t\t\t\t\t// if a column does not have a value, the default value is null and the value returned\n\t\t\t\t\t// from getPropertyValue is undefined causing unneccessary updates and an infinite loop during intialization\n\t\t\t\t\tconst testCell = (typeof cellValue === \"undefined\") ? null : cellValue;\n\t\t\t\t\tthis.props.selectedRows.forEach((rowIndex) => {\n\t\t\t\t\t\tthis.props.controller.updatePropertyValue({ name: this.props.control.name, row: rowIndex, col: colIndex }, testCell, true);\n\t\t\t\t\t});\n\t\t\t\t\tif (tableControl.subControls[colIndex].controlType === ControlType.ONEOFSELECT) {\n\t\t\t\t\t\tthis.props.controller.updatePropertyValue({ name: this.selectSummaryPropertyName, row: 0, col: colIndex }, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.selectedSummaryRowValue = cloneDeep(newSelectedSummaryRow);\n\t\t}\n\t}\n\n\tupdateRowSelections(selection) {\n\t\tthis.props.controller.updateSelectedRows(this.props.propertyId, selection);\n\t\t// react throws warning when modal because the button does not exist at this moment\n\t\tif (this.props.rightFlyout) {\n\t\t\tthis.setState({ enableRemoveIcon: (selection.length !== 0) });\n\t\t}\n\t\tthis.setSelectedSummaryRowValue(selection);\n\t}\n\n\tremoveSelected() {\n\t\tconst rows = this.props.value;\n\t\t// Sort descending to ensure lower indices don\"t get\n\t\t// changed when values are deleted\n\t\tconst selected = this.props.selectedRows.sort(function(a, b) {\n\t\t\treturn b - a;\n\t\t});\n\t\tfor (let i = 0; i < selected.length; i++) {\n\t\t\trows.splice(selected[i], 1);\n\t\t\t// this will remove any error messages associate with row.\n\t\t\tthis.props.controller.removeErrorMessageRow({ name: this.props.propertyId.name, row: selected[i] });\n\t\t}\n\n\t\tthis.setCurrentControlValueSelected(rows);\n\t}\n\n\t// selectSummaryRow is true if creating the makeSelectedEditRow header row\n\t_makeCell(columnDef, controlValue, propertyName, rowIndex, colIndex, tableState, selectSummaryRow) {\n\t\tconst childPropertyId = {\n\t\t\tname: propertyName,\n\t\t\trow: rowIndex,\n\t\t\tcol: colIndex\n\t\t};\n\n\t\tconst parentPropertyId = cloneDeep(this.props.propertyId);\n\t\tlet propertyId = childPropertyId;\n\t\t// Do not use parentPropertyId if creating the makeSelectedEditRow\n\t\tif (!selectSummaryRow && parentPropertyId.name !== childPropertyId.name) {\n\t\t\tpropertyId = this.props.controller.setChildPropertyId(parentPropertyId, childPropertyId);\n\t\t}\n\n\t\tconst tableInfo = { table: true, allowColumnControls: this.allowColumnControls };\n\t\tconst ControlFactory = this.props.controller.getControlFactory();\n\t\tlet cellContent;\n\t\tconst columnDefObj = Object.assign({}, columnDef); // clone columnDef\n\t\tconst cellClassName = columnDefObj.className ? columnDefObj.className : \"\";\n\t\tif (columnDef.dmImage) {\n\t\t\tconst fields = this.props.controller.getDatasetMetadataFields();\n\t\t\tconst stringValue = PropertyUtils.stringifyFieldValue(this.props.controller.getPropertyValue(propertyId), columnDef, true);\n\t\t\tcolumnDefObj.icon = PropertyUtils.getDMFieldIcon(fields,\n\t\t\t\tstringValue, columnDef.dmImage);\n\t\t}\n\t\tif (this.isReadonlyTable()) {\n\t\t\tcellContent = (<div className={classNames(\"properties-table-cell-control\", cellClassName)}>\n\t\t\t\t<ReadonlyControl\n\t\t\t\t\tcontrol={this.props.controller.getControl(propertyId)}\n\t\t\t\t\tpropertyId={propertyId}\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\ttableControl\n\t\t\t\t/>\n\t\t\t</div>);\n\t\t} else if (columnDef.editStyle === EditStyle.SUBPANEL || columnDef.editStyle === EditStyle.ON_PANEL) {\n\t\t\tif (selectSummaryRow) {\n\t\t\t\tcellContent = <div />;\n\t\t\t} else {\n\t\t\t\tcellContent = (<div className={classNames(\"properties-table-cell-control\", cellClassName)}>\n\t\t\t\t\t<ReadonlyControl\n\t\t\t\t\t\tcontrol={this.props.controller.getControl(propertyId)}\n\t\t\t\t\t\tpropertyId={propertyId}\n\t\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\t\ttableControl\n\t\t\t\t\t/>\n\t\t\t\t</div>);\n\t\t\t\tif (columnDef.editStyle === EditStyle.ON_PANEL) {\n\t\t\t\t// save the cell content in an object\n\t\t\t\t\tthis.onPanelContainer[rowIndex].push(<div key={colIndex}><br />{ControlFactory.createControlItem(columnDef, propertyId)}</div>);\n\t\t\t\t}\n\t\t\t}\n\t\t} else { // defaults to inline control\n\t\t\ttableInfo.editStyle = EditStyle.INLINE;\n\t\t\tcellContent = (<div className={classNames(\"properties-table-cell-control\", cellClassName)}>\n\t\t\t\t{ControlFactory.createControl(columnDefObj, propertyId, tableInfo)}\n\t\t\t</div>);\n\n\t\t}\n\t\treturn {\n\t\t\tcolumn: columnDef.name,\n\t\t\twidth: columnDef.width,\n\t\t\tcontent: cellContent,\n\t\t\tclassName: cellClassName,\n\t\t\tvalue: this.props.controller.getPropertyValue(propertyId),\n\t\t\tresizable: columnDef.resizable\n\t\t};\n\t}\n\t_getCustomCtrlContent(propertyId, columnDef, defaultContent, tableInfo) {\n\t\tlet cellContent = defaultContent;\n\t\t// allow the custom control to set the cell content\n\t\tif (columnDef.controlType === ControlType.CUSTOM) {\n\t\t\ttableInfo.editStyle = \"summary\";\n\t\t\tcellContent = this.props.controller.getCustomControl(propertyId, columnDef, tableInfo);\n\t\t}\n\t\treturn cellContent;\n\t}\n\n\t_getDisabledStatus(cellPropertyId, tableState) {\n\t\tif (typeof tableState !== \"undefined\" && tableState === STATES.DISABLED) {\n\t\t\treturn true;\n\t\t}\n\t\tconst cellState = this.props.controller.getControlState(cellPropertyId);\n\t\treturn cellState === STATES.DISABLED;\n\t}\n\n\t/**\n\t * Returns true if the given row should be included\n\t * in the current filter output.\n\t */\n\tincludeInFilter(rowIndex) {\n\t\t// If no search text, include all\n\t\tif (!this.state.filterText || this.state.filterText.length === 0) {\n\t\t\treturn true;\n\t\t}\n\t\tconst controlValue = this.props.value;\n\t\tfor (let i = 0; i < this.filterFields.length; i++) {\n\t\t\tfor (var colIndex = 0; colIndex < this.props.control.subControls.length; colIndex++) {\n\t\t\t\tconst columnDef = this.props.control.subControls[colIndex];\n\t\t\t\tif (columnDef.name === this.filterFields[i]) {\n\t\t\t\t\tconst value = controlValue[rowIndex][colIndex];\n\t\t\t\t\tif (typeof value === \"string\" && value.toLowerCase().indexOf(this.state.filterText.toLowerCase()) > -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\thasFilter() {\n\t\tlet hasFilter = false;\n\t\tif (this.props.control.subControls) {\n\t\t\tfor (const subControl of this.props.control.subControls) {\n\t\t\t\tif (subControl.filterable) {\n\t\t\t\t\thasFilter = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn hasFilter;\n\t}\n\n\taddOnClick(propertyId) {\n\t\tif (this.addOnClickCallback) {\n\t\t\tthis.addOnClickCallback(propertyId, this.onFieldPickerCloseCallback);\n\t\t}\n\t}\n\n\tisLightTheme() {\n\t\treturn this.props.controller.getLight() && this.props.control.light;\n\t}\n\n\tmakeSelectedEditRow(selectedRows) {\n\t\tif (selectedRows && Array.isArray(selectedRows) && selectedRows.length > 1) {\n\t\t\tconst rowsSelectedLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\t\tMESSAGE_KEYS.MULTI_SELECTED_ROW_LABEL);\n\t\t\tconst rowsSelectedAction = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\t\tMESSAGE_KEYS.MULTI_SELECTED_ROW_ACTION);\n\t\t\tconst title = selectedRows.length + \" \" + rowsSelectedLabel + \" \" + rowsSelectedAction;\n\t\t\tconst rows = [];\n\t\t\tconst sortFields = [];\n\t\t\tconst filterFields = [];\n\t\t\tconst headers = (this.props.control.header === false) ? [] : this.makeHeader(sortFields, filterFields);\n\t\t\tconst showHeader = false;\n\t\t\tconst value = this.props.controller.getPropertyValue({ name: this.selectSummaryPropertyName });\n\t\t\tthis.makeCells(rows, value, null, this.selectSummaryPropertyName, true);\n\t\t\tconst tableLabel = (this.props.control.label && this.props.control.label.text) ? this.props.control.label.text : \"\";\n\t\t\treturn (<div className=\"properties-at-selectedEditRows\" >\n\t\t\t\t<div className=\"properties-selectedEditRows-title\" >\n\t\t\t\t\t<span >{title}</span>\n\t\t\t\t</div>\n\t\t\t\t<FlexibleTable\n\t\t\t\t\tshowHeader={showHeader}\n\t\t\t\t\tcolumns={headers}\n\t\t\t\t\tdata={rows}\n\t\t\t\t\trows={0}\n\t\t\t\t\tscrollKey={this.selectSummaryPropertyName}\n\t\t\t\t\ttableLabel={tableLabel}\n\t\t\t\t\tsummaryTable\n\t\t\t\t\trowSelection={ROW_SELECTION.MULTIPLE}\n\t\t\t\t\tlight={this.isLightTheme()}\n\t\t\t\t\temptyTablePlaceholder={this.props.control.additionalText}\n\t\t\t\t/>\n\t\t\t</div>);\n\t\t}\n\t\treturn null;\n\t}\n\n\tmakeAddRemoveButtonPanel(tableState, tableButtonConfig) {\n\t\tthis.onFieldPickerCloseCallback = (tableButtonConfig && tableButtonConfig.fieldPickerCloseFunction)\n\t\t\t? tableButtonConfig.fieldPickerCloseFunction.bind(this)\n\t\t\t: null;\n\n\t\tconst removeOnClick = (tableButtonConfig && tableButtonConfig.removeButtonFunction)\n\t\t\t? tableButtonConfig.removeButtonFunction\n\t\t\t: this.removeSelected;\n\t\tconst removeButtonLabel = (tableButtonConfig && tableButtonConfig.removeButtonLabel) ? tableButtonConfig.removeButtonLabel\n\t\t\t: PropertyUtils.formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.STRUCTURETABLE_REMOVEBUTTON_LABEL);\n\t\tconst removeDisabled = !this.state.enableRemoveIcon || tableState === STATES.DISABLED;\n\n\n\t\tlet addButtonDisabled = false;\n\t\tthis.addOnClickCallback = (tableButtonConfig && tableButtonConfig.addButtonFunction)\n\t\t\t? tableButtonConfig.addButtonFunction\n\t\t\t: this.props.openFieldPicker;\n\t\tconst addButtonLabel = (tableButtonConfig && tableButtonConfig.addButtonLabel) ? tableButtonConfig.addButtonLabel\n\t\t\t: PropertyUtils.formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.STRUCTURETABLE_ADDBUTTON_LABEL);\n\t\tif (tableState === STATES.DISABLED) {\n\t\t\taddButtonDisabled = true;\n\t\t\tthis.addOnClickCallback = null;\n\t\t}\n\n\t\treturn (\n\t\t\t<div className=\"properties-at-buttons-container\">\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"properties-remove-fields-button\"\n\t\t\t\t\tdisabled={removeDisabled}\n\t\t\t\t\tonClick={removeOnClick}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\trenderIcon={TrashCan16}\n\t\t\t\t>\n\t\t\t\t\t{removeButtonLabel}\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"properties-add-fields-button\"\n\t\t\t\t\tdisabled={addButtonDisabled}\n\t\t\t\t\tonClick={this.addOnClick.bind(this, this.props.propertyId)}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\trenderIcon={Add16}\n\t\t\t\t>\n\t\t\t\t\t{addButtonLabel}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tmakeEditButtonPanel(tableState, tableButtonConfig) {\n\t\tlet editButton = null;\n\n\t\tif (tableButtonConfig && tableButtonConfig.editCallback) {\n\t\t\tthis.editOnClickCallback = tableButtonConfig.editCallback;\n\t\t\teditButton = (<div className=\"properties-at-buttons-container\">\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"properties-edit-button\"\n\t\t\t\t\tonClick={this.editOnClick.bind(this, this.props.propertyId)}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\trenderIcon={Edit16}\n\t\t\t\t>\n\t\t\t\t\t{tableButtonConfig.label}\n\t\t\t\t</Button>\n\t\t\t</div>);\n\t\t}\n\n\t\treturn editButton;\n\t}\n\n\tmakeCustomButtonsPanel(tableState, customButtons) {\n\t\tlet customTableButtons = null;\n\t\tif (customButtons) {\n\t\t\tcustomTableButtons = (<div className=\"properties-at-buttons-container\">\n\t\t\t\t<TableButtons\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\tpropertyId={this.props.propertyId}\n\t\t\t\t\ttableState={tableState}\n\t\t\t\t\tcustomButtons={customButtons}\n\t\t\t\t\tcustomButtonsState={this.props.tableButtons}\n\t\t\t\t/>\n\t\t\t</div>);\n\t\t}\n\t\treturn customTableButtons;\n\t}\n\n\teditOnClick(propertyId) {\n\t\tif (this.editOnClickCallback) {\n\t\t\tthis.editOnClickCallback(propertyId);\n\t\t}\n\t}\n\n\tcheckedAllValue(colIndex, checked) {\n\t\tconst controlValue = this.props.value;\n\t\tif (Array.isArray(controlValue)) {\n\t\t\tfor (let i = 0; i < controlValue.length; i++) {\n\t\t\t\tconst propertyId = {\n\t\t\t\t\tname: this.props.control.name,\n\t\t\t\t\trow: i,\n\t\t\t\t\tcol: colIndex\n\t\t\t\t};\n\t\t\t\tif (this.props.controller.getControlState(propertyId) !== STATES.DISABLED) {\n\t\t\t\t\tthis.props.controller.updatePropertyValue(propertyId, checked);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.checkedAll[colIndex] = checked;\n\t\t}\n\t}\n\n\tcheckedAll(colIndex) {\n\t\tconst controlValue = this.props.value;\n\t\tif (Array.isArray(controlValue)) {\n\t\t\tif (controlValue.length === 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (let i = 0; i < controlValue.length; i++) {\n\t\t\t\tconst propertyId = {\n\t\t\t\t\tname: this.props.control.name,\n\t\t\t\t\trow: i,\n\t\t\t\t\tcol: colIndex\n\t\t\t\t};\n\t\t\t\tif (this.props.controller.getControlState(propertyId) !== STATES.DISABLED) {\n\t\t\t\t\tif (!controlValue[i][colIndex]) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tdisabledAll(colIndex) {\n\t\tconst controlValue = this.props.value;\n\t\tif (Array.isArray(controlValue)) {\n\t\t\tif (controlValue.length === 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (const rowValue of controlValue) {\n\t\t\t\tif (rowValue[colIndex] === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tcreateTable(tableState, tableButtonConfig, customButtons) {\n\t\tconst rows = [];\n\t\tconst sortFields = [];\n\t\tconst filterFields = [];\n\t\tthis.filterFields = filterFields;\n\n\t\tconst headers = this.makeHeader(sortFields, filterFields);\n\t\tconst showHeader = this.props.control.header !== false;\n\n\t\tconst controlValue = this.props.value;\n\t\tthis.makeCells(rows, controlValue, tableState);\n\n\t\tconst selectedEditRow = this.props.control.rowSelection === ROW_SELECTION.MULTIPLE\n\t\t\t? this.makeSelectedEditRow(this.props.selectedRows)\n\t\t\t: null;\n\t\tlet topRightPanel = null;\n\t\tif (customButtons) {\n\t\t\ttopRightPanel = this.makeCustomButtonsPanel(tableState, customButtons);\n\t\t} else if (this.isReadonlyTable()) {\n\t\t\tif (!this.props.hideEditButton) {\n\t\t\t\ttopRightPanel = this.makeEditButtonPanel(tableState, tableButtonConfig);\n\t\t\t}\n\n\t\t} else if (this.props.addRemoveRows) {\n\t\t\ttopRightPanel = this.makeAddRemoveButtonPanel(tableState, tableButtonConfig);\n\t\t}\n\n\t\tlet rowToScrollTo;\n\t\tif (Number.isInteger(this.scrollToRow) && rows.length > this.scrollToRow) {\n\t\t\trowToScrollTo = this.scrollToRow;\n\t\t\tdelete this.scrollToRow;\n\t\t}\n\n\t\tconst tableLabel = (this.props.control.label && this.props.control.label.text) ? this.props.control.label.text : \"\";\n\t\t// ReadonlyTable with single row selection is non-interactive. rowClickCallback should be undefined.\n\t\tlet rowClickCallback;\n\t\tconst singleRowSelectionReadonlyTable = this.isReadonlyTable() && this.props.control.rowSelection === ROW_SELECTION.SINGLE;\n\t\tif (!singleRowSelectionReadonlyTable) {\n\t\t\trowClickCallback = this.props.control.rowSelection === ROW_SELECTION.SINGLE ? this.handleRowClick : this.updateRowSelections;\n\t\t}\n\n\t\tconst table =\t(\n\t\t\t<FlexibleTable\n\t\t\t\tsortable={sortFields}\n\t\t\t\tfilterable={filterFields}\n\t\t\t\tcolumns={headers}\n\t\t\t\tdata={rows}\n\t\t\t\tshowHeader={showHeader}\n\t\t\t\tscrollToRow={rowToScrollTo}\n\t\t\t\tonFilter={this.onFilter}\n\t\t\t\tonSort={this.onSort}\n\t\t\t\ttopRightPanel={topRightPanel}\n\t\t\t\tselectedEditRow={selectedEditRow}\n\t\t\t\tscrollKey={this.props.control.name}\n\t\t\t\ttableState={tableState}\n\t\t\t\tmessageInfo={this.props.controller.getErrorMessage(this.props.propertyId)}\n\t\t\t\trows={this.props.control.rows}\n\t\t\t\ttableLabel={tableLabel}\n\t\t\t\tupdateRowSelections={rowClickCallback}\n\t\t\t\tselectedRows= {this.props.selectedRows}\n\t\t\t\trowSelection={this.props.control.rowSelection}\n\t\t\t\tlight={this.isLightTheme()}\n\t\t\t\temptyTablePlaceholder={this.props.control.additionalText}\n\t\t\t/>);\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t{table}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tmakeHeader(sortFields, filterFields) {\n\t\tconst headers = [];\n\t\tfor (let j = 0; j < this.props.control.subControls.length; j++) {\n\t\t\tconst columnDef = this.props.control.subControls[j];\n\t\t\t// See if the entire column is disabled\n\t\t\tconst colState = this.props.controller.getControlState({ name: this.props.control.name, col: j });\n\t\t\tconst disabled = colState === STATES.DISABLED || colState === STATES.HIDDEN;\n\t\t\tconst columnLabel = (columnDef.controlType === ControlType.CHECKBOX)\n\t\t\t\t? (\n\t\t\t\t\t<Checkbox\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tid={`properties-at-header-cb-${this.uuid}-${this.props.control.name}=${j}`}\n\t\t\t\t\t\tchecked={this.checkedAll(j)}\n\t\t\t\t\t\tonChange={this.checkedAllValue.bind(this, j)}\n\t\t\t\t\t\tlabelText={columnDef.label.text}\n\t\t\t\t\t/>) : columnDef.label.text;\n\t\t\tif (columnDef.visible && columnDef.controlType !== ControlType.HIDDEN) {\n\t\t\t\tif (columnDef.sortable) {\n\t\t\t\t\tsortFields.push(columnDef.name);\n\t\t\t\t}\n\t\t\t\theaders.push({\n\t\t\t\t\t\"key\": columnDef.name,\n\t\t\t\t\t\"label\": columnLabel,\n\t\t\t\t\t\"width\": columnDef.width,\n\t\t\t\t\t\"description\": (columnDef.description ? columnDef.description.text : null),\n\t\t\t\t\t\"resizable\": columnDef.resizable ? columnDef.resizable : false,\n\t\t\t\t\t\"operation\": (columnDef.generatedValues && columnDef.generatedValues.operation ? columnDef.generatedValues.operation : null),\n\t\t\t\t\t\"disabled\": disabled\n\t\t\t\t});\n\t\t\t\tif (columnDef.filterable) {\n\t\t\t\t\tfilterFields.push(columnDef.name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// subpanel column will always be empty for ReadonlyTable control based on condition in makeCells()\n\t\tif (this.props.control.childItem && !this.isReadonlyTable()) {\n\t\t\t// set to specific size. Exclude this column from resizing.\n\t\t\theaders.push({ \"key\": \"subpanel\", \"label\": \"\", \"width\": TABLE_SUBPANEL_BUTTON_WIDTH, \"staticWidth\": true });\n\t\t}\n\t\treturn headers;\n\t}\n\n\tmakeCells(rows, controlValue, tableState, propName, selectSummaryRow) {\n\t\tif (!Array.isArray(controlValue)) {\n\t\t\treturn;\n\t\t}\n\t\tconst propertyName = propName ? propName : this.props.control.name;\n\t\tfor (let rowIndex = 0; rowIndex < controlValue.length; rowIndex++) {\n\t\t\tconst columns = [];\n\t\t\tthis.onPanelContainer[rowIndex] = [];\n\t\t\tif (this.includeInFilter(rowIndex) || selectSummaryRow) {\n\t\t\t\tfor (var colIndex = 0; colIndex < this.props.control.subControls.length; colIndex++) {\n\t\t\t\t\tconst columnDef = this.props.control.subControls[colIndex];\n\t\t\t\t\t// we need to build the on-panel container so that when the row is selected and a not visible column is on-panel\n\t\t\t\t\t// the on-panel container will be available for display.\n\t\t\t\t\tif (columnDef.visible || columnDef.editStyle === EditStyle.ON_PANEL) {\n\t\t\t\t\t\tconst content = this._makeCell(columnDef, controlValue, propertyName, rowIndex,\n\t\t\t\t\t\t\tcolIndex, tableState, selectSummaryRow);\n\t\t\t\t\t\t// only add content if column is visible\n\t\t\t\t\t\tif (columnDef.visible) {\n\t\t\t\t\t\t\tcolumns.push(content);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.props.control.childItem && !selectSummaryRow && !this.isReadonlyTable()) {\n\t\t\t\t\tconst cell = this.buildChildItem(propertyName, rowIndex, tableState);\n\t\t\t\t\tcolumns.push(cell);\n\t\t\t\t}\n\t\t\t\trows.push({\n\t\t\t\t\tcolumns: columns\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tbuildChildItem(propName, rowIndex, tableState) {\n\t\t// Assumes the child item is an \"ADDITIONAL_LINK\" object.\n\t\t// However, we will extract information from the and will create our own Cell-based invoker.\n\t\tconst childPropertyId = { name: propName, row: rowIndex };\n\t\tconst parentPropertyId = cloneDeep(this.props.propertyId);\n\n\t\tlet propertyId = childPropertyId;\n\t\t// If childPropertyId name does not match the parent, then this is a subControl\n\t\tif (parentPropertyId.name !== childPropertyId.name) {\n\t\t\tpropertyId = this.props.controller.setChildPropertyId(parentPropertyId, childPropertyId);\n\t\t}\n\n\t\tconst subItemButton = this.props.buildUIItem(rowIndex, this.props.control.childItem, propertyId, this.indexOfColumn);\n\t\t// Hack to decompose the button into our own in-table link\n\t\tconst subCell = (\n\t\t\t<div className=\"properties-table-subcell\">\n\t\t\t\t<SubPanelCell\n\t\t\t\t\tlabel={subItemButton.props.label}\n\t\t\t\t\ttitle={subItemButton.props.title}\n\t\t\t\t\tpanel={subItemButton.props.panel}\n\t\t\t\t\tdisabled={tableState === STATES.DISABLED}\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\tpropertyId={this.props.propertyId}\n\t\t\t\t\trightFlyout={this.props.rightFlyout}\n\t\t\t\t/>\n\t\t\t</div>);\n\t\treturn {\n\t\t\tcolumn: \"subpanel\",\n\t\t\twidth: TABLE_SUBPANEL_BUTTON_WIDTH,\n\t\t\tcontent: subCell\n\t\t};\n\t}\n}\n\nAbstractTable.propTypes = {\n\tbuildUIItem: PropTypes.func,\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\topenFieldPicker: PropTypes.func.isRequired,\n\trightFlyout: PropTypes.bool,\n\tvalue: PropTypes.array, // pass in by redux\n\tselectedRows: PropTypes.array, // set by redux\n\taddRemoveRows: PropTypes.bool, // set by redux\n\ttableButtons: PropTypes.object, // set in by redux\n\thideEditButton: PropTypes.bool // set by redux\n};\n\nAbstractTable.defaultProps = {\n\taddRemoveRows: true,\n\thideEditButton: false,\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport { MESSAGE_KEYS } from \"./../../constants/constants\";\nimport { ControlType } from \"./../../constants/form-constants\";\nimport { Add16, Edit16 } from \"@carbon/icons-react\";\nimport { Button } from \"carbon-components-react\";\n\nexport default class EmptyTable extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.getEmptyTableText = this.getEmptyTableText.bind(this);\n\t\tthis.isReadonlyTable = this.isReadonlyTable.bind(this);\n\t}\n\n\tgetEmptyTableText() {\n\t\t// Empty table text can be customized\n\t\tconst overrideEmptyTableTextKey = `${this.props.control.name}.empty.table.text`;\n\t\tconst defaultEmptyTableText = formatMessage(\n\t\t\tthis.props.controller.getReactIntl(),\n\t\t\tMESSAGE_KEYS.PROPERTIES_EMPTY_TABLE_TEXT,\n\t\t\t{ button_label: this.props.emptyTableButtonLabel }\n\t\t);\n\t\treturn this.props.controller.getResource(overrideEmptyTableTextKey, defaultEmptyTableText);\n\t}\n\n\tisReadonlyTable() {\n\t\treturn this.props.control.controlType === ControlType.READONLYTABLE;\n\t}\n\n\trender() {\n\t\tconst emptyTableText = this.getEmptyTableText();\n\t\tconst emptyTableContent = (\n\t\t\t<div className=\"properties-empty-table\" disabled={this.props.disabled}>\n\t\t\t\t<span >{emptyTableText}</span>\n\t\t\t\t<br />\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"properties-empty-table-button\"\n\t\t\t\t\tkind=\"tertiary\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\trenderIcon={this.isReadonlyTable() ? Edit16 : Add16}\n\t\t\t\t\tonClick={this.props.emptyTableButtonClickHandler}\n\t\t\t\t\tdisabled={this.props.disabled}\n\t\t\t\t>\n\t\t\t\t\t{this.props.emptyTableButtonLabel}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t);\n\t\treturn emptyTableContent;\n\t}\n}\n\nEmptyTable.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\temptyTableButtonLabel: PropTypes.string,\n\temptyTableButtonClickHandler: PropTypes.func,\n\tdisabled: PropTypes.bool,\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport EmptyTable from \"./empty-table.jsx\";\nexport default EmptyTable;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { Button } from \"carbon-components-react\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport { ArrowUp24, ArrowDown24, UpToTop24, DownToBottom24 } from \"@carbon/icons-react\";\nimport classNames from \"classnames\";\nimport EmptyTable from \"./../empty-table\";\nimport { MESSAGE_KEYS } from \"./../../constants/constants\";\n\nclass MoveableTableRows extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.getTableRowMoveImages = this.getTableRowMoveImages.bind(this);\n\t\tthis.topMoveRow = this.topMoveRow.bind(this);\n\t\tthis.upMoveRow = this.upMoveRow.bind(this);\n\t\tthis.downMoveRow = this.downMoveRow.bind(this);\n\t\tthis.bottomMoveRow = this.bottomMoveRow.bind(this);\n\t\tthis.getMoveableTableRows = this.getMoveableTableRows.bind(this);\n\t\tthis.getLeastValue = this.getLeastValue.bind(this);\n\t\tthis.getMaxValue = this.getMaxValue.bind(this);\n\t}\n\n\tgetMoveableTableRows() {\n\t\tlet moveCol = null;\n\t\tif (typeof this.props.control.moveableRows !== \"undefined\" && this.props.control.moveableRows) {\n\t\t\tconst moveImages = this.getTableRowMoveImages();\n\t\t\tmoveCol = (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"properties-mr-button-container\"\n\t\t\t\t>\n\t\t\t\t\t{moveImages}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\t// Added role presentation to fix a11y violation - no headers in the table\n\t\tconst content = (<table role=\"presentation\" className=\"properties-mr-table-container\">\n\t\t\t<tbody>\n\t\t\t\t<tr className={classNames(\"properties-mr-table-content\", { \"disabled\": this.props.disabled })}>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t{this.props.tableContainer}\n\t\t\t\t\t</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t{moveCol}\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t\t);\n\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t{content}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// enabled the move up and down arrows based on which row is selected\n\tgetTableRowMoveImages() {\n\t\tconst selected = this.props.controller.getSelectedRows(this.props.propertyId).sort();\n\t\tconst controlValue = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tlet topEnabled = (\n\t\t\t!this.props.disableRowMoveButtons &&\n\t\t\t(selected.length !== 0 && selected[0] !== 0) &&\n\t\t\t!this.props.disabled\n\t\t);\n\t\tlet bottomEnabled = (\n\t\t\t!this.props.disableRowMoveButtons &&\n\t\t\t(selected.length !== 0 && selected[selected.length - 1] !== controlValue.length - 1) &&\n\t\t\t!this.props.disabled\n\t\t);\n\t\tconst staticRows = this.props.controller.getStaticRows(this.props.propertyId).sort();\n\t\tif (selected.length > 0 && staticRows.length > 0 && staticRows.includes(selected[0])) {\n\t\t\ttopEnabled = false;\n\t\t\tbottomEnabled = false;\n\t\t} else if (selected[0] === staticRows[staticRows.length - 1] + 1) {\n\t\t\ttopEnabled = false;\n\t\t\tbottomEnabled = (\n\t\t\t\t!this.props.disableRowMoveButtons &&\n\t\t\t\t(selected.length !== 0 && selected[selected.length - 1] !== controlValue.length - 1) &&\n\t\t\t\t!this.props.disabled\n\t\t\t);\n\t\t} else if (selected[0] === staticRows[0] - 1) {\n\t\t\tbottomEnabled = false;\n\t\t}\n\n\n\t\tconst topLabel = formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.MOVEABLE_TABLE_BUTTON_TOP_DESCRIPTION);\n\t\tconst upLabel = formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.MOVEABLE_TABLE_BUTTON_UP_DESCRIPTION);\n\t\tconst topImages = (\n\t\t\t<div key=\"topImages\">\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"table-row-move-button\"\n\t\t\t\t\tonClick={this.topMoveRow}\n\t\t\t\t\tdisabled={!topEnabled}\n\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\trenderIcon={UpToTop24}\n\t\t\t\t\ticonDescription={topLabel}\n\t\t\t\t\ttooltipPosition=\"left\"\n\t\t\t\t\thasIconOnly\n\t\t\t\t/>\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"table-row-move-button\"\n\t\t\t\t\tonClick={this.upMoveRow}\n\t\t\t\t\tdisabled={!topEnabled}\n\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\trenderIcon={ArrowUp24}\n\t\t\t\t\ticonDescription={upLabel}\n\t\t\t\t\ttooltipPosition=\"left\"\n\t\t\t\t\thasIconOnly\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t\tconst bottomLabel = formatMessage(this.props.controller.getReactIntl(),\tMESSAGE_KEYS.MOVEABLE_TABLE_BUTTON_DOWN_DESCRIPTION);\n\t\tconst downLabel = formatMessage(this.props.controller.getReactIntl(),\tMESSAGE_KEYS.MOVEABLE_TABLE_BUTTON_BOTTOM_DESCRIPTION);\n\t\tconst bottomImages = (\n\t\t\t<div key=\"bottomImages\">\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"table-row-move-button\"\n\t\t\t\t\tonClick={this.downMoveRow}\n\t\t\t\t\tdisabled={!bottomEnabled}\n\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\trenderIcon={ArrowDown24}\n\t\t\t\t\ticonDescription={bottomLabel}\n\t\t\t\t\ttooltipPosition=\"left\"\n\t\t\t\t\thasIconOnly\n\t\t\t\t/>\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"table-row-move-button\"\n\t\t\t\t\tonClick={this.bottomMoveRow}\n\t\t\t\t\tdisabled={!bottomEnabled}\n\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\trenderIcon={DownToBottom24}\n\t\t\t\t\ticonDescription={downLabel}\n\t\t\t\t\ttooltipPosition=\"left\"\n\t\t\t\t\thasIconOnly\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t\treturn [topImages, bottomImages];\n\t}\n\n\tgetLeastValue() {\n\t\tlet leastValue = 0;\n\t\tconst staticRows = this.props.controller.getStaticRows(this.props.propertyId).sort();\n\t\tif (staticRows && staticRows.length > 0 && staticRows.includes(0)) {\n\t\t\tleastValue = staticRows[staticRows.length - 1];\n\t\t}\n\t\treturn leastValue;\n\t}\n\n\tgetMaxValue() {\n\t\tconst controlValue = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tlet maxValue = controlValue.length - 1;\n\t\tconst staticRows = this.props.controller.getStaticRows(this.props.propertyId).sort();\n\t\tif (staticRows && staticRows.length > 0 && staticRows.includes(controlValue.length - 1)) {\n\t\t\tmaxValue = staticRows[0] - 1;\n\t\t}\n\t\treturn maxValue;\n\t}\n\n\ttopMoveRow(evt) {\n\t\tvar selected = this.props.controller.getSelectedRows(this.props.propertyId).sort(function(a, b) {\n\t\t\treturn a - b;\n\t\t});\n\t\tconst controlValue = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tconst leastValue = this.getLeastValue();\n\t\tconst staticRows = this.props.controller.getStaticRows(this.props.propertyId).sort();\n\t\tfor (var firstRow = selected[0]; firstRow > leastValue; firstRow--) {\n\t\t\tfor (var i = 0; i <= selected.length - 1; i++) {\n\t\t\t\tif ((staticRows.length > 0 && selected[0] > leastValue + 1) || staticRows.length === 0) {\n\t\t\t\t\tconst selectedRow = selected.shift();\n\t\t\t\t\tconst tmpRow = controlValue[selectedRow - 1];\n\t\t\t\t\tcontrolValue[selectedRow - 1] = controlValue[selectedRow];\n\t\t\t\t\tcontrolValue[selectedRow] = tmpRow;\n\t\t\t\t\tselected.push(selectedRow - 1);\n\t\t\t\t\tthis.props.controller.moveErrorMessageRows(this.props.propertyId.name, selectedRow, selectedRow - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (selected.length > 0) {\n\t\t\tthis.props.setScrollToRow(selected[0]);\n\t\t}\n\t\tthis.props.setCurrentControlValueSelected(controlValue, selected);\n\t}\n\n\tupMoveRow(evt) {\n\t\tconst selected = this.props.controller.getSelectedRows(this.props.propertyId).sort(function(a, b) {\n\t\t\treturn a - b;\n\t\t});\n\t\tconst leastValue = this.getLeastValue();\n\t\tconst staticRows = this.props.controller.getStaticRows(this.props.propertyId).sort();\n\t\t// only move up if not already at the top especially for multiple selected\n\t\t// Move up only till the static rows index\n\t\tif (selected.length !== 0 && selected[0] > leastValue) {\n\t\t\tconst controlValue = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\t\tfor (var i = 0; i <= selected.length - 1; i++) {\n\t\t\t\tif (staticRows.length > 0 && selected[0] > leastValue + 1) {\n\t\t\t\t\tconst selectedRow = selected.shift();\n\t\t\t\t\tconst tmpRow = controlValue[selectedRow - 1];\n\t\t\t\t\tcontrolValue[selectedRow - 1] = controlValue[selectedRow];\n\t\t\t\t\tcontrolValue[selectedRow] = tmpRow;\n\t\t\t\t\tselected.push(selectedRow - 1);\n\t\t\t\t\tthis.props.controller.moveErrorMessageRows(this.props.propertyId.name, selectedRow, selectedRow - 1);\n\t\t\t\t} else if (staticRows.length === 0) {\n\t\t\t\t\tconst selectedRow = selected.shift();\n\t\t\t\t\tif (selectedRow !== 0) {\n\t\t\t\t\t\tconst tmpRow = controlValue[selectedRow - 1];\n\t\t\t\t\t\tcontrolValue[selectedRow - 1] = controlValue[selectedRow];\n\t\t\t\t\t\tcontrolValue[selectedRow] = tmpRow;\n\t\t\t\t\t\tselected.push(selectedRow - 1);\n\t\t\t\t\t\tthis.props.controller.moveErrorMessageRows(this.props.propertyId.name, selectedRow, selectedRow - 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.props.setScrollToRow(selected[0]);\n\t\t\tthis.props.setCurrentControlValueSelected(controlValue, selected);\n\t\t}\n\t}\n\n\tdownMoveRow(evt) {\n\t\tconst selected = this.props.controller.getSelectedRows(this.props.propertyId).sort(function(a, b) {\n\t\t\treturn a - b;\n\t\t});\n\t\tconst controlValue = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tconst maxValue = this.getMaxValue();\n\t\t// only move down if not already at the end especially for multiple selected\n\t\tif (selected.length !== 0 && selected[selected.length - 1] !== controlValue.length - 1) {\n\t\t\tfor (var i = selected.length - 1; i >= 0; i--) {\n\t\t\t\tconst selectedRow = selected.pop();\n\t\t\t\tif (selectedRow !== maxValue) {\n\t\t\t\t\tconst tmpRow = controlValue[selectedRow + 1];\n\t\t\t\t\tcontrolValue[selectedRow + 1] = controlValue[selectedRow];\n\t\t\t\t\tcontrolValue[selectedRow] = tmpRow;\n\t\t\t\t\tselected.unshift(selectedRow + 1);\n\t\t\t\t\tthis.props.controller.moveErrorMessageRows(this.props.propertyId.name, selectedRow, selectedRow + 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (selected.length > 1) {\n\t\t\t\tthis.props.setScrollToRow(selected[selected.length - 1]);\n\t\t\t} else {\n\t\t\t\tthis.props.setScrollToRow(selected[0]);\n\t\t\t}\n\t\t\tthis.props.setCurrentControlValueSelected(controlValue, selected);\n\t\t}\n\t}\n\n\tbottomMoveRow(evt) {\n\t\tvar selected = this.props.controller.getSelectedRows(this.props.propertyId).sort(function(a, b) {\n\t\t\treturn a - b;\n\t\t});\n\t\tconst controlValue = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tconst maxValue = this.getMaxValue();\n\t\tfor (var lastRow = selected[selected.length - 1]; lastRow < maxValue; lastRow++) {\n\t\t\tfor (var i = selected.length - 1; i >= 0; i--) {\n\t\t\t\tconst selectedRow = selected.pop();\n\t\t\t\tconst tmpRow = controlValue[selectedRow + 1];\n\t\t\t\tcontrolValue[selectedRow + 1] = controlValue[selectedRow];\n\t\t\t\tcontrolValue[selectedRow] = tmpRow;\n\t\t\t\tselected.unshift(selectedRow + 1);\n\t\t\t\tthis.props.controller.moveErrorMessageRows(this.props.propertyId.name, selectedRow, selectedRow + 1);\n\t\t\t}\n\t\t}\n\t\tif (selected.length > 0) {\n\t\t\tthis.props.setScrollToRow(selected[selected.length - 1]);\n\t\t}\n\t\tthis.props.setCurrentControlValueSelected(controlValue, selected);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\tthis.props.isEmptyTable && this.props.addRemoveRows\n\t\t\t\t? <EmptyTable\n\t\t\t\t\tcontrol={this.props.control}\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\temptyTableButtonLabel={this.props.emptyTableButtonLabel}\n\t\t\t\t\temptyTableButtonClickHandler={this.props.emptyTableButtonClickHandler}\n\t\t\t\t\tdisabled={this.props.disabled}\n\t\t\t\t/>\n\t\t\t\t: this.getMoveableTableRows()\n\t\t);\n\t}\n}\n\nMoveableTableRows.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tsetCurrentControlValueSelected: PropTypes.func.isRequired,\n\tsetScrollToRow: PropTypes.func.isRequired,\n\ttableContainer: PropTypes.object.isRequired,\n\tdisabled: PropTypes.bool,\n\tisEmptyTable: PropTypes.bool.isRequired,\n\temptyTableButtonLabel: PropTypes.string,\n\temptyTableButtonClickHandler: PropTypes.func,\n\tdisableRowMoveButtons: PropTypes.bool, // set by redux\n\taddRemoveRows: PropTypes.bool, // set by redux\n\ttableButtons: PropTypes.object // set in by redux\n};\n\nMoveableTableRows.defaultProps = {\n\taddRemoveRows: true\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\t// check if row move buttons should be disabled for given propertyId\n\tdisableRowMoveButtons: ownProps.controller.isDisableRowMoveButtons(ownProps.propertyId),\n\taddRemoveRows: ownProps.controller.getAddRemoveRows(ownProps.propertyId),\n\ttableButtons: ownProps.controller.getTableButtons(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps)(MoveableTableRows);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport NumberfieldControl from \"./../numberfield\";\nimport TextfieldControl from \"./../textfield\";\nimport AbstractTable from \"./../abstract-table.jsx\";\nimport FlexibleTable from \"./../../components/flexible-table\";\nimport MoveableTableRows from \"./../../components/moveable-table-rows\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport { getDataId } from \"./../../util/control-utils\";\nimport { MESSAGE_KEYS, STATES } from \"./../../constants/constants.js\";\nimport { Type } from \"./../../constants/form-constants.js\";\nimport { isEmpty } from \"lodash\";\n\nconst NUMBER_TYPES = [Type.INTEGER, Type.DOUBLE, Type.LONG];\nclass ListControl extends AbstractTable {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.addRow = this.addRow.bind(this);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t}\n\n\taddRow() {\n\t\tconst controlPropType = this.props.controller.getControlPropType(this.props.propertyId);\n\t\tconst newRow = NUMBER_TYPES.indexOf(controlPropType) > -1 ? null : \"\";\n\n\t\t// Handle case where no currentValue or default is defined.\n\t\tlet currentValue = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tif (typeof currentValue === \"undefined\") {\n\t\t\tcurrentValue = [];\n\t\t}\n\n\t\tconst rows = currentValue.concat([newRow]);\n\t\tthis.setCurrentControlValueSelected(rows);\n\t}\n\n\tmakeCell(control, propertyId, controlPropType, listHeader) {\n\t\tif (NUMBER_TYPES.indexOf(controlPropType) > -1) {\n\t\t\treturn (<div className=\"properties-table-cell-control\">\n\t\t\t\t<NumberfieldControl\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tpropertyId={propertyId}\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\tcontrolItem={listHeader}\n\t\t\t\t\ttableControl\n\t\t\t\t/>\n\t\t\t</div>);\n\t\t}\n\t\treturn (<div className=\"properties-table-cell-control\">\n\t\t\t<TextfieldControl\n\t\t\t\tcontrol={control}\n\t\t\t\tpropertyId={propertyId}\n\t\t\t\tcontroller={this.props.controller}\n\t\t\t\tcontrolItem={listHeader}\n\t\t\t\ttableControl\n\t\t\t/>\n\t\t</div>);\n\t}\n\n\tmakeRows(controlValue, tableState, tableHeaders) {\n\t\tconst rows = [];\n\t\tif (controlValue) {\n\t\t\tfor (var rowIndex = 0; rowIndex < controlValue.length; rowIndex++) {\n\t\t\t\tconst columns = [];\n\n\t\t\t\tlet propertyId = { name: this.props.control.name, row: rowIndex };\n\t\t\t\t// If props propertyId name is different, then this list is in a structure\n\t\t\t\tif (this.props.propertyId.name !== propertyId.name) {\n\t\t\t\t\tconst parentPropertyId = Object.assign({}, this.props.propertyId);\n\t\t\t\t\tpropertyId = this.props.controller.setChildPropertyId(parentPropertyId, { name: this.props.control.name, row: rowIndex });\n\t\t\t\t}\n\n\t\t\t\tconst controlPropType = this.props.controller.getControlPropType(propertyId);\n\t\t\t\tconst control = {};\n\t\t\t\t// Assuming list control has only 2 columns\n\t\t\t\tconst listHeader = (typeof tableHeaders === \"undefined\" || tableHeaders.length === 0) ? \"\" : tableHeaders[0].label;\n\t\t\t\tconst cellContent = this.makeCell(control, propertyId, controlPropType, listHeader);\n\t\t\t\tcolumns.push({\n\t\t\t\t\tkey: rowIndex + \"-0-value\",\n\t\t\t\t\tcolumn: \"value\",\n\t\t\t\t\tcontent: cellContent\n\t\t\t\t});\n\t\t\t\trows.push({\n\t\t\t\t\tkey: rowIndex,\n\t\t\t\t\tonClickCallback: this.handleRowClick.bind(this, rowIndex, false),\n\t\t\t\t\tcolumns: columns,\n\t\t\t\t\tclassName: \"list-table-row\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn rows;\n\t}\n\n\tmakeHeader() {\n\t\tconst headers = [];\n\t\theaders.push({\n\t\t\t\"key\": \"value\",\n\t\t\t\"label\": formatMessage(this.reactIntl, MESSAGE_KEYS.LIST_TABLE_LABEL),\n\t\t\t\"description\": (null) });\n\t\treturn headers;\n\t}\n\n\trender() {\n\t\tconst headers = this.makeHeader();\n\n\t\tconst tableButtonConfig = {\n\t\t\taddButtonLabel: formatMessage(this.props.controller.getReactIntl(),\n\t\t\t\tMESSAGE_KEYS.STRUCTURELISTEDITOR_ADDBUTTON_LABEL),\n\t\t\tremoveButtonLabel: formatMessage(this.props.controller.getReactIntl(),\n\t\t\t\tMESSAGE_KEYS.STRUCTURELISTEDITOR_REMOVEBUTTON_LABEL),\n\t\t\taddButtonFunction: this.addRow\n\t\t};\n\n\t\tconst rows = this.makeRows(this.props.value, this.props.state, headers);\n\t\tconst topRightPanel = this.makeAddRemoveButtonPanel(this.props.state, tableButtonConfig);\n\t\tlet rowToScrollTo;\n\t\tif (Number.isInteger(this.scrollToRow) && rows.length > this.scrollToRow) {\n\t\t\trowToScrollTo = this.scrollToRow;\n\t\t\tdelete this.scrollToRow;\n\t\t}\n\t\tconst tableLabel = (this.props.control.label && this.props.control.label.text) ? this.props.control.label.text : \"\";\n\t\tconst table =\t(\n\t\t\t<FlexibleTable\n\t\t\t\tcolumns={headers}\n\t\t\t\tdata={rows}\n\t\t\t\tscrollToRow={rowToScrollTo}\n\t\t\t\ttopRightPanel={topRightPanel}\n\t\t\t\tscrollKey={this.props.control.name}\n\t\t\t\ttableState={this.props.state}\n\t\t\t\tmessageInfo={this.props.messageInfo}\n\t\t\t\trows={this.props.control.rows}\n\t\t\t\ttableLabel={tableLabel}\n\t\t\t\tselectedRows={this.props.selectedRows}\n\t\t\t\trowSelection={this.props.control.rowSelection}\n\t\t\t\tupdateRowSelections={this.updateRowSelections}\n\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\temptyTablePlaceholder={this.props.control.additionalText}\n\t\t\t/>);\n\n\t\tconst tableContainer = (<div>\n\t\t\t<div className=\"properties-list-table\">\n\t\t\t\t{table}\n\t\t\t</div>\n\t\t\t<ValidationMessage state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t</div>);\n\n\t\treturn (\n\t\t\t<div data-id={getDataId(this.props.propertyId)} className=\"properties-list-control\" >\n\t\t\t\t{this.props.controlItem}\n\t\t\t\t<MoveableTableRows\n\t\t\t\t\ttableContainer={tableContainer}\n\t\t\t\t\tcontrol={this.props.control}\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\tpropertyId={this.props.propertyId}\n\t\t\t\t\tsetScrollToRow={this.setScrollToRow}\n\t\t\t\t\tsetCurrentControlValueSelected={this.setCurrentControlValueSelected}\n\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\tisEmptyTable={isEmpty(this.props.value)}\n\t\t\t\t\temptyTableButtonLabel={tableButtonConfig.addButtonLabel}\n\t\t\t\t\temptyTableButtonClickHandler={this.addRow}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nListControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\tselectedRows: PropTypes.array, // set by redux\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.array, // pass in by redux\n\tmessageInfo: PropTypes.object, // pass in by redux\n\taddRemoveRows: PropTypes.bool, // set by redux\n\ttableButtons: PropTypes.object // set in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId),\n\tselectedRows: ownProps.controller.getSelectedRows(ownProps.propertyId),\n\taddRemoveRows: ownProps.controller.getAddRemoveRows(ownProps.propertyId),\n\ttableButtons: ownProps.controller.getTableButtons(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps)(ListControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Switch, ContentSwitcher, Dropdown } from \"carbon-components-react\";\nimport FlexibleTable from \"./../../../components/flexible-table/flexible-table\";\nimport TruncatedContentTooltip from \"./../../../components/truncated-content-tooltip\";\nimport { MESSAGE_KEYS, EXPRESSION_TABLE_ROWS, SORT_DIRECTION, ROW_SELECTION } from \"./../../../constants/constants\";\nimport { formatMessage } from \"./../../../util/property-utils\";\nimport { sortBy, get } from \"lodash\";\nimport { v4 as uuid4 } from \"uuid\";\n\nconst FIELDS_SPECIAL_CHARACTERS_REGEX = new RegExp(\"[0-9- _$]\", \"g\");\n\nexport default class ExpressionSelectFieldOrFunction extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.uuid = uuid4();\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t\tthis.valueColumn = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_VALUE_COLUMN);\n\t\tthis.valueColumnDesc = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_VALUE_COLUMN_DESCRIPTION);\n\t\tthis.recentUseCat = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_RECENTLY_USED);\n\t\tthis.recentUseCatInfo = {\n\t\t\tid: this.recentUseCat,\n\t\t\tlocLabel: this.recentUseCat,\n\t\t\tfield_columns: {\n\t\t\t\tfield_column_info: {\n\t\t\t\t\tlocLabel: formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_RECENTLY_USED_COLUMN)\n\t\t\t\t},\n\t\t\t\tvalue_column_info: {\n\t\t\t\t\tlocLabel: this.valueColumn,\n\t\t\t\t\tdescLabel: this.valueColumnDesc\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tthis.inCategories = Object.keys(props.functionList);\n\t\tthis.fields = this._makeDatasetFields(props.controller.getDatasetMetadataFields(), props.controller.getExpressionInfo().fields);\n\t\tthis.resources = get(props.controller.getExpressionInfo(), \"resources\", {});\n\t\tthis.state = {\n\t\t\tfieldSelected: 0,\n\t\t\tvalueSelected: 0,\n\t\t\tfunctionSelected: 0,\n\t\t\tfieldTableSortSpec: null,\n\t\t\tvaluesTableSortSpec: null,\n\t\t\tfunctionTableSortSpec: null,\n\t\t\tfunctionCategory: this.inCategories[0], // set the initial function category to the first one in the list.\n\t\t\tselectedIndex: 0,\n\t\t\tfieldCategory: \"fields\",\n\t\t\tcurrentFieldDataset: this.fields.field_table_info[0].field_value_groups\n\t\t};\n\t\tthis.controller = props.controller;\n\t\tthis.onFunctionCatChange = this.onFunctionCatChange.bind(this);\n\t\tthis.onFieldCatChange = this.onFieldCatChange.bind(this);\n\t\tthis.onFieldFilter = this.onFieldFilter.bind(this);\n\t\tthis.onValueFilter = this.onValueFilter.bind(this);\n\t\tthis.onFunctionFilter = this.onFunctionFilter.bind(this);\n\t\tthis.language = props.language;\n\n\t\tthis.onFieldTableClick = this.onFieldTableClick.bind(this);\n\t\tthis.onFieldTableDblClick = this.onFieldTableDblClick.bind(this);\n\t\tthis.onFunctionTableClick = this.onFunctionTableClick.bind(this);\n\t\tthis.onFunctionTableDblClick = this.onFunctionTableDblClick.bind(this);\n\t\tthis.onValueTableClick = this.onValueTableClick.bind(this);\n\t\tthis.onValueTableDblClick = this.onValueTableDblClick.bind(this);\n\n\t\tthis.sortTableRows = this.sortTableRows.bind(this);\n\t\tthis.shouldQuoteField = this.shouldQuoteField.bind(this);\n\t}\n\n\tonSwitch(switchName, evt) {\n\t\tthis.setState({\n\t\t\tselectedIndex: switchName.index\n\t\t});\n\t}\n\n\tonFunctionCatChange(evt) {\n\t\tthis.setState({\n\t\t\tfunctionCategory: evt.selectedItem.value,\n\t\t\tfunctionSelected: 0\n\t\t});\n\t}\n\n\tonFieldCatChange(evt) {\n\t\tlet currentData = [];\n\t\tif (evt.selectedItem.value === this.recentUseCat) {\n\t\t\tcurrentData = this.props.controller.getExpressionFieldsRecentlyUsed();\n\t\t} else {\n\t\t\tfor (let index = 0; index < this.fields.field_table_info.length; index++) {\n\t\t\t\tif (evt.selectedItem.value === this.fields.field_table_info[index].id) {\n\t\t\t\t\tcurrentData = this.fields.field_table_info[index].field_value_groups;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.setState({\n\t\t\tfieldCategory: evt.selectedItem.value,\n\t\t\tfieldSelected: 0,\n\t\t\tcurrentFieldDataset: currentData\n\t\t});\n\t}\n\n\tonFieldTableClick(row, evt, rowKey) {\n\t\tthis.setState({\n\t\t\tfieldSelected: rowKey,\n\t\t\tvalueSelected: 0\n\t\t});\n\n\t}\n\n\tonFieldTableDblClick(evt, rowKey, index) {\n\t\tconst field = this.state.currentFieldDataset[rowKey];\n\t\tlet value = field.id;\n\t\tif (this.state.fieldCategory !== this.recentUseCat) {\n\t\t\tthis.props.controller.updateExpressionFieldsRecentlyUsed(field);\n\t\t}\n\t\tif (this.props.onChange) {\n\t\t\tconst quote = (this.language === \"CLEM\" && this.state.fieldCategory !== \"globals\") ? \"'\" : \"\";\n\t\t\tif (this.shouldQuoteField(field.id)) {\n\t\t\t\tvalue = quote + field.id + quote;\n\t\t\t}\n\t\t\tthis.props.onChange(value);\n\t\t}\n\t}\n\n\tonFieldFilter(filterString) {\n\t\tthis.setState({ fieldFilterText: filterString });\n\t}\n\n\tonValueTableClick(row, evt, rowKey) {\n\t\tthis.setState({\n\t\t\tvalueSelected: rowKey\n\t\t});\n\t}\n\n\tonValueTableDblClick(evt, rowKey, index) {\n\t\tif (this.props.onChange) {\n\t\t\tconst field = this.state.currentFieldDataset[this.state.fieldSelected];\n\t\t\tconst quote = \"\\\"\";\n\t\t\tif (field.values) {\n\t\t\t\tconst value = field.values[rowKey].value;\n\t\t\t\tconst fieldValue = (typeof value === \"string\") ? quote + value + quote : value;\n\t\t\t\tthis.props.onChange(fieldValue);\n\t\t\t} else if (field.range) {\n\t\t\t\tconst minValue = (typeof field.range.min.value === \"string\") ? (quote + field.range.min.value + quote) : field.range.min.value;\n\t\t\t\tconst maxValue = (typeof field.range.max.value === \"string\") ? (quote + field.range.max.value + quote) : field.range.max.value;\n\t\t\t\tthis.props.onChange(rowKey === 0 ? minValue : maxValue);\n\t\t\t}\n\t\t}\n\t\tthis.setState({\n\t\t\tvalueSelected: rowKey\n\t\t});\n\t}\n\n\tonValueFilter(filterString) {\n\t\tthis.setState({ valueFilterText: filterString });\n\t}\n\n\tonFunctionTableClick(row, evt, rowKey) {\n\t\tthis.setState({\n\t\t\tfunctionSelected: rowKey\n\t\t});\n\t}\n\n\tonFunctionTableDblClick(evt, rowKey, index) {\n\t\tlet field;\n\t\tif (this.state.functionCategory === this.recentUseCat) {\n\t\t\tfield = this.props.controller.getExpressionRecentlyUsed()[rowKey];\n\t\t} else {\n\t\t\tfield = this.props.functionList[this.state.functionCategory].functionList[rowKey];\n\t\t\tthis.props.controller.updateExpressionRecentlyUsed(field);\n\t\t}\n\t\tconst value = field.value;\n\t\tif (this.props.onChange) {\n\t\t\tthis.props.onChange(value);\n\t\t}\n\t}\n\n\tonFunctionFilter(filterString) {\n\t\tthis.setState({ functionFilterText: filterString });\n\t}\n\n\tsetSortColumn(table, spec) {\n\t\tswitch (table) {\n\t\tcase \"fieldTable\": {\n\t\t\t// const sortedData = this.sortTableRows(this.state.currentFieldDataset, spec);\n\t\t\tthis.setState({ fieldTableSortSpec: spec }); // , currentFieldDataset: sortedData });\n\t\t\tbreak;\n\t\t}\n\t\tcase \"valuesTable\": {\n\t\t\tthis.setState({ valuesTableSortSpec: spec });\n\t\t\tbreak;\n\t\t}\n\t\tcase \"functionTable\": {\n\t\t\tthis.setState({ functionTableSortSpec: spec });\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t}\n\t}\n\n\tsortTableRows(data, spec) {\n\t\tlet colIdx = 0;\n\n\t\tif (data.length > 0) {\n\t\t\tconst tableColumns = data[0].columns;\n\t\t\tfor (let idx = 0; idx < tableColumns.length; idx++) {\n\t\t\t\tif (tableColumns[idx].column === spec.column) {\n\t\t\t\t\tcolIdx = idx;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst sortedData = sortBy(data, function(row) {\n\t\t\t\treturn row.columns[colIdx].value;\n\t\t\t});\n\t\t\tif (spec.direction === SORT_DIRECTION.DESC) {\n\t\t\t\tsortedData.reverse();\n\t\t\t}\n\t\t\treturn sortedData;\n\t\t}\n\t\treturn data;\n\t}\n\n\t// Determine if field should be quoted - quote if the field name contains special characters\n\tshouldQuoteField(field) {\n\t\treturn field.match(FIELDS_SPECIAL_CHARACTERS_REGEX) !== null;\n\t}\n\n\tcreateContentObject(label) {\n\t\tlet disabled = true;\n\t\tif (label) {\n\t\t\tdisabled = false;\n\t\t}\n\t\tconst expressionTableCellContent = (\n\t\t\t<span className=\"properties-expr-table-cell\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t);\n\t\tconst expressionTableCellContentWithTooltip = (\n\t\t\t<TruncatedContentTooltip\n\t\t\t\tcontent={expressionTableCellContent}\n\t\t\t\ttooltipText={label}\n\t\t\t\tdisabled={disabled}\n\t\t\t/>\n\t\t);\n\t\tconst contentObject = (\n\t\t\t<div className=\"properties-table-cell-control\">\n\t\t\t\t{expressionTableCellContentWithTooltip}\n\t\t\t</div>\n\t\t);\n\n\t\treturn contentObject;\n\t}\n\n\t_makeDatasetFields(dataset, fieldDataset) {\n\t\tconst fieldColumn = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_FIELD_COLUMN);\n\t\tconst fieldColumnDesc = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_FIELD_COLUMN_DESCRIPTION);\n\t\tconst storageColumn = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_STORAGE_COLUMN);\n\t\tconst dropdownLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_FIELDS_DROPDOWN_TITLE);\n\t\tconst fieldsCatInfo = {\n\t\t\tid: \"fields\",\n\t\t\tlocLabel: dropdownLabel,\n\t\t\tfield_columns: {\n\t\t\t\tfield_column_info: {\n\t\t\t\t\tlocLabel: fieldColumn,\n\t\t\t\t\tdescLabel: fieldColumnDesc\n\t\t\t\t},\n\t\t\t\tvalue_column_info: {\n\t\t\t\t\tlocLabel: this.valueColumn,\n\t\t\t\t\tdescLabel: this.valueColumnDesc\n\t\t\t\t},\n\t\t\t\tadditional_column_info: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"storage\",\n\t\t\t\t\t\tlocLabel: storageColumn\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t};\n\n\t\tconst fieldsTableInfo = {\n\t\t\tid: \"fields\",\n\t\t\tfield_value_groups: []\n\t\t};\n\t\tdataset.forEach((field) => {\n\t\t\tvar entry = {\n\t\t\t\tid: field.name,\n\t\t\t\tadditional_column_entries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"storage\",\n\t\t\t\t\t\tvalue: field.type\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t};\n\t\t\tif (field.metadata.values) {\n\t\t\t\tentry.values = [];\n\t\t\t\tfield.metadata.values.forEach((val) => {\n\t\t\t\t\tentry.values.push({ value: val });\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (field.metadata.range) {\n\t\t\t\tentry.range = {};\n\t\t\t\tif (field.metadata.range.min) {\n\t\t\t\t\tentry.range.min = { value: field.metadata.range.min };\n\t\t\t\t}\n\t\t\t\tif (field.metadata.range.max) {\n\t\t\t\t\tentry.range.max = { value: field.metadata.range.max };\n\t\t\t\t}\n\t\t\t}\n\t\t\tfieldsTableInfo.field_value_groups.push(entry);\n\t\t});\n\t\t// if fields already exists in metadata, update it instead of adding it to the front\n\t\tlet catIndex;\n\t\tlet infoIndex;\n\t\tfor (let index = 0; index < fieldDataset.field_categories.length; index++) {\n\t\t\tif (fieldDataset.field_categories[index].id === \"fields\") {\n\t\t\t\tcatIndex = index;\n\t\t\t}\n\t\t}\n\t\tfor (let index = 0; index < fieldDataset.field_table_info.length; index++) {\n\t\t\tif (fieldDataset.field_table_info[index].id === \"fields\") {\n\t\t\t\tinfoIndex = index;\n\t\t\t}\n\t\t}\n\t\tif (typeof catIndex !== \"undefined\") {\n\t\t\tfieldDataset.field_categories[catIndex] = fieldsCatInfo;\n\t\t} else {\n\t\t\tfieldDataset.field_categories.unshift(fieldsCatInfo);\n\t\t}\n\t\tif (typeof infoIndex !== \"undefined\") {\n\t\t\tfieldDataset.field_table_info[infoIndex] = fieldsTableInfo;\n\t\t} else {\n\t\t\tfieldDataset.field_table_info.unshift(fieldsTableInfo);\n\t\t}\n\t\treturn fieldDataset;\n\t}\n\n\n\t_makeFieldAndValuesContent() {\n\t\t// Make field and value tables headers.\n\t\tconst fieldCategory = this._makeFieldDropdown();\n\t\tconst fieldHeaders = [];\n\t\tconst valueHeader = [];\n\t\tconst sortable = [\"fieldName\"];\n\n\t\tlet categoryInfo = null;\n\t\tlet tableContents = null;\n\t\tif (this.state.fieldCategory === this.recentUseCat) {\n\t\t\t// get recently used category info and table contents\n\t\t\tcategoryInfo = this.recentUseCatInfo;\n\t\t\ttableContents = { id: this.recentUseCat, field_value_groups: this.props.controller.getExpressionFieldsRecentlyUsed() };\n\t\t} else {\n\t\t\t// get category info and table contents\n\t\t\tfor (let index = 0; index < this.fields.field_categories.length; index++) {\n\t\t\t\tif (this.state.fieldCategory === this.fields.field_categories[index].id) {\n\t\t\t\t\tcategoryInfo = this.fields.field_categories[index];\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let index = 0; index < this.fields.field_table_info.length; index++) {\n\t\t\t\tif (this.state.fieldCategory === this.fields.field_table_info[index].id) {\n\t\t\t\t\ttableContents = this.fields.field_table_info[index];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (categoryInfo) {\n\t\t\tfieldHeaders.push({\n\t\t\t\tkey: \"fieldName\",\n\t\t\t\tlabel: categoryInfo.field_columns.field_column_info.locLabel,\n\t\t\t\tdescription: categoryInfo.field_columns.field_column_info.descLabel,\n\t\t\t\tresizable: true\n\t\t\t});\n\t\t\tvalueHeader.push({\n\t\t\t\tkey: \"values\",\n\t\t\t\tlabel: categoryInfo.field_columns.value_column_info.locLabel,\n\t\t\t\tdescription: categoryInfo.field_columns.value_column_info.descLabel\n\t\t\t});\n\t\t\tif (categoryInfo.field_columns.additional_column_info) {\n\t\t\t\tfor (let i = 0; i < categoryInfo.field_columns.additional_column_info.length; i++) {\n\t\t\t\t\tsortable.push(categoryInfo.field_columns.additional_column_info[i].id);\n\t\t\t\t\tfieldHeaders.push({ key: categoryInfo.field_columns.additional_column_info[i].id, label: categoryInfo.field_columns.additional_column_info[i].locLabel });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\n\t\tlet tableData = [];\n\t\tlet valuesTableData = [];\n\t\tif (tableContents && tableContents.field_value_groups) {\n\t\t\tfor (let index = 0; index < tableContents.field_value_groups.length; index++) {\n\t\t\t\tconst field = tableContents.field_value_groups[index];\n\t\t\t\tconst fieldColumns = [];\n\t\t\t\tif (!this.state.fieldFilterText || this.state.fieldFilterText.length === 0 ||\n\t\t\t\t\t\t\t\t(field.id.toLowerCase().indexOf(this.state.fieldFilterText.toLowerCase()) > -1)) {\n\t\t\t\t\tfieldColumns.push({ column: \"fieldName\", content: this.createContentObject(field.id), value: field.id });\n\t\t\t\t\tif (field.additional_column_entries) {\n\t\t\t\t\t\tthis._makeAdditionalColumnsContent(field, fieldColumns);\n\t\t\t\t\t}\n\t\t\t\t\ttableData.push({ columns: fieldColumns, rowKey: index });\n\t\t\t\t\tif (index === this.state.fieldSelected) {\n\t\t\t\t\t\tvaluesTableData = this._makeValuesContent(field, valuesTableData);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// set the selected row and adjust if the table is sorted.\n\t\tlet selectedField = this.state.fieldSelected;\n\t\tif (this.state.fieldTableSortSpec !== null) {\n\t\t\ttableData = this.sortTableRows(tableData, this.state.fieldTableSortSpec);\n\t\t\tselectedField = tableData.findIndex((row) => row.rowKey === this.state.fieldSelected);\n\t\t}\n\n\t\t// set the selected row and adjust if the table is sorted.\n\t\tlet selectedValue = this.state.valueSelected;\n\t\tif (this.state.valuesTableSortSpec !== null) {\n\t\t\tvaluesTableData = this.sortTableRows(valuesTableData, this.state.valuesTableSortSpec);\n\t\t\tselectedValue = valuesTableData.findIndex((row) => row.rowKey === this.state.valueSelected);\n\t\t}\n\n\t\tconst fieldsTableLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_FIELDS_TABLE_LABEL);\n\t\tconst valuesTableLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_VALUES_TABLE_LABEL);\n\t\tconst emptyFieldsLabel = get(this.resources, MESSAGE_KEYS.EXPRESSION_FIELDS_EMPTY_TABLE_LABEL,\n\t\t\tformatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_FIELDS_EMPTY_TABLE_LABEL));\n\t\tconst emptyValuesLabel = get(this.resources, MESSAGE_KEYS.EXPRESSION_VALUES_EMPTY_TABLE_LABEL,\n\t\t\tformatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_VALUES_EMPTY_TABLE_LABEL));\n\n\t\treturn (\n\t\t\t<div className=\"properties-field-and-values-table-container\" >\n\t\t\t\t{fieldCategory}\n\t\t\t\t<div className=\"properties-field-table-container\" >\n\t\t\t\t\t<FlexibleTable\n\t\t\t\t\t\tcolumns={fieldHeaders}\n\t\t\t\t\t\tdata={tableData}\n\t\t\t\t\t\tsortable={sortable}\n\t\t\t\t\t\tfilterable={[\"fieldName\"]}\n\t\t\t\t\t\tonFilter={this.onFieldFilter}\n\t\t\t\t\t\trows={EXPRESSION_TABLE_ROWS}\n\t\t\t\t\t\ttableLabel={fieldsTableLabel}\n\t\t\t\t\t\trowSelection={ROW_SELECTION.SINGLE}\n\t\t\t\t\t\tupdateRowSelections={this.onFieldTableClick}\n\t\t\t\t\t\tselectedRows={[selectedField]}\n\t\t\t\t\t\tonRowDoubleClick={this.onFieldTableDblClick}\n\t\t\t\t\t\tonSort={this.setSortColumn.bind(this, \"fieldTable\")}\n\t\t\t\t\t\tlight={this.props.controller.getLight()}\n\t\t\t\t\t\temptyTablePlaceholder={emptyFieldsLabel}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"properties-value-table-container\" >\n\t\t\t\t\t<FlexibleTable\n\t\t\t\t\t\tcolumns={valueHeader}\n\t\t\t\t\t\tdata={valuesTableData}\n\t\t\t\t\t\tsortable={[\"values\"]}\n\t\t\t\t\t\tfilterable={[\"values\"]}\n\t\t\t\t\t\tonFilter={this.onValueFilter}\n\t\t\t\t\t\trows={EXPRESSION_TABLE_ROWS}\n\t\t\t\t\t\ttableLabel={valuesTableLabel}\n\t\t\t\t\t\trowSelection={ROW_SELECTION.SINGLE}\n\t\t\t\t\t\tupdateRowSelections={this.onValueTableClick}\n\t\t\t\t\t\tselectedRows={[selectedValue]}\n\t\t\t\t\t\tonRowDoubleClick={this.onValueTableDblClick}\n\t\t\t\t\t\tonSort={this.setSortColumn.bind(this, \"valuesTable\")}\n\t\t\t\t\t\tlight={this.props.controller.getLight()}\n\t\t\t\t\t\temptyTablePlaceholder={emptyValuesLabel}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\n\t}\n\n\t_makeValuesContent(field, valuesTableData) {\n\t\tconst minLabel = formatMessage(this.reactIntl,\n\t\t\tMESSAGE_KEYS.EXPRESSION_MIN_LABEL);\n\t\tconst maxLabel = formatMessage(this.reactIntl,\n\t\t\tMESSAGE_KEYS.EXPRESSION_MAX_LABEL);\n\t\tif (field.values) {\n\t\t\tfor (let idx = 0; idx < field.values.length; idx++) {\n\t\t\t\tthis._addValueRow(field.values[idx].value, idx, valuesTableData);\n\t\t\t}\n\t\t} else if (field.range) {\n\t\t\tif (field.range.min) {\n\t\t\t\tthis._addValueRow(minLabel + \": \" + field.range.min.value, 0, valuesTableData);\n\t\t\t}\n\t\t\tif (field.range.max) {\n\t\t\t\tthis._addValueRow(maxLabel + \": \" + field.range.max.value, 1, valuesTableData);\n\t\t\t}\n\t\t}\n\t\treturn valuesTableData;\n\t}\n\n\t_addValueRow(content, index, valuesTableData) {\n\t\tif (!this.state.valueFilterText || this.state.valueFilterText.length === 0 ||\n\t\t\t\t\t(String(content).toLowerCase()\n\t\t\t\t\t\t.indexOf(this.state.valueFilterText.toLowerCase()) > -1)) {\n\t\t\tconst valueColumns = [{ column: \"values\", content: this.createContentObject(content), value: content }];\n\t\t\tvaluesTableData.push({ columns: valueColumns, rowKey: index });\n\t\t}\n\t}\n\n\t_makeFunctionsContent() {\n\t\tif (this.props.functionList) {\n\t\t\tconst categories = Object.keys(this.props.functionList);\n\t\t\tconst selectCategory = this._makeFunctionDropdown(categories);\n\t\t\tconst functionsTable = this._makeFunctionsTable(categories);\n\t\t\treturn (\n\t\t\t\t<div className=\"properties-expression-function-table-container\" >\n\t\t\t\t\t{selectCategory}\n\t\t\t\t\t{functionsTable}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\treturn (<span>formatMessage(this.reactIntl,\n\t\t\tMESSAGE_KEYS.EXPRESSION_NO_FUNCTIONS);</span>);\n\t}\n\n\t_makeAdditionalColumnsContent(field, fieldColumns) {\n\t\tfor (let i = 0; i < field.additional_column_entries.length; i++) {\n\t\t\tfieldColumns.push({ column: field.additional_column_entries[i].id,\n\t\t\t\tcontent: this.createContentObject(field.additional_column_entries[i].value), value: field.additional_column_entries[i].value });\n\t\t}\n\t}\n\n\t_makeFunctionDropdown(categories) {\n\t\tlet items = categories.map((val, index) => ({ value: val, label: this.props.functionList[val].locLabel }));\n\t\t// Add \"Recently Used\" category as second category\n\t\tconst first = items.slice(0, 1);\n\t\tconst last = items.slice(1);\n\t\titems = first.concat({ value: this.recentUseCat, label: this.recentUseCat }, last);\n\t\tconst label = (this.state.functionCategory === this.recentUseCat) ? this.recentUseCat : this.props.functionList[this.state.functionCategory].locLabel;\n\t\tconst header = formatMessage(this.reactIntl,\n\t\t\tMESSAGE_KEYS.TABLE_SEARCH_HEADER);\n\t\tconst listBoxMenuIconTranslationIds = {\n\t\t\t\"close.menu\": formatMessage(this.reactIntl, MESSAGE_KEYS.DROPDOWN_TOOLTIP_CLOSEMENU),\n\t\t\t\"open.menu\": formatMessage(this.reactIntl, MESSAGE_KEYS.DROPDOWN_TOOLTIP_OPENMENU)\n\t\t};\n\t\treturn (\n\t\t\t<div className=\"properties-expression-function-select\">\n\t\t\t\t<Dropdown\n\t\t\t\t\tid={\"properties-expression-function-select-dropdown-\" + this.uuid}\n\t\t\t\t\tlight={this.props.controller.getLight()}\n\t\t\t\t\tlabel={label}\n\t\t\t\t\titems={items}\n\t\t\t\t\tonChange={this.onFunctionCatChange}\n\t\t\t\t\ttranslateWithId={(id) => listBoxMenuIconTranslationIds[id]}\n\t\t\t\t\ttitleText={header}\n\t\t\t\t/>\n\t\t\t</div>);\n\t}\n\n\t_makeFieldDropdown() {\n\t\tconst items = [];\n\t\tfor (let i = 0; i < this.fields.field_categories.length; i++) {\n\t\t\titems.push({ value: this.fields.field_categories[i].id, label: this.fields.field_categories[i].locLabel });\n\t\t}\n\t\tconst first = items.slice(0, 1);\n\t\tconst last = items.slice(1);\n\t\tconst newItems = first.concat({ value: this.recentUseCat, label: this.recentUseCat }, last);\n\t\tconst label = (this.state.fieldCategory === this.recentUseCat) ? this.recentUseCat : items[0].label;\n\t\tconst header = formatMessage(this.reactIntl,\n\t\t\tMESSAGE_KEYS.TABLE_SEARCH_HEADER);\n\t\tconst listBoxMenuIconTranslationIds = {\n\t\t\t\"close.menu\": formatMessage(this.reactIntl, MESSAGE_KEYS.DROPDOWN_TOOLTIP_CLOSEMENU),\n\t\t\t\"open.menu\": formatMessage(this.reactIntl, MESSAGE_KEYS.DROPDOWN_TOOLTIP_OPENMENU)\n\t\t};\n\t\treturn (\n\t\t\t<div className=\"properties-expression-field-select\">\n\t\t\t\t<Dropdown\n\t\t\t\t\tid={\"properties-expression-field-select-dropdown-\" + this.uuid}\n\t\t\t\t\tlight={this.props.controller.getLight()}\n\t\t\t\t\tlabel={label}\n\t\t\t\t\titems={newItems}\n\t\t\t\t\tonChange={this.onFieldCatChange}\n\t\t\t\t\ttranslateWithId={(id) => listBoxMenuIconTranslationIds[id]}\n\t\t\t\t\ttitleText={header}\n\t\t\t\t/>\n\t\t\t</div>);\n\t}\n\n\n\t_makeFunctionsTable(categories) {\n\t\tconst headers = [];\n\t\tconst functionColumn = formatMessage(this.reactIntl,\n\t\t\tMESSAGE_KEYS.EXPRESSION_FUNCTION_COLUMN);\n\t\tconst returnColumn = formatMessage(this.reactIntl,\n\t\t\tMESSAGE_KEYS.EXPRESSION_RETURN_COLUMN);\n\n\n\t\theaders.push({ key: \"function\", label: functionColumn, width: 73, resizable: true });\n\t\theaders.push({ key: \"return\", label: returnColumn, width: 27 });\n\t\tconst table = this._buildFunctionTable(this.state.functionCategory);\n\n\t\tlet data = table.rows;\n\t\tlet selectedFunction = this.state.functionSelected;\n\t\tif (this.state.functionTableSortSpec !== null) {\n\t\t\tdata = this.sortTableRows(data, this.state.functionTableSortSpec);\n\t\t\tselectedFunction = data.findIndex((row) => row.rowKey === this.state.functionSelected);\n\t\t}\n\t\tconst functionsTableLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_FUNCTIONS_TABLE_LABEL);\n\t\tconst functionsEmptyLabel = get(this.resources, MESSAGE_KEYS.EXPRESSION_NO_FUNCTIONS,\n\t\t\tformatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_NO_FUNCTIONS));\n\n\t\treturn (\n\t\t\t<div className=\"properties-functions-table-container\" >\n\t\t\t\t<div className=\"properties-functions-table\" >\n\t\t\t\t\t<FlexibleTable\n\t\t\t\t\t\tcolumns={headers}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tsortable={[\"function\", \"return\"]}\n\t\t\t\t\t\tfilterable={[\"function\"]}\n\t\t\t\t\t\tonFilter={this.onFunctionFilter}\n\t\t\t\t\t\trows={EXPRESSION_TABLE_ROWS}\n\t\t\t\t\t\ttableLabel={functionsTableLabel}\n\t\t\t\t\t\trowSelection={ROW_SELECTION.SINGLE}\n\t\t\t\t\t\tupdateRowSelections={this.onFunctionTableClick}\n\t\t\t\t\t\tselectedRows={[selectedFunction]}\n\t\t\t\t\t\tonRowDoubleClick={this.onFunctionTableDblClick}\n\t\t\t\t\t\tonSort={this.setSortColumn.bind(this, \"functionTable\")}\n\t\t\t\t\t\tlight={this.props.controller.getLight()}\n\t\t\t\t\t\temptyTablePlaceholder={functionsEmptyLabel}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"properties-help-table-container\" >\n\t\t\t\t\t{table.helpContainer}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t_buildFunctionTable(category) {\n\t\tconst table = { rows: [], helpContainer: (<div />) };\n\t\tconst categoryFunctions = (category === this.recentUseCat) ? this.props.controller.getExpressionRecentlyUsed() : this.props.functionList[category].functionList;\n\t\tif (categoryFunctions) {\n\t\t\tfor (let index = 0; index < categoryFunctions.length; index++) {\n\t\t\t\tconst catFunction = categoryFunctions[index];\n\t\t\t\tconst columns = [];\n\t\t\t\tif (!this.state.functionFilterText || this.state.functionFilterText.length === 0 ||\n\t\t\t\t\t(catFunction.locLabel.toLowerCase().indexOf(this.state.functionFilterText.toLowerCase()) > -1)) {\n\t\t\t\t\tconst returnType = catFunction.locReturnType ? catFunction.locReturnType : catFunction.return_type;\n\t\t\t\t\tcolumns.push({ column: \"function\", content: this.createContentObject(catFunction.locLabel), value: catFunction.locLabel });\n\t\t\t\t\tcolumns.push({ column: \"return\", content: this.createContentObject(returnType), value: returnType });\n\t\t\t\t\ttable.rows.push({ columns: columns, rowKey: index });\n\t\t\t\t\tif (index === this.state.functionSelected) {\n\t\t\t\t\t\ttable.helpContainer = (\n\t\t\t\t\t\t\t<div className=\"properties-function-help-text\" >\n\t\t\t\t\t\t\t\t<span className=\"properties-function-help-command\">{catFunction.locLabel}:</span>\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<span>{catFunction.help}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn table;\n\t}\n\n\trender() {\n\t\tconst fieldAndValueTable = this._makeFieldAndValuesContent();\n\t\tconst functionsTable = this._makeFunctionsContent();\n\t\tconst fieldsTab = formatMessage(this.reactIntl,\n\t\t\tMESSAGE_KEYS.EXPRESSION_FIELD_TAB);\n\t\tconst functionsTab = formatMessage(this.reactIntl,\n\t\t\tMESSAGE_KEYS.EXPRESSION_FUNCTIONS_TAB);\n\t\tlet content = null;\n\n\t\tif (this.state.selectedIndex === 0) {\n\t\t\tcontent = fieldAndValueTable;\n\t\t} else if (this.state.selectedIndex === 1) {\n\t\t\tcontent = functionsTable;\n\t\t}\n\n\n\t\treturn (\n\t\t\t<div className=\"properties-expression-selection-fieldOrFunction\" >\n\t\t\t\t<div className=\"properties-expression-selection-content-switcher\" >\n\t\t\t\t\t<ContentSwitcher onChange={this.onSwitch.bind(this)} selectedIndex={this.state.selectedIndex}>\n\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\tkey={0}\n\t\t\t\t\t\t\tname={\"expresson-builder-fields-tab\"}\n\t\t\t\t\t\t\tclassName={\"expresson-builder-fields-tab\"}\n\t\t\t\t\t\t\ttext={fieldsTab}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\tkey={1}\n\t\t\t\t\t\t\tname={\"expresson-builder-function-tab\"}\n\t\t\t\t\t\t\tclassName={\"expresson-builder-function-tab\"}\n\t\t\t\t\t\t\ttext={functionsTab}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ContentSwitcher>\n\t\t\t\t</div>\n\t\t\t\t{content}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nExpressionSelectFieldOrFunction.propTypes = {\n\tcontroller: PropTypes.object.isRequired,\n\tonChange: PropTypes.func,\n\tfunctionList: PropTypes.array,\n\tlanguage: PropTypes.string\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Button } from \"carbon-components-react\";\n\nimport Tooltip from \"./../../../../tooltip/tooltip\";\nimport classNames from \"classnames\";\n\n\nexport default class ExpressionSelectOperator extends React.Component {\n\tonOperatorClick(value, evt) {\n\t\tif (this.props.onChange) {\n\t\t\tthis.props.onChange(value);\n\t\t}\n\t}\n\n\t_makeOperatorContent() {\n\t\tif (this.props.operatorList) {\n\t\t\tconst operatorButtons = [];\n\t\t\tthis.props.operatorList.forEach((operator, index) => {\n\t\t\t\tconst tooltipId = `tooltip-expression-operator-${index}`;\n\t\t\t\tconst tooltip = (\n\t\t\t\t\t<div className=\"properties-tooltips\">\n\t\t\t\t\t\t{operator.help}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t\toperatorButtons.push(\n\t\t\t\t\t<div className=\"properties-operator-tooltip-container\" key={\"expression-operator-\" + index}>\n\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\tid={tooltipId}\n\t\t\t\t\t\t\ttip={tooltip}\n\t\t\t\t\t\t\tdirection=\"bottom\"\n\t\t\t\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tclassName={classNames(\"properties-operator-button\", { \"first\": (index % 2 === 0),\n\t\t\t\t\t\t\t\t\t\"second\": !(index % 2 === 0) })}\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\tkind=\"tertiary\"\n\t\t\t\t\t\t\t\tonClick={this.onOperatorClick.bind(this, operator.value)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"properties-operator-button-label\">\n\t\t\t\t\t\t\t\t\t{operator.locLabel}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn (\n\t\t\t\t<div className=\"properties-operator-container\" >\n\t\t\t\t\t{operatorButtons}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\treturn (<div />);\n\t}\n\trender() {\n\t\tconst operatorDiv = this._makeOperatorContent();\n\t\treturn (\n\t\t\t<div className=\"properties-expression-selection-operator\" >\n\t\t\t\t{operatorDiv}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nExpressionSelectOperator.propTypes = {\n\tcontroller: PropTypes.object.isRequired,\n\tonChange: PropTypes.func,\n\toperatorList: PropTypes.array\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport ExpressionSelectFieldOrFunction from \"./expression-select-field-function.jsx\";\n\nimport ExpressionSelectOperator from \"./expression-select-operator.jsx\";\n\nexport default class ExpressionSelectionPanel extends React.Component {\n\trender() {\n\t\tconst fieldsOrFunction = (\n\t\t\t<ExpressionSelectFieldOrFunction\n\t\t\t\tcontroller= {this.props.controller}\n\t\t\t\tonChange={this.props.onChange}\n\t\t\t\tfunctionList={this.props.functionList}\n\t\t\t\tlanguage={this.props.language}\n\t\t\t/>\n\t\t);\n\t\tconst operators = (\n\t\t\t<ExpressionSelectOperator\n\t\t\t\tcontroller= {this.props.controller}\n\t\t\t\tonChange={this.props.onChange}\n\t\t\t\toperatorList={this.props.operatorList}\n\t\t\t/>\n\t\t);\n\n\t\treturn (\n\t\t\t<div className=\"properties-expression-selection-container\" >\n\t\t\t\t{operators}\n\t\t\t\t{fieldsOrFunction}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nExpressionSelectionPanel.propTypes = {\n\tcontroller: PropTypes.object.isRequired,\n\tonChange: PropTypes.func.isRequired,\n\tfunctionList: PropTypes.array.isRequired,\n\toperatorList: PropTypes.array.isRequired,\n\tlanguage: PropTypes.string\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport ExpressionControl from \"./../expression\";\nimport ExpressionSelectionPanel from \"./expression-selection-panel\";\nimport { MESSAGE_KEYS } from \"./../../../constants/constants\";\nimport { formatMessage } from \"./../../../util/property-utils\";\nimport { isEqual } from \"lodash\";\n\nexport default class ExpressionBuilder extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.selection = [];\n\t\tthis.expressionInfo = props.controller.getExpressionInfo();\n\t\tthis.editorDidMount = this.editorDidMount.bind(this);\n\t\tthis.onChange = this.onChange.bind(this);\n\t\tthis.onBlur = this.onBlur.bind(this);\n\t\tthis.onSelectionChange = this.onSelectionChange.bind(this);\n\t\tthis.lastCursorPos = null;\n\n\t}\n\n\tonChange(newValue) {\n\t\tconst value = (typeof newValue === \"string\") ? newValue : newValue.toString();\n\t\tlet cursor = this.editor.getCursor();\n\t\tlet selectionOffset = 1;\n\t\tif (this.editor.somethingSelected()) {\n\t\t\tselectionOffset = 0;\n\t\t\tthis.editor.replaceSelection(value);\n\t\t} else {\n\t\t\tlet buffer = \" \";\n\t\t\tif (this.lastCursorPos) {\n\t\t\t\tthis.editor.setCursor(this.lastCursorPos);\n\t\t\t\tcursor = this.lastCursorPos;\n\t\t\t}\n\t\t\t// if adding to a parenth/bracket/brace expression, no need for space\n\t\t\tconst charBefore = this.editor.getLine(cursor.line)[cursor.ch - 1];\n\t\t\t// edge case of cursor being at line 0, char 0 is still handled here\n\t\t\tif ([\"(\", \"[\", \"{\"].indexOf(charBefore) !== -1) {\n\t\t\t\tbuffer = \"\";\n\t\t\t}\n\t\t\tthis.editor.replaceSelection(buffer + value);\n\t\t}\n\t\tthis._setSelection(value, cursor, selectionOffset);\n\t\t// This is needed to generate a render so that the selection will appear.\n\t\tconst exprValue = this.editor.getValue();\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, exprValue, true);\n\t\tthis.lastCursorPos = this.editor.getCursor();\n\t}\n\n\tonSelectionChange(selection) {\n\t\tthis.selection = selection;\n\t}\n\n\tonBlur(editor, evt) {\n\t\tthis.lastCursorPos = editor.getCursor();\n\t\tconst currentValue = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tconst newValue = this.editor.getValue();\n\t\tconst skipValidate = this.expressionSelectionPanel && evt && this.expressionSelectionPanel.contains(evt.relatedTarget);\n\t\t// update property value when value is updated OR value is to be validated\n\t\tif (!isEqual(currentValue, newValue) || !skipValidate) {\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, newValue, skipValidate);\n\t\t}\n\t}\n\n\teditorDidMount(editor, next) {\n\t\tthis.editor = editor;\n\t}\n\n\n\t_setSelection(value, cursor, selectionOffset) {\n\t\t// first set the selection to the first param holder of new value\n\t\tif (typeof value === \"string\") {\n\t\t\tconst firstParam = value.indexOf(\"?\");\n\t\t\tif (firstParam !== -1) {\n\t\t\t\tconst selection = { anchor: { line: cursor.line, ch: cursor.ch + firstParam + selectionOffset + 1 },\n\t\t\t\t\thead: { line: cursor.line, ch: cursor.ch + firstParam + selectionOffset } };\n\t\t\t\tthis.onSelectionChange([selection]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// if the newValue doesn't have a param holder\n\t\t// set it to the first param holder found in the expression\n\t\tconst lineCount = this.editor.lineCount();\n\t\tfor (let index = 0; index < lineCount; index++) {\n\t\t\tconst line = this.editor.getLine(index);\n\t\t\tconst paramOffset = line.indexOf(\"?\");\n\t\t\tif (paramOffset !== -1) {\n\t\t\t\tconst selection = { anchor: { line: index, ch: paramOffset + 1 },\n\t\t\t\t\thead: { line: index, ch: paramOffset } };\n\t\t\t\tthis.onSelectionChange([selection]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// if no parameter holders found then set it to end of insert string\n\t\tconst insertSelection = { anchor: { line: cursor.line, ch: cursor.ch + value.length + selectionOffset },\n\t\t\thead: { line: cursor.line, ch: cursor.ch + value.length + selectionOffset } };\n\t\tthis.onSelectionChange([insertSelection]);\n\t\treturn;\n\t}\n\n\trender() {\n\t\tconst expressionLabel = formatMessage(this.props.controller.getReactIntl(),\n\t\t\tMESSAGE_KEYS.EXPRESSION_BUILDER_LABEL);\n\n\t\treturn (\n\t\t\t<div className=\"properties-expression-builder\">\n\t\t\t\t<ExpressionControl\n\t\t\t\t\tcontrol={this.props.control}\n\t\t\t\t\tpropertyId={this.props.propertyId}\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\tbuilder={false}\n\t\t\t\t\teditorDidMount={this.editorDidMount}\n\t\t\t\t\tselectionRange={this.selection}\n\t\t\t\t\tonSelectionChange={this.onSelectionChange}\n\t\t\t\t\tonBlur={this.onBlur}\n\t\t\t\t\theight={96}\n\t\t\t\t\texpressionLabel={expressionLabel}\n\t\t\t\t/>\n\t\t\t\t<div ref={ (ref) => (this.expressionSelectionPanel = ref) }>\n\t\t\t\t\t<ExpressionSelectionPanel\n\t\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\t\tonChange={this.onChange}\n\t\t\t\t\t\tfunctionList={this.expressionInfo.functionCategories}\n\t\t\t\t\t\toperatorList={this.expressionInfo.operators}\n\t\t\t\t\t\tlanguage={this.props.control.language}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nExpressionBuilder.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Base class for table controls\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { injectIntl } from \"react-intl\";\nimport { Button } from \"carbon-components-react\";\nimport { Maximize16, Minimize16 } from \"@carbon/icons-react\";\nimport { formatMessage } from \"../../../util/property-utils\";\nimport { MESSAGE_KEYS } from \"../../../constants/constants\";\n\nclass ExpressionToggle extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.buttonHandler = props.controller.getHandlers().buttonHandler || (() => null);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t}\n\trender() {\n\t\treturn (\n\t\t\t<div className=\"properties-expression-toggle\">\n\t\t\t\t<div className=\"properties-expression-toggle-absolute\">\n\t\t\t\t\t{this.props.enableMaximize ? (<Button\n\t\t\t\t\t\tclassName=\"maximize\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\t\trenderIcon={Maximize16}\n\t\t\t\t\t\thasIconOnly\n\t\t\t\t\t\ticonDescription={formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_MAXIMIZE_LABEL)}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tconst handlerStatus = this.buttonHandler({\n\t\t\t\t\t\t\t\ttype: \"maximize_tearsheet\",\n\t\t\t\t\t\t\t\tpropertyId: this.props.control.data || {}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (!handlerStatus && this.props.control.data && this.props.control.data.tearsheet_ref) {\n\t\t\t\t\t\t\t\tthis.props.controller.setActiveTearsheet(this.props.control.data.tearsheet_ref);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>) : (<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"minimize\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\t\thasIconOnly\n\t\t\t\t\t\trenderIcon={Minimize16}\n\t\t\t\t\t\ticonDescription={formatMessage(this.reactIntl, MESSAGE_KEYS.EXPRESSION_MINIMIZE_LABEL)}\n\t\t\t\t\t\tonClick={() => this.props.controller.clearActiveTearsheet()}\n\t\t\t\t\t/>)\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>);\n\t}\n}\nExpressionToggle.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tenableMaximize: PropTypes.bool\n};\nexport default injectIntl(ExpressionToggle);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlet CodeMirror;\nfunction register(cm) {\n\tCodeMirror = cm;\n\tCodeMirror.registerHelper(\"hint\", \"python\", pythonHint);\n}\n\n\nfunction forEach(arr, f) {\n\tfor (var e = arr.length, i = 0; i < e; ++i) {\n\t\tf(arr[i]);\n\t}\n}\n\nfunction arrayContains(arr, item) {\n\tif (!Array.prototype.indexOf) {\n\t\tvar i = arr.length;\n\t\twhile (i--) {\n\t\t\tif (arr[i] === item) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\treturn arr.indexOf(item) !== -1;\n}\n\nfunction scriptHint(editor, _keywords, getToken) {\n\tvar cur = editor.getCursor();\n\tvar token = getToken(editor, cur);\n\tvar tprop = token;\n\tvar context;\n\t// ignore irregular word tokens\n\tif (!(/^[\\w$_]*$/).test(token.string)) {\n\t\ttoken = tprop = { start: cur.ch, end: cur.ch, string: \"\", state: token.state,\n\t\t\tclassName: token.string === \":\" ? \"python-type\" : null };\n\t}\n\tif (!context) {\n\t\tcontext = [];\n\t}\n\tcontext.push(tprop);\n\n\tvar completionList = getCompletions(token, context);\n\tcompletionList.sort();\n\n\treturn { list: completionList,\n\t\tfrom: CodeMirror.Pos(cur.line, token.start),\n\t\tto: CodeMirror.Pos(cur.line, token.end) };\n}\n\nfunction pythonHint(editor) {\n\treturn scriptHint(editor, pythonKeywordsL, function(e, cur) {\n\t\treturn e.getTokenAt(cur);\n\t});\n}\n\n\nvar pythonKeywords = \"and del from not while as elif global or with assert else if pass yield\" +\n\"break except import print class exec in raise continue finally is return def for lambda try\";\nvar pythonKeywordsL = pythonKeywords.split(\" \");\n\nvar pythonBuiltins = \"abs divmod input open staticmethod all enumerate int ord str \" +\n\"any eval isinstance pow sum basestring execfile issubclass print super\" +\n\"bin file iter property tuple bool filter len range type\" +\n\"bytearray float list raw_input unichr callable format locals reduce unicode\" +\n\"chr frozenset long reload vars classmethod getattr map repr xrange\" +\n\"cmp globals max reversed zip compile hasattr memoryview round __import__\" +\n\"complex hash min set apply delattr help next setattr buffer\" +\n\"dict hex object slice coerce dir id oct sorted intern \";\nvar pythonBuiltinsL = pythonBuiltins.split(\" \").join(\"() \")\n\t.split(\" \");\n\nfunction getCompletions(token, context) {\n\tvar found = [];\n\tvar start = token.string;\n\tfunction maybeAdd(str) {\n\t\tif (str.lastIndexOf(start, 0) === 0 && !arrayContains(found, str)) {\n\t\t\tfound.push(str);\n\t\t}\n\t}\n\n\tfunction gatherCompletions(_obj) {\n\t\tforEach(pythonBuiltinsL, maybeAdd);\n\t\tforEach(pythonKeywordsL, maybeAdd);\n\t}\n\n\tif (context) {\n\t\tvar obj = context.pop();\n\t\tvar base = \"\";\n\n\t\tif (obj.type === \"variable\") {\n\t\t\tbase = obj.string;\n\t\t}\telse if (obj.type === \"variable-3\") {\n\t\t\tbase = \":\" + obj.string;\n\t\t}\n\t\twhile (base !== null && context.length) {\n\t\t\tbase = base[context.pop().string];\n\t\t}\n\t\tif (base !== null) {\n\t\t\tgatherCompletions(base);\n\t\t}\n\t}\n\treturn found;\n}\n\nexport {\n\tregister\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlet CodeMirror;\nfunction register(cm) {\n\tCodeMirror = cm;\n\tCodeMirror.registerHelper(\"hint\", \"r\", rHint);\n}\n\nfunction forEach(arr, f) {\n\tfor (var e = arr.length, i = 0; i < e; ++i) {\n\t\tf(arr[i]);\n\t}\n}\n\nfunction arrayContains(arr, item) {\n\tif (!Array.prototype.indexOf) {\n\t\tvar i = arr.length;\n\t\twhile (i--) {\n\t\t\tif (arr[i] === item) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\treturn arr.indexOf(item) !== -1;\n}\n\nfunction scriptHint(editor, _keywords, getToken) {\n\tvar cur = editor.getCursor();\n\tvar token = getToken(editor, cur);\n\tvar tprop = token;\n\tvar context;\n\t// ignore irregular word tokens\n\tif (!(/^[\\w$_]*$/).test(token.string)) {\n\t\ttoken = tprop = { start: cur.ch, end: cur.ch, string: \"\", state: token.state,\n\t\t\tclassName: token.string === \":\" ? \"r-type\" : null };\n\t}\n\tif (!context) {\n\t\tcontext = [];\n\t}\n\tcontext.push(tprop);\n\n\tvar completionList = getCompletions(token, context);\n\tcompletionList.sort();\n\n\treturn { list: completionList,\n\t\tfrom: CodeMirror.Pos(cur.line, token.start),\n\t\tto: CodeMirror.Pos(cur.line, token.end) };\n}\n\nfunction rHint(editor) {\n\treturn scriptHint(editor, rKeywordsL, function(e, cur) {\n\t\treturn e.getTokenAt(cur);\n\t});\n}\n\nvar rKeywords = \"function|if|in|break|next|repeat|else|for\" +\n\t\"|return|switch|while|try|tryCatch|stop|warning|require|library\" +\n\t\"|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\";\nvar rKeywordsL = rKeywords.split(\"|\");\n\nvar rBuiltIns = \"zapsmall xzfile xtfrm xor writeLines writeChar writeBin write withVisible withRestarts within\" +\n\t\"withCallingHandlers withAutoprint with while which weekdays warnings warning version Vectorize vector vapply\" +\n\t\"validUTF8 validEnc utf8ToInt UseMethod url unz untracemem untrace unsplit unserialize unname unlockBinding unloadNamespace\" +\n\t\"unlist unlink unique union undebug unclass typeof tryCatch try truncate trunc trimws trigamma\" +\n\t\"transform tracingState tracemem traceback trace toupper toString topenv tolower textConnectionValue textConnection\" +\n\t\"testPlatformEquivalence tempfile tempdir tcrossprod taskCallbackManager tapply tanpi tanh tan tabulate table T t system2 system\" +\n\t\"switch sweep svd suspendInterrupts suppressWarnings suppressPackageStartupMessages suppressMessages summary sum\" +\n\t\"substring substr substitute subset sub strwrap structure strtrim strtoi strsplit strrep strptime strftime\" +\n\t\"stopifnot stop stdout stdin stderr startsWith standardGeneric srcref srcfilecopy srcfilealias srcfile sQuote sqrt sprintf split\" +\n\t\"source sort solve socketSelect socketConnection sinpi sink sinh single sin simplify2array simpleWarning simpleMessage simpleError\" +\n\t\"simpleCondition signif signalCondition sign shQuote showConnections setwd setTimeLimit setSessionTimeLimit setNamespaceInfo setHook\" +\n\t\"setequal setdiff serialize sequence seq_len seq_along seq seek searchpaths search scan scale saveRDS save sapply sample rowSums\" +\n\t\"rowsum rownames rowMeans row round RNGversion length lchoose lbeta lazyLoadDBfetch lazyLoadDBexec\" +\n\t\"RNGkind rm rle rev returnValue return retracemem restartFormals restartDescription requireNamespace require replicate replace repeat\" +\n\t\"rep_len rep removeTaskCallback remove regmatches registerS3methods registerS3method regexpr regexec Reduce Recall\" +\n\t\"readRenviron readRDS readLines readline readChar readBin Re rcond rbind rawToChar rawToBits rawShift rawConnectionValue rawConnection\" +\n\t\"raw rapply rank range R_system_version quote quit quarters qr q pushBackLength pushBack psigamma provideDimnames prod prmatrix print\" +\n\t\"prettyNum pretty Position polyroot pmin pmax pmatch pipe pi pcre_config paste0 paste parseNamespaceFile parse\" +\n\t\"packBits packageStartupMessage packageHasNamespace packageEvent package_version outer ordered order options open OlsonNames\" +\n\t\"oldClass objects nzchar numeric_version numeric NROW nrow normalizePath norm noquote nlevels ngettext NextMethod next Negate NCOL ncol\" +\n\t\"nchar nargs namespaceImportMethods namespaceImportFrom namespaceImportClasses namespaceImport namespaceExport\" +\n\t\"months mode Mod missing min mget message merge memDecompress memCompress mean max matrix match mapply Map\" +\n\t\"makeActiveBinding ls logical logb log2 log1p log10 log lockEnvironment lockBinding local loadNamespace loadingNamespaceInfo loadedNamespaces\" +\n\t\"load list2env list license licence library libcurlVersion lgamma lfactorial levels LETTERS letters lengths\" +\n\t\"lazyLoad lapply labels La_version La_library l10n_info kronecker kappa julian jitter isTRUE isSymmetric isSeekable isS4 isRestart isOpen\" +\n\t\"ISOdatetime ISOdate isNamespaceLoaded isNamespace isIncomplete isFALSE isdebugged isBaseNamespace isatty\" +\n\t\"invokeRestartInteractively invokeRestart invisible intToUtf8 intToBits intersect acosh acos abs abbreviate\" +\n\t\"interactive interaction integer inherits importIntoEnv Im ifelse if identity identical icuSetCollate icuGetCollate iconvlist iconv I\" +\n\t\"gzfile gzcon gsub grouping grepRaw grepl grep gregexpr globalenv gl getwd gettextf gettext getTaskCallbackNames getSrcLines getRversion\" +\n\t\"getOption getNativeSymbolInfo getNamespaceVersion getNamespaceUsers getNamespaceName getNamespaceInfo getNamespaceImports getNamespaceExports\" +\n\t\"getNamespace getLoadedDLLs getHook getExportedValue geterrmessage getElement getDLLRegisteredRoutines getConnection getCallingDLLe\" +\n\t\"getCallingDLL getAllConnections get0 get gctorture2 gctorture gcinfo gc gamma function forwardsolve formatDL formatC format\" +\n\t\"formals forceAndCall force for flush floor findRestart findPackageEnv findInterval Find Filter file fifo factorial factor F extSoftVersion\" +\n\t\"expression expm1 exp exists evalq eval environmentName environmentIsLocked environment enquote endsWith Encoding\" +\n\t\"encodeString enc2utf8 enc2native emptyenv eigen eapply dynGet duplicated dump droplevels drop dQuote dput double dontCheck dirname dir\" +\n\t\"digamma difftime diff dget determinant detach det deparse delayedAssign asNamespace asinh asin\" +\n\t\"debugonce debuggingState debug date cut curlGetHeaders cumsum cumprod cummin cummax Cstack_info crossprod cospi cosh cos contributors Conj\" +\n\t\"conflicts conditionMessage conditionCall computeRestarts complex comment commandArgs colSums colnames colMeans col\" +\n\t\"closeAllConnections close clearPushBack class choose chol2inv chol chkDots check_tzones chartr charToRaw charmatch character ceiling\" +\n\t\"cbind cat casefold capabilities callCC call c bzfile by builtins browserText browserSetDebug browserCondition browser break bquote body\" +\n\t\"bitwXor bitwShiftR bitwShiftL bitwOr bitwNot bitwAnd bindtextdomain bindingIsLocked bindingIsActive beta besselY besselK besselJ besselI\" +\n\t\"basename baseenv backsolve autoloader autoload attributes attr attachNamespace attach atanh atan2 atan assign asS4 asS3\" +\n\t\"arrayInd array args Arg apply append aperm anyNA anyDuplicated any allowInterrupts all alist agrepl agrep addTaskCallback addNA\";\nvar rBuiltInsL = rBuiltIns.split(\" \");\n\nfunction getCompletions(token, context) {\n\tvar found = [];\n\tvar start = token.string;\n\tfunction maybeAdd(str) {\n\t\tif (str.lastIndexOf(start, 0) === 0 && !arrayContains(found, str)) {\n\t\t\tfound.push(str);\n\t\t}\n\t}\n\n\tfunction gatherCompletions(_obj) {\n\t\tforEach(rBuiltInsL, maybeAdd);\n\t\tforEach(rKeywordsL, maybeAdd);\n\t}\n\n\tif (context) {\n\t\tvar obj = context.pop();\n\t\tvar base = \"\";\n\n\t\tif (obj.type === \"variable\") {\n\t\t\tbase = obj.string;\n\t\t}\telse if (obj.type === \"variable-3\") {\n\t\t\tbase = \":\" + obj.string;\n\t\t}\n\t\twhile (base !== null && context.length) {\n\t\t\tbase = base[context.pop().string];\n\t\t}\n\t\tif (base !== null) {\n\t\t\tgatherCompletions(base);\n\t\t}\n\t}\n\treturn found;\n}\n\nexport {\n\tregister\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint no-useless-escape: \"off\" */\n\nlet CodeMirror;\nfunction register(cm) {\n\tCodeMirror = cm;\n\tCodeMirror.registerHelper(\"hint\", \"CLEM\", CLEMHint);\n\tCodeMirror.defineMode(\"CLEM\", defineMode);\n\tCodeMirror.defineMIME(\"text/x-CLEM\", \"CLEM\");\n}\n\nconst CLEMKeywords = (\"@BLANK @DIFF1 @DIFF2 @FIELD @FIELDS_BETWEEN @FIELDS_MATCHING \" +\n\"@GLOBAL_MAX @GLOBAL_MEAN @GLOBAL_MIN @GLOBAL_SDEV @GLOBAL_SUM @INDEX @LAST_NON_BLANK \" +\n\"@MAX @MEAN @MIN @MULTI_RESPONSE_SET @NULL @OFFSET @PARTITION_FIELD @PREDICTED \" +\n\"@SDEV @SINCE @SINCE0 @SUM @TARGET @TESTING_PARTITION @THIS @TODAY @TRAINING_PARTITION \" +\n\"@VALIDATION_PARTITION abs allbutfirst allbutlast alphabefore and arccos arccosh arcsin \" +\n\"arcsinh arctan arctan2 arctanh area cdf_chisq cdf_f cdf_normal cdf_t close_to COND1 \" +\n\"and COND2 COND1 or COND2 cos cosh count_equal count_greater_than count_less_than \" +\n\"count_non_nulls count_not_equal count_nulls count_substring crosses date_before \" +\n\"date_days_difference date_from_ywd date_in_days date_in_months date_in_weeks date_in_years \" +\n\"date_iso_day date_iso_week date_iso_year date_months_difference date_weeks_difference \" +\n\"date_years_difference datetime_date datetime_day datetime_day_name datetime_day_short_name \" +\n\"datetime_hour datetime_in_seconds datetime_minute datetime_month datetime_month_name \" +\n\"datetime_month_short_name datetime_now datetime_second datetime_time datetime_timestamp \" +\n\"datetime_weekday datetime_year distance div endstring exp first_index first_non_null \" +\n\"first_non_null_index fracof hasendstring hasmidstring hasstartstring hassubstring hassubstring \" +\n\"if then else elseif endif integer_bitcount integer_leastbit integer_length intof is_date \" +\n\"is_datetime is_integer is_number is_real is_string is_time is_timestamp isalphacode \" +\n\"isendstring islowercode ismidstring isnumbercode isstartstring issubstring issubstring \" +\n\"issubstring_count issubstring_lim isuppercode last last_index last_non_null last_non_null_index \" +\n\"length locchar locchar_back log log10 lowertoupper max max_index max_n MEAN mean_n member \" +\n\"min min_index min_n negate not num_points oneof or overlap pi random random0 rem replace \" +\n\"replicate round sdev_n sign sin sinh skipchar skipchar_back soundex soundex_difference sqrt \" +\n\"startstring stb_centroid_latitude stb_centroid_longitude stripchar strmember subscrs substring \" +\n\"substring_between sum_n tan tanh testbit time_before time_hours_difference time_in_hours \" +\n\"time_in_mins time_in_secs time_mins_difference\").split(\" \");\n\nfunction CLEMHint(editor, options) {\n\treturn scriptHint(editor, CLEMKeywords,\n\t\tfunction(e, cur) {\n\t\t\treturn e.getTokenAt(cur);\n\t\t},\n\t\toptions);\n}\n\nfunction scriptHint(editor, keywords, getToken, options) {\n\t// Find the token at the cursor\n\tvar cur = editor.getCursor();\n\tvar token = getToken(editor, cur);\n\tif ((/\\b(?:string|comment)\\b/).test(token.type)) {\n\t\treturn null;\n\t}\n\ttoken.state = CodeMirror.innerMode(editor.getMode(), token.state).state;\n\n\t// If it's not a 'word-style' token, ignore the token.\n\tif (!((/^[\\w$_@]*$/).test(token.string))) {\n\t\ttoken = { start: cur.ch, end: cur.ch, string: \"\", state: token.state,\n\t\t\ttype: token.string === \".\" ? \"property\" : null };\n\t} else if (token.end > cur.ch) {\n\t\ttoken.end = cur.ch;\n\t\ttoken.string = token.string.slice(0, cur.ch - token.start);\n\t}\n\n\treturn { list: getAutoCompletions(token, keywords, options),\n\t\tfrom: CodeMirror.Pos(cur.line, token.start),\n\t\tto: CodeMirror.Pos(cur.line, token.end) };\n}\n\nfunction getAutoCompletions(token, keywords, options) {\n\tvar found = [];\n\tvar start = token.string;\n\n\tfor (var indx = 0; indx < keywords.length; indx++) {\n\t\tif (keywords[indx].lastIndexOf(start, 0) === 0 && (found.indexOf(keywords[indx]) === -1)) {\n\t\t\tfound.push(keywords[indx]);\n\t\t}\n\t}\n\n\treturn found;\n}\n\n\nfunction defineMode() {\n\n\tvar keywords = (\"@BLANK @DIFF1 @DIFF2 @FIELD @FIELDS_BETWEEN @FIELDS_MATCHING \" +\n\t\"@GLOBAL_MAX @GLOBAL_MEAN @GLOBAL_MIN @GLOBAL_SDEV @GLOBAL_SUM @INDEX @LAST_NON_BLANK \" +\n\t\"@MAX @MEAN @MIN @MULTI_RESPONSE_SET @NULL @OFFSET @PARTITION_FIELD @PREDICTED \" +\n\t\"@SDEV @SINCE @SINCE0 @SUM @TARGET @TESTING_PARTITION @THIS @TODAY @TRAINING_PARTITION \" +\n\t\"@VALIDATION_PARTITION abs allbutfirst allbutlast alphabefore and arccos arccosh arcsin \" +\n\t\"arcsinh arctan arctan2 arctanh area cdf_chisq cdf_f cdf_normal cdf_t close_to COND1 \" +\n\t\"and COND2 COND1 or COND2 cos cosh count_equal count_greater_than count_less_than \" +\n\t\"count_non_nulls count_not_equal count_nulls count_substring crosses date_before \" +\n\t\"date_days_difference date_from_ywd date_in_days date_in_months date_in_weeks date_in_years \" +\n\t\"date_iso_day date_iso_week date_iso_year date_months_difference date_weeks_difference \" +\n\t\"date_years_difference datetime_date datetime_day datetime_day_name datetime_day_short_name \" +\n\t\"datetime_hour datetime_in_seconds datetime_minute datetime_month datetime_month_name \" +\n\t\"datetime_month_short_name datetime_now datetime_second datetime_time datetime_timestamp \" +\n\t\"datetime_weekday datetime_year distance div endstring exp first_index first_non_null \" +\n\t\"first_non_null_index fracof hasendstring hasmidstring hasstartstring hassubstring hassubstring \" +\n\t\"if then else elseif endif integer_bitcount integer_leastbit integer_length intof is_date \" +\n\t\"is_datetime is_integer is_number is_real is_string is_time is_timestamp isalphacode \" +\n\t\"isendstring islowercode ismidstring isnumbercode isstartstring issubstring issubstring \" +\n\t\"issubstring_count issubstring_lim isuppercode last last_index last_non_null last_non_null_index \" +\n\t\"length locchar locchar_back log log10 lowertoupper max max_index max_n MEAN mean_n member \" +\n\t\"min min_index min_n negate not num_points oneof or overlap pi random random0 rem replace \" +\n\t\"replicate round sdev_n sign sin sinh skipchar skipchar_back soundex soundex_difference sqrt \" +\n\t\"startstring stb_centroid_latitude stb_centroid_longitude stripchar strmember subscrs substring \" +\n\t\"substring_between sum_n tan tanh testbit time_before time_hours_difference time_in_hours \" +\n\t\"time_in_mins time_in_secs time_mins_difference\").split(\" \");\n\n\tvar isSpecialChar = /[\\[\\]{}\\(\\),;\\:\\.]/;\n\tvar isDigit = /\\d/;\n\tvar isNumberChar = /[\\w\\.]/;\n\tvar isWordChar = /[\\w\\$_]/;\n\n\tvar isOperatorChar = /[+\\-*&%=<>!?|\\/]/;\n\n\tfunction tokenResolve(stream, state) {\n\t\tvar ch = stream.next();\n\t\tif (ch === \"#\" && state.startOfLine) {\n\t\t\tstream.skipToEnd();\n\t\t\treturn \"meta\";\n\t\t}\n\n\t\tif (ch === \"\\\"\") {\n\t\t\ttokenString(ch, stream, state);\n\t\t\treturn \"string\";\n\t\t}\n\n\t\tif (ch === \"'\") {\n\t\t\ttokenVariable(ch, stream, state);\n\t\t\treturn \"variable\";\n\t\t}\n\n\t\tif (isSpecialChar.test(ch)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (isDigit.test(ch)) {\n\t\t\tstream.eatWhile(isNumberChar);\n\t\t\treturn \"number\";\n\t\t}\n\t\tif (isOperatorChar.test(ch)) {\n\t\t\tstream.eatWhile(isOperatorChar);\n\t\t\treturn \"operator\";\n\t\t}\n\n\t\tstream.eatWhile(isWordChar);\n\t\tvar cur = stream.current();\n\t\tif (keywords.indexOf(cur) !== -1) {\n\t\t\treturn \"keyword\";\n\t\t}\n\t\treturn \"variable\";\n\t}\n\n\tfunction tokenString(quote, stream, state) {\n\t\tvar next;\n\t\tvar end = false;\n\t\twhile (typeof (next = stream.next()) !== \"undefined\") {\n\t\t\tif (next === quote) {\n\t\t\t\tend = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (end) {\n\t\t\tstate.tokenize = null;\n\t\t}\n\t\treturn \"string\";\n\t}\n\n\tfunction tokenVariable(quote, stream, state) {\n\t\tvar next;\n\t\tvar end = false;\n\t\twhile (typeof (next = stream.next()) !== \"undefined\") {\n\t\t\tif (next === quote) {\n\t\t\t\tend = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (end) {\n\t\t\tstate.tokenize = null;\n\t\t}\n\t\treturn \"variable\";\n\t}\n\n\t// Required implementation\n\n\treturn {\n\t\tstartState: function() {\n\t\t\treturn { tokenize: null };\n\t\t},\n\n\t\ttoken: function(stream, state) {\n\t\t\tif (stream.eatSpace()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar style = (state.tokenize || tokenResolve)(stream, state);\n\t\t\treturn style;\n\t\t},\n\n\t\telectricChars: \"{}\"\n\t};\n}\n\nexport {\n\tregister\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint global-require: 0 */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { UnControlled as CodeMirror } from \"react-codemirror2\";\nimport Icon from \"./../../../icons/icon.jsx\";\nimport { Button } from \"carbon-components-react\";\nimport classNames from \"classnames\";\nimport { isEqual } from \"lodash\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport WideFlyout from \"./../../components/wide-flyout\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport ExpressionBuilder from \"./expression-builder/expression-builder\";\nimport { MESSAGE_KEYS, CONDITION_MESSAGE_TYPE, DEFAULT_VALIDATION_MESSAGE } from \"./../../constants/constants\";\nimport { Calculator24 } from \"@carbon/icons-react\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { STATES } from \"./../../constants/constants\";\nimport { get } from \"lodash\";\nimport ExpressionToggle from \"./expression-toggle/expression-toggle\";\n\nimport { register as registerPython } from \"./languages/python-hint\";\nimport { register as registerR } from \"./languages/r-hint\";\nimport { register as registerClem } from \"./languages/CLEM-hint\";\n\n// required for server side rendering.\nlet cm = null;\nif (typeof window !== \"undefined\" && typeof window.navigator !== \"undefined\") {\n\tcm = require(\"codemirror\");\n\trequire(\"codemirror/addon/hint/show-hint\");\n\trequire(\"codemirror/addon/display/placeholder\");\n\trequire(\"codemirror/addon/display/autorefresh\");\n\trequire(\"codemirror/mode/javascript/javascript\");\n\trequire(\"codemirror/addon/hint/javascript-hint\");\n\trequire(\"codemirror/addon/hint/sql-hint\");\n\trequire(\"codemirror/mode/sql/sql\");\n\trequire(\"codemirror/mode/python/python\");\n\trequire(\"codemirror/mode/r/r\");\n\tregisterPython(cm);\n\tregisterR(cm);\n\tregisterClem(cm);\n}\n\n\nconst pxPerChar = 8.5;\nconst pxPerLine = 26;\nconst defaultCharPerLine = 30;\nconst maxLineHeight = 15 * pxPerLine; // 20 lines\nconst minLineHeight = 4 * pxPerLine; // 4 lines\n\nclass ExpressionControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tshowExpressionBuilder: false,\n\t\t\tvalidationInProgress: false\n\t\t};\n\n\t\tthis.origHint = \"\";\n\t\tthis.expressionInfo = this.props.controller.getExpressionInfo();\n\t\tthis.handleValidate = this.handleValidate.bind(this);\n\t\tthis.hasValidate = this.hasValidate.bind(this);\n\t\tthis.cancelExpressionBuilder = this.cancelExpressionBuilder.bind(this);\n\t\tthis.hideExpressionBuilder = this.hideExpressionBuilder.bind(this);\n\t\tthis.showExpressionBuilder = this.showExpressionBuilder.bind(this);\n\t\tthis.editorDidMount = this.editorDidMount.bind(this);\n\t\tthis.addonHints = this.addonHints.bind(this);\n\t\tthis.getDatasetFields = this.getDatasetFields.bind(this);\n\t\tthis.handleBlur = this.handleBlur.bind(this);\n\t\tthis.handleKeyDown = this.handleKeyDown.bind(this);\n\n\t\tthis.handleChange = (editor, data, newValue) => {\n\t\t\t// this is needed when characters are added into the expression builder because\n\t\t\t// entering chars does not go through onChange() in expression builder.\n\t\t\t// This is needed to adjust the selection position in code mirror.\n\t\t\tif (Array.isArray(data.text) && data.text.length === 1 && data.text[0].length === 1 && this.props.onSelectionChange) {\n\t\t\t\t// if a string was replaced, need to calc newPos from the 'data.from' otherwise use 'data.to'\n\t\t\t\tconst newPos = (data.removed[0].length > 0) ? { line: data.from.line, ch: data.from.ch + 1 } : { line: data.to.line, ch: data.to.ch + 1 };\n\t\t\t\tthis.props.onSelectionChange([{ anchor: newPos, head: newPos }]);\n\t\t\t}\n\t\t\tif (this.state.validateIcon) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tvalidateIcon: null\n\t\t\t\t});\n\t\t\t\tthis.props.controller.updateErrorMessage(this.props.propertyId, DEFAULT_VALIDATION_MESSAGE);\n\t\t\t}\n\t\t};\n\t}\n\n\t// this is needed to ensure expression builder selection works.\n\tcomponentDidUpdate(prevProps) {\n\t\tif (\n\t\t\tthis.props.selectionRange &&\n\t\t\tthis.props.selectionRange.length > 0 &&\n\t\t\t!isEqual(prevProps.selectionRange, this.props.selectionRange) &&\n\t\t\tthis.editor\n\t\t) {\n\t\t\tthis.props.selectionRange.forEach((selected) => {\n\t\t\t\tthis.editor.setSelection(selected.anchor, selected.head);\n\t\t\t});\n\t\t\tthis.editor.focus();\n\t\t}\n\t}\n\n\t// reset to the original autocomplete handler\n\tcomponentWillUnmount() {\n\t\tif (this.origHint && cm) {\n\t\t\tcm.registerHelper(\"hint\", this.props.control.language, this.origHint);\n\t\t}\n\t}\n\n\t// get the set of dataset field names\n\tgetDatasetFields() {\n\t\tconst results = [];\n\t\tconst fields = this.props.controller.getDatasetMetadataFields();\n\t\tfor (const field of fields) {\n\t\t\tresults.push(field.name);\n\t\t}\n\t\treturn results;\n\t}\n\n\t// Add the dataset field names to the autocomplete list\n\taddonHints(editor, options) {\n\t\tvar results = {};\n\t\tvar cur = editor.getCursor();\n\t\tvar token = editor.getTokenAt(cur);\n\t\tif (this.origHint) {\n\t\t\t// get the list of autocomplete names from the language autocomplete handler\n\t\t\tresults = this.origHint(editor, options);\n\n\t\t\t// add to the start of the autocomplete list the set of dataset field names that complete the\n\t\t\t// string that has been entered.\n\t\t\tvar parameters = this.getDatasetFields();\n\t\t\tfor (var i = 0; i < parameters.length; ++i) {\n\t\t\t\tconst parameter = parameters[i];\n\t\t\t\tif (parameter.lastIndexOf(token.string, 0) === 0 && results.list.indexOf(parameter) === -1) {\n\t\t\t\t\tresults.list.unshift(parameter);\n\t\t\t\t} else if (token.string === \" \" && token.type === null) {\n\t\t\t\t\tresults.list.unshift(parameter);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t}\n\n\t// Save original autocomplete handler and then register our custom handler\n\t// that will add data set filed names to autocomplete list.\n\teditorDidMount(editor, next) {\n\t\tthis.editor = editor;\n\t\t// set the default height, should be between 4 and 20 lines\n\t\tconst controlWidth = (this.expressionEditorDiv) ? this.expressionEditorDiv.clientWidth : 0;\n\t\tconst charPerLine = (controlWidth > 0) ? controlWidth / pxPerChar : defaultCharPerLine;\n\t\t// charlimit in the control sets the height within a min and max\n\t\tlet height = (this.props.control.charLimit)\n\t\t\t? Math.min((this.props.control.charLimit / charPerLine) * pxPerLine, maxLineHeight) : minLineHeight;\n\t\t// let an explicit prop override the calculated height\n\t\theight = this.props.control.rows ? pxPerLine * this.props.control.rows : height;\n\t\theight = this.props.height ? this.props.height : height;\n\t\tthis.editor.setSize(null, Math.max(Math.floor(height), minLineHeight));\n\n\t\tthis.origHint = editor.getHelper({ line: 0, ch: 0 }, \"hint\");\n\t\t// this next line is a hack to overcome a Codemirror problem. To support SparkSQL, a subset of SQL,\n\t\t// we need to register with Codemirror the language as the value of \"text/x-hive\". When Codemirror\n\t\t// registers the autocomplete addon it registers is as \"sql\" not the subset \"text/x-hive\"\n\t\t// This hack allows use to capture the \"sql\" autocomplete handler and subsitute our custom handler\n\t\t// Same has been done for Python and R\n\t\tlet language = this.props.control.language;\n\t\tswitch (this.props.control.language) {\n\t\tcase \"text/x-hive\":\n\t\t\tlanguage = \"sql\";\n\t\t\tbreak;\n\t\tcase \"text/x-python\":\n\t\t\tlanguage = \"python\";\n\t\t\tbreak;\n\t\tcase \"text/x-rsrc\":\n\t\t\tlanguage = \"r\";\n\t\t\tbreak;\n\t\tdefault:\n\t\t}\n\t\tif (cm) {\n\t\t\tcm.registerHelper(\"hint\", language, this.addonHints);\n\t\t}\n\n\t\tif (this.props.editorDidMount) {\n\t\t\tthis.props.editorDidMount(editor, next);\n\t\t}\n\t}\n\n\tshowExpressionBuilder() {\n\t\t// save the state from the expression builder so if enter and cancel again it will revert\n\t\tthis.initialControlValue = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tthis.initialMessage = this.props.controller.getErrorMessage(this.props.propertyId);\n\t\tthis.initialState = this.props.controller.getControlState(this.props.propertyId);\n\t\tthis.setState({ showExpressionBuilder: true });\n\t}\n\thideExpressionBuilder() {\n\t\tthis.setState({ showExpressionBuilder: false });\n\t}\n\tcancelExpressionBuilder() {\n\t\t// on cancel reset back to original value\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, this.initialControlValue);\n\t\tthis.props.controller.updateErrorMessage(this.props.propertyId, this.initialMessage);\n\t\tthis.props.controller.updateControlState(this.props.propertyId, this.initialState);\n\t\tthis.hideExpressionBuilder();\n\t}\n\n\thandleValidate() {\n\t\tthis.setState({\n\t\t\tvalidateIcon: null,\n\t\t\tvalidationInProgress: true\n\t\t});\n\t\tconst appData = this.props.controller.getAppData();\n\t\tthis.props.controller.getHandlers().validationHandler(this.props.controller, this.props.propertyId, this.props.value, appData, (response) => {\n\t\t\tthis.props.controller.updateErrorMessage(this.props.propertyId, response); // expects \"text\" and \"type\" in response\n\t\t\tthis.setState({\n\t\t\t\tvalidateIcon: response.type,\n\t\t\t\tvalidationInProgress: false\n\t\t\t});\n\t\t\tthis.editor.display.input.blur();\n\t\t});\n\t}\n\n\thasValidate() {\n\t\treturn typeof this.props.controller.getHandlers().validationHandler === \"function\";\n\t}\n\n\thandleKeyDown(editor, evt) {\n\t\t// this is needed to move the cursor to the new line if selection is being used in the expression builder.\n\t\tif (evt.code === \"Enter\") {\n\t\t\tif (this.props.selectionRange && this.props.selectionRange.length > 0 && this.props.onSelectionChange) {\n\t\t\t\tconst newPos = { line: this.props.selectionRange[0].anchor.line + 1, ch: 0 };\n\t\t\t\tthis.props.onSelectionChange([{ anchor: newPos, head: newPos }]);\n\t\t\t}\n\t\t}\n\t}\n\n\thandleBlur(editor, evt) {\n\t\tif (this.props.onBlur) {\n\t\t\t// this will ensure the expression builder can save values onBlur\n\t\t\tthis.props.onBlur(editor, evt);\n\t\t} else {\n\t\t\tconst newValue = this.editor.getValue();\n\t\t\t// don't validate when opening the expression builder\n\t\t\tconst skipValidate = evt && evt.relatedTarget && evt.relatedTarget.classList.contains(\"properties-expression-button\");\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, newValue, skipValidate);\n\t\t}\n\t}\n\n\t_showBuilderButton() {\n\t\t// only show the button if there are function lists available and\n\t\t// not explicitly told not to by the this.props.builder\n\t\t// TODO: Design: how to display builder outside of right flyout?\n\t\treturn this.props.builder && this.props.rightFlyout && this.expressionInfo.functionCategories && Object.keys(this.expressionInfo.functionCategories).length > 0;\n\t}\n\n\trender() {\n\t\tlet messageInfo = this.props.messageInfo;\n\t\tconst messageType = (messageInfo) ? messageInfo.type : CONDITION_MESSAGE_TYPE.INFO;\n\t\tif (messageType === CONDITION_MESSAGE_TYPE.SUCCESS) {\n\t\t\tmessageInfo = null;\n\t\t}\n\n\t\tconst theme = (this.props.state === STATES.DISABLED) ? \"disabled\" : messageType;\n\t\tconst reactIntl = this.props.controller.getReactIntl();\n\n\t\tconst button = this._showBuilderButton() ? (\n\t\t\t<Button kind=\"ghost\" size=\"small\"\n\t\t\t\tclassName=\"properties-expression-button\"\n\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\tonClick={this.showExpressionBuilder}\n\t\t\t\trenderIcon={Calculator24}\n\t\t\t\ticonDescription={formatMessage(reactIntl, MESSAGE_KEYS.EXPRESSION_BUILDER_ICON_DESCRIPTION)}\n\t\t\t\ttooltipPosition=\"right\"\n\t\t\t\thasIconOnly\n\t\t\t/>)\n\t\t\t: null;\n\n\t\tlet validateIcon = null;\n\t\tif (this.state.validateIcon) {\n\t\t\tvalidateIcon = (\n\t\t\t\t<div className=\"icon validateIcon\">\n\t\t\t\t\t<Icon type={this.state.validateIcon} className={`properties-validation-icon-${this.state.validateIcon}`} />\n\t\t\t\t</div>);\n\t\t}\n\n\t\tconst validateLabel = this.state.validationInProgress ? formatMessage(reactIntl, MESSAGE_KEYS.EXPRESSION_VALIDATING_LABEL)\n\t\t\t: formatMessage(reactIntl, MESSAGE_KEYS.EXPRESSION_VALIDATE_LABEL);\n\t\tconst validateLink = this.hasValidate() && this.props.validateLink ? (\n\t\t\t<div className=\"properties-expression-validate\" disabled={this.props.state === STATES.DISABLED}>\n\t\t\t\t<Button className=\"validateLink\" kind=\"ghost\" onClick={this.handleValidate} disabled={this.props.state === STATES.DISABLED || this.state.validationInProgress}>\n\t\t\t\t\t{validateLabel}\n\t\t\t\t</Button>\n\t\t\t\t{validateIcon}\n\t\t\t</div>)\n\t\t\t: null;\n\t\tconst mirrorOptions = {\n\t\t\tmode: this.props.control.language,\n\t\t\tplaceholder: this.props.control.additionalText,\n\t\t\ttheme: theme + \" custom\",\n\t\t\treadOnly: (this.props.state === STATES.DISABLED) ? \"nocursor\" : false,\n\t\t\textraKeys: { \"Ctrl-Space\": \"autocomplete\" },\n\t\t\tautoRefresh: true,\n\t\t\tlineNumbers: true\n\t\t};\n\t\tconst applyLabel = formatMessage(reactIntl, MESSAGE_KEYS.APPLYBUTTON_LABEL);\n\t\tconst rejectLabel = formatMessage(reactIntl, MESSAGE_KEYS.REJECTBUTTON_LABEL);\n\t\tconst expressonTitle = formatMessage(reactIntl, MESSAGE_KEYS.EXPRESSION_BUILDER_TITLE);\n\n\t\tconst flyout = this.state.showExpressionBuilder ? (<WideFlyout\n\t\t\tcancelHandler={this.cancelExpressionBuilder}\n\t\t\tokHandler={this.hideExpressionBuilder}\n\t\t\tshow={this.state.showExpressionBuilder}\n\t\t\tapplyLabel={applyLabel}\n\t\t\trejectLabel={rejectLabel}\n\t\t\ttitle={expressonTitle}\n\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t>\n\t\t\t<div>\n\t\t\t\t<ExpressionBuilder\n\t\t\t\t\tcontrol={this.props.control}\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\tpropertyId={this.props.propertyId}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</WideFlyout>) : null;\n\n\t\tconst className = classNames(`properties-expression-editor ${messageType}`,\n\t\t\t{ \"properties-light-disabled\": !this.props.control.light || !this.props.controller.getLight() });\n\n\t\tconst expressionLink = (<div className=\"properties-expression-link-container\" >\n\t\t\t{button}\n\t\t\t{validateLink}\n\t\t</div>);\n\n\t\tlet header = expressionLink;\n\n\t\tif (this.props.expressionLabel) {\n\t\t\theader = (<div className=\"properties-expression-header\">\n\t\t\t\t<div className=\"properties-expression-title\">{this.props.expressionLabel}</div>\n\t\t\t\t{expressionLink}\n\t\t\t</div>);\n\t\t}\n\n\t\tlet toggleMaxMin = null;\n\t\tif (this.props.control.enableMaximize) {\n\t\t\tconst isTearsheetOpen = this.props.controller.getActiveTearsheet() === get(this, \"props.control.data.tearsheet_ref\");\n\t\t\ttoggleMaxMin = (<ExpressionToggle\n\t\t\t\tcontrol={this.props.control}\n\t\t\t\tcontroller={this.props.controller}\n\t\t\t\tenableMaximize={!isTearsheetOpen}\n\t\t\t/>);\n\t\t}\n\n\t\treturn (\n\t\t\t<div className=\"properties-expression-editor-wrapper\" >\n\t\t\t\t{this.props.controlItem}\n\t\t\t\t{flyout}\n\t\t\t\t<div className=\"properties-editor-container\">\n\t\t\t\t\t{header}\n\t\t\t\t\t{toggleMaxMin}\n\t\t\t\t\t<div ref={ (ref) => (this.expressionEditorDiv = ref) } data-id={ControlUtils.getDataId(this.props.propertyId)}\n\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CodeMirror\n\t\t\t\t\t\t\tref= { (ref) => (this.codeMirror = ref)}\n\t\t\t\t\t\t\toptions={mirrorOptions}\n\t\t\t\t\t\t\tonChange={this.handleChange}\n\t\t\t\t\t\t\tonKeyDown={this.handleKeyDown}\n\t\t\t\t\t\t\tonBlur={this.handleBlur}\n\t\t\t\t\t\t\teditorDidMount={this.editorDidMount}\n\t\t\t\t\t\t\tvalue={this.props.value}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<ValidationMessage state={this.props.state} messageInfo={messageInfo} inTable={this.props.tableControl} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nExpressionControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\teditorDidMount: PropTypes.func,\n\tbuilder: PropTypes.bool,\n\tvalidateLink: PropTypes.bool,\n\trightFlyout: PropTypes.bool,\n\tselectionRange: PropTypes.array,\n\tonSelectionChange: PropTypes.func,\n\tonBlur: PropTypes.func,\n\texpressionLabel: PropTypes.oneOfType([\n\t\tPropTypes.object,\n\t\tPropTypes.string\n\t]),\n\theight: PropTypes.number, // height in px\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.string, // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nExpressionControl.defaultProps = {\n\tbuilder: true,\n\tvalidateLink: true\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(ExpressionControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { PasswordInput } from \"carbon-components-react\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { STATES, MESSAGE_KEYS } from \"./../../constants/constants.js\";\nimport classNames from \"classnames\";\nimport { formatMessage } from \"./../../util/property-utils\";\n\nclass PasswordControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.id = ControlUtils.getControlId(this.props.propertyId);\n\t}\n\n\thandleChange(evt) {\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, evt.target.value);\n\t}\n\n\trender() {\n\t\tconst overrideShowPasswordLabel = `${this.props.control.name}.passwordShow.tooltip`;\n\t\tconst overrideHidePasswordLabel = `${this.props.control.name}.passwordHide.tooltip`;\n\n\t\tconst defaultShowPasswordLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.SHOW_PASSWORD_TOOLTIP);\n\t\tconst defaultHidePasswordLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.HIDE_PASSWORD_TOOLTIP);\n\n\t\tconst showPasswordLabel = this.props.controller.getResource(overrideShowPasswordLabel, defaultShowPasswordLabel);\n\t\tconst hidePasswordLabel = this.props.controller.getResource(overrideHidePasswordLabel, defaultHidePasswordLabel);\n\t\tconst value = this.props.value ? this.props.value : \"\";\n\t\tconst className = classNames(\"properties-pwdfield\", \"properties-input-control\", { \"hide\": this.props.state === STATES.HIDDEN },\n\t\t\tthis.props.messageInfo ? this.props.messageInfo.type : null);\n\t\tconst validationProps = ControlUtils.getValidationProps(this.props.messageInfo, this.props.tableControl);\n\t\treturn (\n\t\t\t<div className={className} data-id={ControlUtils.getDataId(this.props.propertyId)}>\n\t\t\t\t<PasswordInput\n\t\t\t\t\t{...validationProps}\n\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\tid={this.id}\n\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\tplaceholder={this.props.control.additionalText}\n\t\t\t\t\tonChange={this.handleChange.bind(this)}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tlabelText={this.props.controlItem}\n\t\t\t\t\thideLabel={this.props.tableControl}\n\t\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\t\ttooltipAlignment=\"end\"\n\t\t\t\t\tshowPasswordLabel={showPasswordLabel}\n\t\t\t\t\thidePasswordLabel={hidePasswordLabel}\n\t\t\t\t/>\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} tableOnly state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>);\n\t}\n}\n\nPasswordControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.string, // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(PasswordControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { TextInput } from \"carbon-components-react\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { parse, format, isValid } from \"date-fns\";\nimport { DEFAULT_DATE_FORMAT, STATES } from \"./../../constants/constants.js\";\nimport classNames from \"classnames\";\n\nclass DatefieldControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.id = ControlUtils.getControlId(this.props.propertyId);\n\t\tthis.getDateFormat = this.getDateFormat.bind(this);\n\t\tthis.handleChange = this.handleChange.bind(this);\n\n\t\tthis.value = props.value;\n\t\tif (!this.value) {\n\t\t\tthis.value = \"\";\n\t\t} else {\n\t\t\tconst date = parse(this.value, DEFAULT_DATE_FORMAT, new Date());\n\t\t\tif (isValid(date)) {\n\t\t\t\tthis.value = format(date, this.getDateFormat());\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t* date-fns date format\n\t*/\n\tgetDateFormat() {\n\t\tlet dateFormat = this.props.control.dateFormat || DEFAULT_DATE_FORMAT;\n\t\tdateFormat = dateFormat.replace(/Y/g, \"y\").replace(/D/g, \"d\");\n\t\treturn dateFormat;\n\t}\n\n\thandleChange(evt) {\n\t\tlet formattedValue = null;\n\t\tthis.value = \"\";\n\n\t\tif (evt.target.value) {\n\t\t\tthis.value = evt.target.value;\n\t\t\tconst date = parse(evt.target.value, this.getDateFormat(), new Date());\n\t\t\tif (isValid(date)) {\n\t\t\t\tformattedValue = format(date, DEFAULT_DATE_FORMAT); // save as ISO format\n\t\t\t} else {\n\t\t\t\tformattedValue = evt.target.value; // Otherwise just save as invalid entered string\n\t\t\t}\n\t\t}\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, formattedValue);\n\t}\n\n\trender() {\n\t\tconst className = classNames(\"properties-datefield\", \"properties-input-control\", { \"hide\": this.props.state === STATES.HIDDEN },\n\t\t\tthis.props.messageInfo ? this.props.messageInfo.type : null);\n\t\tconst validationProps = ControlUtils.getValidationProps(this.props.messageInfo, this.props.tableControl);\n\t\treturn (\n\t\t\t<div className={className} data-id={ControlUtils.getDataId(this.props.propertyId)}>\n\t\t\t\t<TextInput\n\t\t\t\t\t{...validationProps}\n\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\tid={this.id}\n\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\tplaceholder={this.props.control.additionalText}\n\t\t\t\t\tonChange={this.handleChange.bind(this)}\n\t\t\t\t\tvalue={this.value}\n\t\t\t\t\tlabelText={this.props.controlItem}\n\t\t\t\t\thideLabel={this.props.tableControl}\n\t\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\t/>\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} tableOnly state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nDatefieldControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.string, // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(DatefieldControl);\n","/*\n * Copyright 2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { DatePicker, DatePickerInput } from \"carbon-components-react\";\nimport classNames from \"classnames\";\n\nimport ValidationMessage from \"../../components/validation-message\";\nimport * as ControlUtils from \"../../util/control-utils\";\nimport { getFormattedDate, getISODate } from \"../../util/date-utils\";\nimport { STATES, DATEPICKER_TYPE } from \"../../constants/constants.js\";\n\nclass DatepickerControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.id = ControlUtils.getControlId(props.propertyId);\n\t\tthis.locale = props.controller.getLocale();\n\n\t\tthis.dateFormat = ControlUtils.getDateTimeFormat(props.control);\n\n\t\tthis.state = {\n\t\t\tvalue: props.value ? getFormattedDate(props.value, this.dateFormat) : \"\"\n\t\t};\n\n\t\tthis.getDatepickerSize = this.getDatepickerSize.bind(this);\n\t}\n\n\tgetDatepickerSize() {\n\t\treturn this.props.tableControl ? \"sm\" : \"md\";\n\t}\n\n\thandleChange(evt) {\n\t\tif (evt.length > 0) {\n\t\t\tconst isoDate = getISODate(evt[0]);\n\t\t\tconst value = getFormattedDate(evt[0], this.dateFormat); // display value\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, isoDate); // internal format\n\t\t\tthis.setState({ value });\n\t\t} else {\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, \"\");\n\t\t\tthis.setState({ value: \"\" });\n\t\t}\n\t}\n\n\t// Allows user to manually type in the input\n\t// Once the calendar closes, it will trigger an onChange evt that will correct any invalid dates\n\thandleInputChange(evt) {\n\t\tconst value = evt.target.value; // Display value as what user enters\n\t\tthis.setState({ value });\n\t}\n\n\trender() {\n\t\tconst helperText = this.props.controller.getResource(`${this.props.control.name}.helper`, null);\n\t\tconst className = classNames(\"properties-datepicker\", \"properties-input-control\", { \"hide\": this.props.state === STATES.HIDDEN },\n\t\t\tthis.props.messageInfo ? this.props.messageInfo.type : null);\n\t\tconst validationProps = ControlUtils.getValidationProps(this.props.messageInfo, this.props.tableControl);\n\n\t\treturn (\n\t\t\t<div className={className} data-id={ControlUtils.getDataId(this.props.propertyId)}>\n\t\t\t\t<DatePicker\n\t\t\t\t\tclassName=\"properties-datepicker-wrapper-parent\"\n\t\t\t\t\tdatePickerType={DATEPICKER_TYPE.SINGLE}\n\t\t\t\t\tdateFormat={this.dateFormat}\n\t\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\t\tonChange={this.handleChange.bind(this)}\n\t\t\t\t\tlocale={this.locale}\n\t\t\t\t>\n\t\t\t\t\t<DatePickerInput\n\t\t\t\t\t\t{...validationProps}\n\t\t\t\t\t\tid={this.id}\n\t\t\t\t\t\tclassName=\"properties-datepicker-wrapper-input\"\n\t\t\t\t\t\tplaceholder={this.props.control.additionalText}\n\t\t\t\t\t\tlabelText={!this.props.tableControl && this.props.controlItem}\n\t\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\t\tsize={this.getDatepickerSize()}\n\t\t\t\t\t\tonChange={this.handleInputChange.bind(this)}\n\t\t\t\t\t\tvalue={this.state.value}\n\t\t\t\t\t\thelperText={!this.props.tableControl && helperText}\n\t\t\t\t\t/>\n\t\t\t\t</DatePicker>\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} tableOnly state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nDatepickerControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.string, // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(DatepickerControl);\n","/*\n * Copyright 2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { DatePicker, DatePickerInput } from \"carbon-components-react\";\nimport classNames from \"classnames\";\nimport { v4 as uuid4 } from \"uuid\";\n\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport Icon from \"./../../../icons/icon.jsx\";\nimport ValidationMessage from \"../../components/validation-message\";\nimport * as ControlUtils from \"../../util/control-utils\";\nimport { getFormattedDate, getISODate } from \"../../util/date-utils\";\nimport { STATES, DATEPICKER_TYPE, MESSAGE_KEYS, CARBON_ICONS } from \"../../constants/constants.js\";\nimport { formatMessage } from \"./../../util/property-utils\";\n\nclass DatepickerRangeControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t\tthis.id = ControlUtils.getControlId(this.props.propertyId);\n\t\tthis.locale = props.controller.getLocale();\n\t\tthis.uuid = uuid4();\n\n\t\tthis.dateFormat = ControlUtils.getDateTimeFormat(props.control);\n\n\t\tthis.state = {\n\t\t\tvalueStart: props.value && props.value[0] ? getFormattedDate(props.value[0], this.dateFormat) : \"\",\n\t\t\tvalueEnd: props.value && props.value[1] ? getFormattedDate(props.value[1], this.dateFormat) : \"\"\n\t\t};\n\n\t\tthis.getDatepickerSize = this.getDatepickerSize.bind(this);\n\t\tthis.createInfoDesc = this.createInfoDesc.bind(this);\n\t}\n\n\tonStartBlur(evt) {\n\t\tconst isoStartDate = getISODate(evt.target.value, this.dateFormat);\n\t\tconst isoEndDate = getISODate(this.state.valueEnd, this.dateFormat);\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, [isoStartDate, isoEndDate]);\n\t}\n\n\tonEndBlur(evt) {\n\t\tconst isoStartDate = getISODate(evt.target.value, this.dateFormat);\n\t\tconst isoEndDate = getISODate(this.state.valueEnd, this.dateFormat);\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, [isoStartDate, isoEndDate]);\n\t}\n\n\tgetDatepickerSize() {\n\t\treturn this.props.tableControl ? \"sm\" : \"md\";\n\t}\n\n\t// This handles changes for simple, single, and the start range date\n\thandleDateRangeChange(evt) {\n\t\tif (evt[0]) {\n\t\t\tconst isoStartDate = getISODate(evt[0]); // internal format\n\t\t\tconst valueStart = getFormattedDate(evt[0], this.dateFormat); // display value\n\t\t\tlet isoEndDate = \"\";\n\t\t\tlet valueEnd = \"\";\n\n\t\t\tif (evt[1]) { // Cannot enter end date without specifying start date\n\t\t\t\tisoEndDate = getISODate(evt[1]); // internal format\n\t\t\t\tvalueEnd = getFormattedDate(evt[1], this.dateFormat); // display value\n\t\t\t}\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, [isoStartDate, isoEndDate]);\n\t\t\tthis.setState({ valueStart, valueEnd });\n\t\t}\n\t}\n\n\t// Allows user to manually type in the input\n\t// Once the calendar closes, it will trigger an onChange evt that will correct any invalid dates\n\thandleInputStartChange(evt) {\n\t\tthis.setState({ valueStart: evt.target.value }); // Display value as what user enters\n\t}\n\thandleInputEndChange(evt) {\n\t\tthis.setState({ valueEnd: evt.target.value }); // Display value as what user enters\n\t}\n\n\tcreateInfoDesc(label, description, range) {\n\t\treturn description\n\t\t\t? (<div className=\"properties-label-container\">\n\t\t\t\t{label}\n\t\t\t\t<Tooltip\n\t\t\t\t\tid={`${this.uuid}-tooltip-label-${this.props.control.name}-${range}`}\n\t\t\t\t\ttip={description}\n\t\t\t\t\ttooltipLinkHandler={this.props.controller.getHandlers().tooltipLinkHandler}\n\t\t\t\t\tdirection=\"bottom\"\n\t\t\t\t\tdisable={this.props.state === STATES.DISABLED}\n\t\t\t\t\tshowToolTipOnClick\n\t\t\t\t>\n\t\t\t\t\t<Icon type={CARBON_ICONS.INFORMATION} className=\"properties-control-description-icon-info\" />\n\t\t\t\t</Tooltip>\n\t\t\t</div>)\n\t\t\t: label;\n\t}\n\n\trender() {\n\t\tconst datepickerRangeStartLabel = `${this.props.control.name}.range.start.label`;\n\t\tconst datepickerRangeStartDesc = `${this.props.control.name}.range.start.desc`;\n\t\tconst datepickerRangeStartHelper = `${this.props.control.name}.range.start.helper`;\n\t\tconst datepickerRangeEndLabel = `${this.props.control.name}.range.end.label`;\n\t\tconst datepickerRangeEndDesc = `${this.props.control.name}.range.end.desc`;\n\t\tconst datepickerRangeEndHelper = `${this.props.control.name}.range.end.helper`;\n\n\t\tconst defaultDatepickerRangeStartLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.DATEPICKER_RANGE_START_LABEL);\n\t\tconst defaultDatepickerRangeEndLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.DATEPICKER_RANGE_END_LABEL);\n\n\t\tlet startLabel = this.props.controller.getResource(datepickerRangeStartLabel, defaultDatepickerRangeStartLabel);\n\t\tconst startDesc = this.props.controller.getResource(datepickerRangeStartDesc, null);\n\t\tconst startHelperText = this.props.controller.getResource(datepickerRangeStartHelper, null);\n\t\tlet endLabel = this.props.controller.getResource(datepickerRangeEndLabel, defaultDatepickerRangeEndLabel);\n\t\tconst endDesc = this.props.controller.getResource(datepickerRangeEndDesc, null);\n\t\tconst endHelperText = this.props.controller.getResource(datepickerRangeEndHelper, null);\n\n\t\tstartLabel = this.createInfoDesc(startLabel, startDesc, \"start\");\n\t\tendLabel = this.createInfoDesc(endLabel, endDesc, \"end\");\n\n\t\tconst className = classNames(\"properties-datepicker-range\", \"properties-input-control\", { \"hide\": this.props.state === STATES.HIDDEN },\n\t\t\tthis.props.messageInfo ? this.props.messageInfo.type : null);\n\t\tconst validationProps = ControlUtils.getValidationProps(this.props.messageInfo, this.props.tableControl);\n\n\t\treturn (\n\t\t\t<div className={className} data-id={ControlUtils.getDataId(this.props.propertyId)}>\n\t\t\t\t<DatePicker\n\t\t\t\t\tdatePickerType={DATEPICKER_TYPE.RANGE}\n\t\t\t\t\tdateFormat={this.dateFormat}\n\t\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\t\tonChange={this.handleDateRangeChange.bind(this)}\n\t\t\t\t\tlocale={this.locale}\n\t\t\t\t\tallowInput\n\t\t\t\t>\n\t\t\t\t\t<DatePickerInput\n\t\t\t\t\t\t{...validationProps}\n\t\t\t\t\t\tid={`${this.id}-start`}\n\t\t\t\t\t\tplaceholder={this.props.control.additionalText}\n\t\t\t\t\t\tlabelText={!this.props.tableControl && startLabel}\n\t\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\t\tsize={this.getDatepickerSize()}\n\t\t\t\t\t\tonChange={this.handleInputStartChange.bind(this)}\n\t\t\t\t\t\tvalue={this.state.valueStart}\n\t\t\t\t\t\tonBlur={this.onStartBlur.bind(this)}\n\t\t\t\t\t\thelperText={!this.props.tableControl && startHelperText}\n\t\t\t\t\t/>\n\t\t\t\t\t<DatePickerInput\n\t\t\t\t\t\t{...validationProps}\n\t\t\t\t\t\tid={`${this.id}-end`}\n\t\t\t\t\t\tplaceholder={this.props.control.additionalText}\n\t\t\t\t\t\tlabelText={!this.props.tableControl && endLabel}\n\t\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\t\tsize={this.getDatepickerSize()}\n\t\t\t\t\t\tonChange={this.handleInputEndChange.bind(this)}\n\t\t\t\t\t\tvalue={this.state.valueEnd}\n\t\t\t\t\t\tonBlur={this.onEndBlur.bind(this)}\n\t\t\t\t\t\thelperText={!this.props.tableControl && endHelperText}\n\t\t\t\t\t/>\n\t\t\t\t</DatePicker>\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} tableOnly state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nDatepickerRangeControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.array, // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(DatepickerRangeControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { TextInput } from \"carbon-components-react\";\nimport { parse, format, isValid } from \"date-fns\";\nimport classNames from \"classnames\";\n\nimport ValidationMessage from \"./../../components/validation-message\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { DEFAULT_TIME_FORMAT, STATES } from \"./../../constants/constants\";\n\nclass TimefieldControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.id = ControlUtils.getControlId(props.propertyId);\n\n\t\tthis.value = props.value;\n\t\tif (!this.value) {\n\t\t\tthis.value = \"\";\n\t\t} else {\n\t\t\tconst date = parse(this.value, \"HH:mm:ss:xxx\", new Date());\n\t\t\tif (isValid(date)) {\n\t\t\t\tthis.value = format(date, this.getTimeFormat());\n\t\t\t}\n\t\t}\n\n\t\tthis.getTimeFormat = this.getTimeFormat.bind(this);\n\t\tthis.handleChange = this.handleChange.bind(this);\n\t}\n\n\tgetTimeFormat() {\n\t\tconst timeFormat = this.props.control.timeFormat || DEFAULT_TIME_FORMAT;\n\t\treturn timeFormat;\n\t}\n\n\thandleChange(evt) {\n\t\tlet formattedValue = null;\n\t\tthis.value = \"\";\n\n\t\tif (evt.target.value) {\n\t\t\tthis.value = evt.target.value;\n\t\t\tconst time = parse(evt.target.value, this.getTimeFormat(), new Date());\n\t\t\tif (isValid(time)) {\n\t\t\t\tformattedValue = format(time, \"HH:mm:ss:xxx\"); // If moment is valid save as ISO format\n\t\t\t} else {\n\t\t\t\tformattedValue = evt.target.value; // Otherwise just save as invalid entered string\n\t\t\t}\n\t\t}\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, formattedValue);\n\t}\n\n\trender() {\n\t\tconst className = classNames(\"properties-timefield\", \"properties-input-control\", { \"hide\": this.props.state === STATES.HIDDEN },\n\t\t\tthis.props.messageInfo ? this.props.messageInfo.type : null);\n\t\tconst validationProps = ControlUtils.getValidationProps(this.props.messageInfo, this.props.tableControl);\n\t\treturn (\n\t\t\t<div className={className} data-id={ControlUtils.getDataId(this.props.propertyId)}>\n\t\t\t\t<TextInput\n\t\t\t\t\t{...validationProps}\n\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\tid={this.id}\n\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\tplaceholder={this.props.control.additionalText}\n\t\t\t\t\tonChange={this.handleChange.bind(this)}\n\t\t\t\t\tvalue={this.value}\n\t\t\t\t\tlabelText={this.props.controlItem}\n\t\t\t\t\thideLabel={this.props.tableControl}\n\t\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\t/>\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} tableOnly state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nTimefieldControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.string, // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(TimefieldControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { isEmpty } from \"lodash\";\nimport { Checkbox } from \"carbon-components-react\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { STATES, CARBON_ICONS } from \"./../../constants/constants.js\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport classNames from \"classnames\";\nimport Icon from \"./../../../icons/icon\";\n\nclass CheckboxControl extends React.Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.id = ControlUtils.getControlId(this.props.propertyId);\n\t}\n\n\thandleChange(value) {\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, value);\n\t}\n\n\trender() {\n\t\tconst label = this.props.control.label ? this.props.control.label.text : \"\";\n\t\tconst tooltipId = \"tooltip-\" + this.props.control.name;\n\t\tlet tooltip = \"\";\n\t\tif (this.props.control.description && !(this.props.state === STATES.DISABLED || this.props.state === STATES.HIDDEN) && !this.props.tableControl) {\n\t\t\ttooltip = (\n\t\t\t\t<span >{this.props.control.description.text}</span>\n\t\t\t);\n\t\t\t// If tooltip has a link, add propertyId in the link object\n\t\t\tif (this.props.control.description.link) {\n\t\t\t\tthis.props.control.description.link.propertyId = this.props.propertyId;\n\t\t\t}\n\t\t}\n\t\tconst tooltipIcon = isEmpty(tooltip) ? \"\" : (\n\t\t\t<Tooltip\n\t\t\t\tid={tooltipId}\n\t\t\t\ttip={tooltip}\n\t\t\t\tlink={this.props.control.description.link ? this.props.control.description.link : null}\n\t\t\t\ttooltipLinkHandler={this.props.controller.getHandlers().tooltipLinkHandler}\n\t\t\t\tdirection=\"bottom\"\n\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\tshowToolTipOnClick\n\t\t\t>\n\t\t\t\t<Icon type={CARBON_ICONS.INFORMATION} className=\"properties-control-description-icon-info\" />\n\t\t\t</Tooltip>\n\t\t);\n\t\tconst checkboxLabel = (\n\t\t\t<span className=\"properties-checkbox-label\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t);\n\t\treturn (\n\t\t\t<div className={classNames(\"properties-checkbox\", { \"hide\": this.props.state === STATES.HIDDEN }, this.props.messageInfo ? this.props.messageInfo.type : null)}\n\t\t\t\tdata-id={ControlUtils.getDataId(this.props.propertyId)}\n\t\t\t>\n\t\t\t\t<Checkbox\n\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\tid={this.id}\n\t\t\t\t\tlabelText={checkboxLabel}\n\t\t\t\t\tonChange={this.handleChange.bind(this)}\n\t\t\t\t\tchecked={Boolean(this.props.value)}\n\t\t\t\t\thideLabel={this.props.tableControl}\n\t\t\t\t/>\n\t\t\t\t{tooltipIcon}\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} state={this.props.state} messageInfo={this.props.controller.getErrorMessage(this.props.propertyId)} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nCheckboxControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.bool, // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(CheckboxControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { Toggle } from \"carbon-components-react\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { STATES, MESSAGE_KEYS } from \"./../../constants/constants.js\";\nimport classNames from \"classnames\";\nimport { formatMessage } from \"./../../util/property-utils\";\n\n\nclass ToggleControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.id = ControlUtils.getControlId(this.props.propertyId);\n\t}\n\n\n\thandleChange(value) {\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, value);\n\t}\n\n\trender() {\n\t\tconst overrideLabelKeyOn = `${this.props.control.name}.toggle.on.label`;\n\t\tconst overrideLabelKeyOff = `${this.props.control.name}.toggle.off.label`;\n\n\t\tconst defaultOnEditLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.TOGGLE_ON_LABEL);\n\t\tconst defaultOffEditLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.TOGGLE_OFF_LABEL);\n\n\t\tconst labelOn = this.props.controller.getResource(overrideLabelKeyOn, defaultOnEditLabel);\n\t\tconst labelOff = this.props.controller.getResource(overrideLabelKeyOff, defaultOffEditLabel);\n\t\tconst size = this.props.tableControl ? \"sm\" : \"md\";\n\t\tconst toggleControl = (<Toggle\n\t\t\tid={this.id}\n\t\t\tsize={size}\n\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\ttoggled={Boolean(this.props.value)}\n\t\t\tlabelB={labelOn}\n\t\t\tlabelA={labelOff}\n\t\t\tonToggle={this.handleChange.bind(this)}\n\t\t\tlabelText={this.props.tableControl ? null : this.props.controlItem}\n\t\t/>);\n\t\tconst className = classNames(\"properties-toggle\", { \"hide\": this.props.state === STATES.HIDDEN }, this.props.messageInfo ? this.props.messageInfo.type : null);\n\t\treturn (\n\t\t\t<div className={className} data-id={ControlUtils.getDataId(this.props.propertyId)}>\n\t\t\t\t{toggleControl}\n\t\t\t\t<ValidationMessage inTable={this.props.tableControl} state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>\n\n\t\t);\n\t}\n}\n\nToggleControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.bool, // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(ToggleControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { Checkbox } from \"carbon-components-react\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport classNames from \"classnames\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport { v4 as uuid4 } from \"uuid\";\nimport { intersection, isEqual } from \"lodash\";\nimport { Information16 } from \"@carbon/icons-react\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport { STATES } from \"./../../constants/constants.js\";\nimport { isEmpty } from \"lodash\";\n\n\nclass CheckboxsetControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.uuid = uuid4();\n\t\tthis.handleChange = this.handleChange.bind(this);\n\t\tthis.updateValueFromFilterEnum = this.updateValueFromFilterEnum.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.updateValueFromFilterEnum(true);\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\t// only update if filter options have changed. Fixes issue where filter options are updated after value in setProperties\n\t\tif (!isEqual(this.props.controlOpts, prevProps.controlOpts)) {\n\t\t\tthis.updateValueFromFilterEnum();\n\t\t}\n\t}\n\n\t// this is needed in order to reset the property value when a value is filtered out.\n\tupdateValueFromFilterEnum(skipValidateInput) {\n\t\t// update property value if value isn't in current enum value.\n\t\tif (Array.isArray(this.props.value)) {\n\t\t\tconst newValue = intersection(this.props.value, this.props.controlOpts.values);\n\t\t\tif (!isEqual(this.props.value, newValue)) {\n\t\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, newValue, skipValidateInput);\n\t\t\t}\n\t\t}\n\t}\n\n\thandleChange(val, checked) {\n\t\tlet values = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tif (typeof values === \"undefined\" || values === null) {\n\t\t\tvalues = [];\n\t\t}\n\t\tconst index = values.indexOf(val);\n\t\tif (checked && index < 0) {\n\t\t\t// Add to values\n\t\t\tvalues = values.concat([val]);\n\t\t}\n\t\tif (!(checked) && index >= 0) {\n\t\t\t// Remove from values\n\t\t\tvalues.splice(index, 1);\n\t\t}\n\t\tconst newValues = values.concat();\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, newValues);\n\t}\n\n\trender() {\n\n\t\tconst hidden = this.props.state === STATES.HIDDEN;\n\t\tlet controlValue = this.props.value;\n\t\tif (typeof controlValue === \"undefined\" || controlValue === null) {\n\t\t\tcontrolValue = [];\n\t\t}\n\t\tconst checkboxes = [];\n\t\tfor (var i = 0; i < this.props.control.values.length; i++) {\n\t\t\tconst val = this.props.control.values[i];\n\t\t\tconst disabled = this.props.state === STATES.DISABLED || !this.props.controlOpts.values.includes(val);\n\t\t\tlet tooltipIcon = null;\n\t\t\tif (Array.isArray(this.props.control.valueDescs) && !isEmpty(this.props.control.valueDescs[i]) && !this.props.tableControl) {\n\t\t\t\tconst tooltip = (\n\t\t\t\t\t<span >{this.props.control.valueDescs[i]}</span>\n\t\t\t\t);\n\t\t\t\ttooltipIcon = (<Tooltip\n\t\t\t\t\tid={`tooltip-${i}`}\n\t\t\t\t\ttip={tooltip}\n\t\t\t\t\tdirection=\"bottom\"\n\t\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\t\tshowToolTipOnClick\n\t\t\t\t\tdisable={hidden || disabled}\n\t\t\t\t>\n\t\t\t\t\t<Information16 disabled={disabled} className=\"properties-control-description-icon-info\" />\n\t\t\t\t</Tooltip>);\n\t\t\t}\n\t\t\tconst id = {\n\t\t\t\tname: this.props.propertyId.name,\n\t\t\t\trow: i\n\t\t\t};\n\t\t\tconst checked = (controlValue.indexOf(val) >= 0);\n\t\t\tcheckboxes.push(<div className=\"properties-checkbox-tooltip-container\" key={ControlUtils.getControlId(id, this.uuid)}>\n\t\t\t\t<Checkbox\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tid={ControlUtils.getControlId(id, this.uuid)}\n\t\t\t\t\tkey={val + i}\n\t\t\t\t\tlabelText={this.props.control.valueLabels[i]}\n\t\t\t\t\tonChange={this.handleChange.bind(this, val)}\n\t\t\t\t\tchecked={checked}\n\t\t\t\t/>\n\t\t\t\t{tooltipIcon}\n\t\t\t</div>);\n\t\t}\n\t\treturn (\n\t\t\t<fieldset>\n\t\t\t\t<legend>\n\t\t\t\t\t{this.props.controlItem}\n\t\t\t\t</legend>\n\t\t\t\t<div className={classNames(\"properties-checkboxset\", { \"hide\": this.props.state === STATES.HIDDEN })} data-id={ControlUtils.getDataId(this.props.propertyId)} >\n\t\t\t\t\t<div className={classNames(\"properties-checkboxset-container\", this.props.messageInfo ? this.props.messageInfo.type : null)}>\n\t\t\t\t\t\t{checkboxes}\n\t\t\t\t\t</div>\n\t\t\t\t\t<ValidationMessage inTable={this.props.tableControl} state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t\t</div>\n\t\t\t</fieldset>\n\t\t);\n\t}\n}\n\nCheckboxsetControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.array, // pass in by redux\n\tcontrolOpts: PropTypes.oneOfType([\n\t\tPropTypes.object,\n\t\tPropTypes.array\n\t]), // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => {\n\tconst props = {\n\t\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\t\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\t\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n\t};\n\tprops.controlOpts = ownProps.controller.getFilteredEnumItems(ownProps.propertyId, ownProps.control);\n\treturn props;\n};\n\nexport default connect(mapStateToProps, null)(CheckboxsetControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { isEqual } from \"lodash\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport * as ConditionsUtils from \"./../../ui-conditions/conditions-utils.js\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport { RadioButton } from \"carbon-components-react\";\nimport classNames from \"classnames\";\nimport { STATES, UPDATE_TYPE } from \"./../../constants/constants.js\";\nimport { ORIENTATIONS } from \"./../../constants/form-constants.js\";\nimport { v4 as uuid4 } from \"uuid\";\nimport { Information16 } from \"@carbon/icons-react\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport { isEmpty } from \"lodash\";\n\nclass RadiosetControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.uuid = uuid4();\n\t\tthis.handleChange = this.handleChange.bind(this);\n\t\tthis.updateValueFromFilterEnum = this.updateValueFromFilterEnum.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.updateValueFromFilterEnum(true, UPDATE_TYPE.INITIAL_LOAD);\n\t\tconst val = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tthis.setEnabledStateOfOptionalPanels(val);\n\t\tif (typeof this.props.value !== \"undefined\" && this.props.value !== null) {\n\t\t\tthis.handleCheckedDisabled(this.props.value, this.isRadioButtonDisabled(String(this.props.value)));\n\t\t}\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\t// only update if filter options have changed. Fixes issue where filter options are updated after value in setProperties\n\t\tif (!isEqual(this.props.controlOpts, prevProps.controlOpts)) {\n\t\t\tthis.updateValueFromFilterEnum();\n\t\t}\n\t\tif (typeof this.props.value !== \"undefined\" && this.props.value !== null) {\n\t\t\tthis.handleCheckedDisabled(this.props.value, this.isRadioButtonDisabled(String(this.props.value)));\n\t\t}\n\t}\n\n\t/*\n\t* Sets the enabled and disabled states of the optional panels so the\n\t* selected button's panel is enabled and the others are disabled. This\n\t* will only do anything if there are some optional panels to insert\n\t* after each radio button provided by a SelectorPanel with its insert_panels\n\t* field set to true.\n\t*/\n\tsetEnabledStateOfOptionalPanels(targetValue) {\n\t\tif (this.props.control.optionalPanels) {\n\t\t\tconst valueSet = this.props.controlOpts;\n\t\t\tconst refState = this.props.controller.getPanelStates();\n\n\t\t\t// This populates the control.panelTree with the panels passed in and\n\t\t\t// associates them with any children they have.\n\t\t\tthis.props.controller.parsePanelTree();\n\n\t\t\tfor (let i = 0; i < valueSet.values.length; i++) {\n\t\t\t\tconst val = valueSet.values[i];\n\t\t\t\tconst state = valueSet.values[i] === targetValue ? STATES.ENABLED : STATES.DISABLED;\n\t\t\t\tConditionsUtils.updateState(refState, { \"name\": val }, state, val);\n\t\t\t}\n\n\t\t\tthis.props.controller.setPanelStates(refState);\n\n\t\t\t// Pass values as panel Ids to updatePanelChildrenStatesForPanelIds()\n\t\t\t// becuase each radio button value must be the same as the ID of its inserted panel.\n\t\t\tConditionsUtils.updatePanelChildrenStatesForPanelIds(valueSet.values, this.props.controller);\n\t\t}\n\t}\n\n\tgetOptionalPanel(val) {\n\t\treturn this.props.control.optionalPanels ? this.props.control.optionalPanels[val] : null;\n\t}\n\n\t// this is needed in order to reset the property value when a value is filtered out.\n\tupdateValueFromFilterEnum(skipValidateInput, updateType) {\n\t\tif (this.props.value !== null && typeof this.props.value !== \"undefined\" &&\n\t\t\t!this.props.controlOpts.values.includes(this.props.value)) {\n\t\t\tlet defaultValue = null;\n\t\t\t// set to default value if default value is in filtered enum list\n\t\t\tif (this.props.control.valueDef && this.props.control.valueDef.defaultValue && this.props.controlOpts.values.includes(this.props.control.valueDef.defaultValue)) {\n\t\t\t\tdefaultValue = this.props.control.valueDef.defaultValue;\n\t\t\t}\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, defaultValue, skipValidateInput, updateType);\n\t\t}\n\t}\n\n\tconvertTargetValue(targetValue) {\n\t\tif (this.props.control.valueDef.propType === \"boolean\") {\n\t\t\treturn (targetValue === \"true\");\n\t\t} else if (this.props.control.valueDef.propType === \"integer\" ||\n\t\t\t\t\t\t\t\tthis.props.control.valueDef.propType === \"long\"\t||\n\t\t\t\t\t\t\t\tthis.props.control.valueDef.propType === \"double\") {\n\t\t\treturn Number(targetValue);\n\t\t}\n\t\treturn targetValue;\n\t}\n\n\thandleChange(evt) {\n\t\tconst oldVal = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tconst newVal = this.convertTargetValue(evt);\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, newVal);\n\n\t\tif (oldVal !== newVal) {\n\t\t\tthis.setEnabledStateOfOptionalPanels(newVal);\n\t\t}\n\t}\n\n\tisRadioButtonDisabled(radioValue) {\n\t\tconst propState = this.props.valueStates;\n\t\tif (propState && propState[radioValue] && propState[radioValue].value) {\n\t\t\treturn propState[radioValue].value === STATES.DISABLED;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Handles those cases where a radio button is both checked and disabled -\n\t * Will attempt to select another enabled radio button if possible.\n\t *\n\t * @param val A radio button enumeration value that is selected\n\t * @param itemDisabled True if the radio button is disabled\n\t */\n\thandleCheckedDisabled(val, itemDisabled) {\n\t\tif (typeof val !== \"undefined\" && val !== null && itemDisabled && this.props.state !== STATES.DISABLED) {\n\t\t\tconst control = this.props.controller.getControl(this.props.propertyId);\n\t\t\tlet newRadioSelection;\n\t\t\tconst defaultValue = this.props.control.valueDef.defaultValue;\n\t\t\tif (defaultValue && !this.isRadioButtonDisabled(defaultValue)) {\n\t\t\t\tnewRadioSelection = defaultValue;\n\t\t\t} else {\n\t\t\t\tfor (const radioValue of control.values) {\n\t\t\t\t\tif (radioValue !== val && !this.isRadioButtonDisabled(radioValue)) {\n\t\t\t\t\t\tnewRadioSelection = radioValue;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (newRadioSelection) {\n\t\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, newRadioSelection);\n\t\t\t}\n\t\t}\n\t}\n\n\trender() {\n\t\tconst disabled = this.props.state === STATES.DISABLED;\n\t\tconst hidden = this.props.state === STATES.HIDDEN;\n\t\tif (!this.props.control.values && this.props.control.controlType === \"radioset\") {\n\t\t\tthis.props.control.values = [true, false];\n\t\t\tthis.props.control.valueLabels = [\"true\", \"false\"];\n\t\t}\n\t\tconst buttons = [];\n\t\tlet wasChecked = false;\n\t\tconst valueSet = this.props.controlOpts;\n\t\tfor (var i = 0; i < valueSet.values.length; i++) {\n\t\t\tlet tooltipIcon = null;\n\t\t\tif (Array.isArray(this.props.control.valueDescs) && !isEmpty(this.props.control.valueDescs[i]) && !this.props.tableControl) {\n\t\t\t\tconst tooltip = (\n\t\t\t\t\t<span>{this.props.control.valueDescs[i]}</span>\n\t\t\t\t);\n\t\t\t\ttooltipIcon = (\n\t\t\t\t\t<Tooltip\n\t\t\t\t\t\tid={`tooltip-${i}`}\n\t\t\t\t\t\ttip={tooltip}\n\t\t\t\t\t\tdirection=\"bottom\"\n\t\t\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\t\t\tshowToolTipOnClick\n\t\t\t\t\t\tdisable={hidden || disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Information16 disabled={disabled} className=\"properties-control-description-icon-info\" />\n\t\t\t\t\t</Tooltip>\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst checked = valueSet.values[i] === this.props.value;\n\t\t\t// RadioButton only accepts values of type string || number\n\t\t\tconst val = (this.props.control.valueDef.propType === \"boolean\") ? String(valueSet.values[i]) : valueSet.values[i];\n\t\t\twasChecked = wasChecked || checked;\n\t\t\tconst itemDisabled = this.isRadioButtonDisabled(val);\n\t\t\tconst optionalPanel = this.getOptionalPanel(val);\n\t\t\tconst id = {\n\t\t\t\tname: this.props.propertyId.name,\n\t\t\t\trow: i\n\t\t\t};\n\t\t\tbuttons.push(\n\t\t\t\t<div key={i} className=\"properties-radioset-panel\">\n\t\t\t\t\t<div className=\"properties-radioset-tooltip\">\n\t\t\t\t\t\t<RadioButton\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tid={ControlUtils.getControlId(id, this.uuid)}\n\t\t\t\t\t\t\tdisabled={disabled || itemDisabled}\n\t\t\t\t\t\t\tlabelText={valueSet.valueLabels[i]}\n\t\t\t\t\t\t\tvalue={val}\n\t\t\t\t\t\t\tonChange={this.handleChange}\n\t\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{tooltipIcon}\n\t\t\t\t\t</div>\n\t\t\t\t\t{optionalPanel}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<div data-id={ControlUtils.getDataId(this.props.control, this.props.propertyId)}\n\t\t\t\tclassName={classNames(\"properties-radioset \", { \"hide\": this.props.state === STATES.HIDDEN })}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={classNames(\"properties-radio-button-group\", this.props.messageInfo ? this.props.messageInfo.type : null,\n\t\t\t\t\t\t{ \"horizontal\": this.props.control.orientation !== ORIENTATIONS.VERTICAL })} disabled={this.props.state === STATES.DISABLED}\n\t\t\t\t>\n\t\t\t\t\t{buttons}\n\t\t\t\t</div>\n\t\t\t\t<ValidationMessage state={this.props.state} messageInfo={this.props.messageInfo} inTable={this.props.tableControl} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nRadiosetControl.propTypes = {\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrol: PropTypes.object.isRequired,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalueStates: PropTypes.object, // pass in by redux\n\tvalue: PropTypes.oneOfType([\n\t\tPropTypes.string,\n\t\tPropTypes.number,\n\t\tPropTypes.bool\n\t]), // pass in by redux\n\tmessageInfo: PropTypes.object, // pass in by redux\n\tcontrolOpts: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tvalueStates: ownProps.controller.getControlValueStates(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId),\n\tcontrolOpts: ownProps.controller.getFilteredEnumItems(ownProps.propertyId, ownProps.control)\n});\n\nexport default connect(mapStateToProps, null)(RadiosetControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { SelectItem, Select, Dropdown, ComboBox } from \"carbon-components-react\";\nimport { isEqual, isEmpty } from \"lodash\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport classNames from \"classnames\";\nimport * as PropertyUtils from \"./../../util/property-utils.js\";\nimport { ControlType } from \"./../../constants/form-constants\";\nimport { MESSAGE_KEYS, STATES, UPDATE_TYPE } from \"./../../constants/constants.js\";\nimport { formatMessage } from \"./../../util/property-utils\";\n\nclass DropDown extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t\tthis.emptyLabel = \"...\";\n\t\tthis.disableEmptyListDropdown = false;\n\t\tif (isEmpty(props.controlOpts)) {\n\t\t\t// For empty dropdown, get placeholder text from resources\n\t\t\tconst overrideEmptyListPlaceholder = `${this.props.control.name}.emptyList.placeholder`;\n\t\t\tconst emptyLabelOverride = props.controller.getResource(overrideEmptyListPlaceholder);\n\t\t\t// Disable empty dropdown when [property_id].emptyList.placeholder is set in resources\n\t\t\tif (emptyLabelOverride) {\n\t\t\t\tthis.emptyLabel = emptyLabelOverride;\n\t\t\t\tthis.disableEmptyListDropdown = true;\n\t\t\t}\n\t\t} else if (props.control.additionalText) {\n\t\t\t// For non-empty dropdown, get placeholder text from place_holder_text in parameter_info\n\t\t\tthis.emptyLabel = props.control.additionalText;\n\t\t}\n\t\tthis.id = ControlUtils.getControlId(this.props.propertyId);\n\t\tthis.handleChange = this.handleChange.bind(this);\n\t\tthis.handleComboOnChange = this.handleComboOnChange.bind(this);\n\t\tthis.handleOnInputChange = this.handleOnInputChange.bind(this);\n\t\tthis.genSchemaSelectOptions = this.genSchemaSelectOptions.bind(this);\n\t\tthis.genSelectOptions = this.genSelectOptions.bind(this);\n\t\tthis.genFieldSelectOptions = this.genFieldSelectOptions.bind(this);\n\t\tthis.updateValueFromFilterEnum = this.updateValueFromFilterEnum.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.updateValueFromFilterEnum(true, UPDATE_TYPE.INITIAL_LOAD);\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\t// only update if filter options have changed. Fixes issue where filter options are updated after value in setProperties\n\t\tif (!isEqual(this.props.controlOpts, prevProps.controlOpts)) {\n\t\t\tthis.updateValueFromFilterEnum();\n\t\t}\n\t}\n\n\tgetSelectedOption(options, selectedValue) {\n\t\tconst value = PropertyUtils.stringifyFieldValue(selectedValue, this.props.control);\n\t\tlet selectedOption = options.find(function(option) {\n\t\t\treturn option.value === value;\n\t\t});\n\t\tselectedOption = typeof selectedOption === \"undefined\" ? null : selectedOption;\n\n\t\t// Show the existing value but with a warning instead of filtering it out.\n\t\tconst showExistingValue = (selectedOption === null && value);\n\t\t// user defined value\n\t\tif (showExistingValue || this.props.control.customValueAllowed) {\n\t\t\tselectedOption = {\n\t\t\t\tvalue: value,\n\t\t\t\tlabel: value\n\t\t\t};\n\t\t}\n\n\t\treturn selectedOption;\n\t}\n\n\tgenSchemaSelectOptions(selectedValue) {\n\t\tconst options = [];\n\t\t// allow for user to not select a schema\n\t\toptions.push({\n\t\t\tvalue: \"\",\n\t\t\tlabel: this.emptyLabel\n\t\t});\n\t\tif (Array.isArray(this.props.controlOpts)) {\n\t\t\tfor (const schemaName of this.props.controlOpts) {\n\t\t\t\toptions.push({\n\t\t\t\t\tvalue: schemaName,\n\t\t\t\t\tlabel: schemaName\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tconst selectedOption = this.getSelectedOption(options, selectedValue);\n\t\treturn {\n\t\t\toptions: options,\n\t\t\tselectedOption: selectedOption\n\t\t};\n\t}\n\n\tgenFieldSelectOptions(selectedValue) {\n\t\tconst options = [];\n\t\t// allow for user to not select a field\n\t\toptions.push({\n\t\t\tvalue: \"\",\n\t\t\tlabel: this.emptyLabel\n\t\t});\n\t\tfor (const field of this.props.controlOpts) {\n\t\t\toptions.push({\n\t\t\t\tvalue: field.name,\n\t\t\t\tlabel: field.name\n\t\t\t});\n\t\t}\n\t\tconst selectedOption = this.getSelectedOption(options, selectedValue);\n\t\treturn {\n\t\t\toptions: options,\n\t\t\tselectedOption: selectedOption\n\t\t};\n\t}\n\n\tgenSelectOptions(selectedValue) {\n\t\tconst options = [];\n\t\t// Allow for enumeration replacement\n\t\tfor (let j = 0; j < this.props.controlOpts.values.length; j++) {\n\t\t\toptions.push({\n\t\t\t\tvalue: this.props.controlOpts.values[j],\n\t\t\t\tlabel: this.props.controlOpts.valueLabels[j]\n\t\t\t});\n\t\t}\n\t\tconst selectedOption = this.getSelectedOption(options, selectedValue);\n\t\treturn {\n\t\t\toptions: options,\n\t\t\tselectedOption: selectedOption\n\t\t};\n\t}\n\t// this is needed in order to reset the property value when a value is filtered out.\n\tupdateValueFromFilterEnum(skipValidateInput, updateType) {\n\t\t// update property value if value isn't in current enum value. Should only be used for oneofselect\n\t\tif (this.props.control.controlType === ControlType.ONEOFSELECT && this.props.value !== null && typeof this.props.value !== \"undefined\" &&\n\t\t\t!this.props.controlOpts.values.includes(this.props.value)) {\n\t\t\tlet defaultValue = null;\n\t\t\t// set to default value if default value is in filtered enum list\n\t\t\tif (this.props.control.valueDef && this.props.control.valueDef.defaultValue && this.props.controlOpts.values.includes(this.props.control.valueDef.defaultValue)) {\n\t\t\t\tdefaultValue = this.props.control.valueDef.defaultValue;\n\t\t\t} else if (this.props.control.customValueAllowed && this.props.value) {\n\t\t\t\tdefaultValue = this.props.value;\n\t\t\t}\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, defaultValue, skipValidateInput, updateType);\n\t\t}\n\t}\n\n\thandleChange(evt) {\n\t\tlet value = this.props.tableControl ? evt.target.value : evt.selectedItem.value;\n\t\tif (this.props.control.controlType === ControlType.SELECTCOLUMN) {\n\t\t\tvalue = PropertyUtils.fieldStringToValue(value, this.props.control, this.props.controller);\n\t\t}\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, value);\n\t}\n\n\thandleComboOnChange(evt) {\n\t\tlet value = evt.selectedItem && evt.selectedItem.value ? evt.selectedItem.value : \"\";\n\t\tif (this.props.control.controlType === ControlType.SELECTCOLUMN) {\n\t\t\tvalue = PropertyUtils.fieldStringToValue(value, this.props.control, this.props.controller);\n\t\t}\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, value);\n\t}\n\n\t// evt is null when onBlur, empty string when clicking the 'x' to clear input\n\thandleOnInputChange(evt) {\n\t\tif (evt !== null) {\n\t\t\tconst value = evt;\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, value);\n\t\t}\n\t}\n\n\trender() {\n\t\tlet dropDown;\n\t\tif (this.props.control.controlType === ControlType.SELECTSCHEMA) {\n\t\t\tdropDown = this.genSchemaSelectOptions(this.props.value);\n\t\t} else if (this.props.control.controlType === ControlType.SELECTCOLUMN) {\n\t\t\tdropDown = this.genFieldSelectOptions(this.props.value);\n\t\t} else {\n\t\t\tdropDown = this.genSelectOptions(this.props.value);\n\t\t}\n\n\t\tconst listBoxMenuIconTranslationIds = {\n\t\t\t\"close.menu\": formatMessage(this.reactIntl, MESSAGE_KEYS.DROPDOWN_TOOLTIP_CLOSEMENU),\n\t\t\t\"open.menu\": formatMessage(this.reactIntl, MESSAGE_KEYS.DROPDOWN_TOOLTIP_OPENMENU),\n\t\t\t\"clear.selection\": formatMessage(this.reactIntl, MESSAGE_KEYS.DROPDOWN_TOOLTIP_CLEARSELECTION)\n\t\t};\n\n\t\tlet dropdownComponent = null;\n\t\tconst validationProps = ControlUtils.getValidationProps(this.props.messageInfo, this.props.tableControl);\n\t\tif (this.props.tableControl) {\n\t\t\tconst options = [];\n\t\t\tconst selection = dropDown.selectedOption && dropDown.selectedOption.value ? dropDown.selectedOption.value : \"\";\n\t\t\tif (!dropDown.selectedOption) {\n\t\t\t\t// need to add null option when no value set. Shouldn't be an option for the user to select otherwise\n\t\t\t\toptions.push(<SelectItem text={this.emptyLabel} key={this.id} value=\"\" />);\n\t\t\t}\n\t\t\tfor (const option of dropDown.options) {\n\t\t\t\toptions.push(<SelectItem text={option.label} key={this.id + \"-\" + option.value} value={option.value} />);\n\t\t\t}\n\t\t\tdropdownComponent = (<Select\n\t\t\t\tid={this.id}\n\t\t\t\thideLabel\n\t\t\t\tinline\n\t\t\t\tlabelText={this.props.control.label ? this.props.control.label.text : \"\"}\n\t\t\t\tdisabled={this.props.state === STATES.DISABLED || this.disableEmptyListDropdown}\n\t\t\t\tonChange={this.handleChange}\n\t\t\t\tvalue={selection}\n\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t>\n\t\t\t\t{ options }\n\t\t\t</Select>);\n\t\t} else if (this.props.control.customValueAllowed) { // combobox dropdown not allowed in tables\n\t\t\tdropdownComponent = (<ComboBox\n\t\t\t\t{...validationProps}\n\t\t\t\tariaLabel={this.props.control.label ? this.props.control.label.text : \"\"}\n\t\t\t\tid={`${ControlUtils.getDataId(this.props.propertyId)}-dropdown`}\n\t\t\t\tdisabled={this.props.state === STATES.DISABLED || this.disableEmptyListDropdown}\n\t\t\t\tplaceholder={dropDown.selectedOption.label}\n\t\t\t\tselectedItem={dropDown.selectedOption.label}\n\t\t\t\titems={dropDown.options}\n\t\t\t\tonChange={this.handleComboOnChange}\n\t\t\t\tonInputChange={this.handleOnInputChange}\n\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\ttranslateWithId={(id) => listBoxMenuIconTranslationIds[id]}\n\t\t\t\ttitleText={this.props.controlItem}\n\t\t\t/>);\n\t\t} else {\n\t\t\tdropdownComponent = (<Dropdown\n\t\t\t\t{...validationProps}\n\t\t\t\tid={`${ControlUtils.getDataId(this.props.propertyId)}-dropdown`}\n\t\t\t\tdisabled={this.props.state === STATES.DISABLED || this.disableEmptyListDropdown}\n\t\t\t\ttype=\"default\"\n\t\t\t\titems={dropDown.options}\n\t\t\t\tonChange={this.handleChange}\n\t\t\t\tselectedItem={dropDown.selectedOption}\n\t\t\t\tlabel={this.emptyLabel}\n\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\ttranslateWithId={(id) => listBoxMenuIconTranslationIds[id]}\n\t\t\t\ttitleText={this.props.controlItem}\n\t\t\t/>);\n\t\t}\n\n\t\treturn (\n\t\t\t<div data-id={ControlUtils.getDataId(this.props.propertyId)}\n\t\t\t\tclassName={classNames(\"properties-dropdown\", { \"hide\": this.props.state === STATES.HIDDEN }, this.props.messageInfo ? this.props.messageInfo.type : null)}\n\t\t\t>\n\t\t\t\t{dropdownComponent}\n\t\t\t\t<ValidationMessage state={this.props.state} messageInfo={this.props.messageInfo} inTable={this.props.tableControl} tableOnly />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nDropDown.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tcontrolOpts: PropTypes.oneOfType([\n\t\tPropTypes.object,\n\t\tPropTypes.array\n\t]), // pass in by redux\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.oneOfType([\n\t\tPropTypes.string,\n\t\tPropTypes.object\n\t]), // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => {\n\tconst props = {\n\t\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\t\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\t\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId),\n\t};\n\tif (ownProps.control.controlType === ControlType.SELECTSCHEMA) {\n\t\tprops.controlOpts = ownProps.controller.getDatasetMetadataSchemas();\n\t} else if (ownProps.control.controlType === ControlType.SELECTCOLUMN) {\n\t\tprops.controlOpts = ownProps.controller.getFilteredDatasetMetadata(ownProps.propertyId);\n\t} else {\n\t\tprops.controlOpts = ownProps.controller.getFilteredEnumItems(ownProps.propertyId, ownProps.control);\n\t}\n\treturn props;\n};\n\nexport default connect(mapStateToProps, null)(DropDown);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { MultiSelect, FilterableMultiSelect } from \"carbon-components-react\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport classNames from \"classnames\";\nimport * as PropertyUtils from \"./../../util/property-utils.js\";\nimport { MESSAGE_KEYS, STATES } from \"./../../constants/constants.js\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport { isEqual, intersection, isEmpty } from \"lodash\";\n\nclass MultiSelectControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t\tthis.getSelectedOption = this.getSelectedOption.bind(this);\n\t\tthis.genSelectOptions = this.genSelectOptions.bind(this);\n\t\tthis.handleOnChange = this.handleOnChange.bind(this);\n\t\tthis.updateValueFromFilterEnum = this.updateValueFromFilterEnum.bind(this);\n\t\tthis.setShouldRender = this.setShouldRender.bind(this);\n\t\tthis.state = {\n\t\t\tshouldRender: true\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.updateValueFromFilterEnum(true);\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\t// only update if filter options have changed. Fixes issue where filter options are updated after value in setProperties\n\t\tif (!isEqual(this.props.controlOpts, prevProps.controlOpts)) {\n\t\t\tthis.updateValueFromFilterEnum();\n\t\t}\n\t\tthis.setShouldRender(prevProps);\n\t}\n\n\t/*\n\t* workaround for https://github.com/elyra-ai/canvas/issues/510\n\t*/\n\tsetShouldRender(prevProps) {\n\t\tif (!isEqual(this.props.controlOpts.values, prevProps.controlOpts.values) && this.state.shouldRender) {\n\t\t\tthis.setState({\n\t\t\t\tshouldRender: false\n\t\t\t});\n\t\t} else if (!this.state.shouldRender) {\n\t\t\tthis.setState({\n\t\t\t\tshouldRender: true\n\t\t\t});\n\t\t}\n\t}\n\n\tgetSelectedOption(options, selectedValues) {\n\t\tconst values = PropertyUtils.stringifyFieldValue(selectedValues, this.props.control);\n\t\tconst selectedOptions = [];\n\t\tif (values) {\n\t\t\tvalues.forEach((value) => selectedOptions.push(options.find(function(option) {\n\t\t\t\treturn option.id === value;\n\t\t\t})));\n\t\t}\n\t\treturn selectedOptions;\n\t}\n\n\tgenSelectOptions(selectedValues) {\n\t\tconst options = [];\n\t\tfor (let j = 0; j < this.props.controlOpts.values.length; j++) {\n\t\t\toptions.push({\n\t\t\t\tid: this.props.controlOpts.values[j],\n\t\t\t\tlabel: this.props.controlOpts.valueLabels[j]\n\t\t\t});\n\t\t}\n\t\tconst selectedOptions = this.getSelectedOption(options, selectedValues);\n\t\treturn {\n\t\t\toptions: options,\n\t\t\tselectedOptions: selectedOptions\n\t\t};\n\t}\n\n\t// this is needed in order to reset the property value when a value is filtered out.\n\tupdateValueFromFilterEnum(skipValidateInput) {\n\t\tlet newValues = intersection(this.props.value, this.props.controlOpts.values);\n\t\tif (!isEqual(newValues, this.props.value)) {\n\t\t\t// set back to default values if default values is in filtered enum list\n\t\t\tif (isEmpty(newValues)) {\n\t\t\t\tif (this.props.control.valueDef && this.props.control.valueDef.defaultValue) {\n\t\t\t\t\tnewValues = intersection(this.props.control.valueDef.defaultValue, this.props.controlOpts.values);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, newValues, skipValidateInput);\n\t\t}\n\t}\n\n\thandleOnChange(evt) {\n\t\tconst controlValues = [];\n\t\tfor (let i = 0; i < evt.selectedItems.length; i++) {\n\t\t\tcontrolValues.push(evt.selectedItems[i].id);\n\t\t}\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, controlValues);\n\t}\n\n\trender() {\n\t\tconst multiSelectDropdown = this.genSelectOptions(this.props.value);\n\t\t// workaround to recreate react component on filter_enum\n\t\tif (!this.state.shouldRender) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst listBoxMenuIconTranslationIds = {\n\t\t\t\"close.menu\": formatMessage(this.reactIntl, MESSAGE_KEYS.DROPDOWN_TOOLTIP_CLOSEMENU),\n\t\t\t\"open.menu\": formatMessage(this.reactIntl, MESSAGE_KEYS.DROPDOWN_TOOLTIP_OPENMENU),\n\t\t\t\"clear.all\": formatMessage(this.reactIntl, MESSAGE_KEYS.DROPDOWN_TOOLTIP_CLEARALL),\n\t\t\t\"clear.selection\": formatMessage(this.reactIntl, MESSAGE_KEYS.DROPDOWN_TOOLTIP_CLEARSELECTION)\n\t\t};\n\n\t\tconst overrideEmptyLabelKey = `${this.props.control.name}.multiselect.dropdown.empty.label`;\n\t\tconst defaultEmptyLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.MULTISELECT_DROPDOWN_EMPTY_LABEL);\n\t\tconst overrideOptionsSelectedLabelKey = `${this.props.control.name}.multiselect.dropdown.options.selected.label`;\n\t\tconst defaultOptionsSelectedLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.MULTISELECT_DROPDOWN_OPTIONS_SELECTED_LABEL);\n\n\t\tlet label = \"\";\n\t\tif (multiSelectDropdown.selectedOptions.length === 0) { // Display message for no options selected\n\t\t\tlabel = this.props.controller.getResource(overrideEmptyLabelKey, defaultEmptyLabel);\n\t\t} else { // Display message for multiple options selected\n\t\t\tlabel = this.props.controller.getResource(overrideOptionsSelectedLabelKey, defaultOptionsSelectedLabel);\n\t\t}\n\t\tconst validationProps = ControlUtils.getValidationProps(this.props.messageInfo, this.props.tableControl);\n\n\t\tlet dropdownComponent = null;\n\t\tif (this.props.control.filterable) {\n\t\t\tdropdownComponent = (<FilterableMultiSelect\n\t\t\t\t{...validationProps}\n\t\t\t\tid={`${ControlUtils.getDataId(this.props.propertyId)}-multiselect-filterable`}\n\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\ttranslateWithId={(id) => listBoxMenuIconTranslationIds[id]}\n\t\t\t\titems={multiSelectDropdown.options}\n\t\t\t\tinitialSelectedItems={multiSelectDropdown.selectedOptions}\n\t\t\t\tonChange={this.handleOnChange}\n\t\t\t\tplaceholder={label}\n\t\t\t\ttitleText={this.props.tableControl ? null : this.props.controlItem}\n\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t/>);\n\t\t} else {\n\t\t\tdropdownComponent = (<MultiSelect\n\t\t\t\t{...validationProps}\n\t\t\t\tid={`${ControlUtils.getDataId(this.props.propertyId)}-multiselect`}\n\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\ttranslateWithId={(id) => listBoxMenuIconTranslationIds[id]}\n\t\t\t\titems={multiSelectDropdown.options}\n\t\t\t\tselectedItems={multiSelectDropdown.selectedOptions}\n\t\t\t\tonChange={this.handleOnChange}\n\t\t\t\tlabel={label}\n\t\t\t\ttitleText={this.props.tableControl ? null : this.props.controlItem}\n\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t/>);\n\t\t}\n\n\t\treturn (\n\t\t\t<div data-id={ControlUtils.getDataId(this.props.propertyId)}\n\t\t\t\tclassName={classNames(\"properties-dropdown\", { \"hide\": this.props.state === STATES.HIDDEN }, this.props.messageInfo ? this.props.messageInfo.type : null)}\n\t\t\t>\n\t\t\t\t{dropdownComponent}\n\t\t\t\t<ValidationMessage state={this.props.state} tableOnly messageInfo={this.props.messageInfo} inTable={this.props.tableControl} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nMultiSelectControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tcontrolOpts: PropTypes.object, // pass in by redux\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.array, // pass in by redux\n\tmessageInfo: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => {\n\tconst props = {\n\t\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\t\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\t\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId),\n\t\tcontrolOpts: ownProps.controller.getFilteredEnumItems(ownProps.propertyId, ownProps.control)\n\t};\n\treturn props;\n};\n\nexport default connect(mapStateToProps, null)(MultiSelectControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport FlexibleTable from \"../../components/flexible-table\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport classNames from \"classnames\";\nimport { isEqual, intersection } from \"lodash\";\n\nimport { STATES, UPDATE_TYPE } from \"../../constants/constants\";\n\nclass SomeofselectControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.genSelectOptions = this.genSelectOptions.bind(this);\n\t\tthis.updateValueFromFilterEnum = this.updateValueFromFilterEnum.bind(this);\n\t\tthis.updateSelections = this.updateSelections.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.updateValueFromFilterEnum(true, UPDATE_TYPE.INITIAL_LOAD);\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\t// only update if filter options have changed. Fixes issue where filter options are updated after value in setProperties\n\t\tif (!isEqual(this.props.controlOpts, prevProps.controlOpts)) {\n\t\t\tthis.updateValueFromFilterEnum();\n\t\t}\n\t}\n\n\t// this is needed in order to reset the property value when a value is filtered out.\n\tupdateValueFromFilterEnum(skipValidateInput, updateType) {\n\t\tconst newValues = intersection(this.props.value, this.props.controlOpts.values);\n\t\tif (!isEqual(newValues, this.props.value)) {\n\t\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, newValues, skipValidateInput, updateType);\n\t\t}\n\t}\n\n\tupdateSelections(selected) {\n\t\tconst controlValues = [];\n\t\tfor (let i = 0; i < selected.length; i++) {\n\t\t\tconst value = this.props.controlOpts.values[selected[i]];\n\t\t\tcontrolValues.push(value);\n\t\t}\n\t\tthis.props.controller.updatePropertyValue(this.props.propertyId, controlValues);\n\t}\n\n\tgenSelectOptions(selectedValues) {\n\t\tconst tableOptions = {\n\t\t\toptions: [],\n\t\t\tselected: []\n\t\t};\n\t\t// Allow for enumeration replacement\n\t\tfor (let i = 0; i < this.props.controlOpts.values.length; i++) {\n\t\t\tconst checked = selectedValues.indexOf(this.props.controlOpts.values[i]) !== -1;\n\t\t\tif (checked) {\n\t\t\t\ttableOptions.selected.push(i);\n\t\t\t}\n\t\t\tconst columns = [];\n\t\t\tcolumns.push({\n\t\t\t\tcolumn: \"someofselect\",\n\t\t\t\tstate: this.props.state,\n\t\t\t\tcontent: this.props.controlOpts.valueLabels[i],\n\t\t\t}\n\t\t\t);\n\t\t\ttableOptions.options.push({ className: \"table-row\", columns: columns, disabled: this.props.state === STATES.DISABLED }); // add state in obj\n\t\t}\n\t\treturn tableOptions;\n\t}\n\n\trender() {\n\t\tlet controlValue = this.props.value;\n\t\tif (typeof controlValue === \"undefined\" || controlValue === null) {\n\t\t\tcontrolValue = [];\n\t\t}\n\t\tconst tableOptions = this.genSelectOptions(controlValue);\n\t\tconst rows = this.props.control.rows ? this.props.control.rows : 5.5;\n\t\tconst tableLabel = (this.props.control.label && this.props.control.label.text) ? this.props.control.label.text : \"\";\n\n\t\treturn (\n\t\t\t<div data-id={ControlUtils.getDataId(this.props.control, this.props.propertyId)}\n\t\t\t\tclassName={classNames(\"properties-someofselect \", { \"hide\": this.props.state === STATES.HIDDEN },\n\t\t\t\t\tthis.props.messageInfo ? this.props.messageInfo.type : null)}\n\t\t\t>\n\t\t\t\t{this.props.controlItem}\n\t\t\t\t<FlexibleTable\n\t\t\t\t\tcolumns={[{ \"key\": \"someofselect\", \"label\": \"\" }]}\n\t\t\t\t\trows={rows}\n\t\t\t\t\tdata={tableOptions.options}\n\t\t\t\t\tscrollKey={this.props.control.name}\n\t\t\t\t\ttableLabel={tableLabel}\n\t\t\t\t\tselectedRows={tableOptions.selected}\n\t\t\t\t\tupdateRowSelections={this.updateSelections}\n\t\t\t\t\tselectable\n\t\t\t\t\tshowHeader={false}\n\t\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\t\temptyTablePlaceholder={this.props.control.additionalText}\n\t\t\t\t/>\n\t\t\t\t<ValidationMessage state={this.props.state} messageInfo={this.props.messageInfo} inTable={this.props.tableControl} />\n\t\t\t</div>\n\n\t\t);\n\t}\n}\n\nSomeofselectControl.propTypes = {\n\tcontrol: PropTypes.object,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.array, // pass in by redux\n\tmessageInfo: PropTypes.object, // pass in by redux\n\tcontrolOpts: PropTypes.object // pass in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId),\n\tcontrolOpts: ownProps.controller.getFilteredEnumItems(ownProps.propertyId, ownProps.control)\n});\n\nexport default connect(mapStateToProps, null)(SomeofselectControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport FlexibleTable from \"./../../components/flexible-table\";\nimport MoveableTableRows from \"./../../components/moveable-table-rows\";\nimport AbstractTable from \"./../abstract-table.jsx\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport * as PropertyUtils from \"./../../util/property-utils\";\nimport { isEmpty } from \"lodash\";\n\nimport { STATES, MESSAGE_KEYS } from \"./../../constants/constants\";\n\nimport ReadonlyControl from \"./../readonly\";\n\n/* eslint max-depth: [\"error\", 6] */\n\nclass SelectColumnsControl extends AbstractTable {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t\tthis.emptyTableButtonClickHandler = this.addOnClick.bind(this, this.props.propertyId);\n\t\tthis.emptyTableButtonLabel = PropertyUtils.formatMessage(this.reactIntl, MESSAGE_KEYS.STRUCTURETABLE_ADDBUTTON_LABEL);\n\t}\n\n\tmakeRows(controlValue, tableState) {\n\t\tconst rows = [];\n\t\tif (controlValue) {\n\t\t\tfor (let rowIndex = 0; rowIndex < controlValue.length; rowIndex++) {\n\t\t\t\tconst columns = [];\n\t\t\t\t// If the propertyId contains 'row' then this selectcolumns control is part of a table.\n\t\t\t\t// Need to add an additional 'index' to retrieve the correct value from the control within a table.\n\t\t\t\tconst row = typeof this.props.propertyId.row !== \"undefined\"\n\t\t\t\t\t? { row: this.props.propertyId.row, index: rowIndex }\n\t\t\t\t\t: { row: rowIndex };\n\t\t\t\tconst propertyId = Object.assign({}, this.props.propertyId, row);\n\t\t\t\tconst control = Object.assign({}, this.props.control);\n\t\t\t\tif (control.dmImage) {\n\t\t\t\t\tconst fields = this.props.controller.getDatasetMetadataFields();\n\t\t\t\t\tconst value = PropertyUtils.stringifyFieldValue(this.props.controller.getPropertyValue(propertyId), control, true);\n\t\t\t\t\tconst icon = PropertyUtils.getDMFieldIcon(fields,\n\t\t\t\t\t\tvalue, control.dmImage);\n\t\t\t\t\tcontrol.icon = icon;\n\t\t\t\t}\n\t\t\t\tconst cellContent = (\n\t\t\t\t\t<div className=\"properties-table-cell-control\">\n\t\t\t\t\t\t<ReadonlyControl\n\t\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\t\tpropertyId={propertyId}\n\t\t\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\t\t\ttableControl\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t\tcolumns.push({\n\t\t\t\t\tkey: rowIndex + \"-0-field\",\n\t\t\t\t\tcolumn: \"field\",\n\t\t\t\t\tcontent: cellContent\n\t\t\t\t});\n\t\t\t\trows.push({\n\t\t\t\t\tkey: rowIndex,\n\t\t\t\t\tonClickCallback: this.handleRowClick.bind(this, rowIndex, false),\n\t\t\t\t\tcolumns: columns,\n\t\t\t\t\tclassName: \"column-select-table-row\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn rows;\n\t}\n\n\t/**\n\t* Callback function invoked when closing field picker\n\t* @param allSelectedFields all fields selected, includes newSelections\n\t* @param newSelections the newly selected rows\n\t*/\n\tonFieldPickerClose(allSelectedFields, newSelections) {\n\t\tif (allSelectedFields && newSelections) {\n\t\t\tthis.setCurrentControlValueSelected(allSelectedFields, newSelections);\n\t\t\tconst scrollToRow = newSelections[newSelections.length - 1];\n\t\t\tthis.setScrollToRow(scrollToRow);\n\t\t}\n\t}\n\n\tmakeHeader() {\n\t\tconst headers = [];\n\t\theaders.push({\n\t\t\t\"key\": \"field\",\n\t\t\t\"label\": PropertyUtils.formatMessage(this.reactIntl,\n\t\t\t\tMESSAGE_KEYS.FIELDPICKER_FIELDCOLUMN_LABEL),\n\t\t\t\"description\": (null) });\n\t\treturn headers;\n\t}\n\n\trender() {\n\t\tconst headers = this.makeHeader();\n\n\t\tconst tableButtonConfig = {\n\t\t\tfieldPickerCloseFunction: this.onFieldPickerClose\n\t\t};\n\n\t\tconst rows = this.makeRows(this.props.value, this.props.state);\n\t\tconst topRightPanel = this.makeAddRemoveButtonPanel(this.props.state, tableButtonConfig);\n\t\tlet rowToScrollTo;\n\t\tif (Number.isInteger(this.scrollToRow) && rows.length > this.scrollToRow) {\n\t\t\trowToScrollTo = this.scrollToRow;\n\t\t\tdelete this.scrollToRow;\n\t\t}\n\t\tconst tableLabel = (this.props.control.label && this.props.control.label.text) ? this.props.control.label.text : \"\";\n\t\tconst table =\t(\n\t\t\t<FlexibleTable\n\t\t\t\tcolumns={headers}\n\t\t\t\tdata={rows}\n\t\t\t\tscrollToRow={rowToScrollTo}\n\t\t\t\ttopRightPanel={topRightPanel}\n\t\t\t\tscrollKey={this.props.control.name}\n\t\t\t\ttableState={this.props.state}\n\t\t\t\tmessageInfo={this.props.messageInfo}\n\t\t\t\trows={this.props.control.rows}\n\t\t\t\ttableLabel={tableLabel}\n\t\t\t\tselectedRows={this.props.selectedRows}\n\t\t\t\trowSelection={this.props.control.rowSelection}\n\t\t\t\tupdateRowSelections={this.updateRowSelections}\n\t\t\t\tlight={this.props.controller.getLight() && this.props.control.light}\n\t\t\t\temptyTablePlaceholder={this.props.control.additionalText}\n\t\t\t/>);\n\n\t\tconst content = (\n\t\t\t<div>\n\t\t\t\t<div className=\"properties-column-select-table\">\n\t\t\t\t\t{table}\n\t\t\t\t</div>\n\t\t\t\t<ValidationMessage state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>\n\t\t);\n\n\t\treturn (\n\t\t\t<div data-id={ControlUtils.getDataId(this.props.propertyId)} className=\"properties-column-select\" >\n\t\t\t\t{this.props.controlItem}\n\t\t\t\t<MoveableTableRows\n\t\t\t\t\ttableContainer={content}\n\t\t\t\t\tcontrol={this.props.control}\n\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\tpropertyId={this.props.propertyId}\n\t\t\t\t\tsetScrollToRow={this.setScrollToRow}\n\t\t\t\t\tsetCurrentControlValueSelected={this.setCurrentControlValueSelected}\n\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\tisEmptyTable={isEmpty(this.props.value)}\n\t\t\t\t\temptyTableButtonLabel={this.emptyTableButtonLabel}\n\t\t\t\t\temptyTableButtonClickHandler={this.emptyTableButtonClickHandler}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nSelectColumnsControl.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\topenFieldPicker: PropTypes.func.isRequired,\n\tselectedRows: PropTypes.array, // set by redux\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.array, // pass in by redux\n\tmessageInfo: PropTypes.object, // pass in by redux\n\taddRemoveRows: PropTypes.bool, // set by redux\n\ttableButtons: PropTypes.object // set in by redux\n};\n\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId),\n\tselectedRows: ownProps.controller.getSelectedRows(ownProps.propertyId),\n\taddRemoveRows: ownProps.controller.getAddRemoveRows(ownProps.propertyId),\n\ttableButtons: ownProps.controller.getTableButtons(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(SelectColumnsControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport ControlFactory from \"../control-factory\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport classNames from \"classnames\";\nimport { STATES } from \"./../../constants/constants.js\";\nimport { cloneDeep } from \"lodash\";\n\n\nclass StructureEditorControl extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.controlFactory = new ControlFactory(this.props.controller);\n\t\tthis.controlFactory.setFunctions(this.props.openFieldPicker, this.props.buildUIItem);\n\t}\n\n\t/**\n\t * Retrieves a sub-control definition by name.\n\t *\n\t * @param subCtrlName Name of the sub-control def to retrieve\n\t * @param a SubControl structure for the given item\n\t */\n\t_getSubControlDef(subCtrlName) {\n\t\tfor (let i = 0; i < this.props.control.subControls.length; i++) {\n\t\t\tif (this.props.control.subControls[i].name === subCtrlName) {\n\t\t\t\treturn this.props.control.subControls[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Retrieves a sub-control index in it's parent structure.\n\t *\n\t * @param subCtrlName Name of the sub-control index to retrieve\n\t * @param The parent index for the given item\n\t */\n\t_getColumnIndex(subCtrlName) {\n\t\tfor (let i = 0; i < this.props.control.subControls.length; i++) {\n\t\t\tif (this.props.control.subControls[i].name === subCtrlName) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Creates a layout row of controls.\n\t *\n\t * @param rowCtrlNames String array of sub-control names\n\t * @return An array of controls for rendering\n\t */\n\t_makeRow(rowCtrlNames) {\n\t\tconst row = [];\n\t\tfor (let y = 0; y < rowCtrlNames.length; y++) {\n\t\t\tconst control = this._getSubControlDef(rowCtrlNames[y]);\n\t\t\tif (control && control.visible) {\n\t\t\t\tconst childPropertyId = {\n\t\t\t\t\tname: this.props.control.name,\n\t\t\t\t\tcol: this._getColumnIndex(rowCtrlNames[y])\n\t\t\t\t};\n\t\t\t\tconst parentPropertyId = cloneDeep(this.props.propertyId);\n\n\t\t\t\tlet propertyId = childPropertyId;\n\t\t\t\tif (parentPropertyId.name !== childPropertyId.name) {\n\t\t\t\t\tpropertyId = this.props.controller.setChildPropertyId(parentPropertyId, childPropertyId);\n\t\t\t\t}\n\t\t\t\trow.push(this.controlFactory.createControlItem(control, propertyId));\n\t\t\t}\n\t\t}\n\t\treturn row;\n\t}\n\n\t/**\n\t * Creates the sub-controls for rendering.\n\t *\n\t * @return An array of arrays, each of which contains a row of controls\n\t */\n\t_makeControls() {\n\t\tconst controls = [];\n\t\t// If there is a layout, use that to determine control ordering\n\t\tif (Array.isArray(this.props.control.layout)) {\n\t\t\tconst layout = this.props.control.layout;\n\t\t\tfor (let i = 0; i < layout.length; i++) {\n\t\t\t\tif (Array.isArray(layout[i])) {\n\t\t\t\t\tcontrols.push(this._makeRow(layout[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// If there is no layout, just arrange the controls in a single ordered column\n\t\t\tfor (let i = 0; i < this.props.control.subControls.length; i++) {\n\t\t\t\tif (this.props.control.subControls[i].visible) {\n\t\t\t\t\tconst childPropertyId = {\n\t\t\t\t\t\tname: this.props.control.name,\n\t\t\t\t\t\tcol: this._getColumnIndex(this.props.control.subControls[i].name)\n\t\t\t\t\t};\n\t\t\t\t\tconst parentPropertyId = cloneDeep(this.props.propertyId);\n\n\t\t\t\t\tlet propertyId = childPropertyId;\n\t\t\t\t\tif (parentPropertyId.name !== childPropertyId.name) {\n\t\t\t\t\t\tpropertyId = this.props.controller.setChildPropertyId(parentPropertyId, childPropertyId);\n\t\t\t\t\t}\n\t\t\t\t\tcontrols.push([this.controlFactory.createControlItem(this.props.control.subControls[i], propertyId)]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn controls;\n\t}\n\n\t_makeControlTable(controls) {\n\t\tconst rows = [];\n\t\tfor (let i = 0; i < controls.length; i++) {\n\t\t\tconst row = [];\n\t\t\tfor (let j = 0; j < controls[i].length; j++) {\n\t\t\t\trow.push(<td key={(1 + i) * j} className=\"properties-structureeditor-cell\"><div>{controls[i][j]}</div></td>);\n\t\t\t}\n\t\t\trows.push(<tr key={1 + i}>{row}</tr>);\n\t\t}\n\t\t// Added role presentation to fix a11y violation - no headers in the table\n\t\treturn (<table role=\"presentation\"><tbody>{rows}</tbody></table>);\n\t}\n\n\trender() {\n\t\tconst controls = this._makeControlTable(this._makeControls());\n\n\t\treturn (\n\t\t\t<div data-id={ControlUtils.getDataId(this.props.control, this.props.propertyId)}\n\t\t\t\tclassName={classNames(\"properties-structureeditor \", { \"hide\": this.props.state === STATES.HIDDEN },\n\t\t\t\t\tthis.props.messageInfo ? this.props.messageInfo.type : null)}\n\t\t\t>\n\t\t\t\t{controls}\n\t\t\t\t<ValidationMessage state={this.props.state} messageInfo={this.props.messageInfo} inTable={false} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nStructureEditorControl.propTypes = {\n\tbuildUIItem: PropTypes.func,\n\tcontrol: PropTypes.object,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\topenFieldPicker: PropTypes.func,\n\trightFlyout: PropTypes.bool,\n\tstate: PropTypes.string, // passed in by redux\n\tvalue: PropTypes.array, // passed in by redux\n\tmessageInfo: PropTypes.object // passed in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(StructureEditorControl);\n","var arrayFilter = require('./_arrayFilter'),\n baseFilter = require('./_baseFilter'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray'),\n negate = require('./negate');\n\n/**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\nfunction reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(baseIteratee(predicate, 3)));\n}\n\nmodule.exports = reject;\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n}\n\nmodule.exports = negate;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// CONTROL structuretable\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport AbstractTable from \"./../abstract-table.jsx\";\nimport MoveableTableRows from \"./../../components/moveable-table-rows\";\nimport * as PropertyUtils from \"./../../util/property-utils\";\nimport { Type, ParamRole } from \"./../../constants/form-constants\";\nimport { STATES, MESSAGE_KEYS } from \"./../../constants/constants\";\n\nimport ValidationMessage from \"./../../components/validation-message\";\nimport { reject, findIndex, cloneDeep, isEmpty } from \"lodash\";\nimport * as ControlUtils from \"./../../util/control-utils\";\n\nclass StructureTableControl extends AbstractTable {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t\tthis.addColumns = this.addColumns.bind(this);\n\t\tthis.removeColumns = this.removeColumns.bind(this);\n\t\tthis.getDefaultRow = this.getDefaultRow.bind(this);\n\t\tthis.indexOfRow = this.indexOfRow.bind(this);\n\t\tthis.emptyTableButtonClickHandler = this.addOnClick.bind(this, this.props.propertyId);\n\t\tthis.emptyTableButtonLabel = PropertyUtils.formatMessage(this.reactIntl, MESSAGE_KEYS.STRUCTURETABLE_ADDBUTTON_LABEL);\n\t}\n\n\tindexOfRow(columnName) {\n\t\tconst keyIndex = this.props.control.keyIndex;\n\t\treturn findIndex(this.props.controller.getPropertyValue(this.props.propertyId), function(row) {\n\t\t\treturn row[keyIndex] === columnName;\n\t\t});\n\t}\n\n\taddColumns(columnNames, callback) {\n\t\tconst newRows = [];\n\t\tconst isMap = this.props.control.valueDef.isMap;\n\t\tfor (var i = 0; i < columnNames.length; i++) {\n\t\t\tconst columnName = columnNames[i];\n\n\t\t\t// Sometimes the source list selection hasn\"t changed so do an\n\t\t\t// explicit check for whether an entry for this column exists\n\t\t\tif (this.indexOfRow(columnName) < 0) {\n\t\t\t\tconst newRow = cloneDeep(this.props.control.defaultRow);\n\n\t\t\t\t// Set the column name.\n\t\t\t\tif (isMap) {\n\t\t\t\t\t// For maps, this means adding the column name to the start of the cloned list.\n\t\t\t\t\tnewRow.unshift(columnName);\n\t\t\t\t} else {\n\t\t\t\t\t// For lists, this means assigning the column name to the correct location in the cloned list.\n\t\t\t\t\tnewRow[this.props.control.keyIndex] = columnName;\n\t\t\t\t}\n\t\t\t\tnewRows.push(newRow);\n\t\t\t}\n\t\t}\n\n\t\tconst rows = this.props.controller.getPropertyValue(this.props.propertyId).concat(newRows);\n\t\tthis.setCurrentControlValueSelected(rows);\n\t}\n\n\tremoveColumns(columnNames, callback) {\n\n\t\tconst rows = this.props.controller.getPropertyValue(this.props.propertyId);\n\t\tconst keyIndex = this.props.control.keyIndex;\n\n\t\tconst newRows = reject(rows, function(val) {\n\t\t\treturn columnNames.indexOf(val[keyIndex]) >= 0;\n\t\t});\n\t\tthis.setCurrentControlValueSelected(newRows);\n\t}\n\n\t/**\n\t* returns the default row for the control\n\t* @param field optional field to construct the defaultRow for where the parameter has role===COLUMN\n\t*/\n\tgetDefaultRow(field) {\n\t\tconst row = [];\n\t\t// if value is already in propertyValues, return that row\n\t\tif (this.props.value && field) {\n\t\t\tconst dataColumnIndex = PropertyUtils.getTableFieldIndex(this.props.control);\n\t\t\tfor (let i = 0; i < this.props.value.length; i++) {\n\t\t\t\tconst fieldValue = this.props.value[i][dataColumnIndex];\n\t\t\t\tif (fieldValue === field || this.props.value[i] === field) {\n\t\t\t\t\treturn this.props.value[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let idx = 0; idx < this.props.control.subControls.length; idx++) {\n\t\t\tconst subControl = this.props.control.subControls[idx];\n\t\t\tif (subControl.role === ParamRole.COLUMN) {\n\t\t\t\trow.push(field);\n\t\t\t} else if (subControl.role === ParamRole.NEW_COLUMN) {\n\t\t\t\trow.push(PropertyUtils.stringifyFieldValue(field, subControl).replace(\".\", \"_\"));\n\t\t\t} else if (typeof subControl.dmDefault !== \"undefined\") {\n\t\t\t\trow.push(PropertyUtils.getDMDefault(subControl, field, this.props.controller.getDatasetMetadataFields()));\n\t\t\t} else if (typeof this.props.control.defaultRow !== \"undefined\") {\n\t\t\t\tlet defaultRowIndex = idx;\n\t\t\t\t// defaultRow does not contain the first column field, ex: aggregate.json\n\t\t\t\tif (this.props.control.subControls.length !== this.props.control.defaultRow.length) {\n\t\t\t\t\tdefaultRowIndex -= 1;\n\t\t\t\t}\n\t\t\t\tconst defaultRowValue = this.props.control.defaultRow[defaultRowIndex];\n\t\t\t\tif (this.props.control.subControls[defaultRowIndex].valueDef.propType === Type.STRUCTURE) {\n\t\t\t\t\trow.push([]); // nested structure will default to an empty array\n\t\t\t\t} else if (defaultRowValue && defaultRowValue.parameterRef) {\n\t\t\t\t\t// if the defaultRow value is a parameterRef, get the property value\n\t\t\t\t\trow.push(this.props.controller.getPropertyValue({ name: defaultRowValue.parameterRef }));\n\t\t\t\t} else {\n\t\t\t\t\trow.push(defaultRowValue);\n\t\t\t\t}\n\t\t\t} else if (subControl.valueDef && subControl.valueDef.defaultValue) {\n\t\t\t\t// get the defaultValue from the parameter\n\t\t\t\tif (subControl.valueDef.defaultValue.parameterRef) {\n\t\t\t\t\trow.push(this.props.controller.getPropertyValue({ name: subControl.valueDef.defaultValue.parameterRef }));\n\t\t\t\t} else {\n\t\t\t\t\trow.push(subControl.valueDef.defaultValue);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trow.push(null);\n\t\t\t}\n\t\t}\n\t\treturn row;\n\t}\n\n\t/**\n\t* Callback function invoked when closing field picker for structures\n\t* @param allSelectedFields all fields selected, includes newSelections\n\t* @param newSelections the newly selected rows\n\t*/\n\tonFieldPickerClose(allSelectedFields, newSelections) {\n\t\tif (allSelectedFields && newSelections) {\n\t\t\tconst newControlValues = [];\n\t\t\tfor (const field of allSelectedFields) {\n\t\t\t\tnewControlValues.push(this.getDefaultRow(field));\n\t\t\t}\n\t\t\tthis.setCurrentControlValueSelected(newControlValues, newSelections);\n\t\t\tconst scrollToRow = newSelections[newSelections.length - 1];\n\t\t\tthis.setScrollToRow(scrollToRow);\n\t\t}\n\t}\n\n\trender() {\n\t\tconst tableButtonConfig = {\n\t\t\tfieldPickerCloseFunction: this.onFieldPickerClose\n\t\t};\n\n\t\tconst customButtons = this.props.control && this.props.control.buttons;\n\t\tconst table = this.createTable(this.props.state, tableButtonConfig, customButtons);\n\t\tconst content = (\n\t\t\t<div>\n\t\t\t\t<div className=\"properties-st properties-st-buttons\">\n\t\t\t\t\t{table}\n\t\t\t\t</div>\n\t\t\t\t<ValidationMessage state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>);\n\n\t\tconst onPanelContainer = this.getOnPanelContainer(this.props.selectedRows);\n\n\t\treturn (\n\t\t\t<div data-id={ControlUtils.getDataId(this.props.control, this.props.propertyId)}\n\t\t\t\tclassName=\"properties-column-structure-wrapper\"\n\t\t\t>\n\t\t\t\t<div className=\"properties-column-structure\">\n\t\t\t\t\t<MoveableTableRows\n\t\t\t\t\t\ttableContainer={content}\n\t\t\t\t\t\tcontrol={this.props.control}\n\t\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\t\tpropertyId={this.props.propertyId}\n\t\t\t\t\t\tsetScrollToRow={this.setScrollToRow}\n\t\t\t\t\t\tsetCurrentControlValueSelected={this.setCurrentControlValueSelected}\n\t\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\t\tisEmptyTable={isEmpty(this.props.value)}\n\t\t\t\t\t\temptyTableButtonLabel={this.emptyTableButtonLabel}\n\t\t\t\t\t\temptyTableButtonClickHandler={this.emptyTableButtonClickHandler}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t{onPanelContainer}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nStructureTableControl.propTypes = {\n\tbuildUIItem: PropTypes.func,\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\topenFieldPicker: PropTypes.func.isRequired,\n\trightFlyout: PropTypes.bool,\n\tselectedRows: PropTypes.array, // set by redux\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.array, // pass in by redux\n\tmessageInfo: PropTypes.object, // pass in by redux\n\taddRemoveRows: PropTypes.bool, // set by redux\n\ttableButtons: PropTypes.object // set in by redux\n};\n\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId),\n\tselectedRows: ownProps.controller.getSelectedRows(ownProps.propertyId),\n\taddRemoveRows: ownProps.controller.getAddRemoveRows(ownProps.propertyId),\n\ttableButtons: ownProps.controller.getTableButtons(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(StructureTableControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport AbstractTable from \"./../abstract-table.jsx\";\nimport MoveableTableRows from \"./../../components/moveable-table-rows\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport ValidationMessage from \"./../../components/validation-message\";\nimport { MESSAGE_KEYS, STATES } from \"./../../constants/constants\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { isEmpty } from \"lodash\";\n\nclass StructurelisteditorControl extends AbstractTable {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.addRow = this.addRow.bind(this);\n\t\tthis.allowColumnControls = true;\n\t}\n\n\taddRow() {\n\t\tconst newRow = this.getDefaultRow();\n\t\tconst rows = this.props.controller.getPropertyValue(this.props.propertyId).concat([newRow]);\n\t\tthis.setCurrentControlValueSelected(rows);\n\t}\n\n\trender() {\n\t\tconst tableButtonConfig = {\n\t\t\taddButtonLabel: formatMessage(this.props.controller.getReactIntl(),\n\t\t\t\tMESSAGE_KEYS.STRUCTURELISTEDITOR_ADDBUTTON_LABEL),\n\t\t\tremoveButtonLabel: formatMessage(this.props.controller.getReactIntl(),\n\t\t\t\tMESSAGE_KEYS.STRUCTURELISTEDITOR_REMOVEBUTTON_LABEL),\n\t\t\taddButtonFunction: this.addRow\n\t\t};\n\n\t\tconst customButtons = this.props.control && this.props.control.buttons;\n\t\tconst table = this.createTable(this.props.state, tableButtonConfig, customButtons);\n\n\t\tconst tableContainer = (<div>\n\t\t\t<div className=\"properties-sle properties-sle-buttons\">\n\t\t\t\t{table}\n\t\t\t</div>\n\t\t\t<ValidationMessage state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t</div>);\n\n\t\tconst onPanelContainer = this.getOnPanelContainer(this.props.selectedRows);\n\t\treturn (\n\t\t\t<div data-id={ControlUtils.getDataId(this.props.control, this.props.propertyId)}\n\t\t\t\tclassName=\"properties-sle-wrapper\"\n\t\t\t>\n\t\t\t\t<div data-id={ControlUtils.getDataId(this.props.control, this.props.propertyId)}\n\t\t\t\t\tclassName=\"properties-sle-container\"\n\t\t\t\t>\n\t\t\t\t\t<MoveableTableRows\n\t\t\t\t\t\ttableContainer={tableContainer}\n\t\t\t\t\t\tcontrol={this.props.control}\n\t\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\t\tpropertyId={this.props.propertyId}\n\t\t\t\t\t\tsetScrollToRow={this.setScrollToRow}\n\t\t\t\t\t\tsetCurrentControlValueSelected={this.setCurrentControlValueSelected}\n\t\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\t\tisEmptyTable={isEmpty(this.props.value)}\n\t\t\t\t\t\temptyTableButtonLabel={tableButtonConfig.addButtonLabel}\n\t\t\t\t\t\temptyTableButtonClickHandler={this.addRow}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t{onPanelContainer}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nStructurelisteditorControl.propTypes = {\n\tbuildUIItem: PropTypes.func,\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\trightFlyout: PropTypes.bool,\n\tselectedRows: PropTypes.array, // set by redux\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.array, // pass in by redux\n\tmessageInfo: PropTypes.object, // pass in by redux\n\taddRemoveRows: PropTypes.bool, // set by redux\n\ttableButtons: PropTypes.object // set in by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId),\n\tselectedRows: ownProps.controller.getSelectedRows(ownProps.propertyId),\n\taddRemoveRows: ownProps.controller.getAddRemoveRows(ownProps.propertyId),\n\ttableButtons: ownProps.controller.getTableButtons(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(StructurelisteditorControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// CONTROL readonlytable\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport AbstractTable from \"./../abstract-table.jsx\";\nimport MoveableTableRows from \"./../../components/moveable-table-rows\";\nimport { formatMessage } from \"./../../util/property-utils\";\nimport { STATES, MESSAGE_KEYS } from \"./../../constants/constants\";\n\nimport ValidationMessage from \"./../../components/validation-message\";\nimport * as ControlUtils from \"./../../util/control-utils\";\nimport { isEmpty } from \"lodash\";\n\nclass ReadonlyTableControl extends AbstractTable {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.reactIntl = props.controller.getReactIntl();\n\t\tthis.editCallback = this.editCallback.bind(this);\n\t\tthis.buttonHandler = this.props.controller.getHandlers().buttonHandler;\n\t}\n\n\teditCallback() {\n\t\tif (this.buttonHandler) {\n\t\t\tthis.buttonHandler({\n\t\t\t\ttype: \"edit\",\n\t\t\t\tpropertyId: this.props.propertyId\n\t\t\t});\n\t\t}\n\t}\n\n\trender() {\n\t\tconst overrideLabelKey = `${this.props.control.name}.edit.button.label`;\n\t\tconst defaultEditLabel = formatMessage(this.reactIntl, MESSAGE_KEYS.READONLYTABLE_EDIT_BUTTON_LABEL);\n\t\tconst buttonLabel = this.props.controller.getResource(overrideLabelKey, defaultEditLabel);\n\n\t\tconst tableButtonConfig = this.buttonHandler ? {\n\t\t\teditCallback: this.editCallback,\n\t\t\tlabel: buttonLabel\n\t\t} : null;\n\n\t\tconst customButtons = this.props.control && this.props.control.buttons;\n\t\tconst table = this.createTable(this.props.state, tableButtonConfig, customButtons);\n\t\tconst content = (\n\t\t\t<div>\n\t\t\t\t<div className=\"properties-rt properties-rt-buttons\">\n\t\t\t\t\t{table}\n\t\t\t\t</div>\n\t\t\t\t<ValidationMessage state={this.props.state} messageInfo={this.props.messageInfo} />\n\t\t\t</div>);\n\n\t\treturn (\n\t\t\t<div data-id={ControlUtils.getDataId(this.props.control, this.props.propertyId)}\n\t\t\t\tclassName=\"properties-readonly-table-wrapper\"\n\t\t\t>\n\t\t\t\t{this.props.controlItem}\n\t\t\t\t<div className=\"properties-readonly-table\">\n\t\t\t\t\t<MoveableTableRows\n\t\t\t\t\t\ttableContainer={content}\n\t\t\t\t\t\tcontrol={this.props.control}\n\t\t\t\t\t\tcontroller={this.props.controller}\n\t\t\t\t\t\tpropertyId={this.props.propertyId}\n\t\t\t\t\t\tsetScrollToRow={this.setScrollToRow}\n\t\t\t\t\t\tsetCurrentControlValueSelected={this.setCurrentControlValueSelected}\n\t\t\t\t\t\tdisabled={this.props.state === STATES.DISABLED}\n\t\t\t\t\t\tisEmptyTable={isEmpty(this.props.value)}\n\t\t\t\t\t\temptyTableButtonLabel={buttonLabel}\n\t\t\t\t\t\temptyTableButtonClickHandler={this.editCallback}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nReadonlyTableControl.propTypes = {\n\tbuildUIItem: PropTypes.func,\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolItem: PropTypes.element,\n\trightFlyout: PropTypes.bool,\n\tselectedRows: PropTypes.array, // set by redux\n\tstate: PropTypes.string, // pass in by redux\n\tvalue: PropTypes.array, // pass in by redux\n\tmessageInfo: PropTypes.object, // pass in by redux\n\taddRemoveRows: PropTypes.bool, // set by redux\n\ttableButtons: PropTypes.object, // set in by redux\n\thideEditButton: PropTypes.bool // set by redux\n};\n\n\nconst mapStateToProps = (state, ownProps) => ({\n\tvalue: ownProps.controller.getPropertyValue(ownProps.propertyId),\n\tstate: ownProps.controller.getControlState(ownProps.propertyId),\n\tmessageInfo: ownProps.controller.getErrorMessage(ownProps.propertyId),\n\tselectedRows: ownProps.controller.getSelectedRows(ownProps.propertyId),\n\taddRemoveRows: ownProps.controller.getAddRemoveRows(ownProps.propertyId),\n\ttableButtons: ownProps.controller.getTableButtons(ownProps.propertyId),\n\thideEditButton: ownProps.controller.getHideEditButton(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(ReadonlyTableControl);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport classNames from \"classnames\";\nimport { STATES, CARBON_ICONS, MESSAGE_KEYS } from \"./../../constants/constants.js\";\nimport { ControlType } from \"./../../constants/form-constants\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport { isEmpty, get } from \"lodash\";\nimport Icon from \"./../../../icons/icon.jsx\";\nimport ActionFactory from \"./../../actions/action-factory.js\";\nimport { formatMessage } from \"./../../util/property-utils\";\n\nclass ControlItem extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.actionFactory = new ActionFactory(this.props.controller);\n\t\tthis.showRequiredIndicator = props.controller ? get(props.controller.getPropertiesConfig(), \"showRequiredIndicator\", true) : true;\n\t}\n\n\trender() {\n\t\tif (this.props.control.controlType === ControlType.HIDDEN) {\n\t\t\treturn null;\n\t\t}\n\t\tconst hidden = this.props.state === STATES.HIDDEN;\n\t\tconst disabled = this.props.state === STATES.DISABLED;\n\n\t\tlet label;\n\t\tlet description;\n\t\tif (this.props.control.label && this.props.control.labelVisible !== false) {\n\t\t\tlet tooltip;\n\t\t\tif (this.props.control.description && !isEmpty(this.props.control.description.text)) {\n\t\t\t\tif (this.props.control.description.placement === \"on_panel\") {\n\t\t\t\t\tdescription = <div className=\"properties-control-description\">{this.props.control.description.text}</div>;\n\t\t\t\t// only show tooltip when control enabled and visible\n\t\t\t\t} else {\n\t\t\t\t\t// If tooltip has a link, add propertyId in the link object\n\t\t\t\t\tif (this.props.control.description.link) {\n\t\t\t\t\t\tthis.props.control.description.link.propertyId = this.props.propertyId;\n\t\t\t\t\t}\n\t\t\t\t\ttooltip = (<Tooltip\n\t\t\t\t\t\tid={`tooltip-label-${this.props.control.name}`}\n\t\t\t\t\t\ttip={this.props.control.description.text}\n\t\t\t\t\t\tlink={this.props.control.description.link ? this.props.control.description.link : null}\n\t\t\t\t\t\ttooltipLinkHandler={this.props.controller.getHandlers().tooltipLinkHandler}\n\t\t\t\t\t\tdirection=\"bottom\"\n\t\t\t\t\t\tdisable={hidden || disabled}\n\t\t\t\t\t\tshowToolTipOnClick\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon type={CARBON_ICONS.INFORMATION} className=\"properties-control-description-icon-info\" />\n\t\t\t\t\t</Tooltip>);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet indicator;\n\t\t\tif (this.showRequiredIndicator && this.props.control.required) {\n\t\t\t\tindicator = (\n\t\t\t\t\t<span className=\"properties-indicator\">\n\t\t\t\t\t\t{formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.LABEL_INDICATOR_REQUIRED)}\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\t} else if (!this.showRequiredIndicator && !(\"required\" in this.props.control)) {\n\t\t\t\tindicator = (\n\t\t\t\t\t<span className=\"properties-indicator\">\n\t\t\t\t\t\t{formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.LABEL_INDICATOR_OPTIONAL)}\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\t}\n\t\t\tlabel = (\n\t\t\t\t<div className={classNames(\"properties-label-container\", { \"table-control\": this.props.tableControl === true })}>\n\t\t\t\t\t<label className=\"properties-control-label\">{this.props.control.label.text}</label>\n\t\t\t\t\t{indicator}\n\t\t\t\t\t{tooltip}\n\t\t\t\t</div>);\n\t\t}\n\n\t\tconst action = this.actionFactory.generateAction(0, this.props.control.action);\n\n\t\tconst className = classNames(\"properties-control-item\", { \"hide\": hidden });\n\n\t\t/*\n\t\t* <ControlItem /> should be called from every control.\n\t\t* Adding this temporary condition so that we can change one control at a time.\n\t\t* After all controls are updated, remove if condition and delete return statement after if condition\n\t\t*/\n\t\tif (this.props.accessibleControls.includes(this.props.control.controlType)) {\n\t\t\treturn (\n\t\t\t\t<div data-id={\"properties-ci-\" + this.props.control.name}\n\t\t\t\t\tclassName={className} disabled={disabled}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t\t{description}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<div data-id={\"properties-ci-\" + this.props.control.name}\n\t\t\t\tclassName={className} disabled={disabled}\n\t\t\t>\n\t\t\t\t{label}\n\t\t\t\t{description}\n\t\t\t\t{this.props.controlObj}\n\t\t\t\t{action}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nControlItem.propTypes = {\n\tcontrol: PropTypes.object.isRequired,\n\tpropertyId: PropTypes.object.isRequired,\n\tcontroller: PropTypes.object.isRequired,\n\tcontrolObj: PropTypes.object,\n\taccessibleControls: PropTypes.array, // TODO: Remove this after all controls are accessible\n\ttableControl: PropTypes.bool,\n\tstate: PropTypes.string // passed by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\tstate: ownProps.controller.getControlState(ownProps.propertyId)\n});\n\nexport default connect(mapStateToProps, null)(ControlItem);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\n\nimport { Type, ControlType } from \"./../constants/form-constants\";\nimport { STATES, CONTAINER_TYPE } from \"./../constants/constants\";\nimport classNames from \"classnames\";\nimport { PropertyDef } from \"./../form/PropertyDef\";\nimport { makeControl } from \"./../form/EditorForm\";\nimport { L10nProvider } from \"./../util/L10nProvider\";\nimport * as ControlUtils from \"./../util/control-utils\";\n\nimport TextfieldControl from \"./textfield\";\nimport ReadonlyControl from \"./readonly\";\nimport ToggletextControl from \"./toggletext\";\nimport TextareaControl from \"./textarea\";\nimport ListControl from \"./list\";\nimport ExpressionControl from \"./expression\";\nimport PasswordControl from \"./passwordfield\";\nimport NumberfieldControl from \"./numberfield\";\nimport DatefieldControl from \"./datefield\";\nimport DatepickerControl from \"./datepicker\";\nimport DatepickerRangeControl from \"./datepicker-range\";\nimport TimefieldControl from \"./timefield\";\nimport CheckboxControl from \"./checkbox\";\nimport ToggleControl from \"./toggle\";\nimport CheckboxsetControl from \"./checkboxset\";\nimport RadiosetControl from \"./radioset\";\nimport Dropdown from \"./dropdown\";\nimport MultiSelectControl from \"./multiselect\";\nimport SomeofselectControl from \"./someofselect\";\nimport SelectColumnsControl from \"./selectcolumns\";\nimport StructureEditorControl from \"./structureeditor\";\nimport StructureTableControl from \"./structuretable\";\nimport StructurelisteditorControl from \"./structurelisteditor\";\nimport ReadonlyTableControl from \"./readonlytable\";\n\nimport ControlItem from \"./../components/control-item\";\nimport ActionFactory from \"./../actions/action-factory.js\";\nimport { has, get } from \"lodash\";\n\n/*\n* <ControlItem /> should be called from every control.\n* After all controls are updated, delete accessibleControls array.\n*/\nconst accessibleControls = [\n\tControlType.CHECKBOXSET,\n\tControlType.HIDDEN,\n\tControlType.DATEFIELD,\n\tControlType.DATEPICKER,\n\tControlType.DATEPICKERRANGE,\n\tControlType.NUMBERFIELD,\n\tControlType.SPINNER,\n\tControlType.PASSWORDFIELD,\n\tControlType.TEXTAREA,\n\tControlType.TEXTFIELD,\n\tControlType.TIMEFIELD,\n\tControlType.TOGGLETEXT,\n\tControlType.LIST,\n\tControlType.TOGGLE,\n\tControlType.SOMEOFSELECT,\n\tControlType.SELECTCOLUMNS,\n\tControlType.READONLY,\n\tControlType.READONLYTABLE,\n\tControlType.TIMESTAMP,\n\tControlType.EXPRESSION,\n\tControlType.CODE,\n\tControlType.ONEOFSELECT,\n\tControlType.MULTISELECT,\n\tControlType.SELECTSCHEMA,\n\tControlType.SELECTCOLUMN\n];\n\nconst tableControls = [\n\tControlType.LIST,\n\tControlType.READONLYTABLE,\n\tControlType.SOMEOFSELECT,\n\tControlType.SELECTCOLUMNS,\n\tControlType.STRUCTURETABLE,\n\tControlType.STRUCTURELISTEDITOR\n];\n\nexport default class ControlFactory {\n\n\tconstructor(controller) {\n\t\tthis.rightFlyout = controller ? get(controller.getPropertiesConfig(), \"rightFlyout\", false) : false;\n\t\tthis.controller = controller;\n\t\tthis.actionFactory = new ActionFactory(this.controller);\n\t}\n\n\tsetFunctions(openFieldPicker, genUIItem) {\n\t\tthis.genUIItem = genUIItem;\n\t\tthis.openFieldPicker = openFieldPicker;\n\t}\n\n\tsetRightFlyout(rightFlyout) {\n\t\tthis.rightFlyout = rightFlyout;\n\t}\n\n\t/*\n\t* @param control\n\t* @param propertyId\n\t* @param tableInfo\n\t*/\n\tcreateControlItem(control, propertyId, tableInfo) {\n\t\tconst hidden = this.controller.getControlState(propertyId) === STATES.HIDDEN;\n\t\tif (hidden) {\n\t\t\treturn null; // Do not render hidden controls\n\t\t}\n\n\t\tconst controlObj = this.createControl(control, propertyId, tableInfo);\n\t\tconst className = control.className ? control.className : \"\";\n\n\t\t/*\n\t\t* <ControlItem /> should be called from every control.\n\t\t* Adding this temporary condition so that we can change one control at a time.\n\t\t* After all controls are updated, remove if condition and delete return statement after if condition\n\t\t*/\n\t\tif (accessibleControls.includes(control.controlType)) {\n\t\t\treturn controlObj;\n\t\t}\n\t\t// When control-item displays other controls, add padding on control-item\n\t\treturn (\n\t\t\t<div key={\"properties-ctrl-\" + control.name} data-id={\"properties-ctrl-\" + control.name}\n\t\t\t\tclassName={classNames(\"properties-ctrl-wrapper\", className)}\n\t\t\t>\n\t\t\t\t<ControlItem\n\t\t\t\t\tkey={\"ctrl-item-\" + control.name}\n\t\t\t\t\tcontroller={this.controller}\n\t\t\t\t\tpropertyId={propertyId}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolObj={controlObj}\n\t\t\t\t\taccessibleControls={accessibleControls}\n\t\t\t\t\ttableControl = {tableControls.includes(control.controlType)}\n\t\t\t\t/>\n\t\t\t</div>);\n\t}\n\n\t// Creates all controls that can be standalone or in tables\n\tcreateControl(control, propertyId, tableInfo) {\n\t\tif (!control || !propertyId) {\n\t\t\treturn null;\n\t\t}\n\t\t// setup common properties used by all controls\n\t\tconst controlKey = ControlUtils.getDataId(propertyId);\n\t\tconst hidden = this.controller.getControlState(propertyId) === STATES.HIDDEN;\n\t\tconst action = this.actionFactory.generateAction(0, control.action);\n\t\tconst props = {};\n\t\tprops.key = controlKey;\n\t\tprops.control = control;\n\t\tprops.controller = this.controller;\n\t\tprops.propertyId = propertyId;\n\t\tprops.controlItem = (\n\t\t\t<ControlItem\n\t\t\t\tkey={\"ctrl-item-\" + control.name}\n\t\t\t\tcontroller={this.controller}\n\t\t\t\tpropertyId={propertyId}\n\t\t\t\tcontrol={control}\n\t\t\t\taccessibleControls={accessibleControls}\n\t\t\t\ttableControl = {tableControls.includes(control.controlType)}\n\t\t\t/>\n\t\t);\n\t\tif (tableInfo) {\n\t\t\tprops.tableControl = tableInfo.table;\n\t\t}\n\t\tlet createdControl;\n\t\tswitch (control.controlType) {\n\t\tcase (ControlType.HIDDEN):\n\t\t\treturn null;\n\t\tcase (ControlType.TEXTFIELD):\n\t\t\tcreatedControl = (<TextfieldControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.READONLY):\n\t\t\tcreatedControl = (<ReadonlyControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.TIMESTAMP):\n\t\t\tcreatedControl = (<ReadonlyControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.TEXTAREA):\n\t\t\tcreatedControl = (<TextareaControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.TOGGLE):\n\t\t\tcreatedControl = (<ToggleControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.LIST):\n\t\t\tcreatedControl = (<ListControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.EXPRESSION):\n\t\t\tcreatedControl = (<ExpressionControl\n\t\t\t\t{...props}\n\t\t\t\trightFlyout={this.rightFlyout}\n\t\t\t/>);\n\t\t\tbreak;\n\t\tcase (ControlType.CODE):\n\t\t\tcreatedControl = (<ExpressionControl\n\t\t\t\t{...props}\n\t\t\t\tbuilder={false}\n\t\t\t\tvalidateLink={false}\n\t\t\t\trightFlyout={this.rightFlyout}\n\t\t\t/>);\n\t\t\tbreak;\n\t\tcase (ControlType.TOGGLETEXT):\n\t\t\tcreatedControl = (<ToggletextControl\n\t\t\t\t{...props}\n\t\t\t/>);\n\t\t\tbreak;\n\t\tcase (ControlType.PASSWORDFIELD):\n\t\t\tcreatedControl = (<PasswordControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.NUMBERFIELD):\n\t\tcase (ControlType.SPINNER):\n\t\t\tcreatedControl = (<NumberfieldControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.DATEFIELD):\n\t\t\tcreatedControl = (<DatefieldControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.DATEPICKER):\n\t\t\tcreatedControl = (<DatepickerControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.DATEPICKERRANGE):\n\t\t\tcreatedControl = (<DatepickerRangeControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.TIMEFIELD):\n\t\t\tcreatedControl = (<TimefieldControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.CHECKBOX):\n\t\t\tcreatedControl = (<CheckboxControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.CHECKBOXSET):\n\t\t\tif (!tableInfo) {\n\t\t\t\tcreatedControl = (<CheckboxsetControl {...props} />);\n\t\t\t} else {\n\t\t\t\tcreatedControl = (<ReadonlyControl {...props} />);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase (ControlType.RADIOSET):\n\t\t\tcreatedControl = (<RadiosetControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.ONEOFSELECT):\n\t\tcase (ControlType.SELECTSCHEMA):\n\t\t\tcreatedControl = (<Dropdown\n\t\t\t\t{...props}\n\t\t\t\trightFlyout={this.rightFlyout}\n\t\t\t/>);\n\t\t\tbreak;\n\t\tcase (ControlType.MULTISELECT):\n\t\t\tcreatedControl = (<MultiSelectControl {...props} />);\n\t\t\tbreak;\n\t\tcase (ControlType.SELECTCOLUMN):\n\t\t\tif (!tableInfo || (tableInfo && tableInfo.allowColumnControls)) {\n\t\t\t\tcreatedControl = (<Dropdown\n\t\t\t\t\t{...props}\n\t\t\t\t\trightFlyout={this.rightFlyout}\n\t\t\t\t/>);\n\t\t\t} else {\n\t\t\t\tcreatedControl = (<ReadonlyControl {...props} />);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase (ControlType.SOMEOFSELECT):\n\t\t\tif (!tableInfo) {\n\t\t\t\tcreatedControl = (<SomeofselectControl {...props} />);\n\t\t\t} else {\n\t\t\t\tcreatedControl = (<ReadonlyControl {...props} />);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase (ControlType.SELECTCOLUMNS):\n\t\t\tif (!tableInfo) {\n\t\t\t\tcreatedControl = (<SelectColumnsControl\n\t\t\t\t\t{...props}\n\t\t\t\t\topenFieldPicker={this.openFieldPicker}\n\t\t\t\t\trightFlyout={this.rightFlyout}\n\t\t\t\t/>);\n\t\t\t} else {\n\t\t\t\tcreatedControl = (<ReadonlyControl {...props} />);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase (ControlType.STRUCTURETABLE):\n\t\t\tif (!tableInfo) {\n\t\t\t\tcreatedControl = (<StructureTableControl\n\t\t\t\t\t{...props}\n\t\t\t\t\tbuildUIItem={this.genUIItem}\n\t\t\t\t\topenFieldPicker={this.openFieldPicker}\n\t\t\t\t\trightFlyout={this.rightFlyout}\n\t\t\t\t/>);\n\t\t\t} else {\n\t\t\t\tcreatedControl = (<ReadonlyControl {...props} />);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase (ControlType.STRUCTURELISTEDITOR):\n\t\t\tif (!tableInfo) {\n\t\t\t\tcreatedControl = (<StructurelisteditorControl\n\t\t\t\t\t{...props}\n\t\t\t\t\tbuildUIItem={this.genUIItem}\n\t\t\t\t\trightFlyout={this.rightFlyout}\n\t\t\t\t/>);\n\t\t\t} else {\n\t\t\t\tcreatedControl = (<ReadonlyControl {...props} />);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase (ControlType.READONLYTABLE):\n\t\t\tif (!tableInfo) {\n\t\t\t\tcreatedControl = (<ReadonlyTableControl\n\t\t\t\t\t{...props}\n\t\t\t\t\tbuildUIItem={this.genUIItem}\n\t\t\t\t\trightFlyout={this.rightFlyout}\n\t\t\t\t/>);\n\t\t\t} else {\n\t\t\t\tcreatedControl = (<ReadonlyControl {...props} />);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase (ControlType.CUSTOM):\n\t\t\tcreatedControl = (\n\t\t\t\t<div className=\"properties-custom-ctrl\" key={controlKey}>\n\t\t\t\t\t{this.controller.getCustomControl(propertyId, control, tableInfo)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t\tbreak;\n\t\tcase (ControlType.STRUCTUREEDITOR):\n\t\t\tcreatedControl = (<StructureEditorControl\n\t\t\t\t{...props}\n\t\t\t\tbuildUIItem={this.genUIItem}\n\t\t\t\topenFieldPicker={this.openFieldPicker}\n\t\t\t\trightFlyout={this.rightFlyout}\n\t\t\t/>);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tcreatedControl = (<ReadonlyControl {...props} />);\n\t\t}\n\n\t\t/*\n\t\t* <ControlItem /> should be called from every control.\n\t\t* Adding this temporary condition so that we can change one control at a time.\n\t\t* After all controls are updated, remove if condition and delete return statement after if condition\n\t\t*/\n\t\t// When other controls display control-item for a11y, add padding on controls\n\t\tif (accessibleControls.includes(control.controlType)) {\n\t\t\tif (tableInfo) {\n\t\t\t\t// Don't add padding when controls are displayed in a table\n\t\t\t\treturn createdControl;\n\t\t\t}\n\t\t\tconst className = control.className ? control.className : \"\";\n\t\t\treturn (\n\t\t\t\t<div key={\"properties-ctrl-\" + control.name} data-id={\"properties-ctrl-\" + control.name}\n\t\t\t\t\tclassName={classNames(\n\t\t\t\t\t\t\"properties-ctrl-wrapper\",\n\t\t\t\t\t\t{ \"hide\": hidden, \"action\": has(control, \"action.image.placement\") },\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{createdControl}\n\t\t\t\t\t{action}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\treturn createdControl;\n\t}\n\n\t/**\n\t* Used to create a control from a passed in paramDef.\n\t* Allows users to user a standard control in a custom control/panel\n\t* @param paramDef - see parameter-def schema\n\t* @param parameter - name of the parameter to pull from paramDef\n\t* @param light - if this control is light themed\n\t* @param containerType - the type of container common properties is rendering in\n\t* @return control object (form schema) used to create standard react controls\n\t*/\n\tcreateFormControl(paramDef, parameter, light = true, containerType = CONTAINER_TYPE.CUSTOM) {\n\t\tif (!paramDef) {\n\t\t\treturn null;\n\t\t}\n\t\tconst propDef = PropertyDef.makePropertyDef(null, paramDef.parameters, paramDef.complex_types, paramDef.uihints);\n\t\tif (propDef && propDef.parameterMetadata) {\n\t\t\tconst l10nProvider = new L10nProvider(paramDef.resources);\n\t\t\tconst prop = propDef.parameterMetadata.getParameter(parameter);\n\t\t\tlet structureDef;\n\t\t\tif (prop.propType() === Type.STRUCTURE && propDef.structureMetadata) {\n\t\t\t\tstructureDef = propDef.structureMetadata.getStructure(prop.baseType());\n\t\t\t}\n\t\t\tconst additionalInfo = {\n\t\t\t\tlight: light,\n\t\t\t\tcontainerType: containerType\n\t\t\t};\n\t\t\tconst control = makeControl(propDef.parameterMetadata, parameter, null, structureDef, l10nProvider, null, null, null, additionalInfo);\n\t\t\treturn control;\n\t\t}\n\t\treturn null;\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport { toType } from \"./../../util/property-utils.js\";\n\nfunction op() {\n\treturn \"cellNotEmpty\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tconst supportedControls = [\"structuretable\", \"structureeditor\", \"structurelisteditor\"];\n\tif (supportedControls.indexOf(paramInfo.control.controlType) >= 0) {\n\t\tconst type = toType(paramInfo.value);\n\t\treturn type !== \"undefined\" && type !== \"null\" && String(paramInfo.value).length > 0;\n\t}\n\tlogger.warn(\"Ignoring unsupported condition operation 'cellNotEmpty' for control type \" + paramInfo.control.controlType);\n\treturn true;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport { fieldValueMatchesProto } from \"./../../util/property-utils\";\nimport { isEqual } from \"lodash\";\nimport { ParamRole } from \"./../../constants/form-constants\";\n\nfunction op() {\n\treturn \"colNotExists\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tconst supportedControls = [\"textfield\"];\n\tif (supportedControls.indexOf(paramInfo.control.controlType) >= 0) {\n\t\tconst dataModelFields = controller.getDatasetMetadataFields();\n\t\tif (!dataModelFields) {\n\t\t\treturn true;\n\t\t}\n\t\tlet columnExists = true;\n\t\t// check if there are any matching values in dataModel\n\t\tfor (const field of dataModelFields) {\n\t\t\tif (fieldValueMatchesProto(paramInfo.value, field)) {\n\t\t\t\tcolumnExists = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// check other columns in row and allow value to be same as `paramInfo` value. Allows consumers to rename a field without showing an error.\n\t\tif (!columnExists) {\n\t\t\tconst fieldColumnValues = _findFieldColumnValues(paramInfo, controller);\n\t\t\tfor (const columnValue of fieldColumnValues) {\n\t\t\t\tif (isEqual(paramInfo.value, columnValue)) {\n\t\t\t\t\tcolumnExists = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn columnExists;\n\t}\n\tlogger.warn(\"Ignoring unsupported condition operation 'colNotExists' for control type \" + paramInfo.control.controlType);\n\treturn true;\n}\n\n/*\n* Finds all values in the same row as paramInfo and returns any with the role=column.\n* An empty array is returned if not a table control.\n*/\nfunction _findFieldColumnValues(paramInfo, controller) {\n\tconst fieldColumnValues = [];\n\t// If a cell value, check to see if any other columns have role=column\n\tif (typeof paramInfo.control.columnIndex !== \"undefined\") {\n\t\tconst rowValue = controller.getPropertyValue({ name: paramInfo.id.name, row: paramInfo.id.row });\n\t\tif (Array.isArray(rowValue)) {\n\t\t\trowValue.forEach((value, idx) => {\n\t\t\t\tif (idx !== paramInfo.control.columnIndex) { // skip paramInfo value\n\t\t\t\t\tconst colControl = controller.getControl({ name: paramInfo.id.name, col: idx });\n\t\t\t\t\tif (colControl.role === ParamRole.COLUMN) {\n\t\t\t\t\t\tfieldColumnValues.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn fieldColumnValues;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport { fieldValueMatchesProto } from \"./../../util/property-utils.js\";\nimport { isEmpty } from \"lodash\";\n\nfunction op() {\n\treturn \"colDoesExists\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tconst dataModelFields = controller.getDatasetMetadataFields();\n\tif (!dataModelFields) {\n\t\treturn false;\n\t}\n\n\tconst controlType = paramInfo.control.controlType;\n\tswitch (controlType) {\n\tcase \"selectcolumns\":\n\tcase \"selectcolumn\": {\n\t\tif (Array.isArray(paramInfo.value) && typeof paramInfo.control.editStyle !== \"undefined\") { // Control is inside a table.\n\t\t\tif (paramInfo.value.length > 0) {\n\t\t\t\tlet allValid = true;\n\t\t\t\tparamInfo.value.forEach((paramValue) => {\n\t\t\t\t\tallValid = allValid && typeof valueInDataset(dataModelFields, paramValue) !== \"undefined\";\n\t\t\t\t});\n\t\t\t\treturn allValid;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn typeof valueInDataset(dataModelFields, paramInfo.value) !== \"undefined\";\n\t}\n\tdefault:\n\t\tlogger.warn(\"Ignoring unsupported condition operation 'colDoesExists' for control type \" + controlType);\n\t\treturn true;\n\t}\n}\n\n// Return the field if found in dataset, else undefined\nfunction valueInDataset(dataset, field) {\n\t// Don't validate empty, null or undefined value\n\treturn (\n\t\t(typeof field === \"undefined\" || field === null || isEmpty(field))\n\t\t\t? true\n\t\t\t: dataset.find(function(dataModelField) {\n\t\t\t\treturn fieldValueMatchesProto(field, dataModelField);\n\t\t\t})\n\t);\n}\n\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nmodule.exports = baseValues;\n","var baseValues = require('./_baseValues'),\n keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","var baseIndexOf = require('./_baseIndexOf'),\n isArrayLike = require('./isArrayLike'),\n isString = require('./isString'),\n toInteger = require('./toInteger'),\n values = require('./values');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nmodule.exports = includes;\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport { includes } from \"lodash\";\n\nfunction op() {\n\treturn \"contains\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tconst unsupportedControls = [\"checkbox\", \"numberfield\", \"passwordfield\", \"datepicker\", \"datepickerRange\"];\n\tif (unsupportedControls.indexOf(paramInfo.control.controlType) < 0) {\n\t\tconst dataType = typeof paramInfo.value;\n\t\tif (typeof param2Info !== \"undefined\") {\n\t\t\tswitch (dataType) {\n\t\t\tcase \"undefined\":\n\t\t\t\treturn false;\n\t\t\tcase \"string\":\n\t\t\tcase \"object\":\n\t\t\t\treturn includes(paramInfo.value, param2Info.value);\n\t\t\tdefault:\n\t\t\t\tlogger.warn(\"Ignoring condition operation 'contains' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if (typeof value !== \"undefined\") {\n\t\t\tswitch (dataType) {\n\t\t\tcase \"undefined\":\n\t\t\t\treturn false;\n\t\t\tcase \"string\":\n\t\t\tcase \"object\":\n\t\t\t\treturn includes(paramInfo.value, value);\n\t\t\tdefault:\n\t\t\t\tlogger.warn(\"Ignoring condition operation 'contains' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tthrow new Error(\"Insufficient parameter for condition operation contains\");\n\t}\n\tlogger.warn(\"Ignoring unsupported condition operation 'contains' for control type \" + paramInfo.control.controlType);\n\treturn true;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\n\nfunction op() {\n\treturn \"equals\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tif (paramInfo.control.controlType !== \"passwordfield\") {\n\t\tconst dataType = typeof paramInfo.value;\n\t\tif (param2Info) {\n\t\t\tif (paramInfo.value === null || param2Info.value === null) {\n\t\t\t\treturn paramInfo.value === param2Info.value;\n\t\t\t}\n\t\t\tswitch (dataType) {\n\t\t\tcase \"undefined\":\n\t\t\tcase \"boolean\":\n\t\t\tcase \"number\":\n\t\t\t\treturn paramInfo.value === param2Info.value;\n\t\t\tcase \"string\":\n\t\t\t\treturn paramInfo.value.trim() === param2Info.value.trim();\n\t\t\tcase \"object\":\n\t\t\t\treturn JSON.stringify(paramInfo.value) === JSON.stringify(param2Info.value);\n\t\t\tdefault:\n\t\t\t\tlogger.warn(\"Ignoring condition operation 'equals' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if (typeof value !== \"undefined\") {\n\t\t\tif (paramInfo.value === null || value === null) {\n\t\t\t\treturn paramInfo.value === value;\n\t\t\t}\n\t\t\tswitch (dataType) {\n\t\t\tcase \"undefined\":\n\t\t\tcase \"boolean\":\n\t\t\tcase \"number\":\n\t\t\t\treturn paramInfo.value === value;\n\t\t\tcase \"string\":\n\t\t\t\treturn paramInfo.value.trim() === value.toString().trim();\n\t\t\tcase \"object\":\n\t\t\t\treturn JSON.stringify(paramInfo.value) === JSON.stringify(value);\n\t\t\tdefault:\n\t\t\t\tlogger.warn(\"Ignoring condition operation 'equals' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tthrow new Error(\"Insufficient parameter for condition operation equals\");\n\t}\n\tlogger.warn(\"Ignoring unsupported condition operation 'equals' for control type \" + paramInfo.control.controlType);\n\treturn true;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ControlType } from \"../../constants/form-constants\";\nimport logger from \"./../../../../utils/logger\";\n\nfunction op() {\n\treturn \"greaterThan\";\n}\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tconst dataType = typeof paramInfo.value;\n\tswitch (dataType) {\n\tcase \"undefined\":\n\tcase \"number\":\n\t\tif (typeof param2Info !== \"undefined\") {\n\t\t\tif (typeof param2Info.value !== \"number\") {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn paramInfo.value > param2Info.value;\n\t\t} else if (typeof value !== \"undefined\") {\n\t\t\tif (value === null) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn paramInfo.value > value;\n\t\t}\n\t\tthrow new Error(\"Insufficient parameter for condition operation 'greaterThan'\");\n\tcase \"object\":\n\t\tif (paramInfo.value === null || param2Info.value === null || value === null) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\tcase \"string\": {\n\t\tif (paramInfo.control && paramInfo.control.controlType === ControlType.DATEPICKER) {\n\t\t\tconst param1Date = new Date(paramInfo.value);\n\t\t\tif (!isNaN(param1Date) && param2Info) {\n\t\t\t\tconst param2Date = new Date(param2Info.value);\n\t\t\t\tif (!isNaN(param2Date)) {\n\t\t\t\t\treturn param1Date.getTime() > param2Date.getTime();\n\t\t\t\t}\n\t\t\t\tthrow new Error(\"Insufficient parameter for condition operation 'greaterThan'\");\n\t\t\t} else if (!isNaN(param1Date) && value) {\n\t\t\t\tconst valueDate = new Date(value);\n\t\t\t\tif (!isNaN(valueDate)) {\n\t\t\t\t\treturn param1Date.getTime() > valueDate.getTime();\n\t\t\t\t}\n\t\t\t\tthrow new Error(\"Insufficient parameter for condition operation 'greaterThan'\");\n\t\t\t}\n\t\t\tthrow new Error(\"Insufficient parameter for condition operation 'greaterThan'\");\n\t\t}\n\t\treturn true;\n\t}\n\tdefault:\n\t\tlogger.warn(\"Ignoring condition operation 'greaterThan' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\treturn true;\n\t}\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ControlType } from \"../../constants/form-constants\";\nimport logger from \"./../../../../utils/logger\";\n\nfunction op() {\n\treturn \"isEmpty\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tconst propertiesConfig = controller.getPropertiesConfig();\n\tconst dataType = typeof paramInfo.value;\n\tswitch (dataType) {\n\tcase \"undefined\":\n\t\treturn true;\n\tcase \"boolean\":\n\t\treturn false;\n\tcase \"string\":\n\t\treturn propertiesConfig.trimSpaces ? paramInfo.value.trim().length === 0 : paramInfo.value.length === 0;\n\tcase \"number\":\n\t\treturn paramInfo.value === null;\n\tcase \"object\":\n\t\tif (paramInfo.control && paramInfo.control.controlType === ControlType.DATEPICKERRANGE) {\n\t\t\tconst startDate = paramInfo.value[0].trim();\n\t\t\tconst endDate = paramInfo.value[1].trim();\n\t\t\treturn startDate === \"\" && endDate === \"\"; // DATEPICKERRANGE is empty if both start and end dates are empty\n\t\t}\n\t\treturn paramInfo.value === null ? true : paramInfo.value.length === 0;\n\tdefault:\n\t\tlogger.warn(\"Ignoring condition operation 'isEmpty' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\treturn true;\n\t}\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ControlType } from \"../../constants/form-constants\";\nimport logger from \"./../../../../utils/logger\";\n\nfunction op() {\n\treturn \"isNotEmpty\";\n}\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tconst propertiesConfig = controller.getPropertiesConfig();\n\tconst dataType = typeof paramInfo.value;\n\tswitch (dataType) {\n\tcase \"undefined\":\n\t\treturn false;\n\tcase \"boolean\":\n\t\treturn true;\n\tcase \"string\":\n\t\treturn propertiesConfig.trimSpaces ? paramInfo.value.trim().length !== 0 : paramInfo.value.length !== 0;\n\tcase \"number\":\n\t\treturn paramInfo.value !== null;\n\tcase \"object\":\n\t\tif (paramInfo.control && paramInfo.control.controlType === ControlType.DATEPICKERRANGE) {\n\t\t\treturn paramInfo.value[0].trim() !== \"\" || paramInfo.value[1].trim() !== \"\";\n\t\t}\n\t\treturn paramInfo.value === null ? false : paramInfo.value.length !== 0;\n\tdefault:\n\t\tlogger.warn(\"Ignoring condition operation 'isNotEmpty' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\treturn true;\n\t}\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ControlType } from \"../../constants/form-constants\";\nimport logger from \"./../../../../utils/logger\";\n\nfunction op() {\n\treturn \"lessThan\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tconst dataType = typeof paramInfo.value;\n\tswitch (dataType) {\n\tcase \"undefined\":\n\tcase \"number\":\n\t\tif (typeof param2Info !== \"undefined\") {\n\t\t\tif (typeof param2Info.value !== \"number\") {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn paramInfo.value < param2Info.value;\n\t\t} else if (typeof value !== \"undefined\") {\n\t\t\tif (value === null) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn paramInfo.value < value;\n\t\t}\n\t\tthrow new Error(\"Insufficient parameter for condition operation 'lessThan'\");\n\tcase \"object\":\n\t\tif (paramInfo.value === null || param2Info.value === null || value === null) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\tcase \"string\": {\n\t\tif (paramInfo.control && paramInfo.control.controlType === ControlType.DATEPICKER) {\n\t\t\tconst param1Date = new Date(paramInfo.value);\n\t\t\tif (!isNaN(param1Date) && param2Info) {\n\t\t\t\tconst param2Date = new Date(param2Info.value);\n\t\t\t\tif (!isNaN(param2Date)) {\n\t\t\t\t\treturn param1Date.getTime() < param2Date.getTime();\n\t\t\t\t}\n\t\t\t\tthrow new Error(\"Insufficient parameter for condition operation 'lessThan'\");\n\t\t\t} else if (!isNaN(param1Date) && value) {\n\t\t\t\tconst valueDate = new Date(value);\n\t\t\t\tif (!isNaN(valueDate)) {\n\t\t\t\t\treturn param1Date.getTime() < valueDate.getTime();\n\t\t\t\t}\n\t\t\t\tthrow new Error(\"Insufficient parameter for condition operation 'lessThan'\");\n\t\t\t}\n\t\t\tthrow new Error(\"Insufficient parameter for condition operation 'lessThan'\");\n\t\t}\n\t\treturn true;\n\t}\n\tdefault:\n\t\tlogger.warn(\"Ignoring condition operation 'lessThan' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\treturn true;\n\t}\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\n\nfunction op() {\n\treturn \"matches\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tconst dataType = typeof paramInfo.value;\n\tvar regExp = \"\";\n\tif (typeof param2Info !== \"undefined\" && param2Info !== null) {\n\t\tregExp = param2Info.value;\n\t} else if (typeof value !== \"undefined\" && value !== null) {\n\t\tregExp = value;\n\t} else {\n\t\tlogger.warn(\"Ignoring condition operation 'matches' for parameter_ref \" + paramInfo.param + \" no regular expression specified in condition.\");\n\t\treturn true;\n\t}\n\tif (dataType === \"string\" || dataType === \"undefined\") {\n\t\t// the added regexp before and after the value strips out whitespace or positions at the start and end of the string.\n\t\tconst regex = new RegExp(regExp);\n\t\treturn regex.test(paramInfo.value);\n\t}\n\tlogger.warn(\"Ignoring condition operation 'matches' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\treturn true;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport { includes } from \"lodash\";\n\nfunction op() {\n\treturn \"notContains\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tconst unsupportedControls = [\"checkbox\", \"numberfield\", \"passwordfield\", \"datepicker\", \"datepickerRange\"];\n\tif (unsupportedControls.indexOf(paramInfo.control.controlType) < 0) {\n\t\tconst dataType = typeof paramInfo.value;\n\t\tif (typeof param2Info !== \"undefined\") {\n\t\t\tswitch (dataType) {\n\t\t\tcase \"undefined\":\n\t\t\t\treturn true;\n\t\t\tcase \"string\":\n\t\t\tcase \"object\":\n\t\t\t\treturn !includes(paramInfo.value, param2Info.value);\n\t\t\tdefault:\n\t\t\t\tlogger.warn(\"Ignoring condition operation 'notContains' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if (typeof value !== \"undefined\") {\n\t\t\tswitch (dataType) {\n\t\t\tcase \"undefined\":\n\t\t\t\treturn true;\n\t\t\tcase \"string\":\n\t\t\tcase \"object\":\n\t\t\t\treturn !includes(paramInfo.value, value);\n\t\t\tdefault:\n\t\t\t\tlogger.warn(\"Ignoring condition operation 'notContains' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tthrow new Error(\"Insufficient parameter for condition operation notContains\");\n\t}\n\tlogger.warn(\"Ignoring unsupported condition operation 'notContains' for control type \" + paramInfo.control.controlType);\n\treturn true;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\n\nfunction op() {\n\treturn \"notEquals\";\n}\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tif (paramInfo.control.controlType !== \"passwordfield\") {\n\t\tconst dataType = typeof paramInfo.value;\n\t\tif (param2Info) {\n\t\t\tif (paramInfo.value === null || param2Info.value === null) {\n\t\t\t\treturn paramInfo.value !== param2Info.value;\n\t\t\t}\n\t\t\tswitch (dataType) {\n\t\t\tcase \"undefined\":\n\t\t\tcase \"boolean\":\n\t\t\tcase \"number\":\n\t\t\t\treturn paramInfo.value !== param2Info.value;\n\t\t\tcase \"string\":\n\t\t\t\treturn paramInfo.value.trim() !== param2Info.value.trim();\n\t\t\tcase \"object\":\n\t\t\t\treturn JSON.stringify(paramInfo.value) !== JSON.stringify(param2Info.value);\n\t\t\tdefault:\n\t\t\t\tlogger.warn(\"Ignoring condition operation 'notEquals' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if (typeof value !== \"undefined\") {\n\t\t\tif (paramInfo.value === null || value === null) {\n\t\t\t\treturn paramInfo.value !== value;\n\t\t\t}\n\t\t\tswitch (dataType) {\n\t\t\tcase \"undefined\":\n\t\t\tcase \"boolean\":\n\t\t\tcase \"number\":\n\t\t\t\treturn paramInfo.value !== value;\n\t\t\tcase \"string\":\n\t\t\t\treturn paramInfo.value.trim() !== value.trim();\n\t\t\tcase \"object\":\n\t\t\t\treturn JSON.stringify(paramInfo.value) !== JSON.stringify(value);\n\t\t\tdefault:\n\t\t\t\tlogger.warn(\"Ignoring condition operation 'notEquals' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tthrow new Error(\"Insufficient parameter for condition operation notEquals\");\n\t}\n\tlogger.warn(\"Ignoring unsupported condition operation 'notEquals' for control type \" + paramInfo.control.controlType);\n\treturn true;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\n\nfunction op() {\n\treturn \"notMatches\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tconst dataType = typeof paramInfo.value;\n\tvar regExp = \"\";\n\tif (typeof param2Info !== \"undefined\" && param2Info !== null) {\n\t\tregExp = param2Info.value;\n\t} else if (typeof value !== \"undefined\" && value !== null) {\n\t\tregExp = value;\n\t} else {\n\t\tlogger.warn(\"Ignoring condition operation 'notMatches' for parameter_ref \" + paramInfo.param + \" no regular expression specified in condition.\");\n\t\treturn true;\n\t}\n\tif (dataType === \"string\" || dataType === \"undefined\") {\n\t\t// the added regexp before and after the value strips out whitespace or positions at the start and end of the string.\n\t\tconst regex = new RegExp(regExp);\n\t\treturn !regex.test(paramInfo.value);\n\t}\n\tlogger.warn(\"Ignoring condition operation 'notMatches' for parameter_ref \" + paramInfo.param + \" with input data type \" + dataType);\n\treturn true;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isValid, parse } from \"date-fns\";\nimport { DEFAULT_DATE_FORMAT } from \"../../constants/constants\";\nimport { ControlType } from \"../../constants/form-constants\";\n\nfunction op() {\n\treturn \"isDateTime\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tif (paramInfo.value) { // only check if there is a value.\n\t\tif (paramInfo.control && paramInfo.control.controlType !== ControlType.DATEPICKER && paramInfo.control.controlType !== ControlType.DATEPICKERRANGE) {\n\t\t\t// always use iso format for time\n\t\t\tconst timeDateFormat = (value === \"time\") ? \"HH:mm:ss:xxx\" : DEFAULT_DATE_FORMAT;\n\t\t\tconst date = parse(paramInfo.value, timeDateFormat, new Date());\n\t\t\treturn isValid(date);\n\t\t}\n\t\treturn true;\n\t}\n\treturn true;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport { getMetadataFieldMatch } from \"./../conditions-utils.js\";\nfunction op() {\n\treturn \"dmTypeEquals\";\n}\n\n\n/**\n * Find the metadata for the given field and return if it matches the given data type\n * @param {Object} paramInfo first entry in the globals row, and the name of the desired field is a string attribute\n * @param {Object} paramInfo2 alternate parameter for the target data type. Use value instead if possible.\n * @param {Object} value the target data type we are comparing the field to\n * @param {Object} controller properties controller\n */\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tif (paramInfo.control.role !== \"column\") {\n\t\tlogger.warn(\"Condition Operator dmTypeEquals only intended for use on columns\");\n\t}\n\tconst metadata = controller.getDatasetMetadataFields();\n\tvar target = null;\n\tif (param2Info !== null && typeof param2Info !== \"undefined\" && param2Info.value !== null) {\n\t\tif (param2Info.control.role === \"column\") {\n\t\t\ttarget = getMetadataFieldMatch(param2Info, metadata, \"type\");\n\t\t}\n\t\tif (target === null) {\n\t\t\ttarget = param2Info.value;\n\t\t}\n\t} else if (value !== null && typeof value !== \"undefined\") {\n\t\ttarget = value;\n\t} else {\n\t\treturn false;\n\t}\n\tif (!metadata) {\n\t\treturn false;\n\t}\n\tif (typeof paramInfo.value === \"string\" || typeof paramInfo.value === \"object\") {\n\t\tvar fieldType = getMetadataFieldMatch(paramInfo, metadata, \"type\");\n\t\treturn fieldType === target;\n\t} else if (typeof paramInfo.value !== \"undefined\") {\n\t\tlogger.warn(\"dmTypeEquals cannot handle the given type: \" + typeof paramInfo.value);\n\t}\n\treturn false;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport { getMetadataFieldMatch } from \"./../conditions-utils.js\";\n\nfunction op() {\n\treturn \"dmTypeNotEquals\";\n}\n\n\n/**\n * Find the metadata for the given field and return if it matches the given data type\n * @param {Object} paramInfo first entry in the globals row, and the name of the desired field is a string attribute\n * @param {Object} paramInfo2 alternate parameter for the target data type. Use value instead if possible.\n * @param {Object} value the target data type we are comparing the field to\n * @param {Object} controller properties controller\n */\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tif (paramInfo.control.role !== \"column\") {\n\t\tlogger.warn(\"Condition Operator dmTypeNotEquals only intended for use on columns\");\n\t}\n\tconst metadata = controller.getDatasetMetadataFields();\n\tvar target = null;\n\tif (param2Info !== null && typeof param2Info !== \"undefined\" && param2Info.value !== null) {\n\t\tif (param2Info.control.role === \"column\") {\n\t\t\ttarget = getMetadataFieldMatch(param2Info, metadata, \"type\");\n\t\t}\n\t\tif (target === null) {\n\t\t\ttarget = param2Info.value;\n\t\t}\n\t} else if (value !== null && typeof value !== \"undefined\") {\n\t\ttarget = value;\n\t} else {\n\t\treturn false;\n\t}\n\tif (!metadata) {\n\t\treturn false;\n\t}\n\tif (typeof paramInfo.value === \"string\" || typeof paramInfo.value === \"object\") {\n\t\tvar fieldType = getMetadataFieldMatch(paramInfo, metadata, \"type\");\n\t\treturn fieldType !== target;\n\t} else if (typeof paramInfo.value !== \"undefined\") {\n\t\tlogger.warn(\"dmTypeNotEquals cannot handle the given type: \" + typeof paramInfo.value);\n\t}\n\treturn false;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport { getMetadataFieldMatch } from \"./../conditions-utils.js\";\n\nfunction op() {\n\treturn \"dmMeasurementEquals\";\n}\n\n\n/**\n * Find the metadata for the given field and return if it matches the given data measurement\n * @param {Object} paramInfo first entry in the globals row, and the name of the desired field is a string attribute\n * @param {Object} paramInfo2 alternate parameter for the target data measurement. Use value instead if possible.\n * @param {Object} value the target measurement type we are comparing the field to\n * @param {Object} controller properties controller\n */\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tif (paramInfo.control.role !== \"column\") {\n\t\tlogger.warn(\"Condition Operator dmMeasurementEquals only intended for use on columns\");\n\t}\n\tconst metadata = controller.getDatasetMetadataFields();\n\tvar target = null;\n\tif (param2Info !== null && typeof param2Info !== \"undefined\" && param2Info.value !== null) {\n\t\tif (param2Info.control.role === \"column\") {\n\t\t\ttarget = getMetadataFieldMatch(param2Info, metadata, \"measure\");\n\t\t}\n\t\tif (target === null) {\n\t\t\ttarget = param2Info.value;\n\t\t}\n\t} else if (value !== null && typeof value !== \"undefined\") {\n\t\ttarget = value;\n\t} else {\n\t\treturn false;\n\t}\n\tif (!metadata) {\n\t\treturn false;\n\t}\n\tif (typeof paramInfo.value === \"string\" || typeof paramInfo.value === \"object\") {\n\t\tvar fieldRole = getMetadataFieldMatch(paramInfo, metadata, \"measure\");\n\t\treturn fieldRole === target;\n\t} else if (typeof paramInfo.value !== \"undefined\") {\n\t\tlogger.warn(\"dmMeasurementEquals cannot handle the given type: \" + typeof paramInfo.value);\n\t}\n\treturn false;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport { getMetadataFieldMatch } from \"./../conditions-utils.js\";\n\nfunction op() {\n\treturn \"dmMeasurementNotEquals\";\n}\n\n\n/**\n * Find the metadata for the given field and return if it matches the given data type\n * @param {Object} paramInfo first entry in the globals row, and the name of the desired field is a string attribute\n * @param {Object} paramInfo2 alternate parameter for the target data type. Use value instead if possible.\n * @param {Object} value the target data type we are comparing the field to\n * @param {Object} controller properties controller\n */\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tif (paramInfo.control.role !== \"column\") {\n\t\tlogger.warn(\"Condition Operator dmMeasurementNotEquals only intended for use on columns\");\n\t}\n\tconst metadata = controller.getDatasetMetadataFields();\n\tvar target = null;\n\tif (param2Info !== null && typeof param2Info !== \"undefined\" && param2Info.value !== null) {\n\t\tif (param2Info.control.role === \"column\") {\n\t\t\ttarget = getMetadataFieldMatch(param2Info, metadata, \"measure\");\n\t\t}\n\t\tif (target === null) {\n\t\t\ttarget = param2Info.value;\n\t\t}\n\t} else if (value !== null && typeof value !== \"undefined\") {\n\t\ttarget = value;\n\t} else {\n\t\treturn false;\n\t}\n\tif (!metadata) {\n\t\treturn false;\n\t}\n\tif (typeof paramInfo.value === \"string\" || typeof paramInfo.value === \"object\") {\n\t\tvar fieldRole = getMetadataFieldMatch(paramInfo, metadata, \"measure\");\n\t\treturn fieldRole !== target;\n\t} else if (typeof paramInfo.value !== \"undefined\") {\n\t\tlogger.warn(\"dmMeasurementNotEquals cannot handle the given type: \" + typeof paramInfo.value);\n\t}\n\treturn false;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport { getMetadataFieldMatch } from \"./../conditions-utils.js\";\n\nfunction op() {\n\treturn \"dmRoleEquals\";\n}\n\n\n/**\n * Find the metadata for the given field and return if it matches the given data role\n * @param {Object} paramInfo first entry in the globals row, and the name of the desired field is a string attribute\n * @param {Object} paramInfo2 alternate parameter for the target data role. Use value instead if possible.\n * @param {Object} value the target role type we are comparing the field to\n * @param {Object} controller properties controller\n */\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tif (paramInfo.control.role !== \"column\") {\n\t\tlogger.warn(\"Condition Operator dmRoleEquals only intended for use on columns\");\n\t}\n\tconst metadata = controller.getDatasetMetadataFields();\n\tvar target = null;\n\tif (param2Info !== null && typeof param2Info !== \"undefined\" && param2Info.value !== null) {\n\t\tif (param2Info.control.role === \"column\") {\n\t\t\ttarget = getMetadataFieldMatch(param2Info, metadata, \"modeling_role\");\n\t\t}\n\t\tif (target === null) {\n\t\t\ttarget = param2Info.value;\n\t\t}\n\t} else if (value !== null && typeof value !== \"undefined\") {\n\t\ttarget = value;\n\t} else {\n\t\treturn false;\n\t}\n\tif (!metadata) {\n\t\treturn false;\n\t}\n\tif (typeof paramInfo.value === \"string\" || typeof paramInfo.value === \"object\") {\n\t\tvar fieldRole = getMetadataFieldMatch(paramInfo, metadata, \"modeling_role\");\n\t\treturn fieldRole === target;\n\n\t} else if (typeof paramInfo.value !== \"undefined\") {\n\t\tlogger.warn(\"dmRoleEquals cannot handle the given type: \" + typeof paramInfo.value);\n\t}\n\treturn false;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\nimport { getMetadataFieldMatch } from \"./../conditions-utils.js\";\n\nfunction op() {\n\treturn \"dmRoleNotEquals\";\n}\n\n\n/**\n * Find the metadata for the given field and return if it matches the given data role\n * @param {Object} paramInfo first entry in the globals row, and the name of the desired field is a string attribute\n * @param {Object} paramInfo2 alternate parameter for the target data role. Use value instead if possible.\n * @param {Object} value the target role type we are comparing the field to\n * @param {Object} controller properties controller\n */\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tif (paramInfo.control.role !== \"column\") {\n\t\tlogger.warn(\"Condition Operator dmRoleEquals only intended for use on columns\");\n\t}\n\tconst metadata = controller.getDatasetMetadataFields();\n\tvar target = null;\n\tif (param2Info !== null && typeof param2Info !== \"undefined\" && param2Info.value !== null) {\n\t\tif (param2Info.control.role === \"column\") {\n\t\t\ttarget = getMetadataFieldMatch(param2Info, metadata, \"modeling_role\");\n\t\t}\n\t\tif (target === null) {\n\t\t\ttarget = param2Info.value;\n\t\t}\n\t} else if (value !== null && typeof value !== \"undefined\") {\n\t\ttarget = value;\n\t} else {\n\t\treturn false;\n\t}\n\tif (!metadata) {\n\t\treturn false;\n\t}\n\tif (typeof paramInfo.value === \"string\" || typeof paramInfo.value === \"object\") {\n\t\tvar fieldRole = getMetadataFieldMatch(paramInfo, metadata, \"modeling_role\");\n\t\treturn fieldRole !== target;\n\t} else if (typeof paramInfo.value !== \"undefined\") {\n\t\tlogger.warn(\"dmRoleEquals cannot handle the given type: \" + typeof paramInfo.value);\n\t}\n\treturn false;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\n\nfunction op() {\n\treturn \"lengthEquals\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tlet compareValue = value;\n\tlet valueLength;\n\tif (param2Info) {\n\t\tcompareValue = param2Info.value;\n\t}\n\tif (typeof paramInfo.value === \"string\" || Array.isArray(paramInfo.value)) {\n\t\tvalueLength = paramInfo.value.length;\n\t} else if (typeof paramInfo.value === \"undefined\" || paramInfo.value === null) {\n\t\tvalueLength = 0;\n\t}\n\tif (typeof compareValue === \"number\" && typeof valueLength === \"number\") {\n\t\treturn valueLength === compareValue;\n\t}\n\tlogger.warn(\"Ignoring condition operation 'lengthEquals' for parameter_ref \" + paramInfo.param);\n\treturn true;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\n\nfunction op() {\n\treturn \"lengthLessThan\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tlet compareValue = value;\n\tlet valueLength;\n\tif (param2Info) {\n\t\tcompareValue = param2Info.value;\n\t}\n\tif (typeof paramInfo.value === \"string\" || Array.isArray(paramInfo.value)) {\n\t\tvalueLength = paramInfo.value.length;\n\t} else if (typeof paramInfo.value === \"undefined\" || paramInfo.value === null) {\n\t\tvalueLength = 0;\n\t}\n\tif (typeof compareValue === \"number\" && typeof valueLength === \"number\") {\n\t\treturn valueLength < compareValue;\n\t}\n\tlogger.warn(\"Ignoring condition operation 'lengthLessThan' for parameter_ref \" + paramInfo.param);\n\treturn true;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport logger from \"./../../../../utils/logger\";\n\nfunction op() {\n\treturn \"lengthGreaterThan\";\n}\n\nfunction evaluate(paramInfo, param2Info, value, controller) {\n\tlet compareValue = value;\n\tlet valueLength;\n\tif (param2Info) {\n\t\tcompareValue = param2Info.value;\n\t}\n\tif (typeof paramInfo.value === \"string\" || Array.isArray(paramInfo.value)) {\n\t\tvalueLength = paramInfo.value.length;\n\t} else if (typeof paramInfo.value === \"undefined\" || paramInfo.value === null) {\n\t\tvalueLength = 0;\n\t}\n\tif (typeof compareValue === \"number\" && typeof valueLength === \"number\") {\n\t\treturn valueLength > compareValue;\n\t}\n\tlogger.warn(\"Ignoring condition operation 'lengthGreaterThan' for parameter_ref \" + paramInfo.param);\n\treturn true;\n}\n\n// Public Methods ------------------------------------------------------------->\n\nexport { op, evaluate };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport logger from \"./../../../../utils/logger\";\n\nimport * as cellNotEmpty from \"./cellNotEmpty\";\nimport * as colNotExists from \"./colNotExists\";\nimport * as colDoesExists from \"./colDoesExists\";\nimport * as contains from \"./contains\";\nimport * as equals from \"./equals\";\nimport * as greaterThan from \"./greaterThan\";\nimport * as isEmpty from \"./isEmpty\";\nimport * as isNotEmpty from \"./isNotEmpty\";\nimport * as lessThan from \"./lessThan\";\nimport * as matches from \"./matches\";\nimport * as notContains from \"./notContains\";\nimport * as notEquals from \"./notEquals\";\nimport * as notMatches from \"./notMatches\";\nimport * as isDateTime from \"./isDateTime\";\nimport * as dmTypeEquals from \"./dmTypeEquals\";\nimport * as dmTypeNotEquals from \"./dmTypeNotEquals\";\nimport * as dmMeasurementEquals from \"./dmMeasurementEquals\";\nimport * as dmMeasurementNotEquals from \"./dmMeasurementNotEquals\";\nimport * as dmRoleEquals from \"./dmRoleEquals\";\nimport * as dmRoleNotEquals from \"./dmRoleNotEquals\";\nimport * as lengthEquals from \"./lengthEquals\";\nimport * as lengthLessThan from \"./lengthLessThan\";\nimport * as lengthGreaterThan from \"./lengthGreaterThan\";\n\n\n/**\n* @param customOps - Array of custom operators to be added to standard operators\n*/\nfunction getConditionOps(customOps) {\n\tconst ops = {};\n\tops[cellNotEmpty.op()] = cellNotEmpty.evaluate;\n\tops[colNotExists.op()] = colNotExists.evaluate;\n\tops[colDoesExists.op()] = colDoesExists.evaluate;\n\tops[contains.op()] = contains.evaluate;\n\tops[equals.op()] = equals.evaluate;\n\tops[greaterThan.op()] = greaterThan.evaluate;\n\tops[isEmpty.op()] = isEmpty.evaluate;\n\tops[isNotEmpty.op()] = isNotEmpty.evaluate;\n\tops[lessThan.op()] = lessThan.evaluate;\n\tops[matches.op()] = matches.evaluate;\n\tops[notContains.op()] = notContains.evaluate;\n\tops[notEquals.op()] = notEquals.evaluate;\n\tops[notMatches.op()] = notMatches.evaluate;\n\tops[isDateTime.op()] = isDateTime.evaluate;\n\tops[dmTypeEquals.op()] = dmTypeEquals.evaluate;\n\tops[dmTypeNotEquals.op()] = dmTypeNotEquals.evaluate;\n\tops[dmMeasurementEquals.op()] = dmMeasurementEquals.evaluate;\n\tops[dmMeasurementNotEquals.op()] = dmMeasurementNotEquals.evaluate;\n\tops[dmRoleEquals.op()] = dmRoleEquals.evaluate;\n\tops[dmRoleNotEquals.op()] = dmRoleNotEquals.evaluate;\n\tops[lengthEquals.op()] = lengthEquals.evaluate;\n\tops[lengthLessThan.op()] = lengthLessThan.evaluate;\n\tops[lengthGreaterThan.op()] = lengthGreaterThan.evaluate;\n\n\n\tif (Array.isArray(customOps)) {\n\t\tfor (const custOp of customOps) {\n\t\t\tif (custOp && typeof custOp.op === \"function\" && typeof custOp.evaluate === \"function\") {\n\t\t\t\tops[custOp.op()] = custOp.evaluate;\n\t\t\t} else {\n\t\t\t\tlogger.warn(\"Custom operator missing require function of `op` or `evaluate`\");\n\t\t\t}\n\t\t}\n\t}\n\treturn ops;\n}\n\nexport { getConditionOps };\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint max-depth: [\"error\", 7]*/\n\nimport PropertiesStore from \"./properties-store.js\";\nimport logger from \"../../utils/logger\";\nimport * as UiConditionsParser from \"./ui-conditions/ui-conditions-parser.js\";\nimport setExpressionInfo from \"./controls/expression/expressionInfo-parser.js\";\n\nimport { parseUiContent } from \"./ui-conditions/ui-groups-parser.js\";\nimport * as conditionsUtil from \"./ui-conditions/conditions-utils\";\nimport * as PropertyUtils from \"./util/property-utils.js\";\n\nimport { STATES, ACTIONS, CONDITION_TYPE, PANEL_TREE_ROOT, CONDITION_MESSAGE_TYPE, UPDATE_TYPE } from \"./constants/constants.js\";\nimport CommandStack from \"../command-stack/command-stack.js\";\nimport ControlFactory from \"./controls/control-factory\";\nimport { Type, ParamRole, ControlType, ItemType } from \"./constants/form-constants\";\nimport { has, cloneDeep, assign, isEmpty, isEqual, isUndefined, get } from \"lodash\";\nimport Form from \"./form/Form\";\nimport { getConditionOps } from \"./ui-conditions/condition-ops/condition-ops\";\nimport { DEFAULT_LOCALE } from \"./constants/constants\";\nexport default class PropertiesController {\n\n\tconstructor() {\n\t\tthis.propertiesStore = new PropertiesStore();\n\t\tthis.handlers = {\n\t\t\tpropertyListener: null,\n\t\t\tcontrollerHandler: null,\n\t\t\tactionHandler: null,\n\t\t\tbuttonHandler: null,\n\t\t\tbuttonIconHandler: null,\n\t\t\ttitleChangeHandler: null,\n\t\t\ttooltipLinkHandler: null\n\t\t};\n\t\tthis.propertiesConfig = {};\n\t\tthis.visibleDefinitions = {};\n\t\tthis.enabledDefinitions = {};\n\t\tthis.validationDefinitions = {};\n\t\tthis.requiredDefinitionsIds = [];\n\t\tthis.filterDefinitions = {};\n\t\tthis.filteredEnumDefinitions = {};\n\t\tthis.allowChangeDefinitions = {};\n\t\tthis.conditionalDefaultDefinitions = {};\n\t\tthis.panelTree = {};\n\t\tthis.controls = {};\n\t\tthis.actions = {};\n\t\tthis.customControls = [];\n\t\tthis.summaryPanelControls = {};\n\t\tthis.controllerHandlerCalled = false;\n\t\tthis.commandStack = new CommandStack();\n\t\tthis.custPropSumPanelValues = {};\n\t\tthis.controlFactory = new ControlFactory(this);\n\t\tthis.sharedCtrlInfo = [];\n\t\tthis.isSummaryPanel = false;\n\t\tthis.visibleSubPanelCounter = 0;\n\t\tthis.conditionOps = getConditionOps();\n\t\tthis.expressionFunctionInfo = {};\n\t\tthis.expressionRecentlyUsed = [];\n\t\tthis.expressionFieldsRecentlyUsed = [];\n\t\tthis.selectionListeners = {};\n\t}\n\n\tgetStore() {\n\t\treturn this.propertiesStore.getStore();\n\t}\n\n\tsubscribe(callback) {\n\t\tthis.propertiesStore.subscribe(callback);\n\t}\n\n\tgetHandlers() {\n\t\treturn this.handlers;\n\t}\n\n\tsetHandlers(inHandlers) {\n\t\tthis.handlers = Object.assign(this.handlers, inHandlers);\n\t\tif (this.handlers.controllerHandler && !this.controllerHandlerCalled) {\n\t\t\tthis.handlers.controllerHandler(this); // one time call to return controller\n\t\t\t// probably isn't needed but seems like it can cause infinite loops\n\t\t\tthis.controllerHandlerCalled = true;\n\t\t}\n\t}\n\n\tsetCommandStack(commandStack) {\n\t\tthis.commandStack = commandStack;\n\t}\n\n\tgetCommandStack() {\n\t\treturn this.commandStack;\n\t}\n\n\tsetEditorSize(editorSize) {\n\t\tthis.editorSize = editorSize;\n\t}\n\n\tgetEditorSize() {\n\t\treturn this.editorSize;\n\t}\n\n\tsetLight(light) {\n\t\tthis.light = light;\n\t}\n\n\tgetLight() {\n\t\treturn this.light;\n\t}\n\n\tsetPropertiesConfig(config) {\n\t\tthis.propertiesConfig = config;\n\t}\n\n\tgetPropertiesConfig() {\n\t\treturn this.propertiesConfig;\n\t}\n\n\tgetLocale() {\n\t\treturn get(this.propertiesConfig, \"locale\", DEFAULT_LOCALE);\n\t}\n\n\tisTearsheetContainer() {\n\t\treturn this.propertiesConfig.containerType === \"Tearsheet\";\n\t}\n\n\tsetParamDef(paramDef) {\n\t\tconst containerType = get(this.getPropertiesConfig(), \"containerType\");\n\t\tconst convertTypes = get(this.getPropertiesConfig(), \"convertTypes\");\n\t\tconst formData = Form.makeForm(paramDef, containerType, convertTypes);\n\t\tthis.setForm(formData);\n\t}\n\n\t//\n\t// Form and parsing Methods\n\t//\n\tsetForm(form, intl) {\n\t\tthis.form = form;\n\t\t// console.log(JSON.stringify(form, null, 2));\n\t\tthis.reactIntl = intl;\n\t\t// set initial property values\n\t\tif (this.form) {\n\t\t\tthis.controls = {};\n\t\t\tthis.setControlStates({}); // clear state\n\t\t\tthis.setErrorMessages({}); // clear messages\n\t\t\tthis.isSummaryPanel = false; // when new form is set, summary panel is gone\n\t\t\tthis.visibleSubPanelCounter = 0;\n\t\t\tthis._parseUiConditions();\n\t\t\t// should be done before running any validations\n\t\t\tconst controls = [];\n\t\t\tUiConditionsParser.parseControls(controls, this.actions, this.form);\n\t\t\tthis.saveControls(controls); // saves controls without the subcontrols\n\t\t\tthis._parseSummaryControls(controls);\n\t\t\tthis.parsePanelTree();\n\t\t\tconditionsUtil.injectDefaultValidations(this.controls, this.validationDefinitions, this.requiredDefinitionsIds, intl);\n\t\t\tlet datasetMetadata;\n\t\t\tlet propertyValues = {};\n\t\t\tif (this.form.data) {\n\t\t\t\tdatasetMetadata = this.form.data.datasetMetadata;\n\t\t\t\tpropertyValues = this.form.data.uiCurrentParameters ? assign({}, this.form.data.currentParameters, this.form.data.uiCurrentParameters)\n\t\t\t\t\t: this.form.data.currentParameters;\n\t\t\t}\n\t\t\t// Set the opening dataset(s), during which multiples are flattened and compound names generated if necessary\n\t\t\tthis.setDatasetMetadata(datasetMetadata);\n\t\t\tthis.setPropertyValues(propertyValues, true); // needs to be after setDatasetMetadata to run conditions\n\t\t\t// for control.type of structuretable that do not use FieldPicker, we need to add to\n\t\t\t// the controlValue any missing data model fields. We need to do it here so that\n\t\t\t// validate can run against the added fields\n\t\t\tthis._addToControlValues();\n\t\t\t// we need to take another pass through to resolve any default values that are parameterRefs.\n\t\t\t// we need to do it here because the parameter that is referenced in the parameterRef may need to have a\n\t\t\t// default value set in the above loop.\n\t\t\tthis._addToControlValues(true);\n\n\t\t\t// set initial values for addRemoveRows, tableButtons in redux\n\t\t\tthis.setInitialAddRemoveRows();\n\t\t\tthis.setInitialTableButtonState();\n\n\t\t\tthis.uiItems = this.form.uiItems; // set last so properties dialog doesn't render too early\n\t\t\t// set initial tab to first tab\n\t\t\tif (!isEmpty(this.uiItems) && !isEmpty(this.uiItems[0].tabs)) {\n\t\t\t\t// active tab is the first non-tearsheet\n\t\t\t\tconst filteredTearsheets = this.uiItems[0].tabs.filter((tab) => tab.content.itemType !== ItemType.TEARSHEET);\n\t\t\t\tif (filteredTearsheets.length) {\n\t\t\t\t\tthis.propertiesStore.setActiveTab(filteredTearsheets[0].group);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// set title\n\t\t\tthis.setTitle(this.form.label);\n\t\t}\n\t}\n\n\tgetForm() {\n\t\treturn this.form;\n\t}\n\n\tgetResource(key, defaultValue) {\n\t\tif (this.form && this.form.resources) {\n\t\t\treturn this.form.resources[key] ? this.form.resources[key] : defaultValue;\n\t\t}\n\t\treturn defaultValue;\n\t}\n\n\tsetAppData(appData) {\n\t\tthis.appData = appData;\n\t}\n\n\tgetAppData() {\n\t\treturn this.appData;\n\t}\n\n\t_parseUiConditions() {\n\t\tthis.visibleDefinitions = { controls: {}, refs: {} };\n\t\tthis.enabledDefinitions = { controls: {}, refs: {} };\n\t\tthis.validationDefinitions = { controls: {}, refs: {} };\n\t\tthis.filterDefinitions = { controls: {}, refs: {} };\n\t\tthis.filteredEnumDefinitions = { controls: {}, refs: {} };\n\t\tthis.allowChangeDefinitions = { controls: {}, refs: {} };\n\t\tthis.conditionalDefaultDefinitions = { controls: {}, refs: {} };\n\n\t\tif (this.form.conditions) {\n\t\t\tfor (const condition of this.form.conditions) {\n\t\t\t\tif (condition.visible) {\n\t\t\t\t\tUiConditionsParser.parseConditions(this.visibleDefinitions, condition, CONDITION_TYPE.VISIBLE);\n\t\t\t\t} else if (condition.enabled) {\n\t\t\t\t\tUiConditionsParser.parseConditions(this.enabledDefinitions, condition, CONDITION_TYPE.ENABLED);\n\t\t\t\t} else if (condition.validation) {\n\t\t\t\t\tUiConditionsParser.parseConditions(this.validationDefinitions, condition, CONDITION_TYPE.VALIDATION);\n\t\t\t\t} else if (condition.filter) {\n\t\t\t\t\tUiConditionsParser.parseConditions(this.filterDefinitions, condition, CONDITION_TYPE.FILTER);\n\t\t\t\t} else if (condition.enum_filter) {\n\t\t\t\t\tUiConditionsParser.parseConditions(this.filteredEnumDefinitions, condition, CONDITION_TYPE.FILTEREDENUM);\n\t\t\t\t} else if (condition.allow_change) {\n\t\t\t\t\tUiConditionsParser.parseConditions(this.allowChangeDefinitions, condition, CONDITION_TYPE.ALLOWCHANGE);\n\t\t\t\t} else if (condition.default_value) {\n\t\t\t\t\tUiConditionsParser.parseConditions(this.conditionalDefaultDefinitions, condition, CONDITION_TYPE.CONDITIONALDEFAULT);\n\t\t\t\t} else { // invalid\n\t\t\t\t\tlogger.info(\"Invalid definition: \" + JSON.stringify(condition));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t* This function will get all definitions of the input definition type (visible, enabled,\n\t* filteredEnum and validation) and the definition index (controls, refs) that are\n\t* referenced by the propertyId. The definition types visible and enabled have two indices.\n\t* Controls indices are all definitions that have the propertyId as an operand in the evaluate.\n\t* Refs are all definitions that have the propertyId as something that is set as a result of the evaluate.\n\t*/\n\tgetDefinitions(propertyId, dfnType, dfnIndex) {\n\t\tlet conditionDefinitions;\n\t\tswitch (dfnType) {\n\t\tcase CONDITION_TYPE.VISIBLE:\n\t\t\tconditionDefinitions = this.visibleDefinitions[dfnIndex];\n\t\t\tbreak;\n\t\tcase CONDITION_TYPE.ENABLED:\n\t\t\tconditionDefinitions = this.enabledDefinitions[dfnIndex];\n\t\t\tbreak;\n\t\tcase CONDITION_TYPE.FILTEREDENUM:\n\t\t\tconditionDefinitions = this.filteredEnumDefinitions[dfnIndex];\n\t\t\tbreak;\n\t\tcase CONDITION_TYPE.ALLOWCHANGE:\n\t\t\tconditionDefinitions = this.allowChangeDefinitions[dfnIndex];\n\t\t\tbreak;\n\t\tcase CONDITION_TYPE.CONDITIONALDEFAULT:\n\t\t\tconditionDefinitions = this.conditionalDefaultDefinitions[dfnIndex];\n\t\t\tbreak;\n\t\tcase CONDITION_TYPE.VALIDATION:\n\t\t\tconditionDefinitions = this.validationDefinitions[dfnIndex];\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\n\t\t// only return definitions that reference the propertyId\n\t\tlet retCond = [];\n\t\tfor (const conditionKey in conditionDefinitions) {\n\t\t\tif (!has(conditionDefinitions, conditionKey)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// the definition may have a column indicator, build a propertyID\n\t\t\t// with the the name and col set from the definition ref.\n\t\t\tconst baseId = conditionsUtil.getParamRefPropertyId(conditionKey);\n\t\t\t// baseId.col and propertyId.col can be undefined\n\t\t\tif (baseId.name === propertyId.name && baseId.col === propertyId.col) {\n\t\t\t\tretCond = retCond.concat(conditionDefinitions[conditionKey]);\n\t\t\t}\n\t\t}\n\t\treturn retCond;\n\t}\n\n\tgetRequiredDefinitionIds() {\n\t\treturn this.requiredDefinitionsIds;\n\t}\n\n\t/*\n\t* Used to convert a propertyId to a propertyId that always has a row.\n\t* Used in complex types that aren't tables and don't have rows. Returns original\n\t* propertyId or a propertyId where col is converted to row. Used in messages and property values since they\n\t* are stored name -> row -> col\n\t* @param propertyId\n\t* @return propertyId\n\t*/\n\tconvertPropertyId(propertyId) {\n\t\t// used for backward compatibility when a controlName is passed in\n\t\tif (typeof propertyId === \"string\") {\n\t\t\treturn {\n\t\t\t\tname: propertyId\n\t\t\t};\n\t\t}\n\t\t// used for complex types that aren't tables\n\t\treturn this.convertNestedPropertyId(propertyId);\n\t}\n\n\tconvertNestedPropertyId(propertyId) {\n\t\tif (propertyId && typeof propertyId.col !== \"undefined\" && typeof propertyId.row === \"undefined\") {\n\n\t\t\tlet childPropertyId;\n\t\t\tif (typeof propertyId.propertyId !== \"undefined\") {\n\t\t\t\tchildPropertyId = this.convertNestedPropertyId(propertyId.propertyId);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tname: propertyId.name,\n\t\t\t\trow: propertyId.col,\n\t\t\t\tpropertyId: childPropertyId\n\t\t\t};\n\t\t} else if (propertyId &&\n\t\t\ttypeof propertyId.col !== \"undefined\" &&\n\t\t\ttypeof propertyId.row !== \"undefined\" &&\n\t\t\ttypeof propertyId.propertyId !== \"undefined\") { // handle nested complex types that aren't tables\n\t\t\treturn {\n\t\t\t\tname: propertyId.name,\n\t\t\t\trow: propertyId.row,\n\t\t\t\tcol: propertyId.col,\n\t\t\t\tpropertyId: this.convertNestedPropertyId(propertyId.propertyId)\n\t\t\t};\n\t\t}\n\t\treturn propertyId;\n\t}\n\n\t// Given the parent's \"propertyId\", find the \"propertyId\" of the last child\n\t// and update the \"row\" and \"col\" properties defined in \"childProperties\"\n\tupdateLastChildPropertyId(propertyId, childProperties) {\n\t\tif (typeof propertyId.propertyId !== \"undefined\") {\n\t\t\treturn this.updateLastChildPropertyId(propertyId.propertyId, childProperties);\n\t\t}\n\t\tif (typeof childProperties.row !== \"undefined\") {\n\t\t\tpropertyId.row = childProperties.row;\n\t\t}\n\t\tif (typeof childProperties.col !== \"undefined\") {\n\t\t\tpropertyId.col = childProperties.col;\n\t\t}\n\t\treturn propertyId;\n\t}\n\n\t// Given the parent's \"propertyId\", set the \"childPropertyId\" as the last child of \"propertyId\"\n\t// The \"childPropertyId\" is a control of a nested structure\n\tsetChildPropertyId(propertyId, childPropertyId) {\n\t\tif (typeof propertyId.propertyId !== \"undefined\") {\n\t\t\treturn this.setChildPropertyId(propertyId.propertyId, childPropertyId);\n\t\t}\n\t\tpropertyId.propertyId = childPropertyId;\n\t\treturn propertyId;\n\t}\n\n\t// This function will traverse the form and build a tree representation of panels.\n\t// Each panel entry will have an array of children controls and children panels.\n\tparsePanelTree() {\n\t\tthis.panelTree = {};\n\t\tthis.panelTree[PANEL_TREE_ROOT] = { controls: [], panels: [], actions: [] };\n\t\tparseUiContent(this.panelTree, this.form, PANEL_TREE_ROOT);\n\t}\n\n\t_addToControlValues(resolveParameterRefs) {\n\t\tfor (const keyName in this.controls) {\n\t\t\tif (!has(this.controls, keyName)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst control = this.controls[keyName];\n\t\t\tconst propertyId = { name: control.name };\n\t\t\tlet controlValue = this.getPropertyValue(propertyId);\n\n\t\t\tif (resolveParameterRefs) {\n\t\t\t\tif (typeof controlValue !== \"undefined\" && controlValue !== null && typeof controlValue.parameterRef !== \"undefined\") {\n\t\t\t\t\tcontrolValue = this.getPropertyValue({ name: controlValue.parameterRef });\n\t\t\t\t\tthis.updatePropertyValue(propertyId, controlValue, true, UPDATE_TYPE.INITIAL_LOAD);\n\t\t\t\t}\n\t\t\t} else if (control.controlType === \"structuretable\" && control.addRemoveRows === false && control.includeAllFields === true) {\n\t\t\t\tcontrolValue = this._populateFieldData(controlValue, control);\n\t\t\t\tthis.updatePropertyValue(propertyId, controlValue, true, UPDATE_TYPE.INITIAL_LOAD);\n\t\t\t} else if (typeof control.valueDef !== \"undefined\" && typeof control.valueDef.defaultValue !== \"undefined\" &&\n\t\t\t\t(typeof controlValue === \"undefined\")) {\n\t\t\t\tcontrolValue = control.valueDef.defaultValue;\n\n\t\t\t\t// convert values of type:object to the internal format array values\n\t\t\t\tif (PropertyUtils.isSubControlStructureObjectType(control)) {\n\t\t\t\t\tcontrolValue = PropertyUtils.convertObjectStructureToArray(control.valueDef.isList, control.subControls, controlValue);\n\t\t\t\t}\n\n\t\t\t\tthis.updatePropertyValue(propertyId, controlValue, true, UPDATE_TYPE.INITIAL_LOAD);\n\t\t\t} else if (control.controlType === \"structureeditor\") {\n\t\t\t\tif (!controlValue || (Array.isArray(controlValue) && controlValue.length === 0)) {\n\t\t\t\t\tif (Array.isArray(control.defaultRow)) {\n\t\t\t\t\t\tthis.updatePropertyValue(propertyId, control.defaultRow, true, UPDATE_TYPE.INITIAL_LOAD);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_populateFieldData(controlValue, control) {\n\t\tconst fields = this.getDatasetMetadataFields();\n\t\tconst multiSchema = this._isMultiSchemaControl(control);\n\t\t// Start with the values stored in current_parameters\n\t\tconst rowData = [].concat(controlValue);\n\t\t// Add in any rows containing fields not present in the current parameters\n\t\tfor (let i = 0; i < fields.length; i++) {\n\t\t\tconst row = [];\n\t\t\tconst fieldIndex = this._indexOfField(fields[i].name, controlValue);\n\t\t\tif (fieldIndex === -1) {\n\t\t\t\tfor (let k = 0; k < control.subControls.length; k++) {\n\t\t\t\t\tif (k === control.keyIndex) {\n\t\t\t\t\t\tconst fieldValue = multiSchema ? { link_ref: fields[i].schema, field_name: fields[i].origName } : fields[i].name;\n\t\t\t\t\t\trow.push(fieldValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trow.push(this._getDefaultSubControlValue(k, fields[i].name, fields, control));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trowData.push(row);\n\t\t\t}\n\t\t}\n\t\treturn rowData;\n\t}\n\n\t/**\n\t * Determines if the given control supports multiple input schemas.\n\t *\n\t * @param control A control structure\n\t * @return True if the control supports multiple input schemas\n\t */\n\t_isMultiSchemaControl(control) {\n\t\tif (control.role === ParamRole.COLUMN && control.valueDef.propType === Type.STRUCTURE) {\n\t\t\treturn true;\n\t\t}\n\t\tif (PropertyUtils.toType(control.subControls) === \"array\") {\n\t\t\tfor (const keyName in control.subControls) {\n\t\t\t\tif (has(control.subControls, keyName)) {\n\t\t\t\t\tconst subControl = control.subControls[keyName];\n\t\t\t\t\tif (subControl.role === ParamRole.COLUMN && subControl.valueDef.propType === Type.STRUCTURE) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determines if the current form can accept multiple input schemas.\n\t *\n\t * @return True if multiple input datasets are supported in this node\n\t */\n\t_canHaveMultipleSchemas() {\n\t\tfor (const keyName in this.controls) {\n\t\t\tif (has(this.controls, keyName)) {\n\t\t\t\tconst control = this.controls[keyName];\n\t\t\t\tif (this._isMultiSchemaControl(control)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t_getDefaultSubControlValue(col, fieldName, fields, control) {\n\t\tlet val;\n\t\tconst subControl = control.subControls[col];\n\t\tif (PropertyUtils.toType(subControl.dmDefault) !== \"undefined\") {\n\t\t\tval = PropertyUtils.getDMDefault(subControl, fieldName, fields);\n\t\t} else if (PropertyUtils.toType(subControl.valueDef.defaultValue) !== \"undefined\") {\n\t\t\tval = subControl.valueDef.defaultValue;\n\t\t\tif (val.parameterRef) {\n\t\t\t\tval = this.getPropertyValue({ name: val.parameterRef });\n\t\t\t}\n\t\t} else if (subControl.values) {\n\t\t\tval = subControl.values[0];\n\t\t} else if (subControl.valueDef.propType === \"string\") {\n\t\t\tval = \"\";\n\t\t} else if (subControl.valueDef.propType === \"boolean\") {\n\t\t\tval = false;\n\t\t} else if (subControl.valueDef.propType === \"enum\") {\n\t\t\tval = subControl.values[0];\n\t\t} else if (subControl.valueDef.propType === \"integer\" ||\n\t\t\t\t\t\t\t\tsubControl.valueDef.propType === \"long\" ||\n\t\t\t\t\t\t\t\tsubControl.valueDef.propType === \"double\") {\n\t\t\tval = 0;\n\t\t} else if (subControl.valueDef.propType === \"structure\") {\n\t\t\tval = {};\n\t\t} else {\n\t\t\tval = null;\n\t\t}\n\t\treturn val;\n\t}\n\n\t_indexOfField(fieldName, controlValue) {\n\t\tfor (let i = 0; i < controlValue.length; i++) {\n\t\t\tif (controlValue[i][0] === fieldName) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\tgetUiItems() {\n\t\treturn this.uiItems;\n\t}\n\n\tgetReactIntl() {\n\t\treturn this.reactIntl;\n\t}\n\n\taddSharedControls(id, controlsNames) {\n\t\tthis.sharedCtrlInfo.push({ \"id\": id, \"controlNames\": controlsNames });\n\t}\n\n\tgetSharedCtrlInfo() {\n\t\treturn this.sharedCtrlInfo;\n\t}\n\n\tisSummaryPanelShowing() {\n\t\treturn this.isSummaryPanel;\n\t}\n\n\tsetIsSummaryPanelShowing(isSummaryPanelShowing) {\n\t\tthis.isSummaryPanel = isSummaryPanelShowing;\n\t}\n\n\tincreaseVisibleSubPanelCounter() {\n\t\tthis.visibleSubPanelCounter++;\n\t}\n\n\tdecreaseVisibleSubPanelCounter() {\n\t\tthis.visibleSubPanelCounter--;\n\t}\n\n\tisSubPanelsShowing() {\n\t\treturn this.visibleSubPanelCounter > 0;\n\t}\n\n\t/**\n\t* Returns title\n\t*\t@return string\n\t*/\n\tgetTitle() {\n\t\treturn this.propertiesStore.getTitle();\n\t}\n\n\t/**\n\t* Sets title for common-properties\n\t*\t@param title string\n\t*/\n\tsetTitle(title) {\n\t\treturn this.propertiesStore.setTitle(title);\n\t}\n\n\t/**\n\t* Sets all ops supported in common-properties. Both standard and custom\n\t*\t@param custOps object\n\t*/\n\tsetConditionOps(custOps) {\n\t\tthis.conditionOps = getConditionOps(custOps);\n\t}\n\n\t/**\n\t* Returns the op to run.\n\t*\t@param op string\n\t* @return op method to run\n\t*/\n\tgetConditionOp(op) {\n\t\tif (this.conditionOps) {\n\t\t\treturn this.conditionOps[op];\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t*\t@return a map of condition ops\n\t*/\n\tgetConditionOps() {\n\t\treturn this.conditionOps;\n\t}\n\n\t/**\n\t* Returns datasetMetadata passed into common-properties.\n\t*\t@return passed in value\n\t*/\n\tgetDatasetMetadata() {\n\t\treturn this.propertiesStore.getDatasetMetadata().schemas;\n\t}\n\n\t/**\n\t* Returns a list field objects. Based on datasetMetadata passed into common-properties.\n\t*\t@return array[field]\n\t*/\n\tgetDatasetMetadataFields() {\n\t\treturn this.propertiesStore.getDatasetMetadata().fields;\n\t}\n\n\t/**\n\t* Returns a list of schema names.\n\t*\t@return array[string]\n\t*/\n\tgetDatasetMetadataSchemas() {\n\t\treturn this.propertiesStore.getDatasetMetadata().schemaNames;\n\t}\n\n\t/**\n\t* Returns a list field objects filtered. These are filterd by conditions and\n\t* by shared controls\n\t* @param propertyId Propertied id of the control requesting the fields\n\t* @return array[field]\n\t*/\n\tgetFilteredDatasetMetadata(propertyId) {\n\t\tlet fields = this.getDatasetMetadataFields();\n\t\tif (propertyId) {\n\t\t\tfields = this._filterSharedDataset(propertyId, fields);\n\t\t\tfields = conditionsUtil.filterConditions(propertyId, this.filterDefinitions.controls, this, fields);\n\t\t}\n\t\treturn fields;\n\t}\n\n\t/**\n\t * Retrieves a filtered data model in which all fields that are already\n\t * in use by other controls are already filtered out.\n\t *\n\t * @param propertyId Name of control to skip when checking field controls\n\t * @param fields array of available fields to be filtered\n\t * @return Filtered fields with fields in use removed\n\t */\n\t_filterSharedDataset(propertyId, fields) {\n\t\tif (!this.sharedCtrlInfo || !propertyId) {\n\t\t\treturn fields;\n\t\t}\n\t\tconst skipControlName = propertyId.name;\n\t\t// gets all the controls that are shared with this property\n\t\tlet sharedCtrlNames = [];\n\t\tfor (const sharedCtrlList of this.sharedCtrlInfo) {\n\t\t\tfor (const sharedCtrl of sharedCtrlList.controlNames) {\n\t\t\t\tif (skipControlName === sharedCtrl.controlName) {\n\t\t\t\t\tsharedCtrlNames = sharedCtrlList.controlNames;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// get all the fields that are used by other controls\n\t\tconst propNames = sharedCtrlNames.map(function(item) {\n\t\t\treturn item.controlName;\n\t\t});\n\t\treturn this.filterFieldsFromSharedProps(fields, propNames, skipControlName);\n\t}\n\n\t/**\n\t * Filters field names that are already in use from the given list.\n\t *\n\t * @param fieldNames - Array of field names to filter\n\t * @param propNames - Array of property names that share a single source field list\n\t * @param skipName - Name of a property to skip from the list\n\t * @return An array of filtered field names that are not in use\n\t */\n\tfilterFieldsFromSharedProps(fieldNames, propNames, skipName) {\n\t\ttry {\n\t\t\tconst usedFields = [];\n\t\t\tfor (const sharedProp of propNames) {\n\t\t\t\tif (sharedProp !== skipName) {\n\t\t\t\t\tconst control = this.getControl({ name: sharedProp });\n\t\t\t\t\t// only remove from the main list the values that are in other controls\n\t\t\t\t\tconst propValue = this.getPropertyValue({ name: sharedProp });\n\t\t\t\t\tif (Array.isArray(propValue)) {\n\t\t\t\t\t\tfor (const arrayValue of propValue) {\n\t\t\t\t\t\t\tif (Array.isArray(arrayValue)) {\n\t\t\t\t\t\t\t\t// Two dimensional arrays\n\t\t\t\t\t\t\t\tconst fieldIdx = PropertyUtils.getTableFieldIndex(control);\n\t\t\t\t\t\t\t\tif (fieldIdx >= 0 && fieldIdx < arrayValue.length) {\n\t\t\t\t\t\t\t\t\tusedFields.push(PropertyUtils.stringifyFieldValue(arrayValue[fieldIdx], control));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Single dimensional arrays\n\t\t\t\t\t\t\t\tusedFields.push(PropertyUtils.stringifyFieldValue(arrayValue, control));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Plain properties\n\t\t\t\t\t\tusedFields.push(PropertyUtils.stringifyFieldValue(propValue, control));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst usedFieldsList = Array.from(new Set(usedFields)); // make all values unique\n\t\t\tconst filteredFields = fieldNames.filter(function(field) {\n\t\t\t\treturn usedFieldsList.indexOf(field.name) === -1;\n\t\t\t});\n\t\t\treturn filteredFields;\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error filtering shared controls \" + error);\n\t\t}\n\t\treturn fieldNames;\n\t}\n\n\t/**\n\t * This method parses the inDatasetMetadata into fields and schemaNames to be\n\t * used throughout common-properties.\n\t *\n\t * @param inDatasetMetadata Array of datasetMetadata schemata\n\t */\n\tsetDatasetMetadata(inDatasetMetadata) {\n\t\tconst schemaNames = [];\n\t\tconst fields = [];\n\t\tif (inDatasetMetadata) {\n\t\t\tlet schemas = cloneDeep(inDatasetMetadata);\n\t\t\t// in the 2.0 schema only arrays are support but we want to support both for now. Internally everything should be an array\n\t\t\tif (!Array.isArray(schemas)) {\n\t\t\t\tschemas = [schemas];\n\t\t\t}\n\t\t\t// make sure all schemas have a name\n\t\t\tfor (let j = 0; j < schemas.length; j++) {\n\t\t\t\tif (!schemas[j].name) {\n\t\t\t\t\tschemas[j].name = j.toString();\n\t\t\t\t}\n\t\t\t\tschemas[j].idx = j; // used to set dup names\n\t\t\t}\n\t\t\t// make sure all schemas have a unique names\n\t\t\tfor (const schema of schemas) {\n\t\t\t\tconst dupNamedSchemas = schemas.filter(function(filterSchema) {\n\t\t\t\t\treturn filterSchema.name === schema.name;\n\t\t\t\t});\n\t\t\t\tif (dupNamedSchemas && dupNamedSchemas.length > 1) {\n\t\t\t\t\tfor (let j = 0; j < dupNamedSchemas.length; j++) {\n\t\t\t\t\t\tdupNamedSchemas[j].name = dupNamedSchemas[j].name + \"_\" + dupNamedSchemas[j].idx;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// process all fields into single array\n\t\t\tfor (const schema of schemas) {\n\t\t\t\tschemaNames.push(schema.name);\n\t\t\t\tif (schema.fields) {\n\t\t\t\t\tfor (const field of schema.fields) {\n\t\t\t\t\t\tfield.schema = schema.name;\n\t\t\t\t\t\tfield.origName = field.name; // original name\n\t\t\t\t\t\tfields.push(field);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Adjust field names for multi-schema scenarios in which setForm is not called\n\t\tif (typeof this.multipleSchemas === \"undefined\") {\n\t\t\t// Determine from the current control set whether or not there can be multiple input datasets\n\t\t\tthis.multipleSchemas = this._canHaveMultipleSchemas();\n\t\t}\n\t\tif (this.multipleSchemas) {\n\t\t\tfor (const field of fields) {\n\t\t\t\tfield.name = field.schema + \".\" + field.origName;\n\t\t\t}\n\t\t}\n\n\t\t// store values in redux\n\t\tthis.propertiesStore.setDatasetMetadata({ schemas: inDatasetMetadata, fields: fields, schemaNames: schemaNames });\n\t}\n\n\t/**\n\t* This public API will validate a single property input value.\n\t*\n\t* @param {object} propertyId. required.\n\t* @param {boolean} showErrors. optional. Set to false to run conditions without displaying errors in the UI\n\t* Defaults to true to always display errors\n\t*/\n\tvalidateInput(propertyId, showErrors = true) {\n\t\tconditionsUtil.validateInput(propertyId, this, showErrors);\n\t}\n\n\t/**\n\t* This public API will validate all properties input values.\n\t* @param {boolean} showErrors. optional. Set to false to run conditions without displaying errors in the UI\n\t* Defaults to true to always display errors\n\t*/\n\tvalidatePropertiesValues(showErrors = true) {\n\t\tconditionsUtil.validatePropertiesValues(this, showErrors);\n\t}\n\n\t//\n\t// Table row selections\n\t//\n\tgetSelectedRows(inPropertyId) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\treturn this.propertiesStore.getSelectedRows(propertyId);\n\t}\n\n\tupdateSelectedRows(inPropertyId, selection) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tthis.propertiesStore.updateSelectedRows(propertyId, selection);\n\t\tthis._notifySelectionListener(propertyId, selection);\n\t}\n\n\tclearSelectedRows(inPropertyId) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tthis.propertiesStore.clearSelectedRows(propertyId);\n\t}\n\n\t/**\n\t * Disable table row move buttons for all propertyIds in given array\n\t * @param propertyIds Array of propertyIds\n\t *\n\t */\n\tsetDisableRowMoveButtons(propertyIds) {\n\t\t// Verify that input is an array of objects\n\t\tif (Array.isArray(propertyIds)) {\n\t\t\tthis.propertiesStore.setDisableRowMoveButtons(propertyIds);\n\t\t}\n\t}\n\n\t/**\n\t* Returns array of propertyIds for which row move buttons will be disabled\n\t*\t@return Array of propertyIds\n\t*/\n\tgetDisableRowMoveButtons() {\n\t\treturn this.propertiesStore.getDisableRowMoveButtons();\n\t}\n\n\t/**\n\t * Check if row move buttons should be disabled for given propertyId\n\t * @param propertyId The unique property identifier\n\t * @return boolean\n\t */\n\tisDisableRowMoveButtons(propertyId) {\n\t\tconst propertyIds = this.getDisableRowMoveButtons();\n\t\treturn (\n\t\t\tArray.isArray(propertyIds)\n\t\t\t\t? propertyIds.some((el) => isEqual(el, propertyId))\n\t\t\t\t: false\n\t\t);\n\t}\n\n\t//\n\t// Table row selection listeners\n\t//\n\n\t/**\n\t * Adds a row selection listener for a table or list.\n\t *\n\t * @param inPropertyId Property id for a table or list control\n\t * @param listener A callback function that contains a parameter that is\n\t *\tan array of row selection indices. The callback is fired whenever\n\t *\trow selections change for the given (row-based) control.\n\t */\n\taddRowSelectionListener(inPropertyId, listener) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tconst controlName = propertyId.name;\n\t\tif (!this.selectionListeners[controlName]) {\n\t\t\tthis.selectionListeners[controlName] = {};\n\t\t}\n\t\tif (Number.isInteger(propertyId.row)) {\n\t\t\tthrow new Error(\"Listening for row selection changes on controls within table cells is not currently supported\");\n\n\t\t\t// TODO: Add this back if we ever get a request for listening to row changes on embedded tables.\n\n\t\t\t/*\n\t\t\tconst row = String(propertyId.row);\n\t\t\tif (!this.selectionListeners[propertyId.name][row]) {\n\t\t\t\tthis.selectionListeners[propertyId.name][row] = {};\n\t\t\t}\n\t\t\tif (Number.isInteger(propertyId.col)) {\n\t\t\t\tconst col = String(propertyId.col);\n\t\t\t\tif (!this.selectionListeners[propertyId.name][row][col]) {\n\t\t\t\t\tthis.selectionListeners[propertyId.name][row][col] = {};\n\t\t\t\t}\n\t\t\t\tthis.selectionListeners[controlName][row][col] = listener;\n\t\t\t} else {\n\t\t\t\tthis.selectionListeners[controlName][row] = listener;\n\t\t\t}\n\t\t\t*/\n\t\t} else {\n\t\t\tthis.selectionListeners[controlName].listener = listener;\n\t\t}\n\t}\n\n\t/**\n\t * Removes the row selection listener from a control.\n\t *\n\t * @param inPropertyId Property id for a table or list control\n\t */\n\tremoveRowSelectionListener(inPropertyId) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tconst controlName = propertyId.name;\n\t\tif (Number.isInteger(propertyId.row)) {\n\t\t\tthrow new Error(\"Listening for row selection changes on controls within table cells is not currently supported\");\n\n\t\t\t// TODO: Add this back if we ever get a request for listening to row changes on embedded tables.\n\n\t\t\t/*\n\t\t\tconst row = propertyId.row;\n\t\t\tif (Number.isInteger(propertyId.col)) {\n\t\t\t\tconst col = propertyId.col;\n\t\t\t\tif (this.selectionListeners[controlName][row][col]) {\n\t\t\t\t\tdelete this.selectionListeners[controlName][row][col];\n\t\t\t\t}\n\t\t\t} else if (this.selectionListeners[controlName][row]) {\n\t\t\t\tdelete this.selectionListeners[controlName][row];\n\t\t\t}\n\t\t\t*/\n\t\t} else if (this.selectionListeners[controlName]) {\n\t\t\tdelete this.selectionListeners[controlName];\n\t\t}\n\t}\n\n\t_notifySelectionListener(inPropertyId, selections) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tconst controlName = propertyId.name;\n\t\tif (this.selectionListeners[controlName]) {\n\n\t\t\t// TODO: Add this back if we ever get a request for listening to row changes on embedded tables.\n\n\t\t\t/*\n\t\t\tconst row = propertyId.row;\n\t\t\tif (Number.isInteger(propertyId.row)) {\n\t\t\t\tconst col = propertyId.col;\n\t\t\t\tif (Number.isInteger(propertyId.col)) {\n\t\t\t\t\tif (this.selectionListeners[controlName][row][col].listener) {\n\t\t\t\t\t\tthis.selectionListeners[controlName][row][col].listener(selections);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.selectionListeners[controlName][row].listener) {\n\t\t\t\t\tthis.selectionListeners[controlName][row].listener(selections);\n\t\t\t\t}\n\t\t\t}\n\t\t\t*/\n\t\t\tthis.selectionListeners[controlName].listener(selections);\n\t\t}\n\t}\n\n\t//\n\t// A set of APIs for Expression Builder\n\t//\n\n\tsetExpressionInfo(expressionInfo) {\n\t\tthis.expressionFunctionInfo = setExpressionInfo(expressionInfo);\n\t}\n\n\tgetExpressionInfo() {\n\t\treturn this.expressionFunctionInfo;\n\t}\n\n\t// recently used of all categories under functions tab\n\tgetExpressionRecentlyUsed() {\n\t\treturn this.expressionRecentlyUsed;\n\t}\n\n\tupdateExpressionRecentlyUsed(functionInfo) {\n\t\tconst index = this.expressionRecentlyUsed.indexOf(functionInfo);\n\t\tif (index === -1) {\n\t\t\tthis.expressionRecentlyUsed.splice(0, 0, functionInfo);\n\t\t} else {\n\t\t\t// if already in the list, move it to the front\n\t\t\tthis.expressionRecentlyUsed.splice(index, 1);\n\t\t\tthis.expressionRecentlyUsed.unshift(functionInfo);\n\t\t}\n\t}\n\n\t// recently used of all categories under fields/values tab\n\tclearExpressionRecentlyUsed() {\n\t\tthis.expressionRecentlyUsed = [];\n\t}\n\n\tgetExpressionFieldsRecentlyUsed() {\n\t\treturn this.expressionFieldsRecentlyUsed;\n\t}\n\n\tupdateExpressionFieldsRecentlyUsed(fieldInfo) {\n\t\tconst index = this.expressionFieldsRecentlyUsed.indexOf(fieldInfo);\n\t\tif (index === -1) {\n\t\t\tthis.expressionFieldsRecentlyUsed.splice(0, 0, fieldInfo);\n\t\t} else {\n\t\t\t// if already in the list, move it to the front\n\t\t\tthis.expressionFieldsRecentlyUsed.splice(index, 1);\n\t\t\tthis.expressionFieldsRecentlyUsed.unshift(fieldInfo);\n\t\t}\n\t}\n\n\tclearExpressionFieldsRecentlyUsed() {\n\t\tthis.expressionFieldsRecentlyUsed = [];\n\t}\n\n\t/**\n\t* Retrieve filtered enumeration items.\n\t*\n\t* @param propertyId The unique property identifier\n\t* @param enumSet An object containing equal sized values and valueLabels arrays\n\t* @return Either the input object or a new object containing filtered items\n\t*/\n\tgetFilteredEnumItems(propertyId, enumSet) {\n\t\tconst replacementItems = this.propertiesStore.getFilteredEnumItems(propertyId);\n\t\tif (Array.isArray(replacementItems)) {\n\t\t\tconst newControl = {};\n\t\t\tnewControl.values = [];\n\t\t\tnewControl.valueLabels = [];\n\t\t\tfor (let idx = 0; idx < replacementItems.length; idx++) {\n\t\t\t\tnewControl.values.push(replacementItems[idx]);\n\t\t\t\tlet label = replacementItems[idx];\n\t\t\t\tconst index = enumSet.values.findIndex(function(value) {\n\t\t\t\t\treturn value === replacementItems[idx];\n\t\t\t\t});\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tlabel = enumSet.valueLabels[index];\n\t\t\t\t}\n\t\t\t\tnewControl.valueLabels.push(label);\n\t\t\t}\n\t\t\treturn newControl;\n\t\t}\n\t\treturn enumSet;\n\t}\n\n\t/*\n\t* Property Values Methods\n\t*/\n\tupdatePropertyValue(inPropertyId, value, skipValidateInput, type) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tconst initialValue = this.getPropertyValue(propertyId);\n\t\tif (typeof value === \"undefined\") {\n\t\t\tthis.removePropertyValue(propertyId);\n\t\t} else {\n\t\t\tthis.propertiesStore.updatePropertyValue(propertyId, value);\n\t\t}\n\t\tif (!conditionsUtil.allowConditions(inPropertyId, this)) {\n\t\t\tthis.propertiesStore.updatePropertyValue(propertyId, initialValue);\n\t\t\treturn;\n\t\t}\n\t\tconditionsUtil.validateConditions(inPropertyId, this);\n\t\tif (!skipValidateInput) {\n\t\t\tconditionsUtil.validateInput(inPropertyId, this, true);\n\t\t}\n\n\t\tif (this.handlers.propertyListener) {\n\t\t\tconst convertedValue = this._convertObjectStructure(propertyId, value);\n\t\t\tconst data = {\n\t\t\t\taction: ACTIONS.UPDATE_PROPERTY,\n\t\t\t\tproperty: propertyId,\n\t\t\t\tvalue: convertedValue,\n\t\t\t\tpreviousValue: initialValue\n\t\t\t};\n\t\t\tif (typeof type !== \"undefined\") {\n\t\t\t\tdata.type = type;\n\t\t\t}\n\t\t\tthis.handlers.propertyListener(data);\n\t\t}\n\t}\n\n\t/*\n\t* return the property value for the given 'inPropertyId'\n\t* options - optional object of config options where\n\t* filterHiddenDisabled: true - filter out values from controls having state \"hidden\" or \"disabled\"\n\t* applyProperties: true - this function is called from PropertiesMain.applyPropertiesEditing()\n\t* filterHidden: true - filter out values from controls having state \"hidden\"\n\t* filterDisabled: true - filter out values from controls having state \"disabled\"\n\t* filterHiddenControls: true - filter out values from controls having type \"hidden\"\n\t*/\n\tgetPropertyValue(inPropertyId, options, defaultValue) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tconst propertyValue = this.propertiesStore.getPropertyValue(propertyId);\n\t\tlet filteredValue = defaultValue;\n\n\t\t// don't return hidden/disabled values\n\t\tconst filterHidden = options && (options.filterHiddenDisabled || options.filterHidden);\n\t\tconst filterDisabled = options && (options.filterHiddenDisabled || options.filterDisabled);\n\t\tconst filterHiddenControls = options && options.filterHiddenControls;\n\t\tif (filterHidden || filterDisabled || filterHiddenControls) {\n\t\t\t// top level value\n\t\t\tconst controlState = this.getControlState(propertyId);\n\t\t\tconst controlType = this.getControlType(propertyId);\n\t\t\tif (\n\t\t\t\t(controlState === STATES.DISABLED && filterDisabled) ||\n\t\t\t\t(controlState === STATES.HIDDEN && filterHidden) ||\n\t\t\t\t(controlType === ControlType.HIDDEN && filterHiddenControls)\n\t\t\t) {\n\t\t\t\treturn filteredValue;\n\t\t\t}\n\t\t\t// copy array to modify it and clear out disabled/hidden values\n\t\t\tfilteredValue = PropertyUtils.copy(propertyValue);\n\t\t\tif (Array.isArray(filteredValue)) {\n\t\t\t\tfor (let rowIdx = 0; rowIdx < filteredValue.length; rowIdx++) {\n\t\t\t\t\tconst rowValue = filteredValue[rowIdx];\n\t\t\t\t\tif (Array.isArray(rowValue)) {\n\t\t\t\t\t\tfor (let colIdx = 0; colIdx < rowValue.length; colIdx++) {\n\t\t\t\t\t\t\tconst colPropertyId = {\n\t\t\t\t\t\t\t\tname: propertyId.name,\n\t\t\t\t\t\t\t\trow: rowIdx,\n\t\t\t\t\t\t\t\tcol: colIdx\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst valueState = this.getControlState(colPropertyId);\n\t\t\t\t\t\t\tconst valueType = this.getControlType(colPropertyId);\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(valueState === STATES.DISABLED && filterDisabled) ||\n\t\t\t\t\t\t\t\t(valueState === STATES.HIDDEN && filterHidden) ||\n\t\t\t\t\t\t\t\t(valueType === ControlType.HIDDEN && filterHiddenControls)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tfilteredValue[rowIdx][colIdx] = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options && options.applyProperties === true) {\n\t\t\t\treturn this._convertObjectStructure(propertyId, filteredValue);\n\t\t\t}\n\t\t\treturn filteredValue;\n\t\t}\n\n\t\tif (options && options.applyProperties === true) {\n\t\t\treturn this._convertObjectStructure(propertyId, propertyValue);\n\t\t}\n\t\treturn propertyValue;\n\t}\n\n\tremovePropertyValue(inPropertyId) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tthis.propertiesStore.removePropertyValue(propertyId);\n\t}\n\n\t// convert currentParameters of structureType:object to object values\n\t_convertObjectStructure(propertyId, propertyValue) {\n\t\tconst control = this.getControl(propertyId);\n\t\tif (PropertyUtils.isSubControlStructureObjectType(control)) {\n\t\t\tconst convert = control.structureType && control.structureType === \"object\";\n\t\t\tconst convertedValues = PropertyUtils.convertArrayStructureToObject(control.valueDef.isList, control.subControls, propertyValue, convert);\n\t\t\treturn convertedValues;\n\t\t}\n\t\treturn propertyValue;\n\t}\n\n\t/*\n\t* return the property values for all controls\n\t* options - optional object of config options where\n\t* filterHiddenDisabled: true - filter out values from controls having state \"hidden\" or \"disabled\"\n\t* applyProperties: true - this function is called from PropertiesMain.applyPropertiesEditing()\n\t* filterHidden: true - filter out values from controls having state \"hidden\"\n\t* filterDisabled: true - filter out values from controls having state \"disabled\"\n\t* filterHiddenControls: true - filter out values from controls having type \"hidden\"\n\t*/\n\tgetPropertyValues(options) {\n\t\tconst propertyValues = this.propertiesStore.getPropertyValues();\n\t\tlet returnValues = propertyValues;\n\t\tif (options && (options.filterHiddenDisabled || options.filterHidden || options.filterDisabled || options.filterHiddenControls || options.valueFilters)) {\n\t\t\tconst filteredValues = {};\n\t\t\tfor (const propKey in propertyValues) {\n\t\t\t\tif (!has(propertyValues, propKey)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst filteredValue = this.getPropertyValue({ name: propKey }, options);\n\t\t\t\t// only set parameters with values or filter out values specified in config\n\t\t\t\tconst valueFilters = Array.isArray(options.valueFilters) ? options.valueFilters : [];\n\t\t\t\tif (typeof filteredValue !== \"undefined\" && !valueFilters.includes(filteredValue)) {\n\t\t\t\t\tfilteredValues[propKey] = filteredValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturnValues = filteredValues;\n\t\t}\n\n\t\t// convert currentParameters of structureType:object to object values\n\t\tif (options && options.applyProperties === true) {\n\t\t\tfor (const controlId in returnValues) {\n\t\t\t\tif (!has(returnValues, controlId)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst propertyId = this.convertPropertyId(controlId);\n\t\t\t\tconst propertyValue = this.propertiesStore.getPropertyValue(propertyId);\n\t\t\t\treturnValues[controlId] = this._convertObjectStructure(propertyId, propertyValue);\n\t\t\t}\n\t\t}\n\n\t\treturn returnValues;\n\t}\n\n\tsetPropertyValues(values, isInitProps) {\n\t\tlet inValues = cloneDeep(values);\n\n\t\t// convert currentParameters of type:object to array values\n\t\tif (values) {\n\t\t\tconst controls = this.getControls();\n\t\t\tObject.keys(inValues).forEach((propertyName) => {\n\t\t\t\tif (PropertyUtils.isSubControlStructureObjectType(controls[propertyName])) {\n\t\t\t\t\tconst currentValues = values[propertyName];\n\t\t\t\t\tconst control = controls[propertyName];\n\t\t\t\t\tconst convertedValues = PropertyUtils.convertObjectStructureToArray(control.valueDef.isList, control.subControls, currentValues);\n\t\t\t\t\tinValues[propertyName] = convertedValues;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (get(this.getPropertiesConfig(), \"convertValueDataTypes\")) {\n\t\t\t\tinValues = PropertyUtils.convertValueDataTypes(inValues, controls);\n\t\t\t}\n\t\t}\n\n\t\tthis.propertiesStore.setPropertyValues(inValues);\n\n\t\tif (isInitProps) {\n\t\t\t// Evaluate conditional defaults based on current_parameters upon loading of view\n\t\t\t// For a given parameter_ref, if multiple conditions evaluate to true only the first one is used.\n\t\t\tconst conditionalDefaultValues = {};\n\t\t\tif (!isEmpty(inValues)) {\n\t\t\t\tObject.keys(inValues).forEach((propertyName) => {\n\t\t\t\t\tconst propertyId = { name: propertyName };\n\t\t\t\t\t// Update conditionalDefaultValues object using pass-by-reference\n\t\t\t\t\tconditionsUtil.setConditionalDefaultValue(propertyId, this, conditionalDefaultValues);\n\t\t\t\t});\n\t\t\t\tif (!isEmpty(conditionalDefaultValues)) {\n\t\t\t\t\tObject.keys(conditionalDefaultValues).forEach((parameterRef) => {\n\t\t\t\t\t\tif (!(parameterRef in inValues)) {\n\t\t\t\t\t\t\t// convert values of type:object to the internal format array values\n\t\t\t\t\t\t\tconst control = this.getControl({ name: parameterRef });\n\t\t\t\t\t\t\tif (PropertyUtils.isSubControlStructureObjectType(control)) {\n\t\t\t\t\t\t\t\tconditionalDefaultValues[parameterRef] =\n\t\t\t\t\t\t\t\tPropertyUtils.convertObjectStructureToArray(control.valueDef.isList, control.subControls, conditionalDefaultValues[parameterRef]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.propertiesStore.updatePropertyValue({ name: parameterRef }, conditionalDefaultValues[parameterRef]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Validate other conditions after evaluating conditional defaults (default_value conditions)\n\t\tconditionsUtil.validatePropertiesConditions(this);\n\t\tif (this.handlers.propertyListener) {\n\t\t\tthis.handlers.propertyListener(\n\t\t\t\t{\n\t\t\t\t\taction: ACTIONS.SET_PROPERTIES\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Control States Methods\n\t * Sets the control state. Supported states are:\n\t * \"disabled\", \"enabled\", \"hidden\", \"visible\".\n\t */\n\tsetControlStates(states) {\n\t\tthis.propertiesStore.setControlStates(states);\n\t}\n\n\t/**\n\t* Updates the enabled/visible state of a control.\n\t*\n\t* @param inPropertyId Id of the property for the control to operate upon\n\t* @param state string (\"disabled\", \"enabled\", \"hidden\", \"visible\")\n\t*/\n\tupdateControlState(inPropertyId, state) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tthis.propertiesStore.updateControlState(propertyId, state);\n\t}\n\tgetControlState(propertyId) {\n\t\tconst state = this.propertiesStore.getControlState(propertyId);\n\t\treturn state ? state.value : \"\";\n\t}\n\tgetControlStates() {\n\t\treturn this.propertiesStore.getControlStates();\n\t}\n\n\t/**\n\t * Retrieves the enumeration value states for the given propertyId.\n\t *\n\t * @param propertyId The of an enumeration property\n\t * @return An object containing state settings for those enumeration values\n\t * that have previously been set\n\t */\n\tgetControlValueStates(propertyId) {\n\t\tconst state = this.propertiesStore.getControlState(propertyId);\n\t\treturn state ? state.values : {};\n\t}\n\n\t/**\n\t * Retrieves the enumeration value states for the given propertyId.\n\t *\n\t * @param propertyId The of an enumeration property\n\t * @return An object containing state enumFilter\n\t */\n\tgetControlEnumFilterStates(propertyId) {\n\t\tconst state = this.propertiesStore.getControlState(propertyId);\n\t\treturn state ? state.enumFilter : {};\n\t}\n\n\t/**\n\t\t * Panel States Methods\n\t\t * Sets the panel state. Supported states are:\n\t\t * \"disabled\", \"enabled\", \"hidden\", \"visible\".\n\t\t */\n\tsetPanelStates(states) {\n\t\tthis.propertiesStore.setPanelStates(states);\n\t}\n\n\t/**\n\t\t* @param panelId {name: panel.id}\n\t * @param state string (\"disabled\", \"enabled\", \"hidden\", \"visible\")\n\t\t*/\n\tupdatePanelState(panelId, state) {\n\t\tthis.propertiesStore.updatePanelState(panelId, state);\n\t}\n\tgetPanelState(panelId) {\n\t\treturn this.propertiesStore.getPanelState(panelId);\n\t}\n\tgetPanelStates() {\n\t\treturn this.propertiesStore.getPanelStates();\n\t}\n\tclearActiveTearsheet() {\n\t\tthis.propertiesStore.setActiveTearsheetId(null);\n\t}\n\tsetActiveTearsheet(tearsheetId) {\n\t\tthis.propertiesStore.setActiveTearsheetId(tearsheetId);\n\t}\n\tgetActiveTearsheet() {\n\t\treturn this.propertiesStore.getActiveTearsheetId() || null;\n\t}\n\n\n\t/**\n\t * Action States Methods\n\t * Sets the panel state. Supported states are:\n\t * \"disabled\", \"enabled\", \"hidden\", \"visible\".\n\t */\n\tsetActionStates(states) {\n\t\tthis.propertiesStore.setActionStates(states);\n\t}\n\n\t/**\n\t* @param actionId {name: action.id}\n * @param state string (\"disabled\", \"enabled\", \"hidden\", \"visible\")\n\t*/\n\tupdateActionState(actionId, state) {\n\t\tthis.propertiesStore.updateActionState(actionId, state);\n\t}\n\n\t/**\n\t* @param actionId {name: action.id}\n\t*/\n\tgetActionState(actionId) {\n\t\treturn this.propertiesStore.getActionState(actionId);\n\t}\n\n\tgetActionStates() {\n\t\treturn this.propertiesStore.getActionStates();\n\t}\n\n\t/**\n\t* @param actionId {name: action.id}\n\t*/\n\tgetAction(actionId) {\n\t\treturn this.actions[actionId.name];\n\t}\n\n\t/**\n\t* Error Messages Methods\n\t* @param messages object with keys being property name\n\t*/\n\tsetErrorMessages(messages) {\n\t\tthis.propertiesStore.setErrorMessages(messages);\n\t}\n\n\t/**\n\t* Returns a single error message for a propertyId.\n\t*\n\t* @param inPropertyId Target propertyId\n\t* @param filterHiddenDisable True to leave out hidden and disabled properties\n\t* @param filterSuccess If true, leave out success messages\n\t* @param filterDisplayError If true, leave out messages that are not displayed in the UI\n\t* @return error message object\n\t*/\n\tgetErrorMessage(inPropertyId, filterHiddenDisable = false, filterSuccess = false, filterDisplayError = true) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\t// don't return hidden message\n\t\tif (filterHiddenDisable) {\n\t\t\tconst controlState = this.getControlState(propertyId);\n\t\t\tconst controlType = this.getControlType(propertyId);\n\t\t\tif (controlState === STATES.DISABLED || controlState === STATES.HIDDEN || controlType === ControlType.HIDDEN) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tconst message = this.propertiesStore.getErrorMessage(propertyId, this.reactIntl);\n\t\tif (filterSuccess) {\n\t\t\tif (message && message.type === CONDITION_MESSAGE_TYPE.SUCCESS) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tif (filterDisplayError) {\n\t\t\tif (message && !isUndefined(message.displayError) && !message.displayError) { // This is only set if false\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t}\n\n\t/**\n\t*\tUsed to return all error messages. Will either return internally stored messages\n\t* or formatted list to store in pipeline-flow\n\t* @param filteredPipeline boolean\n\t* @param filterHiddenDisable True to leave out hidden and disabled properties\n\t* @param filterSuccess If true, leave out success messages\n\t* @param filterDisplayError If true, leave out messages that are not displayed in the UI\n\t* @return object when filteredPipeline=false or array when filteredPipeline=true\n\t*/\n\tgetErrorMessages(filteredPipeline, filterHiddenDisable, filterSuccess, filterDisplayError = true) {\n\t\tlet messages = this.propertiesStore.getErrorMessages();\n\n\t\tif (filterDisplayError) {\n\t\t\tmessages = this._filterDisplayErrors(messages);\n\t\t}\n\t\tif (filteredPipeline || filterHiddenDisable) {\n\t\t\tmessages = this._filterMessages(messages, filteredPipeline, filterHiddenDisable, filterSuccess);\n\t\t}\n\t\treturn messages;\n\t}\n\n\tgetAllErrorMessages() {\n\t\treturn this.getErrorMessages(false, false, false, false);\n\t}\n\n\tgetRequiredErrorMessages() {\n\t\tconst messages = this.propertiesStore.getErrorMessages();\n\t\tconst requiredMessages = this._filterNonRequiredErrors(messages);\n\t\tconst filtered = this._filterHiddenDisabledErrors(requiredMessages); // Exclude errors for controls that are hidden or disabled\n\t\treturn filtered;\n\t}\n\n\t_filterMessages(messages, filteredPipeline, filterHiddenDisable, filterSuccess) {\n\t\tconst filteredMessages = {};\n\t\tconst pipelineMessages = [];\n\t\tfor (const paramKey in messages) {\n\t\t\tif (!has(messages, paramKey)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// This returns top-level message for tables\n\t\t\tconst paramMessage = this.getErrorMessage({ name: paramKey }, filterHiddenDisable, filterSuccess);\n\t\t\tif (paramMessage && paramMessage.text) {\n\t\t\t\tif (filteredPipeline) {\n\t\t\t\t\tpipelineMessages.push({\n\t\t\t\t\t\tid_ref: paramKey,\n\t\t\t\t\t\tvalidation_id: paramMessage.validation_id,\n\t\t\t\t\t\ttype: paramMessage.type,\n\t\t\t\t\t\ttext: paramMessage.text\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tfilteredMessages[paramKey] = paramMessage;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (filteredPipeline) {\n\t\t\treturn pipelineMessages;\n\t\t}\n\t\treturn filteredMessages;\n\t}\n\n\t// Remove error messages that will not be displayed in the UI\n\t_filterDisplayErrors(messages) {\n\t\tconst filterCondition = (testMessage) => (isUndefined(testMessage.displayError) || testMessage.displayError);\n\t\tconst filteredMessages = this._filterErrors(messages, filterCondition);\n\t\treturn filteredMessages;\n\t}\n\n\t// Remove error messages that are not from a required parameters\n\t_filterNonRequiredErrors(messages) {\n\t\tconst filterCondition = (testMessage) => testMessage.required === true;\n\t\tconst filteredMessages = this._filterErrors(messages, filterCondition);\n\t\treturn filteredMessages;\n\t}\n\n\t// Remove error messages that are disabled or hidden\n\t_filterHiddenDisabledErrors(messages) {\n\t\tconst filterCondition = (testMessage, propertyId) => {\n\t\t\tconst controlState = this.getControlState(propertyId);\n\t\t\tconst controlType = this.getControlType(propertyId);\n\t\t\treturn controlState !== STATES.HIDDEN && controlState !== STATES.DISABLED && controlType !== ControlType.HIDDEN;\n\t\t};\n\t\tconst filteredMessages = this._filterErrors(messages, filterCondition);\n\t\treturn filteredMessages;\n\t}\n\n\n\t// Remove error messages that do not satisfy the given condition\n\t_filterErrors(messages, condition) {\n\t\tconst filteredMessages = {};\n\t\tconst parameterNames = Object.keys(messages);\n\t\tparameterNames.forEach((paramKey) => {\n\t\t\tconst parameterError = messages[paramKey];\n\t\t\tif (parameterError.text && condition(parameterError, parameterError.propertyId)) { // not table\n\t\t\t\tfilteredMessages[paramKey] = parameterError;\n\t\t\t} else { // table cell\n\t\t\t\tfor (const rowKey in parameterError) {\n\t\t\t\t\tif (!has(parameterError, rowKey)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst rowMessage = parameterError[rowKey];\n\t\t\t\t\tif (rowMessage && rowMessage.text && condition(rowMessage, rowMessage.propertyId)) {\n\t\t\t\t\t\tif (typeof filteredMessages[paramKey] === \"undefined\") {\n\t\t\t\t\t\t\tfilteredMessages[paramKey] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfilteredMessages[paramKey][rowKey] = rowMessage;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const colKey in rowMessage) {\n\t\t\t\t\t\t\tif (!has(rowMessage, colKey)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst colMessage = rowMessage[colKey];\n\t\t\t\t\t\t\tif (colMessage && colMessage.text && condition(colMessage, colMessage.propertyId)) {\n\t\t\t\t\t\t\t\tif (typeof filteredMessages[paramKey] === \"undefined\") {\n\t\t\t\t\t\t\t\t\tfilteredMessages[paramKey] = {};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (typeof filteredMessages[paramKey][rowKey] === \"undefined\") {\n\t\t\t\t\t\t\t\t\tfilteredMessages[paramKey][rowKey] = {};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfilteredMessages[paramKey][rowKey][colKey] = colMessage;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn filteredMessages;\n\t}\n\n\tupdateErrorMessage(inPropertyId, message) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tif (message && message.type !== \"info\") {\n\t\t\tthis.propertiesStore.updateErrorMessage(propertyId, message);\n\t\t} else {\n\t\t\tthis.propertiesStore.clearErrorMessage(propertyId);\n\t\t}\n\t}\n\n\tremoveErrorMessageRow(inPropertyId) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tlet messages = this.propertiesStore.getErrorMessages();\n\t\tconst controlMsg = messages[propertyId.name];\n\t\tif (typeof controlMsg !== \"undefined\") {\n\t\t\tfor (const rowIndex of Object.keys(controlMsg)) {\n\t\t\t\tconst rowNumber = parseInt(rowIndex, 10);\n\t\t\t\tif (rowNumber === propertyId.row) {\n\t\t\t\t\tdelete messages[propertyId.name][rowNumber];\n\t\t\t\t} else if (rowNumber > propertyId.row) {\n\t\t\t\t\tmessages = this._moveMessageRows(messages, propertyId.name, rowNumber, rowNumber - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.setErrorMessages(messages);\n\t\t}\n\t}\n\n\tmoveErrorMessageRows(controlName, firstRow, secondRow) {\n\t\tlet messages = this.propertiesStore.getErrorMessages();\n\t\tconst controlMsg = messages[controlName];\n\t\tif (typeof controlMsg !== \"undefined\") {\n\t\t\tconst firstRowErrorMsg = controlMsg[firstRow];\n\t\t\tconst secondRowErrorMsg = controlMsg[secondRow];\n\t\t\tif (typeof firstRowErrorMsg !== \"undefined\" && typeof secondRowErrorMsg !== \"undefined\") {\n\t\t\t\tmessages = this._moveMessageRows(messages, controlName, firstRow, secondRow);\n\t\t\t\t// create second message because it is deleted in the changeErrorMessageRow, set it to first row number\n\t\t\t\tmessages[controlName][firstRow] = {};\n\t\t\t\tfor (const colNumber of Object.keys(secondRowErrorMsg)) {\n\t\t\t\t\tmessages[controlName][firstRow][colNumber] = secondRowErrorMsg[colNumber];\n\t\t\t\t}\n\t\t\t} else if (typeof firstRowErrorMsg !== \"undefined\") {\n\t\t\t\tmessages = this._moveMessageRows(messages, controlName, firstRow, secondRow);\n\t\t\t} else if (typeof secondRowErrorMsg !== \"undefined\") {\n\t\t\t\tmessages = this._moveMessageRows(messages, controlName, secondRow, firstRow);\n\t\t\t}\n\t\t\tthis.setErrorMessages(messages);\n\t\t}\n\t}\n\n\t_moveMessageRows(messages, controlName, fromRow, toRow) {\n\t\tmessages[controlName][toRow] = messages[controlName][fromRow];\n\t\tdelete messages[controlName][fromRow];\n\t\treturn messages;\n\t}\n\n\t/*\n\t* Controls Methods\n\t*/\n\n\t// Saves controls in a state that get be used to retrieve them using a propertyId\n\tsaveControls(controls) {\n\t\tcontrols.forEach((control) => {\n\t\t\tif (typeof control.columnIndex === \"undefined\") {\n\t\t\t\t// only add to map if control hasn't already been added or override if set to custom.\n\t\t\t\t// This is needed if a parameter is referenced from multiple groups and one is a custom panel\n\t\t\t\tif (!has(this.controls, control.name) || (has(this.controls, control.name) && control.controlType !== ControlType.CUSTOM)) {\n\t\t\t\t\tthis.controls[control.name] = control;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.controls[control.parameterName][control.columnIndex] = control;\n\t\t\t}\n\t\t});\n\t}\n\n\tgetControl(propertyId) {\n\t\tconst control = this.controls[propertyId.name];\n\t\t// if no subcontrol return parent control\n\t\tif (typeof propertyId.col !== \"undefined\" && control) {\n\t\t\tconst subControl = this.controls[propertyId.name][propertyId.col.toString()];\n\t\t\tif (subControl) {\n\t\t\t\treturn subControl;\n\t\t\t}\n\t\t}\n\t\treturn control;\n\t}\n\n\tgetControlPropType(propertyId) {\n\t\tconst control = this.getControl(propertyId);\n\t\tif (typeof control.valueDef !== \"undefined\") {\n\t\t\treturn control.valueDef.propType;\n\t\t}\n\t\treturn null;\n\t}\n\n\tupdateControlEnumValues(propertyId, valuesObj) {\n\t\tconst control = this.getControl(propertyId);\n\t\tif (!Array.isArray(valuesObj) || !control) {\n\t\t\tlogger.warn(\"properties-controller\", new Error(\"updateControlEnumValues - control not found or valuesObj not valid\"));\n\t\t\treturn;\n\t\t}\n\t\tcontrol.values = valuesObj.map((valueObj) => valueObj.value);\n\t\tcontrol.valueLabels = valuesObj.map((valueObj) => {\n\t\t\tif (!valueObj.label) {\n\t\t\t\treturn valueObj.value;\n\t\t\t}\n\t\t\treturn valueObj.label;\n\t\t});\n\t}\n\n\tgetControls() {\n\t\treturn this.controls;\n\t}\n\n\tsetSaveButtonDisable(saveDisable) {\n\t\tthis.propertiesStore.setSaveButtonDisable(saveDisable);\n\t}\n\n\tgetSaveButtonDisable() {\n\t\treturn this.propertiesStore.getSaveButtonDisable();\n\t}\n\n\t/**\n\t* Enable/disable OK button for given summary panel\n\t* @param panelId {name: panel.id}\n\t* @param wideFlyoutPrimaryButtonDisable boolean\n\t*/\n\tsetWideFlyoutPrimaryButtonDisabled(panelId, wideFlyoutPrimaryButtonDisable) {\n\t\tthis.propertiesStore.setWideFlyoutPrimaryButtonDisabled(panelId, wideFlyoutPrimaryButtonDisable);\n\t}\n\n\t/**\n\t* @param panelId {name: panel.id}\n\t*/\n\tgetWideFlyoutPrimaryButtonDisabled(panelId) {\n\t\treturn this.propertiesStore.getWideFlyoutPrimaryButtonDisabled(panelId);\n\t}\n\n\tisRequired(propertyId) {\n\t\tconst control = this.getControl(propertyId);\n\t\tif (control) {\n\t\t\tconst required = control.required;\n\t\t\treturn (required) ? required : false;\n\t\t}\n\t\treturn false;\n\t}\n\n\tisSummary(propertyId) {\n\t\tconst control = this.getControl(propertyId);\n\t\tif (control) {\n\t\t\tconst summary = control.summary;\n\t\t\treturn (summary) ? summary : false;\n\t\t}\n\t\treturn false;\n\t}\n\n\tgetControlType(propertyId) {\n\t\tif (typeof propertyId === \"undefined\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst control = this.getControl(propertyId);\n\t\tif (control) {\n\t\t\treturn control.controlType;\n\t\t}\n\t\treturn null;\n\t}\n\n\t// check if given column is visible in the table\n\tgetColumnVisibility(propertyId, columnIndex) {\n\t\treturn this.controls[propertyId.name][columnIndex].visible;\n\t}\n\n\ttoggleColumnVisibility(propertyId, columnIndex, value) {\n\t\tthis.controls[propertyId.name][columnIndex].visible = value;\n\t}\n\n\t/*\n\t* Summary Panel controls Methods\n\t*/\n\t_parseSummaryControls(controls) {\n\t\tconst summaryControls = {};\n\t\tcontrols.forEach((control) => {\n\t\t\tif (control.summaryPanelId) {\n\t\t\t\tif (typeof summaryControls[control.summaryPanelId] === \"undefined\") {\n\t\t\t\t\tsummaryControls[control.summaryPanelId] = [];\n\t\t\t\t}\n\t\t\t\tif (typeof control.columnIndex === \"undefined\") {\n\t\t\t\t\tsummaryControls[control.summaryPanelId].push(control.name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tthis.setSummaryPanelControls(summaryControls);\n\t}\n\tsetSummaryPanelControls(summaryPanelControls) {\n\t\tthis.summaryPanelControls = summaryPanelControls;\n\t}\n\tgetSummaryPanelControls(panelId) {\n\t\treturn this.summaryPanelControls[panelId];\n\t}\n\t// Sets the value to be displayed in the summaryPanel for a customPanel property\n\tupdateCustPropSumPanelValue(propertyId, content) {\n\t\tif (typeof propertyId.name !== \"undefined\") {\n\t\t\tthis.custPropSumPanelValues[propertyId.name] = content;\n\t\t}\n\t}\n\tgetCustPropSumPanelValue(propertyId) {\n\t\t// don't display hidden or disabled parameters\n\t\tconst controlState = this.getControlState(propertyId);\n\t\tif (controlState === STATES.DISABLED || controlState === STATES.HIDDEN) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.custPropSumPanelValues[propertyId.name];\n\t}\n\t// Only used in custom panel to allow for custom property summary values to be displayed\n\tsetControlInSummary(propertyId, label, inSummary) {\n\t\tconst control = this.getControl(propertyId);\n\t\tif (control) {\n\t\t\tcontrol.summary = true;\n\t\t\tcontrol.summaryLabel = label;\n\t\t}\n\t}\n\n\t/**\n\t* Used to create standard controls in customPanels\n\t* @param propertyId - Property id of the controls\n\t* @param paramDef - schema definition. See paramDef schema\n\t* @param parameter (string) - name of the parameter to pull out of paramDef\n\t*/\n\tcreateControl(propertyId, paramDef, parameter) {\n\t\tconst containerType = get(this.getPropertiesConfig(), \"containerType\");\n\t\tconst control = this.controlFactory.createFormControl(paramDef, parameter, this.getLight(), containerType);\n\t\tconst controls = [];\n\t\t// need to preserve parentCategoryId which is set during initial parsing of all controls\n\t\tconst parentCategoryId = this.getControl(propertyId).parentCategoryId;\n\t\tUiConditionsParser.parseControl(controls, control, parentCategoryId);\n\t\tthis.saveControls(controls);\n\t\treturn this.controlFactory.createControlItem(control, propertyId);\n\t}\n\n\t/**\n\t* Used to create controls\n\t* @return the controlFactory instance\n\t*/\n\tgetControlFactory() {\n\t\treturn this.controlFactory;\n\t}\n\n\t/**\n\t* Sets the custom controls available to common-properties\n\t* @param customControls\n\t*/\n\tsetCustomControls(customControls) {\n\t\tthis.customControls = customControls;\n\t}\n\n\t/**\n\t* Returns a rendered custom control\n\t* @param propertyId\n\t* @param control\n\t* @param tableInfo\n\t*/\n\tgetCustomControl(propertyId, control, tableInfo) {\n\t\tif (control.customControlId) {\n\t\t\tfor (const customCtrl of this.customControls) {\n\t\t\t\tif (customCtrl.id() === control.customControlId) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn new customCtrl(propertyId, this, control.data, tableInfo).renderControl();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlogger.warn(\"Error thrown creating custom control: \" + error);\n\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn \"Custom control not found: \" + control.customControlId;\n\t}\n\n\t/*\n\t* maxLength for single-line and multi-line control methods\n\t*/\n\n\t/**\n\t* Returns the maximum characters allowed for multi-line string controls like textarea\n\t* Default value is 1024\n\t*/\n\tgetMaxLengthForMultiLineControls() {\n\t\tconst maxLengthForMultiLineControls = (typeof this.getPropertiesConfig().maxLengthForMultiLineControls !== \"undefined\")\n\t\t\t? this.getPropertiesConfig().maxLengthForMultiLineControls\n\t\t\t: 1024;\n\t\treturn maxLengthForMultiLineControls;\n\t}\n\n\t/**\n\t* Returns the maximum characters allowed for single-line string controls like textfield\n\t* Default value is 128\n\t*/\n\tgetMaxLengthForSingleLineControls() {\n\t\tconst maxLengthForSingleLineControls = (typeof this.getPropertiesConfig().maxLengthForSingleLineControls !== \"undefined\")\n\t\t\t? this.getPropertiesConfig().maxLengthForSingleLineControls\n\t\t\t: 128;\n\t\treturn maxLengthForSingleLineControls;\n\t}\n\n\t/**\n\t* Set the initial values of addRemoveRows for all structure controls\n\t*/\n\tsetInitialAddRemoveRows() {\n\t\tconst parameterNames = Object.keys(this.controls);\n\t\tparameterNames.forEach((parameterName) => {\n\t\t\tconst control = this.controls[parameterName];\n\t\t\tif (control.valueDef && control.valueDef.propType === Type.STRUCTURE && !isUndefined(control.addRemoveRows)) {\n\t\t\t\tconst propertyId = { name: control.name };\n\t\t\t\tthis.setAddRemoveRows(propertyId, control.addRemoveRows);\n\t\t\t}\n\t\t});\n\n\t}\n\n\t/**\n\t* Set the addRemoveRows attribute to 'enabled' for the given propertyId\n\t* @param propertyId The unique property identifier\n\t* @param enabled boolean value to enable or disable addRemoveRows\n\t*/\n\tsetAddRemoveRows(propertyId, enabled) {\n\t\tthis.propertiesStore.setAddRemoveRows(propertyId, enabled);\n\t}\n\n\t/**\n\t* Returns the true if addRemoveRows is enabled for the given propertyID\n\t* @param propertyId The unique property identifier\n\t* @return boolean\n\t*/\n\tgetAddRemoveRows(propertyId) {\n\t\treturn this.propertiesStore.getAddRemoveRows(propertyId);\n\t}\n\n\t/**\n\t* Set the hideEditButton attribute to 'enabled' for the given propertyId\n\t* @param propertyId The unique property identifier\n\t* @param enabled boolean value to enable or disable hideditButton\n\t*/\n\tsetHideEditButton(propertyId, enabled) {\n\t\tthis.propertiesStore.setHideEditButton(propertyId, enabled);\n\t}\n\n\t/**\n\t* Returns the true if hideEditButton is enabled for the given propertyID\n\t* @param propertyId The unique property identifier\n\t* @return boolean\n\t*/\n\tgetHideEditButton(propertyId) {\n\t\treturn this.propertiesStore.getHideEditButton(propertyId);\n\t}\n\n\t/**\n\t * Freeze row move buttons for row indexes in given array\n\t * @param propertyId The unique property identifier\n\t * @param rowIndexes Array of row indexes\n\t */\n\n\tgetStaticRows(inPropertyId) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\treturn this.propertiesStore.getStaticRows(propertyId);\n\t}\n\n\tupdateStaticRows(inPropertyId, staticRowsArr) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tconst controlValue = this.getPropertyValue(inPropertyId);\n\t\tconst staticRows = staticRowsArr.sort();\n\t\tconst isValidSlection = this.validateSelectionValues(staticRows, controlValue);\n\t\tif (isValidSlection) {\n\t\t\tthis.propertiesStore.updateStaticRows(propertyId, staticRows);\n\t\t}\n\t}\n\n\tclearStaticRows(inPropertyId) {\n\t\tconst propertyId = this.convertPropertyId(inPropertyId);\n\t\tthis.propertiesStore.clearStaticRows(propertyId);\n\t}\n\n\t/**\n\t* Set the initial values of table buttons for all table controls\n\t*/\n\tsetInitialTableButtonState() {\n\t\tconst parameterNames = Object.keys(this.controls);\n\t\tparameterNames.forEach((parameterName) => {\n\t\t\tconst control = this.controls[parameterName];\n\t\t\tconst propertyId = { name: control.name };\n\t\t\tif (!isUndefined(control.buttons)) {\n\t\t\t\tcontrol.buttons.forEach((button) => {\n\t\t\t\t\tthis.setTableButtonEnabled(propertyId, button.id, button.enabled || false);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (control.subControls) {\n\t\t\t\tthis.setInitialTableButtonSubControlState(propertyId, control.subControls);\n\t\t\t}\n\t\t});\n\t}\n\n\t// This only handles 1 level of nesting, will need to make this recusrive if there is a need for deeper nesting\n\tsetInitialTableButtonSubControlState(parentPropertyId, subControls) {\n\t\tsubControls.forEach((control) => {\n\t\t\tconst propertyValues = this.getPropertyValue(parentPropertyId);\n\n\t\t\tif (!isUndefined(control.buttons)) {\n\t\t\t\tpropertyValues.forEach((value, valueIdx) => {\n\t\t\t\t\tconst propertyId = { name: parentPropertyId.name, row: valueIdx, col: control.columnIndex };\n\t\t\t\t\tcontrol.buttons.forEach((button) => {\n\t\t\t\t\t\tthis.setTableButtonEnabled(propertyId, button.id, button.enabled || false);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t* Set the table button to 'enabled' for the given propertyId\n\t* @param propertyId The unique property identifier\n\t* @param buttonId The unique button identifier\n\t* @param enabled boolean value to enable or disable the button\n\t*/\n\tsetTableButtonEnabled(propertyId, buttonId, enabled) {\n\t\tthis.propertiesStore.setTableButtonEnabled(propertyId, buttonId, enabled);\n\t}\n\n\t/**\n\t* Returns the table button states for the given propertyID\n\t* @param propertyId The unique property identifier\n\t* @return boolean\n\t*/\n\tgetTableButtons(propertyId) {\n\t\treturn this.propertiesStore.getTableButtons(propertyId);\n\t}\n\n\t/**\n\t* Returns the true if the table button is enabled for the given propertyID\n\t* @param propertyId The unique property identifier\n\t* @param buttonId The unique button identifier\n\t* @return boolean\n\t*/\n\tgetTableButtonEnabled(propertyId, buttonId) {\n\t\treturn this.propertiesStore.getTableButtonEnabled(propertyId, buttonId);\n\t}\n\n\t/**\n\t * Validate if the array for freeze rows is correct. Should only have continuous value of row indexes\n\t * Must not contain first and last row index together in the array ever. you can only freeze either first n row or the last n row\n\t * @param staticRows Array of rows you want to freeze\n\t * @param controlValue the property values for the property Id\n\t * @returns\n\t */\n\tvalidateSelectionValues(staticRows, controlValue) {\n\t\tlet isValid = false;\n\t\tif (staticRows && controlValue.length > 0) {\n\t\t\tconst consecutiveAry = staticRows.slice(1).map(function(n, i) {\n\t\t\t\treturn n - staticRows[i];\n\t\t\t});\n\t\t\tconst isDifference = consecutiveAry.every((value) => value === 1);\n\t\t\tif (isDifference && ((staticRows.includes(0) && !staticRows.includes(controlValue.length - 1)) ||\n\t\t\t(!staticRows.includes(0) && staticRows.includes(controlValue.length - 1)))) {\n\t\t\t\tisValid = true;\n\t\t\t} else {\n\t\t\t\tisValid = false;\n\t\t\t}\n\t\t} else {\n\t\t\tisValid = false;\n\t\t}\n\t\treturn isValid;\n\t}\n}\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport parameterDefsV3Schema from \"@elyra/pipeline-schemas/common-canvas/parameter-defs/parameter-defs-v3-schema.json\";\n\nimport uihintsV3Schema from \"@elyra/pipeline-schemas/common-pipeline/operators/uihints-v3-schema.json\";\nimport conditionsV3Schema from \"@elyra/pipeline-schemas/common-pipeline/operators/conditions-v3-schema.json\";\nimport operatorsV3Schema from \"@elyra/pipeline-schemas/common-pipeline/operators/operator-v3-schema.json\";\nimport dataRecordMetadataV3Schema from \"@elyra/pipeline-schemas/common-pipeline/datarecord-metadata/datarecord-metadata-v3-schema.json\";\n\nimport { Validator as SchemaValidator } from \"jsonschema\";\n\nfunction validateParameterDefAgainstSchema(parameterDef) {\n\tconst validator = getValidator();\n\tvalidateAgainstSchema(parameterDef, parameterDefsV3Schema, \"pipelineFlow\", validator);\n}\n\n// Validates the data provided, against the schema provided, using the validator\n// provided and throws an error if any schema validation errors are found.\nfunction validateAgainstSchema(data, schema, type, validator) {\n\tconst valResult = validator.validate(data, schema, { \"nestedErrors\": true });\n\n\tif (valResult && valResult.errors && valResult.errors.length > 0) {\n\t\tconsole.error(valResult);\n\t}\n}\n\nfunction getValidator() {\n\tconst validator = new SchemaValidator();\n\tconst canvasPrefix = \"https://api.dataplatform.ibm.com/schemas/common-canvas/\";\n\tconst pipelinePrefix = \"https://api.dataplatform.ibm.com/schemas/common-pipeline/\";\n\tvalidator.addSchema(parameterDefsV3Schema, canvasPrefix + \"parameter-defs/pipeline-flow-v3-schema.json\");\n\tvalidator.addSchema(uihintsV3Schema, pipelinePrefix + \"operators/uihints-v3-schema.json\");\n\tvalidator.addSchema(conditionsV3Schema, pipelinePrefix + \"operators/conditions-v3-schema.json\");\n\tvalidator.addSchema(operatorsV3Schema, pipelinePrefix + \"operators/operator-v3-schema.json\");\n\tvalidator.addSchema(dataRecordMetadataV3Schema, pipelinePrefix + \"datarecord-metadata/datarecord-metadata-v3-schema.json\");\n\treturn validator;\n}\n\nexport {\n\tvalidateParameterDefAgainstSchema\n};\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport { setTitle } from \"./../../actions\";\nimport Isvg from \"react-inlinesvg\";\nimport { get } from \"lodash\";\nimport { TextInput, Button } from \"carbon-components-react\";\nimport { MESSAGE_KEYS, CONDITION_MESSAGE_TYPE } from \"./../../constants/constants\";\nimport * as PropertyUtils from \"./../../util/property-utils\";\nimport classNames from \"classnames\";\nimport { Help16, Edit16, Close16 } from \"@carbon/icons-react\";\n\n\nclass TitleEditor extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tfocused: false,\n\t\t\ttitleValidation: null\n\t\t};\n\t\tthis.editTitleClickHandler = this.editTitleClickHandler.bind(this);\n\t\tthis.helpClickHandler = this.helpClickHandler.bind(this);\n\t\tthis.id = PropertyUtils.generateId();\n\t\tthis.textInputRef = React.createRef();\n\t\tthis.labelText = PropertyUtils.formatMessage(props.controller.getReactIntl(),\n\t\t\tMESSAGE_KEYS.TITLE_EDITOR_LABEL);\n\t\tthis.textInputOnFocus = this.textInputOnFocus.bind(this);\n\t\tthis.textInputOnBlur = this.textInputOnBlur.bind(this);\n\t\tthis.headingEnabled = this.props.showHeading && (this.props.heading || this.props.icon);\n\t\tthis.handleTitleChange = this.handleTitleChange.bind(this);\n\t\tthis.titleChangeHandler = this.props.controller.getHandlers().titleChangeHandler;\n\t}\n\n\t_handleKeyPress(e) {\n\t\tif (e.key === \"Enter\") {\n\t\t\tthis.textInputRef.current.blur();\n\t\t}\n\t}\n\n\teditTitleClickHandler() {\n\t\tthis.textInputRef.current.focus();\n\t}\n\n\thelpClickHandler() {\n\t\tif (this.props.helpClickHandler) {\n\t\t\tthis.props.helpClickHandler(\n\t\t\t\tthis.props.controller.getForm().componentId,\n\t\t\t\tthis.props.help.data,\n\t\t\t\tthis.props.controller.getAppData());\n\t\t}\n\t}\n\ttextInputOnFocus() {\n\t\tthis.setState({ focused: true });\n\t}\n\n\ttextInputOnBlur() {\n\t\tthis.setState({ focused: false });\n\t}\n\n\thandleTitleChange(evt) {\n\t\t// Clear warning/error message on change.\n\t\tif (this.state.titleValidation !== null) {\n\t\t\tthis.setState({ titleValidation: null });\n\t\t}\n\t\tconst newTitle = evt.target.value;\n\t\tif (typeof this.titleChangeHandler === \"function\") {\n\t\t\tthis.titleChangeHandler(newTitle, (titleValidation) => {\n\t\t\t\tif (titleValidation && (typeof titleValidation === \"object\") && titleValidation.type && titleValidation.message) {\n\t\t\t\t\tthis.setState({ titleValidation: titleValidation });\n\t\t\t\t} else {\n\t\t\t\t\t// titleChangeHandler response is invalid. Don't show error/warning for title.\n\t\t\t\t\tthis.setState({ titleValidation: null });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.props.setTitle(newTitle);\n\t}\n\n\trender() {\n\t\tif (this.props.title === null) {\n\t\t\treturn null;\n\t\t}\n\t\tconst propertiesTitleEditButtonLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.TITLE_EDITOR_LABEL);\n\t\tconst helpButtonLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.TITLE_EDITOR_HELPBUTTON_LABEL);\n\t\tconst closeButtonLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.PROPERTIESEDIT_CLOSEBUTTON_LABEL);\n\t\tconst titleValidationTypes = [CONDITION_MESSAGE_TYPE.ERROR, CONDITION_MESSAGE_TYPE.WARNING];\n\t\tconst titleWithWarning = get(this.state.titleValidation, \"type\", null) === CONDITION_MESSAGE_TYPE.WARNING;\n\t\tconst titleWithErrror = get(this.state.titleValidation, \"type\", null) === CONDITION_MESSAGE_TYPE.ERROR;\n\n\t\tconst propertiesTitleEdit = this.props.labelEditable === false || this.state.focused ? <div />\n\t\t\t: (<Button\n\t\t\t\tkind=\"ghost\"\n\t\t\t\tclassName=\"properties-title-editor-btn edit\"\n\t\t\t\tdata-id=\"edit\"\n\t\t\t\tonClick={this.editTitleClickHandler}\n\t\t\t\ttooltipPosition=\"bottom\"\n\t\t\t\ttooltipAlignment=\"end\"\n\t\t\t\trenderIcon={Edit16}\n\t\t\t\tsize=\"small\"\n\t\t\t\ticonDescription={propertiesTitleEditButtonLabel}\n\t\t\t\thasIconOnly\n\t\t\t/>);\n\n\t\tconst helpButton = this.props.help\n\t\t\t? (<Button\n\t\t\t\tkind=\"ghost\"\n\t\t\t\tclassName=\"properties-title-editor-btn help\"\n\t\t\t\tdata-id=\"help\"\n\t\t\t\tonClick={this.helpClickHandler}\n\t\t\t\ttooltipPosition=\"bottom\"\n\t\t\t\trenderIcon={Help16}\n\t\t\t\tsize=\"small\"\n\t\t\t\ticonDescription={helpButtonLabel}\n\t\t\t\thasIconOnly\n\t\t\t/>)\n\t\t\t: null;\n\n\t\tconst closeButton = this.props.closeHandler\n\t\t\t? (<div className=\"properties-close-button\">\n\t\t\t\t<Button\n\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tdata-id=\"close\"\n\t\t\t\t\tonClick={this.props.closeHandler}\n\t\t\t\t\ttooltipPosition=\"left\"\n\t\t\t\t\trenderIcon={Close16}\n\t\t\t\t\ticonDescription={closeButtonLabel}\n\t\t\t\t\thasIconOnly\n\t\t\t\t/>\n\t\t\t</div>)\n\t\t\t: null;\n\n\t\tlet heading = null;\n\t\tif (this.headingEnabled) {\n\t\t\tconst label = this.props.heading\n\t\t\t\t? (<div className=\"properties-title-heading-label\">\n\t\t\t\t\t{this.props.heading}\n\t\t\t\t</div>)\n\t\t\t\t: null;\n\t\t\tconst icon = this.props.icon && typeof this.props.icon === \"string\"\n\t\t\t\t? <Isvg className=\"properties-title-heading-icon\" src={this.props.icon} />\n\t\t\t\t: null;\n\t\t\tif (label || icon) {\n\t\t\t\theading = (<div className=\"properties-title-heading\">\n\t\t\t\t\t{icon}\n\t\t\t\t\t{label}\n\t\t\t\t\t{helpButton}\n\t\t\t\t</div>);\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t<div className={classNames(\"properties-title-editor\",\n\t\t\t\t{ \"properties-title-with-heading\": this.headingEnabled },\n\t\t\t\t{ \"properties-title-right-flyout-tabs-view\": this.props.rightFlyoutTabsView })}\n\t\t\t>\n\t\t\t\t{closeButton}\n\t\t\t\t{heading}\n\t\t\t\t<div className={classNames(\n\t\t\t\t\t\"properties-title-editor-input\",\n\t\t\t\t\t{\n\t\t\t\t\t\t\"properties-title-editor-with-help\": this.props.help && !this.headingEnabled && !titleValidationTypes.includes(get(this.state.titleValidation, \"type\")),\n\t\t\t\t\t\t\"properties-title-editor-with-warning\": titleWithWarning,\n\t\t\t\t\t\t\"properties-title-editor-with-error\": titleWithErrror\n\t\t\t\t\t}\n\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\tid={this.id}\n\t\t\t\t\t\tref={this.textInputRef}\n\t\t\t\t\t\tvalue={this.props.title}\n\t\t\t\t\t\tonChange={this.handleTitleChange}\n\t\t\t\t\t\tonKeyPress={(e) => this._handleKeyPress(e)}\n\t\t\t\t\t\treadOnly={this.props.labelEditable === false} // shows a non editable icon\n\t\t\t\t\t\tlabelText={this.labelText}\n\t\t\t\t\t\thideLabel\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tonFocus={this.textInputOnFocus}\n\t\t\t\t\t\tonBlur={this.textInputOnBlur}\n\t\t\t\t\t\tlight={this.props.controller.getLight()}\n\t\t\t\t\t\tinvalid={titleWithErrror}\n\t\t\t\t\t\tinvalidText={get(this.state.titleValidation, \"message\")}\n\t\t\t\t\t\twarn={titleWithWarning}\n\t\t\t\t\t\twarnText={get(this.state.titleValidation, \"message\")}\n\t\t\t\t\t\t{... this.state.focused && { className: \"properties-title-editor-focused\" }}\n\t\t\t\t\t/>\n\t\t\t\t\t{titleValidationTypes.includes(get(this.state.titleValidation, \"type\")) ? null : propertiesTitleEdit}\n\t\t\t\t</div>\n\t\t\t\t{!this.headingEnabled && !titleValidationTypes.includes(get(this.state.titleValidation, \"type\")) ? helpButton : null}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nTitleEditor.propTypes = {\n\thelpClickHandler: PropTypes.func,\n\tcloseHandler: PropTypes.func,\n\tcontroller: PropTypes.object.isRequired,\n\tlabelEditable: PropTypes.bool,\n\thelp: PropTypes.object,\n\ticon: PropTypes.string,\n\theading: PropTypes.string,\n\tshowHeading: PropTypes.bool,\n\trightFlyoutTabsView: PropTypes.bool,\n\ttitle: PropTypes.string, // set by redux\n\tsetTitle: PropTypes.func // set by redux\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n\ttitle: state.componentMetadataReducer.title\n});\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n\tsetTitle: (title) => {\n\t\tdispatch(setTitle(title));\n\t}\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TitleEditor);\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport PropertiesModal from \"./../components/properties-modal\";\nimport PropertiesEditor from \"./../components/properties-editor\";\nimport TearSheet from \"../panels/tearsheet\";\nimport MainEditorPropertiesButtons from \"./../components/main-editor-properties-buttons\";\nimport EditorForm from \"./../components/editor-form\";\nimport Form from \"./../form/Form\";\nimport CommonPropertiesAction from \"./../../command-actions/commonPropertiesAction\";\nimport PropertiesController from \"./../properties-controller\";\nimport * as PropertyUtils from \"./../util/property-utils\";\nimport { MESSAGE_KEYS, CONDITION_RETURN_VALUE_HANDLING, CARBON_ICONS, APPLY, CANCEL, ACTIONS, CATEGORY_VIEW } from \"./../constants/constants\";\nimport { Size } from \"./../constants/form-constants\";\nimport { validateParameterDefAgainstSchema } from \"../schema-validator/properties-schema-validator.js\";\nimport { has, isEqual, omit, pick, cloneDeep } from \"lodash\";\nimport Icon from \"./../../icons/icon.jsx\";\nimport { Button } from \"carbon-components-react\";\nimport { Provider } from \"react-redux\";\nimport logger from \"../../../utils/logger\";\nimport TitleEditor from \"./../components/title-editor\";\nimport classNames from \"classnames\";\n\nimport { injectIntl } from \"react-intl\";\nimport styles from \"./properties-main-widths.scss\";\n\nconst FLYOUT_WIDTH_SMALL = parseInt(styles.flyoutWidthSmall, 10);\nconst FLYOUT_WIDTH_MEDIUM = parseInt(styles.flyoutWidthMedium, 10);\nconst FLYOUT_WIDTH_LARGE = parseInt(styles.flyoutWidthLarge, 10);\nconst FLYOUT_WIDTH_MAX = parseInt(styles.flyoutWidthMax, 10);\n\nclass PropertiesMain extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.propertiesController = new PropertiesController();\n\t\tthis.propertiesController.setPropertiesConfig(this.props.propertiesConfig);\n\t\t// Persist editorSize when resize() is not called\n\t\tif (this.props.propertiesInfo.initialEditorSize) {\n\t\t\tthis.propertiesController.setEditorSize(this.props.propertiesInfo.initialEditorSize);\n\t\t}\n\t\tthis.propertiesController.setCustomControls(props.customControls);\n\t\tthis.propertiesController.setConditionOps(props.customConditionOps);\n\t\tthis.propertiesController.setLight(props.light);\n\t\tthis.propertiesController.setAppData(props.propertiesInfo.appData);\n\t\tthis.propertiesController.setExpressionInfo(props.propertiesInfo.expressionInfo);\n\t\tthis.propertiesController.setHandlers({\n\t\t\tcontrollerHandler: props.callbacks.controllerHandler,\n\t\t\tpropertyListener: props.callbacks.propertyListener,\n\t\t\tactionHandler: props.callbacks.actionHandler,\n\t\t\tbuttonHandler: props.callbacks.buttonHandler,\n\t\t\tbuttonIconHandler: props.callbacks.buttonIconHandler,\n\t\t\tvalidationHandler: props.callbacks.validationHandler,\n\t\t\ttitleChangeHandler: props.callbacks.titleChangeHandler,\n\t\t\ttooltipLinkHandler: props.callbacks.tooltipLinkHandler\n\t\t});\n\t\tthis.setForm(props.propertiesInfo);\n\t\tthis.previousErrorMessages = {};\n\t\t// this has to be after setForm because setForm clears all error messages.\n\t\t// Validate all validationDefinitions but show warning messages for \"colDoesExists\" condition only\n\t\tthis.propertiesController.validatePropertiesValues(false);\n\t\tif (props.propertiesInfo.messages) {\n\t\t\tthis.propertiesController.validatePropertiesValues(true);\n\t\t\tthis.previousErrorMessages = this.propertiesController.getAllErrorMessages();\n\t\t}\n\t\t// Callback after all values and messages are set\n\t\tif (this.props.callbacks.propertyListener) {\n\t\t\tthis.props.callbacks.propertyListener({ action: ACTIONS.PROPERTIES_LOADED });\n\t\t}\n\t\tthis.currentParameters = this.propertiesController.getPropertyValues();\n\t\tconst editorSize = this.getEditorSize();\n\t\tthis.state = {\n\t\t\tshowPropertiesButtons: true,\n\t\t\teditorSize: editorSize\n\t\t};\n\t\tthis.applyPropertiesEditing = this.applyPropertiesEditing.bind(this);\n\t\tthis.showPropertiesButtons = this.showPropertiesButtons.bind(this);\n\t\tthis.updateEditorSize = this.updateEditorSize.bind(this);\n\t\tthis.cancelHandler = this.cancelHandler.bind(this);\n\t\tthis._getOverrideSize = this._getOverrideSize.bind(this);\n\t\tthis._getResizeButton = this._getResizeButton.bind(this);\n\t\tthis._isResizeButtonRequired = this._isResizeButtonRequired.bind(this);\n\t\tthis.onBlur = this.onBlur.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.props.callbacks.setPropertiesHasMounted();\n\t}\n\n\tUNSAFE_componentWillReceiveProps(newProps) { // eslint-disable-line camelcase, react/sort-comp\n\t\tif (newProps.propertiesInfo) {\n\t\t\tif (!isEqual(Object.keys(newProps.propertiesInfo), Object.keys(this.props.propertiesInfo)) ||\n\t\t\t\t(newProps.propertiesInfo.formData && !isEqual(newProps.propertiesInfo.formData, this.props.propertiesInfo.formData)) ||\n\t\t\t\t(newProps.propertiesInfo.parameterDef && !isEqual(newProps.propertiesInfo.parameterDef, this.props.propertiesInfo.parameterDef)) ||\n\t\t\t\t(newProps.propertiesInfo.appData && !isEqual(newProps.propertiesInfo.appData, this.props.propertiesInfo.appData))) {\n\t\t\t\tthis.setForm(newProps.propertiesInfo);\n\t\t\t\tconst newEditorSize = this.propertiesController.getForm().editorSize;\n\t\t\t\tif (this.state.editorSize !== newEditorSize) {\n\t\t\t\t\tthis.setState({ editorSize: newEditorSize });\n\t\t\t\t}\n\t\t\t\tthis.currentParameters = this.propertiesController.getPropertyValues();\n\t\t\t\tthis.propertiesController.setAppData(newProps.propertiesInfo.appData);\n\t\t\t\tthis.propertiesController.setCustomControls(newProps.customControls);\n\t\t\t\tthis.propertiesController.setConditionOps(newProps.customConditionOps);\n\t\t\t\tthis.previousErrorMessages = {};\n\t\t\t\tif (newProps.propertiesInfo.messages) {\n\t\t\t\t\tthis.propertiesController.validatePropertiesValues();\n\t\t\t\t\tthis.previousErrorMessages = this.propertiesController.getAllErrorMessages();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (newProps.propertiesConfig && !isEqual(newProps.propertiesConfig, this.propertiesController.getPropertiesConfig())) {\n\t\t\tthis.propertiesController.setPropertiesConfig(newProps.propertiesConfig);\n\t\t}\n\t}\n\n\tonBlur(e) {\n\t\t// apply properties when focus leave common properties.\n\t\t// subdialogs and summary panel causes focus to leave but shouldn't apply settings\n\t\tif (this.props.propertiesConfig.applyOnBlur &&\n\t\t\tthis.commonProperties && !this.commonProperties.contains(e.relatedTarget) &&\n\t\t\t!this.propertiesController.isSummaryPanelShowing() && !this.propertiesController.isSubPanelsShowing()) {\n\t\t\tthis.applyPropertiesEditing(false);\n\t\t}\n\t}\n\n\tsetForm(propertiesInfo) {\n\t\tlet formData = null;\n\n\t\tif (propertiesInfo.formData && Object.keys(propertiesInfo.formData).length !== 0) {\n\t\t\tformData = propertiesInfo.formData;\n\t\t} else if (propertiesInfo.parameterDef) {\n\t\t\tif (this.props.propertiesConfig.schemaValidation) {\n\t\t\t\tvalidateParameterDefAgainstSchema(propertiesInfo.parameterDef);\n\t\t\t}\n\t\t\tformData = Form.makeForm(propertiesInfo.parameterDef, this.props.propertiesConfig.containerType);\n\t\t}\n\t\t// TODO: This can be removed once the WML Play service generates datasetMetadata instead of inputDataModel\n\t\tif (formData && formData.data && formData.data.inputDataModel && !formData.data.datasetMetadata) {\n\t\t\tformData.data.datasetMetadata = PropertyUtils.convertInputDataModel(formData.data.inputDataModel);\n\t\t}\n\n\t\tthis.propertiesController.setForm(formData, this.props.intl);\n\t\tif (formData) {\n\t\t\tthis.originalTitle = formData.label;\n\t\t}\n\n\t\t// set initial values for undo\n\t\tthis.initialValueInfo = { additionalInfo: { messages: [] }, undoInfo: {} };\n\t\tthis.uiParameterKeys = this._getUiOnlyKeys();\n\t\tthis.initialValueInfo = this._setValueInforProperties(this.initialValueInfo);\n\t\tif (propertiesInfo.messages) {\n\t\t\tthis.initialValueInfo.additionalInfo.messages = cloneDeep(propertiesInfo.messages);\n\t\t}\n\t\tthis.initialValueInfo.undoInfo.properties = this.propertiesController.getPropertyValues(); // used for undoing when node editor open\n\t\tthis.initialValueInfo.undoInfo.messages = this.propertiesController.getAllErrorMessages(); // used for undoing when node editor open\n\t\tthis.initialValueInfo.additionalInfo.title = this.propertiesController.getTitle();\n\t}\n\n\tgetApplyButtonLabel() {\n\t\tif (this.props.propertiesConfig.buttonLabels && this.props.propertiesConfig.buttonLabels.primary) {\n\t\t\treturn this.props.propertiesConfig.buttonLabels.primary;\n\t\t}\n\t\treturn PropertyUtils.formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIESEDIT_APPLYBUTTON_LABEL);\n\t}\n\n\tgetRejectButtonLabel() {\n\t\tif (this.props.propertiesConfig.buttonLabels && this.props.propertiesConfig.buttonLabels.secondary) {\n\t\t\treturn this.props.propertiesConfig.buttonLabels.secondary;\n\t\t}\n\t\treturn PropertyUtils.formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIESEDIT_REJECTBUTTON_LABEL);\n\t}\n\n\tgetPropertiesActionLabel() {\n\t\tif (this.props.callbacks.propertiesActionLabelHandler) {\n\t\t\tconst label = this.props.callbacks.propertiesActionLabelHandler();\n\t\t\tif (label) {\n\t\t\t\treturn label;\n\t\t\t}\n\t\t}\n\t\treturn PropertyUtils.formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_ACTION_LABEL, { node_label: this.propertiesController.getTitle() });\n\t}\n\n\tgetEditorSize() {\n\t\t// Determine whether to persist initialEditorSize or set the defaultEditorSize in certain cases\n\t\tconst defaultEditorSize = this.propertiesController.getForm().editorSize;\n\t\tconst initialEditorSize = this.props.propertiesInfo.initialEditorSize;\n\t\t// When defaultEditorSize=\"small\", initialEditorSize can be \"small\" or \"medium\". For any other value, return defaultEditorSize.\n\t\t// When defaultEditorSize=\"medium\", initialEditorSize can be \"medium\" or \"large\". For any other value, return defaultEditorSize.\n\t\t// When defaultEditorSize=\"large\", initialEditorSize can be \"large\" or \"max\". For any other value, return defaultEditorSize.\n\t\tif (defaultEditorSize === Size.SMALL && (initialEditorSize === Size.LARGE || initialEditorSize === Size.MAX)) {\n\t\t\treturn defaultEditorSize;\n\t\t} else if (defaultEditorSize === Size.MEDIUM && (initialEditorSize === Size.SMALL || initialEditorSize === Size.MAX)) {\n\t\t\treturn defaultEditorSize;\n\t\t} else if (defaultEditorSize === Size.LARGE && (initialEditorSize === Size.SMALL || initialEditorSize === Size.MEDIUM)) {\n\t\t\treturn defaultEditorSize;\n\t\t} else if (defaultEditorSize === Size.MAX) {\n\t\t\treturn defaultEditorSize;\n\t\t}\n\t\treturn (initialEditorSize ? initialEditorSize : defaultEditorSize);\n\t}\n\n\t_getOverrideSize() {\n\t\tconst pixelWidth = this.propertiesController.getForm().pixelWidth;\n\t\tconst editorSizeInForm = this.propertiesController.getForm().editorSize;\n\t\tlet overrideSize = null;\n\n\t\tif (pixelWidth) {\n\t\t\tif (editorSizeInForm === Size.SMALL) {\n\t\t\t\tif (this.state.editorSize === Size.SMALL && pixelWidth.min) {\n\t\t\t\t\toverrideSize = pixelWidth.min;\n\n\t\t\t\t} else if (this.state.editorSize === Size.MEDIUM && pixelWidth.max) {\n\t\t\t\t\toverrideSize = pixelWidth.max;\n\t\t\t\t}\n\n\t\t\t} else if (editorSizeInForm === Size.MEDIUM) {\n\t\t\t\tif (this.state.editorSize === Size.MEDIUM && pixelWidth.min) {\n\t\t\t\t\toverrideSize = pixelWidth.min;\n\n\t\t\t\t} else if (this.state.editorSize === Size.LARGE && pixelWidth.max) {\n\t\t\t\t\toverrideSize = pixelWidth.max;\n\t\t\t\t}\n\n\t\t\t} else if (editorSizeInForm === Size.LARGE) {\n\t\t\t\tif (this.state.editorSize === Size.LARGE && pixelWidth.min) {\n\t\t\t\t\toverrideSize = pixelWidth.min;\n\n\t\t\t\t} else if (this.state.editorSize === Size.MAX && pixelWidth.max) {\n\t\t\t\t\toverrideSize = pixelWidth.max;\n\t\t\t\t}\n\n\t\t\t} else if (editorSizeInForm === Size.MAX && pixelWidth.max) {\n\t\t\t\toverrideSize = pixelWidth.max;\n\t\t\t}\n\t\t}\n\t\treturn overrideSize;\n\t}\n\n\t_getResizeButton() {\n\t\tlet resizeButton = <Icon type={CARBON_ICONS.CHEVRONARROWS.LEFT} className=\"properties-resize-caret-left\" />;\n\t\tif (this.propertiesController.getForm().editorSize === Size.SMALL) {\n\t\t\tif (this.state.editorSize === Size.MEDIUM) {\n\t\t\t\tresizeButton = <Icon type={CARBON_ICONS.CHEVRONARROWS.RIGHT} className=\"properties-resize-caret-right\" />;\n\t\t\t}\n\t\t} else if (this.propertiesController.getForm().editorSize === Size.MEDIUM) {\n\t\t\tif (this.state.editorSize === Size.LARGE) {\n\t\t\t\tresizeButton = <Icon type={CARBON_ICONS.CHEVRONARROWS.RIGHT} className=\"properties-resize-caret-right\" />;\n\t\t\t}\n\t\t} else if (this.propertiesController.getForm().editorSize === Size.LARGE) {\n\t\t\tif (this.state.editorSize === Size.MAX) {\n\t\t\t\tresizeButton = <Icon type={CARBON_ICONS.CHEVRONARROWS.RIGHT} className=\"properties-resize-caret-right\" />;\n\t\t\t}\n\t\t}\n\t\treturn resizeButton;\n\t}\n\n\t_isResizeButtonRequired() {\n\t\tconst pixelWidth = this.propertiesController.getForm().pixelWidth;\n\n\t\tif (this.props.propertiesConfig.enableResize !== false) {\n\t\t\tif (pixelWidth) {\n\t\t\t\tif (!pixelWidth.min && !pixelWidth.max) {\n\t\t\t\t\tlogger.warn(\"Pixel width was provided but no min or max property was found in it.\");\n\t\t\t\t\treturn true;\n\n\t\t\t\t} else if (this.propertiesController.getForm().editorSize === Size.SMALL) {\n\t\t\t\t\tif (pixelWidth.min && !pixelWidth.max && pixelWidth.min >= FLYOUT_WIDTH_MEDIUM) {\n\t\t\t\t\t\tlogger.warn(\"No resize button shown. Pixel width min size is greater than or equal to default max size: \" + FLYOUT_WIDTH_MEDIUM);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (!pixelWidth.min && pixelWidth.max && pixelWidth.max <= FLYOUT_WIDTH_SMALL) {\n\t\t\t\t\t\tlogger.warn(\"No resize button shown. Pixel width max size is less than or equal to default min size: \" + FLYOUT_WIDTH_SMALL);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (pixelWidth.min >= pixelWidth.max) {\n\t\t\t\t\t\tlogger.warn(\"No resize button shown. Pixel width min size is greater than or equal to pixel width max size.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t} else if (this.propertiesController.getForm().editorSize === Size.MEDIUM) {\n\t\t\t\t\tif (pixelWidth.min && !pixelWidth.max && pixelWidth.min >= FLYOUT_WIDTH_LARGE) {\n\t\t\t\t\t\tlogger.warn(\"No resize button shown. Pixel width min size is greater than or equal to default max size: \" + FLYOUT_WIDTH_LARGE);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (!pixelWidth.min && pixelWidth.max && pixelWidth.max <= FLYOUT_WIDTH_MEDIUM) {\n\t\t\t\t\t\tlogger.warn(\"No resize button shown. Pixel width max size is less than or equal to default min size: \" + FLYOUT_WIDTH_MEDIUM);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (pixelWidth.min >= pixelWidth.max) {\n\t\t\t\t\t\tlogger.warn(\"No resize button shown. Pixel width min size is greater than or equal to default max size.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t} else if (this.propertiesController.getForm().editorSize === Size.LARGE) {\n\t\t\t\t\tif (pixelWidth.min && !pixelWidth.max && pixelWidth.min >= FLYOUT_WIDTH_MAX) {\n\t\t\t\t\t\tlogger.warn(\"No resize button shown. Pixel width min size is greater than or equal to default max size: \" + FLYOUT_WIDTH_MAX);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (!pixelWidth.min && pixelWidth.max && pixelWidth.max <= FLYOUT_WIDTH_LARGE) {\n\t\t\t\t\t\tlogger.warn(\"No resize button shown. Pixel width max size is less than or equal to default min size: \" + FLYOUT_WIDTH_LARGE);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (pixelWidth.min >= pixelWidth.max) {\n\t\t\t\t\t\tlogger.warn(\"No resize button shown. Pixel width min size is greater than or equal to default max size.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t} else if (this.propertiesController.getForm().editorSize === Size.MAX) {\n\t\t\t\t\tif (pixelWidth.min) {\n\t\t\t\t\t\tlogger.warn(\"No resize button shown. Pixel width min size ignored.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t} else if (this.propertiesController.getForm().editorSize === Size.MAX) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t// options is an object of config options where\n\t// applyProperties: true - this function is called from applyPropertiesEditing\n\t_setValueInforProperties(valueInfo, options) {\n\t\tconst applyProperties = options && options.applyProperties === true;\n\t\tconst filterHiddenDisabled = this.props.propertiesConfig.conditionReturnValueHandling === CONDITION_RETURN_VALUE_HANDLING.NULL;\n\n\t\tconst properties = this.propertiesController.getPropertyValues({ filterHiddenDisabled: filterHiddenDisabled, applyProperties: applyProperties,\n\t\t\tvalueFilters: this.props.propertiesConfig.returnValueFiltering });\n\t\tif (this.uiParameterKeys.length > 0) {\n\t\t\tvalueInfo.properties = omit(properties, this.uiParameterKeys);\n\t\t\tvalueInfo.uiProperties = pick(properties, this.uiParameterKeys);\n\t\t} else {\n\t\t\tvalueInfo.properties = properties;\n\t\t}\n\t\treturn valueInfo;\n\t}\n\n\t// this will return an array of control names that are ui only controls.\n\t_getUiOnlyKeys() {\n\t\tconst uiOnlyKeys = [];\n\t\tconst controls = this.propertiesController.getControls();\n\t\tif (Object.keys(controls).length > 0) {\n\t\t\tfor (const controlKey in controls) {\n\t\t\t\tif (!has(controls, controlKey)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst control = controls[controlKey];\n\t\t\t\tif (control.uionly) {\n\t\t\t\t\tuiOnlyKeys.push(controlKey);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn uiOnlyKeys;\n\t}\n\n\t// cancelSource is \"apply\" if called from applyPropertiesEditing(), else \"cancel\"\n\tcancelHandler(cancelSource) {\n\t\tif (this.props.callbacks.closePropertiesDialog) {\n\t\t\tthis.props.callbacks.closePropertiesDialog(cancelSource);\n\t\t}\n\t}\n\n\tapplyPropertiesEditing(closeProperties) {\n\t\t// validate all the input values.\n\t\tthis.propertiesController.validatePropertiesValues();\n\t\tconst newErrorMessages = this.propertiesController.getAllErrorMessages();\n\n\t\t// only save if title or parameters have changed or new error messages\n\t\tif (this.originalTitle !== this.propertiesController.getTitle() ||\n\t\t\t\t(this.currentParameters && JSON.stringify(this.currentParameters) !==\n\t\t\t\tJSON.stringify(this.propertiesController.getPropertyValues())) ||\n\t\t\t\t(JSON.stringify(this.previousErrorMessages) !== JSON.stringify(newErrorMessages)) ||\n\t\t\t\tthis.props.propertiesConfig.applyPropertiesWithoutEdit) {\n\n\t\t\t// set current values\n\t\t\tlet valueInfo = { additionalInfo: {}, undoInfo: {} };\n\t\t\tvalueInfo = this._setValueInforProperties(valueInfo, { applyProperties: true });\n\t\t\tvalueInfo.undoInfo.properties = this.propertiesController.getPropertyValues();\n\t\t\tconst errorMessages = this.propertiesController.getErrorMessages(true, true, true, false);\n\t\t\tif (errorMessages) {\n\t\t\t\tvalueInfo.additionalInfo.messages = errorMessages;\n\t\t\t}\n\t\t\tvalueInfo.undoInfo.messages = this.propertiesController.getAllErrorMessages();\n\t\t\tif (this.propertiesController.getTitle()) {\n\t\t\t\tvalueInfo.additionalInfo.title = this.propertiesController.getTitle();\n\t\t\t}\n\t\t\tconst propertiesActionLabel = this.getPropertiesActionLabel();\n\t\t\tconst command = new CommonPropertiesAction(valueInfo, this.initialValueInfo,\n\t\t\t\tthis.props.propertiesInfo.appData, this.props.callbacks.applyPropertyChanges, propertiesActionLabel);\n\t\t\tthis.propertiesController.getCommandStack().do(command);\n\n\t\t\t// if we don't close the dialog, set the currentParameters to the new parameters\n\t\t\t// so we don't save again unnecessarily when clicking save but no additional changes happened\n\t\t\tthis.currentParameters = this.propertiesController.getPropertyValues();\n\t\t\t// reset undo values\n\t\t\tthis.initialValueInfo = cloneDeep(valueInfo);\n\t\t\tthis.previousErrorMessages = this.propertiesController.getAllErrorMessages();\n\t\t}\n\t\tif (closeProperties) {\n\t\t\tthis.cancelHandler(APPLY); // close property editor\n\t\t}\n\t}\n\n\tshowPropertiesButtons(state) {\n\t\tthis.setState({ showPropertiesButtons: state });\n\t}\n\n\tupdateEditorSize(newEditorSize) {\n\t\tthis.setState({\n\t\t\teditorSize: newEditorSize\n\t\t});\n\t\tthis.propertiesController.setEditorSize(newEditorSize);\n\t}\n\n\tresize() {\n\t\tif (this.propertiesController.getForm().editorSize === Size.SMALL) {\n\t\t\tif (this.state.editorSize === Size.SMALL) {\n\t\t\t\tthis.updateEditorSize(Size.MEDIUM);\n\t\t\t} else {\n\t\t\t\tthis.updateEditorSize(Size.SMALL);\n\t\t\t}\n\t\t} else if (this.propertiesController.getForm().editorSize === Size.MEDIUM) {\n\t\t\tif (this.state.editorSize === Size.MEDIUM) {\n\t\t\t\tthis.updateEditorSize(Size.LARGE);\n\t\t\t} else {\n\t\t\t\tthis.updateEditorSize(Size.MEDIUM);\n\t\t\t}\n\t\t} else if (this.propertiesController.getForm().editorSize === Size.LARGE) {\n\t\t\tif (this.state.editorSize === Size.LARGE) {\n\t\t\t\tthis.updateEditorSize(Size.MAX);\n\t\t\t} else {\n\t\t\t\tthis.updateEditorSize(Size.LARGE);\n\t\t\t}\n\t\t}\n\t}\n\n\trender() {\n\t\tconst applyOnBlurEnabled = this.props.propertiesConfig.applyOnBlur && this.props.propertiesConfig.rightFlyout;\n\t\tlet cancelHandler = this.cancelHandler.bind(this, CANCEL);\n\t\t// when onBlur cancel shouldn't be rendered.\n\t\tif (applyOnBlurEnabled) {\n\t\t\tcancelHandler = null;\n\t\t}\n\t\tconst applyLabel = this.getApplyButtonLabel();\n\t\tconst rejectLabel = this.getRejectButtonLabel();\n\t\tconst propertiesLabel = this.propertiesController.getTitle();\n\n\t\tconst formData = this.propertiesController.getForm();\n\t\tif (formData !== null) {\n\t\t\tlet propertiesDialog = [];\n\t\t\tlet propertiesTitle = <div />;\n\t\t\tlet buttonsContainer = <div />;\n\t\t\tlet resizeBtn = null;\n\t\t\tlet hasHeading = false;\n\n\t\t\tif (this.props.propertiesConfig.rightFlyout) {\n\t\t\t\tpropertiesTitle = (<TitleEditor\n\t\t\t\t\tlabelEditable={formData.labelEditable}\n\t\t\t\t\thelp={formData.help}\n\t\t\t\t\tcontroller={this.propertiesController}\n\t\t\t\t\thelpClickHandler={this.props.callbacks.helpClickHandler}\n\t\t\t\t\tcloseHandler={applyOnBlurEnabled ? this.applyPropertiesEditing.bind(this, true) : null}\n\t\t\t\t\ticon={formData.icon}\n\t\t\t\t\theading={formData.heading}\n\t\t\t\t\tshowHeading={this.props.propertiesConfig.heading}\n\t\t\t\t\trightFlyoutTabsView={this.props.propertiesConfig.categoryView === CATEGORY_VIEW.TABS}\n\t\t\t\t/>);\n\n\t\t\t\thasHeading = this.props.propertiesConfig.heading && (formData.icon || formData.heading);\n\n\t\t\t\tbuttonsContainer = (<MainEditorPropertiesButtons\n\t\t\t\t\tcontroller={this.propertiesController}\n\t\t\t\t\tokHandler={!applyOnBlurEnabled ? this.applyPropertiesEditing.bind(this, true) : null}\n\t\t\t\t\tcancelHandler={cancelHandler}\n\t\t\t\t\tapplyLabel={applyLabel}\n\t\t\t\t\trejectLabel={rejectLabel}\n\t\t\t\t\tshowPropertiesButtons={this.state.showPropertiesButtons}\n\t\t\t\t\tdisableSaveOnRequiredErrors={this.props.propertiesConfig.disableSaveOnRequiredErrors}\n\t\t\t\t/>);\n\t\t\t\tif (this._isResizeButtonRequired()) {\n\t\t\t\t\tconst resizeIcon = this._getResizeButton();\n\t\t\t\t\t// Resize button label can be \"Expand\" or \"Contract\"\n\t\t\t\t\tconst resizeBtnLabel = (resizeIcon.props && resizeIcon.props.className === \"properties-resize-caret-left\")\n\t\t\t\t\t\t? PropertyUtils.formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIESEDIT_RESIZEBUTTON_EXPAND_LABEL)\n\t\t\t\t\t\t: PropertyUtils.formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIESEDIT_RESIZEBUTTON_CONTRACT_LABEL);\n\t\t\t\t\tresizeBtn = (\n\t\t\t\t\t\t<Button kind=\"ghost\" className=\"properties-btn-resize\" onClick={this.resize.bind(this)} aria-label={resizeBtnLabel} >\n\t\t\t\t\t\t\t{resizeIcon}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst editorForm = (<EditorForm\n\t\t\t\tkey=\"editor-form-key\"\n\t\t\t\tcontroller={this.propertiesController}\n\t\t\t\tadditionalComponents={this.props.propertiesInfo.additionalComponents}\n\t\t\t\tshowPropertiesButtons={this.showPropertiesButtons}\n\t\t\t\tcustomPanels={this.props.customPanels}\n\t\t\t\trightFlyout={this.props.propertiesConfig.rightFlyout}\n\t\t\t\tcategoryView={this.props.propertiesConfig.categoryView}\n\t\t\t/>);\n\n\t\t\tif (this.props.propertiesConfig.containerType === \"Editing\") {\n\t\t\t\tpropertiesDialog = (<PropertiesEditor\n\t\t\t\t\tapplyLabel={applyLabel}\n\t\t\t\t\trejectLabel={rejectLabel}\n\t\t\t\t\tbsSize={this.state.editorSize}\n\t\t\t\t\ttitle={propertiesLabel}\n\t\t\t\t\tokHandler={this.applyPropertiesEditing.bind(this, true)}\n\t\t\t\t\tcancelHandler={cancelHandler}\n\t\t\t\t\tshowPropertiesButtons={this.state.showPropertiesButtons}\n\t\t\t\t>\n\t\t\t\t\t{editorForm}\n\t\t\t\t</PropertiesEditor>);\n\t\t\t} else if (this.props.propertiesConfig.containerType === \"Custom\") {\n\t\t\t\tpropertiesDialog = (\n\t\t\t\t\t<div className={classNames(\"properties-custom-container\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"properties-custom-container-with-heading\": !applyOnBlurEnabled && hasHeading,\n\t\t\t\t\t\t\t\"properties-custom-container-applyOnBlur\": applyOnBlurEnabled && !hasHeading,\n\t\t\t\t\t\t\t\"properties-custom-container-applyOnBlur-with-heading\": applyOnBlurEnabled && hasHeading\n\t\t\t\t\t\t}\n\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{editorForm}\n\t\t\t\t\t</div>);\n\t\t\t} else if (this.props.propertiesConfig.containerType === \"Tearsheet\") {\n\t\t\t\tpropertiesDialog = (<TearSheet\n\t\t\t\t\topen\n\t\t\t\t\tonCloseCallback={this.props.propertiesConfig.applyOnBlur ? this.applyPropertiesEditing.bind(this, true) : null}\n\t\t\t\t\ttearsheet={{\n\t\t\t\t\t\ttitle: propertiesLabel,\n\t\t\t\t\t\tcontent: editorForm\n\t\t\t\t\t}}\n\t\t\t\t\tapplyLabel={applyLabel}\n\t\t\t\t\trejectLabel={rejectLabel}\n\t\t\t\t\tokHandler={this.applyPropertiesEditing.bind(this, true)}\n\t\t\t\t\tcancelHandler={cancelHandler}\n\t\t\t\t\tshowPropertiesButtons={this.state.showPropertiesButtons}\n\t\t\t\t\tapplyOnBlur={this.props.propertiesConfig.applyOnBlur}\n\t\t\t\t/>);\n\t\t\t} else { // Modal\n\t\t\t\tpropertiesDialog = (<PropertiesModal\n\t\t\t\t\tonHide={this.props.callbacks.closePropertiesDialog}\n\t\t\t\t\ttitle={propertiesLabel}\n\t\t\t\t\tbsSize={this.state.editorSize}\n\t\t\t\t\tokHandler={this.applyPropertiesEditing.bind(this, true)}\n\t\t\t\t\tcancelHandler={cancelHandler}\n\t\t\t\t\tshowPropertiesButtons={this.state.showPropertiesButtons}\n\t\t\t\t\tapplyLabel={applyLabel}\n\t\t\t\t\trejectLabel={rejectLabel}\n\t\t\t\t>\n\t\t\t\t\t{editorForm}\n\t\t\t\t</PropertiesModal>);\n\t\t\t}\n\t\t\tconst className = classNames(\"properties-wrapper\",\n\t\t\t\t{\n\t\t\t\t\t\"properties-right-flyout\": this.props.propertiesConfig.rightFlyout,\n\t\t\t\t\t\"properties-light-enabled\": this.props.light,\n\t\t\t\t\t\"properties-light-disabled\": !this.props.light\n\t\t\t\t},\n\t\t\t\t`properties-${this.state.editorSize}`);\n\t\t\tconst overrideSize = this._getOverrideSize();\n\t\t\tlet overrideStyle = null;\n\t\t\tif (overrideSize !== null) {\n\t\t\t\toverrideStyle = { width: overrideSize + \"px\" };\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<Provider store={this.propertiesController.getStore()}>\n\t\t\t\t\t<aside\n\t\t\t\t\t\taria-label={PropertyUtils.formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_LABEL, { label: propertiesLabel })}\n\t\t\t\t\t\trole=\"complementary\"\n\t\t\t\t\t\tref={ (ref) => (this.commonProperties = ref) }\n\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\tonBlur={this.onBlur}\n\t\t\t\t\t\tstyle={overrideStyle}\n\t\t\t\t\t>\n\t\t\t\t\t\t{resizeBtn}\n\t\t\t\t\t\t{propertiesTitle}\n\t\t\t\t\t\t{propertiesDialog}\n\t\t\t\t\t\t{buttonsContainer}\n\t\t\t\t\t</aside>\n\t\t\t\t</Provider>\n\t\t\t);\n\t\t}\n\t\treturn <div />;\n\t}\n}\n\nPropertiesMain.propTypes = {\n\tpropertiesInfo: PropTypes.object.isRequired,\n\tpropertiesConfig: PropTypes.shape({\n\t\tapplyOnBlur: PropTypes.bool,\n\t\tdisableSaveOnRequiredErrors: PropTypes.bool,\n\t\trightFlyout: PropTypes.bool,\n\t\tcategoryView: PropTypes.oneOf([CATEGORY_VIEW.ACCORDIONS, CATEGORY_VIEW.TABS]),\n\t\tcontainerType: PropTypes.string,\n\t\tenableResize: PropTypes.bool,\n\t\tconditionReturnValueHandling: PropTypes.string,\n\t\treturnValueFiltering: PropTypes.array,\n\t\theading: PropTypes.bool,\n\t\tbuttonLabels: PropTypes.shape({\n\t\t\tprimary: PropTypes.string,\n\t\t\tsecondary: PropTypes.string\n\t\t}),\n\t\tschemaValidation: PropTypes.bool,\n\t\tapplyPropertiesWithoutEdit: PropTypes.bool,\n\t\tconditionHiddenPropertyHandling: PropTypes.oneOf([\"null\", \"undefined\", \"value\"]),\n\t\tconditionDisabledPropertyHandling: PropTypes.oneOf([\"null\", \"undefined\", \"value\"]),\n\t\tmaxLengthForMultiLineControls: PropTypes.number,\n\t\tmaxLengthForSingleLineControls: PropTypes.number,\n\t\tconvertValueDataTypes: PropTypes.bool,\n\t\tshowRequiredIndicator: PropTypes.bool,\n\t\tlocale: PropTypes.string\n\t}),\n\tcallbacks: PropTypes.shape({\n\t\tcontrollerHandler: PropTypes.func,\n\t\tpropertyListener: PropTypes.func,\n\t\tactionHandler: PropTypes.func,\n\t\tclosePropertiesDialog: PropTypes.func,\n\t\tapplyPropertyChanges: PropTypes.func,\n\t\thelpClickHandler: PropTypes.func,\n\t\tsetPropertiesHasMounted: PropTypes.func,\n\t\tbuttonHandler: PropTypes.func,\n\t\tbuttonIconHandler: PropTypes.func,\n\t\tvalidationHandler: PropTypes.func,\n\t\ttitleChangeHandler: PropTypes.func,\n\t\tpropertiesActionLabelHandler: PropTypes.func,\n\t\ttooltipLinkHandler: PropTypes.func\n\t}),\n\tcustomPanels: PropTypes.array, // array of custom panels\n\tcustomControls: PropTypes.array, // array of custom controls\n\tcustomConditionOps: PropTypes.array, // array of custom condition ops\n\tlight: PropTypes.bool,\n\tintl: PropTypes.object.isRequired\n};\n\nexport default injectIntl(PropertiesMain, { forwardRef: true });\n","/*\n * Copyright 2017-2023 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport PropertiesButtons from \"./components/properties-buttons\";\nimport PropertiesMain from \"./properties-main\";\nimport PropertiesModal from \"./components/properties-modal\";\nimport ValidationMessage from \"./components/validation-message\";\nimport { formatMessage } from \"./util/property-utils\";\nimport { MESSAGE_KEYS, DEFAULT_LOCALE, CATEGORY_VIEW } from \"./constants/constants\";\n\nimport { injectIntl } from \"react-intl\";\n\n\nclass CommonProperties extends React.Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\thasError: false,\n\t\t\terror: null,\n\t\t\tinfo: null,\n\t\t};\n\t\tthis.createPropertiesMainComponent = this.createPropertiesMainComponent.bind(this);\n\t\tthis.revertState = this.revertState.bind(this);\n\t\tthis.propertiesMainHasMounted = false;\n\t\tthis.setPropertiesHasMounted = this.setPropertiesHasMounted.bind(this);\n\t\tthis.applyPropertiesEditing = this.applyPropertiesEditing.bind(this);\n\t}\n\n\tcomponentDidCatch(error, info) {\n\t\tthis.setState({\n\t\t\thasError: true,\n\t\t\terror: error,\n\t\t\tinfo: info\n\t\t});\n\t}\n\n\tsetPropertiesHasMounted() {\n\t\tthis.propertiesMainHasMounted = true;\n\t}\n\n\tapplyPropertiesEditing(closeEditor) {\n\t\tthis.PropertiesMain.applyPropertiesEditing(closeEditor);\n\t}\n\n\tcreatePropertiesMainComponent() {\n\t\tObject.assign(this.props.callbacks, { \"setPropertiesHasMounted\": this.setPropertiesHasMounted });\n\t\tconst propertiesMain = (\n\t\t\t<PropertiesMain\n\t\t\t\tref={\n\t\t\t\t\t(instance) => {\n\t\t\t\t\t\tthis.PropertiesMain = instance;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpropertiesInfo={this.props.propertiesInfo}\n\t\t\t\tpropertiesConfig={this.props.propertiesConfig}\n\t\t\t\tcustomPanels={this.props.customPanels}\n\t\t\t\tcallbacks= {this.props.callbacks}\n\t\t\t\tcustomControls={this.props.customControls}\n\t\t\t\tcustomConditionOps={this.props.customConditionOps}\n\t\t\t\tlight={this.props.light}\n\t\t\t/>);\n\t\treturn propertiesMain;\n\t}\n\n\trevertState() {\n\t\tthis.setState({\n\t\t\thasError: false,\n\t\t\terror: null,\n\t\t\tinfo: null\n\t\t});\n\t}\n\n\tdisplayAppropriateUIFallback() {\n\t\tconst errorInfo = {\n\t\t\ttext: formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_UNEXPECTED_MESSAGE),\n\t\t\ttype: \"error\"\n\t\t};\n\t\tconst errorHeading = (\n\t\t\t<div className=\"properties-error-heading\">\n\t\t\t\t<ValidationMessage messageInfo={errorInfo} />\n\t\t\t</div>\n\t\t);\n\t\tlet errorMessage;\n\t\tconst supportMessage = formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_SUPPORT_MESSAGE);\n\t\tconst closeText = formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIESEDIT_CLOSEBUTTON_LABEL);\n\t\tconst closeFunction = this.props.callbacks.closePropertiesDialog;\n\t\tconst revertText = formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIESEDIT_REVERTBUTTON_LABEL);\n\t\tconst revertFunction = this.revertState;\n\t\tconst propertiesLandmarkRoleLabel = formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_ERROR_LABEL);\n\t\tlet closeAndRevertContainer;\n\t\tif (this.props.propertiesConfig.containerType === \"Custom\") { // Right flyout view or Custom\n\t\t\tif (this.propertiesMainHasMounted === true) {\n\t\t\t\terrorMessage = formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_REVERT_MESSAGE);\n\t\t\t\tcloseAndRevertContainer = ( // Close and Revert Button\n\t\t\t\t\t<div className=\"properties-modal-buttons\">\n\t\t\t\t\t\t<PropertiesButtons\n\t\t\t\t\t\t\tclassName=\"properties-error-display-close-button\"\n\t\t\t\t\t\t\tokHandler={closeFunction}\n\t\t\t\t\t\t\tcancelHandler={revertFunction}\n\t\t\t\t\t\t\tshowPropertiesButtons\n\t\t\t\t\t\t\tapplyLabel={closeText}\n\t\t\t\t\t\t\trejectLabel={revertText}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\terrorMessage = formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_CLOSE_MESSAGE);\n\t\t\t\tcloseAndRevertContainer = ( // Close Button only\n\t\t\t\t\t<div className=\"properties-modal-buttons\">\n\t\t\t\t\t\t<PropertiesButtons\n\t\t\t\t\t\t\tclassName=\"properties-error-display-close-button\"\n\t\t\t\t\t\t\tokHandler={closeFunction}\n\t\t\t\t\t\t\tshowPropertiesButtons\n\t\t\t\t\t\t\tapplyLabel={closeText}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.props.propertiesConfig.rightFlyout) { // Right Flyout View\n\t\t\t\treturn (\n\t\t\t\t\t<aside\n\t\t\t\t\t\taria-label={propertiesLandmarkRoleLabel}\n\t\t\t\t\t\trole=\"complementary\"\n\t\t\t\t\t\tclassName=\"properties-wrapper properties-right-flyout properties-small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"properties-flyout-error-container\">\n\t\t\t\t\t\t\t{errorHeading}\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t<div className=\"properties-error-content\" >\n\t\t\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t{supportMessage}\n\t\t\t\t\t\t\t</div >\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{closeAndRevertContainer}\n\t\t\t\t\t</aside>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn ( // Non Right Flyout Custom\n\t\t\t\t<aside\n\t\t\t\t\taria-label={propertiesLandmarkRoleLabel}\n\t\t\t\t\trole=\"complementary\"\n\t\t\t\t\tclassName=\"properties-wrapper properties-custom-container\"\n\t\t\t\t>\n\t\t\t\t\t<div className= \"properties-flyout-error-container\">\n\t\t\t\t\t\t{ errorHeading }\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<div className=\"properties-error-content\" >\n\t\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t{supportMessage}\n\t\t\t\t\t\t</div >\n\t\t\t\t\t</div>\n\t\t\t\t\t{closeAndRevertContainer}\n\t\t\t\t</aside>\n\t\t\t);\n\t\t}\n\t\t// Modal View\n\t\tif (this.propertiesMainHasMounted === true) { // Revert and Close Button\n\t\t\terrorMessage = formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_REVERT_MESSAGE);\n\t\t\tcloseAndRevertContainer = (\n\t\t\t\t<PropertiesModal\n\t\t\t\t\tbsSize=\"large\"\n\t\t\t\t\tshowPropertiesButtons\n\t\t\t\t\tapplyLabel={closeText}\n\t\t\t\t\trejectLabel={revertText}\n\t\t\t\t\tokHandler={closeFunction}\n\t\t\t\t\tcancelHandler={revertFunction}\n\t\t\t\t\ttitle ={errorHeading}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"properties-modal-container properties-error-content\">\n\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t{supportMessage}\n\t\t\t\t\t</div>\n\t\t\t\t</PropertiesModal>\n\t\t\t);\n\t\t} else {\t// Close Button Only\n\t\t\terrorMessage = formatMessage(this.props.intl, MESSAGE_KEYS.PROPERTIES_CLOSE_MESSAGE);\n\t\t\tcloseAndRevertContainer = (\n\t\t\t\t<div className = \"properties-modal-error\">\n\t\t\t\t\t<PropertiesModal\n\t\t\t\t\t\tokHandler={closeFunction}\n\t\t\t\t\t\tbsSize=\"large\"\n\t\t\t\t\t\tshowPropertiesButtons\n\t\t\t\t\t\tapplyLabel={closeText}\n\t\t\t\t\t\trejectLabel=\"null\"\n\t\t\t\t\t\ttitle ={errorHeading}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"properties-modal-container properties-error-content\">\n\t\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t{supportMessage}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</PropertiesModal>\n\t\t\t\t</div>);\n\t\t}\n\t\treturn ( // Modal flyout vew\n\t\t\tcloseAndRevertContainer\n\t\t);\n\t}\n\n\trender() {\n\t\tif (this.state.hasError) {\n\t\t\treturn this.displayAppropriateUIFallback();\n\t\t}\n\t\treturn this.createPropertiesMainComponent();\n\t}\n\n}\n\nCommonProperties.propTypes = {\n\tpropertiesInfo: PropTypes.object.isRequired,\n\tpropertiesConfig: PropTypes.shape({\n\t\tapplyOnBlur: PropTypes.bool,\n\t\ttrimSpaces: PropTypes.bool,\n\t\tdisableSaveOnRequiredErrors: PropTypes.bool,\n\t\trightFlyout: PropTypes.bool,\n\t\tcategoryView: PropTypes.oneOf([CATEGORY_VIEW.ACCORDIONS, CATEGORY_VIEW.TABS]),\n\t\tcontainerType: PropTypes.string,\n\t\tenableResize: PropTypes.bool,\n\t\tconditionReturnValueHandling: PropTypes.oneOf([\"null\", \"value\"]),\n\t\treturnValueFiltering: PropTypes.array,\n\t\tbuttonLabels: PropTypes.shape({\n\t\t\tprimary: PropTypes.string,\n\t\t\tsecondary: PropTypes.string\n\t\t}),\n\t\tschemaValidation: PropTypes.bool,\n\t\tapplyPropertiesWithoutEdit: PropTypes.bool,\n\t\tconditionHiddenPropertyHandling: PropTypes.oneOf([\"null\", \"undefined\", \"value\"]),\n\t\tconditionDisabledPropertyHandling: PropTypes.oneOf([\"null\", \"undefined\", \"value\"]),\n\t\tmaxLengthForMultiLineControls: PropTypes.number,\n\t\tmaxLengthForSingleLineControls: PropTypes.number,\n\t\tconvertValueDataTypes: PropTypes.bool,\n\t\tshowRequiredIndicator: PropTypes.bool,\n\t\tlocale: PropTypes.string\n\t}),\n\tcallbacks: PropTypes.shape({\n\t\tcontrollerHandler: PropTypes.func,\n\t\tpropertyListener: PropTypes.func,\n\t\tactionHandler: PropTypes.func,\n\t\tclosePropertiesDialog: PropTypes.func,\n\t\tapplyPropertyChanges: PropTypes.func,\n\t\thelpClickHandler: PropTypes.func,\n\t\tbuttonHandler: PropTypes.func,\n\t\tbuttonIconHandler: PropTypes.func,\n\t\tvalidationHandler: PropTypes.func,\n\t\ttitleChangeHandler: PropTypes.func,\n\t\tpropertiesActionLabelHandler: PropTypes.func,\n\t\ttooltipLinkHandler: PropTypes.func\n\t}),\n\tcustomPanels: PropTypes.array,\n\tcustomControls: PropTypes.array,\n\tcustomConditionOps: PropTypes.array,\n\tlight: PropTypes.bool,\n\tintl: PropTypes.object.isRequired\n};\n\nCommonProperties.defaultProps = {\n\tpropertiesConfig: {\n\t\tcontainerType: \"Custom\",\n\t\trightFlyout: true,\n\t\tcategoryView: CATEGORY_VIEW.ACCORDIONS,\n\t\tapplyOnBlur: false,\n\t\ttrimSpaces: true,\n\t\tdisableSaveOnRequiredErrors: false,\n\t\tenableResize: true,\n\t\tconditionReturnValueHandling: \"value\",\n\t\tschemaValidation: false,\n\t\tapplyPropertiesWithoutEdit: false,\n\t\tmaxLengthForMultiLineControls: 1024,\n\t\tmaxLengthForSingleLineControls: 128,\n\t\tconvertValueDataTypes: false,\n\t\tshowRequiredIndicator: true,\n\t\tlocale: DEFAULT_LOCALE\n\t},\n\tcallbacks: {\n\t},\n\tlight: true // Enable light option by default\n};\n\nexport default injectIntl(CommonProperties, { forwardRef: true });\n"],"names":["baseGet","require$$0","baseSet","require$$1","castPath","require$$2","basePickBy","object","paths","predicate","index","length","result","path","value","hasIn","basePick","pick_1","PropertiesModal","_Component","_inherits","Component","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","this","props","bsSize","Size","SMALL","CARBON_MODAL_SIZE_XSMALL","LARGE","MAX","CARBON_MODAL_SIZE_LARGE","MEDIUM","CARBON_MODAL_SIZE_SMALL","modalSize","getCarbonModalSize","React","createElement","Portal","Modal","className","classNames","noButtons","showPropertiesButtons","open","modalHeading","title","primaryButtonText","applyLabel","secondaryButtonText","rejectLabel","onRequestSubmit","okHandler","onSecondarySubmit","cancelHandler","size","children","PropertiesEditor","propertyEditingClass","buttons","PropertiesButtons","TearSheet","tearsheet","description","content","displayFooterButtons","applyOnBlur","displayTabs","Array","isArray","ComposedModal","stacked","formatMessage","intl","MESSAGE_KEYS","PROPERTIES_LABEL","label","preventCloseOnClickOutside","ModalHeader","onCloseCallback","buttonOnClick","ModalBody","defaultProps","injectIntl","MainEditorPropertiesButtons","saveButtonEnabled","disableSaveOnRequiredErrors","Object","keys","requiredErrorMessages","shouldEnabledSaveButton","applyButtonEnabled","connect","state","ownProps","controller","getSaveButtonDisable","getRequiredErrorMessages","baseEach","_baseFilter","collection","push","arrayFilter","baseFilter","baseIteratee","require$$3","filter_1","SET_PROPERTY_VALUES","UPDATE_PROPERTY_VALUE","REMOVE_PROPERTY_VALUE","SET_CONTROL_STATES","UPDATE_CONTROL_STATE","SET_PANEL_STATES","UPDATE_PANEL_STATE","SET_ACTION_STATES","UPDATE_ACTION_STATE","SET_ERROR_MESSAGES","UPDATE_ERROR_MESSAGE","CLEAR_ERROR_MESSAGE","SET_DATASET_METADATA","UPDATE_SELECTED_ROWS","CLEAR_SELECTED_ROWS","SET_TITLE","SET_ACTIVE_TAB","DISABLE_ROW_MOVE_BUTTONS","SET_SAVE_BUTTON_DISABLE","SET_WIDE_FLYOUT_PRIMARY_BUTTON_DISABLED","SET_ADD_REMOVE_ROWS","UPDATE_STATIC_ROWS","CLEAR_STATIC_ROWS","SET_TABLE_BUTTON_ENABLED","SET_HIDE_EDIT_BUTTON","SET_ACTIVE_TEARSHEET","setTitle","type","setActiveTab","activeTab","SelectorPanel","_React$Component","panel","panels","getPropertyValue","name","dependsOn","WideFlyout","_this","call","style","height","updateDimensions","bind","_assertThisInitialized","window","addEventListener","removeEventListener","wideFlyout","commonPropertiesParent","findPropertyWrapper","commonProperties","ReactDOM","findDOMNode","getBoundingClientRect","setState","top","node","parentNode","includes","_this2","overlay","show","okButtonEnabled","ref","light","getControlId","propertyId","id","uuid","uuid4","concat","getDataId","row","col","getCharLimit","control","defaultLimit","limit","charLimit","splitNewlines","text","splitValue","split","joinNewlines","list","joinValue","truncated","concatenatedValue","forEach","truncatedValue","truncateDisplayValue","join","TRUNCATE_LIMIT","substring","getValidationProps","messageInfo","inTable","validationProps","invalid","invalidText","warn","warnText","getDateTimeFormat","controlType","ControlType","DATEPICKER","DATEPICKERRANGE","dateFormat","DEFAULT_DATEPICKER_FORMAT","DATEFIELD","DEFAULT_DATE_FORMAT","timeFormat","DEFAULT_TIME_FORMAT","SummaryPanel","showWideFlyout","handleLinkClicked","hideWideFlyout","cancelWideFlyout","_getSummaryTables","setIsSummaryPanelShowing","clearSelectedRows","setPropertyValues","initialControlValues","setErrorMessages","initialMessages","setControlStates","initialStates","getPropertyValues","getAllErrorMessages","getControlStates","summaryTables","summaryControls","getSummaryPanelControls","_step","_iterator","_createForOfIteratorHelper","s","n","done","controlName","summaryControl","getControl","controlValue","filterHiddenDisabled","customValue","getCustPropSumPanelValue","showCustom","summaryLabel","summaryValues","summaryColumns","subControls","idx","colPropertyId","isSummary","summary","colWidth","rowIdx","rowValue","rowData","colIdx","displayValue","_getSummaryDisplayValue","contentValue","JSON","stringify","replace","RegExp","width","TruncatedContentTooltip","tooltipText","disabled","summaryBody","role","largeTableLabel","PropertyUtils","getReactIntl","LONG_TABLE_SUMMARY_PLACEHOLDER","err","e","f","returnValue","values","valueLabels","displayIndex","indexOf","valueDef","propType","Type","STRUCTURE","ParamRole","COLUMN","controls","msg","errorCount","warningCount","controlId","controlMsg","getErrorMessage","_isEmpty","CONDITION_MESSAGE_TYPE","WARNING","ERROR","descriptionText","CONTROL_SUMMARY_ERROR","errorMsgCount","CONTROL_SUMMARY_ERROR_WARNING","warningMsgCount","CONTROL_SUMMARY_WARNING","Tooltip","tip","Icon","icon","_getSummaryIconState","link","Button","onClick","kind","renderIcon","Add16","APPLYBUTTON_LABEL","REJECTBUTTON_LABEL","flyout","getLight","panelClassName","hide","panelState","STATES","HIDDEN","nestedPanel","DISABLED","ControlUtils","getPanelState","getWideFlyoutPrimaryButtonDisabled","TwistyPanel","Accordion","AccordionItem","SubPanelInvoker","hideHandler","subPanelVisible","showSubDialog","hideSubDialog","increaseVisibleSubPanelCounter","applyChanges","decreaseVisibleSubPanelCounter","propertiesDialog","rightFlyout","isTearsheetContainer","SubPanelButton","showSubPanel","onSubPanelHidden","logger","info","subPanelInvoker","button","small","ColumnPanel","gridColumns","item","gridTemplateColumns","ControlPanel","Subtabs","activeTabId","tabId","subTabs","tabIdx","i","tabs","tab","group","subPanelItems","genUIItem","Tab","leftnav","tabIndex","vertical","Tabs","selected","tabContentClassName","TextPanel","hidden","dynamicDescriptionText","evaluateText","placement","tooltip","tooltipLinkHandler","getHandlers","direction","disable","showToolTipOnClick","CARBON_ICONS","INFORMATION","propertyValues","ActionPanel","ButtonAction","applyAction","_has","CARBON_BUTTON_KIND","TERTIARY","action","PRIMARY","SECONDARY","GHOST","DANGER","DANGER_TERTIARY","DANGER_GHOST","CARBON_BUTTON_SIZE","DEFAULT","EXTRA_LARGE","actionHandler","getAppData","data","customClassName","actionButtonKind","getActionButtonKind","actionButtonSize","getActionButtonSize","display","tooltipId","getActionState","convertPropertyId","ImageAction","image","left","right","_extends","src","url","tooltipDirection","tooltip_direction","toLowerCase","ActionFactory","actionType","ALERT_TAB_GROUP","EditorForm","showFieldPicker","genPanel","genUIContent","_getGroupedMessages","closeFieldPicker","openFieldPicker","generateSharedControlNames","messages","ControlFactory","getControlFactory","setFunctions","setRightFlyout","actionFactory","FIRST_TEARSHEET_ID","TEARSHEETS","visibleTearsheet","nextProps","nextState","isSummaryPanelShowing","isSubPanelsShowing","ctrl","id_ref","parentCategoryId","_sortBy","panelId","ev","indexof","tabContent","hasAlertsTab","modalSelected","nonTearsheetTabs","filter","t","itemType","ItemType","TEARSHEET","totalTabs","panelItems","_getContainerIndex","additionalComponent","additionalComponents","categoryView","CATEGORY_VIEW","TABS","panelArrow","CHEVRONARROWS","DOWN","categoryOpen","UP","_showCategoryPanel","_getMessageCountForCategory","_filter","_modalTabsOnClick","subPanels","generateAdditionalPanels","indent","groupClassName","uiItems","uiContent","uiItem","inPropertyId","textClass","additionalItems","optionalPanels","parentPropertyId","_cloneDeep","updateLastChildPropertyId","createControlItem","subPanel","secondaryText","textType","PropertyUtil","Link","_handleMessageClick","genPrimaryTabs","genPanelSelector","generateCustomPanel","generateAction","customPanels","custPanel","_get","parameters","renderPanel","error","_step2","_iterator2","getSharedCtrlInfo","_step3","sharedCtrlNames","_iterator3","panelItem","addSharedControls","_this3","panelType","getActiveTearsheet","clearActiveTearsheet","newSelectedFields","newSelections","closeFieldPickerCallback","fieldPickerPropertyId","callback","dmImage","currentControlValues","fields","getFilteredDatasetMetadata","tableFieldIndex","formattedFieldsList","FieldPicker","currentFields","dmIcon","msgUIItems","map","ALERTS_TAB_TITLE","getUiItems","unshift","genAlertsTab","stackedTearsheet","wideFly","form","getForm","FIELDPICKER_SAVEBUTTON_LABEL","fieldPicker","componentMetadataReducer","getErrorMessages","dispatch","propertyOf_1","undefined","L10nProvider","resources","defaultVal","_propertyOf","resourceObj","resource_key","l10n","uiObject","l10nResource","baseKey","lookupKey","desc","ResourceDef","resource","Group","cname","actions","insertPanels","subGroups","copen","make","GroupType","CONTROLS","uiGroup","group_info","newGroup","makeGroup","GroupMetadata","groups","uiGroups","Action","actionName","ActionDef","actionDef","class_name","ActionMetadata","actionDefs","actionId","uihintsActions","actionsDefs","makeActionDef","ParameterDef","settings","valueRestriction","defaultValue","toType","parameter_ref","parameterRef","isList","isMapValue","labelVisible","orientation","placeHolderText","separator","visible","valueIcons","sortable","filterable","resizable","editStyle","required","numberGenerator","isKey","dmDefault","language","enableMaximize","increment","textAfter","textBefore","moveableRows","generatedValues","customControlId","rows","displayChars","uionly","actionRef","customValueAllowed","startsWith","EditStyle","SUBPANEL","OBJECT","baseType","getValidValues","ENUM","UNSPECIFIED","typ","trim","STRING","BOOLEAN","l10nProvider","defaultControl","defaultCol","Separator","AFTER","BEFORE","param","uihint","getParamUIHint","paramName","uihints","ParameterMetadata","paramDefs","paramDef","uihintsParams","uihintsUiParams","makeParameterDef","carbonIcon","enabled","divider","ButtonDef","buttonDef","carbon_icon","ButtonMetadata","buttonDefs","buttonId","uihintsButtons","makeButtonDef","StructureDef","keyDefinition","parameterMetadata","rowSelection","addRemoveRows","header","includeAllFields","layout","params","isSubPanelEdit","defaults","structure","makeParameterMetadata","makeButtonMetadata","getStructureUIHint","structureName","complex_type_ref","StructureMetadata","structures","structName","structureDef","uihintsStructures","_step4","structureDefs","_iterator4","struct","makeStructure","PropertyDef","editorSize","pixelWidth","labelEditable","help","structureMetadata","groupMetadata","actionMetadata","heading","titleDefinition","makeStructureMetadata","makeActionMetadata","makeGroupMetadata","getParameters","editable","DEFAULT_LABEL_EDITABLE","Control","additionalText","valueDescs","operation","start_value","startValue","structureType","childItem","keyIndex","defaultRow","hideEditButton","isKeyField","INLINE","UIItem","elements","PRIMARY_TABS","SUB_TABS","groupName","PANEL_SELECTOR","PANEL","dialogText","ADDITIONAL_LINK","CONTROL","ACTION","HORIZONTAL_SEPARATOR","STATIC_TEXT","TEXT_PANEL","CUSTOM_PANEL","_objectSpread","EditorTab","ValueDef","isMap","parameter","Label","Description","CustomControlPanel","NumberGenerator","range","makePrimaryTab","propertyDef","containerType","l10nLabel","additionalInfo","_makeUIItem","groupItem","groupLabel","groupType","makePanel","PanelType","GENERAL","_makeControls","COLUMN_SELECTION","ADDITIONAL","makeAdditionalLink","subTabItems","subGroup","subGroupName","makeSubTabs","panSelSubItems","_genPanelSelectorPanels","makePanelSelector","PANELS","panSubItems","COLUMN_PANEL","makeCustomPanel","CUSTOM","parameterNames","SUMMARY_PANEL","SUMMARY","ACTION_PANEL","groupDesc","actionIds","makeAction","_makeAction","getAction","_makeActions","makeTextPanel","TWISTY_PANEL","TEARSHEET_PANEL","additionalInfoUpdated","assign","makeTearsheetPanel","panelInsertedFor","prop","getParameter","getStructure","_makeControl","makeControl","separatorBefore","makeHSeparator","makeStaticText","getTextBefore","getTextBeforeType","getTextAfter","getTextAfterType","separatorAfter","RADIOSET","ORIENTATIONS","VERTICAL","_hasPanelBeenInserted","_makeStringControl","isSubControl","getRole","controlObj","TEXT","TEXTAREA","getValidValueCount","CHECKBOXSET","SOMEOFSELECT","SELECTCOLUMNS","_processListParameter","_isEmbeddedOption","ONEOFSELECT","_isEmbeddedMultiOption","SELECTCOLUMN","EXPRESSION","EMAIL","TEXTFIELD","URL","COLOR","structureDefinition","subControl","getAdditionalText","controlDesc","controlLabel","l10nDesc","returnObject","PASSWORD","PASSWORDFIELD","CHECKBOX","INTEGER","LONG","DOUBLE","NUMBERFIELD","DATE","TIME","TIMEFIELD","TIMESTAMP","hasSubPanel","_makeEditStyleSubPanel","keyAttributeIndex","defaultStructure","newSubControl","_makeSubControl","STRUCTURETABLE","STRUCTURELISTEDITOR","buttonMetadata","buttonLabel","buttonDescription","_makeButton","getButton","_makeButtons","STRUCTUREEDITOR","READONLY","isCompoundField","paramLabels","paramValue","l10nValueLabel","String","_parameterValueLabels","paramDescs","l10nValueDesc","_parameterValueDescription","CONTAINER_TYPE","columns","actionDesc","actionLabel","o","allowArrayLike","it","Symbol","iterator","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","from","test","_unsupportedIterableToArray","F","_e","TypeError","normalCompletion","didErr","step","next","_e2","arr","len","arr2","searchMessage","x","_typeof","message","Form","componentId","conditions","okBtn","cancelBtn","propDef","makePropertyDef","currentParameters","uiCurrentParameters","datasetMetadata","editorSizeDefault","MODAL","editorSizeHint","makePrimaryTabs","translateMessages","isPrimary","CommonPropertiesAction","_Action","newValues","initialValues","appData","applyPropertyChanges","propertiesActionLabel","properties","undoInfo","uiProperties","baseRest","isIterateeCall","assignValue","copyObject","createAssigner","assigner","sources","customizer","guard","source","isArrayLike","isPrototype","require$$4","require$$5","hasOwnProperty","assign_1","property","newState","updateNestedPropertyValue","states","strRow","strCol","validation_id","displayError","Number","isInteger","selectedRows","staticRows","componentMetadata","disableRowMoveButtons","propertyIds","setSaveButtonDisable","disableState","setWideFlyoutPrimaryButtonDisabled","updateNestedPropertySetting","_set","setting","tearsheetId","PropertiesStore","combinedReducer","combineReducers","propertiesReducer","controlStatesReducer","panelStatesReducer","errorMessagesReducer","datasetMetadataReducer","rowSelectionsReducer","disableRowMoveButtonsReducer","actionStatesReducer","wideFlyoutPrimaryButtonDisableReducer","tearsheetStatesReducer","saveButtonDisableReducer","propertiesSettingsReducer","rowFreezeReducer","enableDevTools","__REDUX_DEVTOOLS_EXTENSION__","store","createStore","subscribe","propValue","getState","getNestedPropertyValue","locState","colId","rowId","_isEqual","getPanelStates","setPanelStates","getActionStates","setActionStates","disablePrimaryButtonForPanel","enumFilter","controlMessage","returnMessage","clonedControlMsg","_getTableCellErrors","rowKey","rowMessage","colKey","colMessage","TABLE_SUMMARY_ERROR","TABLE_SUMMARY_WARNING","setDatasetMetadata","rowSelections","selection","rowStatic","getNestedPropertySetting","tableButtons","setTearsheetState","evaluate","paramsList","defaultParameter","or","and","condition","Error","parameter_2_ref","parseControl","parameterName","columnIndex","parseUiItem","summaryPanelId","CHECKBOX_SELECTOR","locPanelId","_step5","_iterator5","parseConditions","container","uiCondition","conditionType","definition","parameter_refs","uniqueList","Set","parseInput","groupDef","_setDefinitions","refs","group_refs","action_refs","target","j","setExpressionInfo","inExpressionInfo","expressionFunctionInfo","functions","expressionInfo","function_info","function_categories","functionInfoList","parmsSet","functionInfo","newEntry","locLabel","return_type_label","returnTypeLabel","locReturnType","_genFunctionParameters","functionCategories","category","functionList","function_refs","functionId","_getFunctionInfo","operators","operator_refs","field_categories","field_table_info","fieldCat","field_columns","field_column_info","value_column_info","fieldColInfoDesc","descLabel","valueColInfoDesc","additional_column_info","fieldInfo","find","functionElem","panelTree","currentPanel","_newPanelTreeObject","baseFlatten","baseUniq","isArrayLikeObject","last","unionWith_1","arrays","comparator","SetCache","arrayIncludes","arrayIncludesWith","arrayMap","baseUnary","cacheHas","nativeMin","Math","min","_baseIntersection","iteratee","othLength","othIndex","caches","maxLength","Infinity","array","seen","outer","computed","cache","_castArrayLikeObject","baseIntersection","castArrayLikeObject","intersectionWith_1","mapped","pop","validateInput","validation","fail_message","evaluateData","isValidation","failedErrorMessage","focus_parameter_ref","failedMessage","enum_filter","filteredEnum","allow_change","allowChange","default_value","conditionalDefault","filterDef","evaluateFilter","evaluated","op","param2","options","propertiesConfig","getPropertiesConfig","conditionDisabledPropertyHandling","filterDisabled","conditionHiddenPropertyHandling","filterHidden","param2Info","paramInfo","_getPropertyIdFromParam","getConditionOp","filterItem","conditionItem","conditionItems","inFields","newFields","_unionWith","orFilter","_intersectionWith","andFilter","_toConsumableArray","measurementValues","field","measurementValue","metadata","measure","_handleDmMeasurement","typeValues","typeValue","_handleDmType","roleValues","roleValue","modeling_role","_handleDmModelingRole","returnFields","filterFieldsFromSharedProps","_handleSharedFields","conditionFilter","paramPropertyID","offset","startCol","endCol","parseInt","_getColumnNumber","validatePropertiesValues","showErrors","getControls","controlKey","validatePropertiesListValues","validatePropertiesConditions","newStates","_validateConditionsByType","rowIndex","colIndex","subPropId","validatePropertiesListConditions","_propagateParentPanelStates","PANEL_TREE_ROOT","prevPropertyValues","_getConditionPropertyValues","_comparePropertyValues","validateConditions","_validateInput","runCount","newPropertyValues","updatePropertyIds","_union","prevPropertyValue","newPropertyValue","updateState","refState","propState","newPropState","ENABLED","hideColumn","updateColumnVisibility","getColumnVisibility","toggleColumnVisibility","updateEnumerationState","enumValue","getParamRefPropertyId","paramRef","controlPropertyId","baseParam","injectDefaultValidations","validationDefinitions","requiredDefinitionsIds","keyName","controlValId","seedrandom","rng","_injectRequiredDefinition","_injectDateTimeDefinition","locKeyName","_injectInvalidFieldDefinition","disabledOnly","currentPanelState","allowUpdate","_step6","_iterator6","_step7","_iterator7","_step8","_iterator8","errorSet","validations","getDefinitions","CONDITION_TYPE","VALIDATION","CONDITION_DEFINITION_INDEX","getRequiredDefinitionIds","_step9","output","_iterator9","errorMessage","DEFAULT_VALIDATION_MESSAGE","UiConditions","isError","msgPropertyId","alwaysShow","tablePropertyId","updateErrorMessage","_validateDefinitionsByType","VISIBLE","FILTEREDENUM","condType","_validateByType","definitions","evalState","_updateControlState","lastDefinition","currentDefinition","currentParameter","_isLastDefintiionForParameter","filtered","enumFilters","_getFilteredEnumItems","enumFilterApplied","filterApplied","_updateFilteredState","stateOn","visibleControl","_updateRefsState","_step10","newOnState","newOffState","notAllowedState","_iterator10","groupReferenceId","currentState","_getState","_updateStateIfParent","_updatePanelChildrenState","_updateGroupRefsControlState","refsList","refsType","_step11","refStates","_iterator11","referenceId","_step12","_iterator12","_updateStateIfPanel","_step13","_iterator13","panelPropertyId","_runRefsValidateDefinitions","_step14","_iterator14","_updatePanelChildrenObjectState","_step15","_iterator15","objectId","objectStates","dfnType","refsDefinitions","REFS","panelName","prevValue","previousValues","filterValues","valDefinitions","definitionId","injectedDefinition","default","REQUIRED_ERROR","dtFormat","DATETIME_FORMAT_ERROR","format","INVALID_FIELD_ERROR","getMetadataFieldMatch","field2","origName","field_name","schema","link_ref","intersection_1","ValidationMessage","tableOnly","msgText","msgIcon","FLATPICKR_DATE_TOKENS_REGEX","Y","y","m","d","getFormattedDate","inDate","date","Date","isNaN","year","getFullYear","month","getMonth","day","getDate","formattedDate","getISODate","toISOString","dateRegex","replaceAll","getDateFormatRegex","_getYearMonthDay","dateString","match","groupIdx","formatIdx","charAt","getYearMonthDay","ReadonlyControl","updateValueFromFilterEnum","prevProps","controlOpts","skipValidateInput","newValue","_intersection","updatePropertyValue","controlIndex","stringifyFieldValue","getCustomControl","table","DATA_TYPE","isValid","tableControl","FormattedDate","hour","minute","weekday","readOnly","controlItem","getControlState","getFilteredEnumItems","TextfieldControl","reactIntl","getMaxLengthForSingleLineControls","evt","joined","textInput","TRUNCATE_LONG_STRING_ERROR","truncate_limit","TextInput","autoComplete","placeholder","onChange","handleChange","labelText","hideLabel","textInputRef","tooltipProps","truncatedRef","ToggletextControl","valuesMap","iconsMap","imgSource","Isvg","alt","rendered","buttonType","iconDescription","TOGGLETEXT_ICON_DESCRIPTION","toggletext_label","TextareaControl","getMaxLengthForMultiLineControls","textArea","showValidationMessage","TextArea","NumberfieldControl","onDirection","generateNumber","originalValue","decimalsInOriginalValue","decimalsInIncrement","numValue","decimalPrecision","toFixed","validity","badInput","isFinite","INVALID_NUMBER_ERROR","actualValue","generator","max","floor","random","Shuffle16","tooltipPosition","tooltipAlignment","hasIconOnly","NumberInput","numberInput","allowEmpty","hideSteppers","baseFindIndex","toInteger","nativeMax","findIndex_1","fromIndex","TableButtons","getCustomButtonEnabled","customButtonIconCallback","customButtonOnClick","convertToolbarConfig","tableState","buttonConfig","tableDisabled","buttonEnabled","customButtonsState","buttonIconHandler","appIcon","buttonHandler","toolbarConfig","enable","iconEnabled","incLabelWithIcon","leftBar","customButtons","Toolbar","config","instanceId","toolbarActionHandler","SubPanelCell","initialControlValue","subPanelToolTip","SUBPANEL_BUTTON_TOOLTIP","Settings16","AbstractTable","filterText","enableRemoveIcon","onPanelContainer","allowColumnControls","isReadonlyTable","indexOfColumn","setCurrentControlValueSelected","setReadOnlyColumnValue","removeSelected","updateRowSelections","handleRowClick","createTable","onFilter","onSort","setScrollToRow","includeInFilter","makeAddRemoveButtonPanel","makeEditButtonPanel","makeCustomButtonsPanel","buildChildItem","makeCells","checkedAll","isLightTheme","scrollToRow","selectSummaryPropertyName","saveControls","setSelectedSummaryRowValue","updatedControlValues","UPDATE_TYPE","INITIAL_LOAD","isSelectSummaryEdit","updateSelectedRowsValues","removePropertyValue","filterString","spec","column","SORT_DIRECTION","DESC","reverse","colValue","inSelectedRows","idx2","controlValues","columnDef","summaryPropertyId","getDefaultRow","selectedSummaryRowValue","ROW_SELECTION","MULTIPLE","READONLYTABLE","_findIndex","columnControl","SINGLE","metaKey","ctrlKey","splice","shiftKey","anchor","end","newSelns","newSelectedSummaryRow","cellValue","testCell","updateSelectedRows","sort","a","b","removeErrorMessageRow","propertyName","selectSummaryRow","childPropertyId","setChildPropertyId","cellContent","tableInfo","columnDefObj","cellClassName","getDatasetMetadataFields","stringValue","ON_PANEL","createControl","defaultContent","cellPropertyId","filterFields","hasFilter","addOnClickCallback","onFieldPickerCloseCallback","rowsSelectedLabel","MULTI_SELECTED_ROW_LABEL","rowsSelectedAction","MULTI_SELECTED_ROW_ACTION","headers","makeHeader","tableLabel","FlexibleTable","showHeader","scrollKey","summaryTable","emptyTablePlaceholder","tableButtonConfig","fieldPickerCloseFunction","removeOnClick","removeButtonFunction","removeButtonLabel","STRUCTURETABLE_REMOVEBUTTON_LABEL","removeDisabled","addButtonDisabled","addButtonFunction","addButtonLabel","STRUCTURETABLE_ADDBUTTON_LABEL","TrashCan16","addOnClick","editButton","editCallback","editOnClickCallback","editOnClick","Edit16","customTableButtons","checked","sortFields","rowToScrollTo","selectedEditRow","makeSelectedEditRow","topRightPanel","rowClickCallback","colState","columnLabel","Checkbox","checkedAllValue","TABLE_SUBPANEL_BUTTON_WIDTH","staticWidth","propName","_makeCell","cell","subItemButton","buildUIItem","subCell","prevState","EmptyTable","getEmptyTableText","overrideEmptyTableTextKey","defaultEmptyTableText","PROPERTIES_EMPTY_TABLE_TEXT","button_label","emptyTableButtonLabel","getResource","emptyTableText","emptyTableButtonClickHandler","MoveableTableRows","getTableRowMoveImages","topMoveRow","upMoveRow","downMoveRow","bottomMoveRow","getMoveableTableRows","getLeastValue","getMaxValue","moveCol","moveImages","tableContainer","getSelectedRows","topEnabled","bottomEnabled","getStaticRows","topLabel","MOVEABLE_TABLE_BUTTON_TOP_DESCRIPTION","upLabel","MOVEABLE_TABLE_BUTTON_UP_DESCRIPTION","topImages","UpToTop24","ArrowUp24","bottomLabel","MOVEABLE_TABLE_BUTTON_DOWN_DESCRIPTION","downLabel","MOVEABLE_TABLE_BUTTON_BOTTOM_DESCRIPTION","ArrowDown24","DownToBottom24","leastValue","maxValue","firstRow","selectedRow","shift","tmpRow","moveErrorMessageRows","lastRow","isEmptyTable","isDisableRowMoveButtons","getAddRemoveRows","getTableButtons","NUMBER_TYPES","ListControl","_AbstractTable","addRow","controlPropType","getControlPropType","newRow","currentValue","listHeader","tableHeaders","makeCell","onClickCallback","LIST_TABLE_LABEL","STRUCTURELISTEDITOR_ADDBUTTON_LABEL","STRUCTURELISTEDITOR_REMOVEBUTTON_LABEL","makeRows","propTypes","PropTypes","isRequired","element","string","bool","FIELDS_SPECIAL_CHARACTERS_REGEX","ExpressionSelectFieldOrFunction","valueColumn","EXPRESSION_VALUE_COLUMN","valueColumnDesc","EXPRESSION_VALUE_COLUMN_DESCRIPTION","recentUseCat","EXPRESSION_RECENTLY_USED","recentUseCatInfo","EXPRESSION_RECENTLY_USED_COLUMN","inCategories","_makeDatasetFields","getExpressionInfo","fieldSelected","valueSelected","functionSelected","fieldTableSortSpec","valuesTableSortSpec","functionTableSortSpec","functionCategory","selectedIndex","fieldCategory","currentFieldDataset","field_value_groups","onFunctionCatChange","onFieldCatChange","onFieldFilter","onValueFilter","onFunctionFilter","onFieldTableClick","onFieldTableDblClick","onFunctionTableClick","onFunctionTableDblClick","onValueTableClick","onValueTableDblClick","sortTableRows","shouldQuoteField","switchName","selectedItem","currentData","getExpressionFieldsRecentlyUsed","updateExpressionFieldsRecentlyUsed","quote","fieldFilterText","fieldValue","minValue","valueFilterText","getExpressionRecentlyUsed","updateExpressionRecentlyUsed","functionFilterText","tableColumns","sortedData","expressionTableCellContent","expressionTableCellContentWithTooltip","dataset","fieldDataset","catIndex","infoIndex","fieldColumn","EXPRESSION_FIELD_COLUMN","fieldColumnDesc","EXPRESSION_FIELD_COLUMN_DESCRIPTION","storageColumn","EXPRESSION_STORAGE_COLUMN","fieldsCatInfo","EXPRESSION_FIELDS_DROPDOWN_TITLE","fieldsTableInfo","entry","additional_column_entries","val","_makeFieldDropdown","fieldHeaders","valueHeader","categoryInfo","tableContents","tableData","valuesTableData","fieldColumns","createContentObject","_makeAdditionalColumnsContent","_makeValuesContent","selectedField","findIndex","selectedValue","fieldsTableLabel","EXPRESSION_FIELDS_TABLE_LABEL","valuesTableLabel","EXPRESSION_VALUES_TABLE_LABEL","emptyFieldsLabel","EXPRESSION_FIELDS_EMPTY_TABLE_LABEL","emptyValuesLabel","EXPRESSION_VALUES_EMPTY_TABLE_LABEL","EXPRESSION_TABLE_ROWS","onRowDoubleClick","setSortColumn","minLabel","EXPRESSION_MIN_LABEL","maxLabel","EXPRESSION_MAX_LABEL","_addValueRow","valueColumns","categories","selectCategory","_makeFunctionDropdown","functionsTable","_makeFunctionsTable","items","first","TABLE_SEARCH_HEADER","listBoxMenuIconTranslationIds","DROPDOWN_TOOLTIP_CLOSEMENU","DROPDOWN_TOOLTIP_OPENMENU","Dropdown","translateWithId","titleText","newItems","_this4","functionColumn","EXPRESSION_FUNCTION_COLUMN","returnColumn","EXPRESSION_RETURN_COLUMN","_buildFunctionTable","selectedFunction","functionsTableLabel","EXPRESSION_FUNCTIONS_TABLE_LABEL","functionsEmptyLabel","EXPRESSION_NO_FUNCTIONS","helpContainer","categoryFunctions","catFunction","returnType","return_type","fieldAndValueTable","_makeFieldAndValuesContent","_makeFunctionsContent","fieldsTab","EXPRESSION_FIELD_TAB","functionsTab","EXPRESSION_FUNCTIONS_TAB","ContentSwitcher","onSwitch","Switch","ExpressionSelectOperator","operatorList","operatorButtons","operator","second","onOperatorClick","operatorDiv","_makeOperatorContent","ExpressionSelectionPanel","fieldsOrFunction","ExpressionBuilder","editorDidMount","onBlur","onSelectionChange","lastCursorPos","cursor","editor","getCursor","selectionOffset","somethingSelected","replaceSelection","buffer","setCursor","charBefore","getLine","line","ch","_setSelection","exprValue","getValue","skipValidate","expressionSelectionPanel","contains","relatedTarget","firstParam","head","lineCount","paramOffset","insertSelection","expressionLabel","EXPRESSION_BUILDER_LABEL","ExpressionControl","builder","selectionRange","CodeMirror","ExpressionToggle","Maximize16","EXPRESSION_MAXIMIZE_LABEL","tearsheet_ref","setActiveTearsheet","Minimize16","EXPRESSION_MINIMIZE_LABEL","scriptHint","_keywords","getToken","context","cur","token","tprop","start","completionList","found","maybeAdd","str","lastIndexOf","arrayContains","gatherCompletions","_obj","pythonBuiltinsL","pythonKeywordsL","obj","base","getCompletions","Pos","to","pythonHint","getTokenAt","rBuiltInsL","rKeywordsL","rHint","CLEMKeywords","CLEMHint","keywords","innerMode","getMode","getAutoCompletions","indx","defineMode","isSpecialChar","isDigit","isNumberChar","isWordChar","isOperatorChar","tokenResolve","stream","startOfLine","skipToEnd","tokenize","tokenString","tokenVariable","eatWhile","current","startState","eatSpace","electricChars","cm","navigator","require","registerHelper","registerPython","registerR","defineMIME","registerClem","showExpressionBuilder","validationInProgress","origHint","handleValidate","hasValidate","cancelExpressionBuilder","hideExpressionBuilder","addonHints","getDatasetFields","handleBlur","handleKeyDown","newPos","removed","validateIcon","setSelection","focus","results","controlWidth","expressionEditorDiv","clientWidth","charPerLine","setSize","getHelper","initialMessage","initialState","updateControlState","validationHandler","response","input","blur","code","classList","messageType","INFO","SUCCESS","theme","_showBuilderButton","Calculator24","EXPRESSION_BUILDER_ICON_DESCRIPTION","validateLabel","EXPRESSION_VALIDATING_LABEL","EXPRESSION_VALIDATE_LABEL","validateLink","mirrorOptions","mode","extraKeys","autoRefresh","lineNumbers","expressonTitle","EXPRESSION_BUILDER_TITLE","expressionLink","toggleMaxMin","isTearsheetOpen","codeMirror","onKeyDown","PasswordControl","overrideShowPasswordLabel","overrideHidePasswordLabel","defaultShowPasswordLabel","SHOW_PASSWORD_TOOLTIP","defaultHidePasswordLabel","HIDE_PASSWORD_TOOLTIP","showPasswordLabel","hidePasswordLabel","PasswordInput","DatefieldControl","getDateFormat","parse","formattedValue","DatepickerControl","locale","getLocale","getDatepickerSize","isoDate","helperText","DatePicker","datePickerType","DATEPICKER_TYPE","DatePickerInput","handleInputChange","DatepickerRangeControl","valueStart","valueEnd","createInfoDesc","isoStartDate","isoEndDate","datepickerRangeStartLabel","datepickerRangeStartDesc","datepickerRangeStartHelper","datepickerRangeEndLabel","datepickerRangeEndDesc","datepickerRangeEndHelper","defaultDatepickerRangeStartLabel","DATEPICKER_RANGE_START_LABEL","defaultDatepickerRangeEndLabel","DATEPICKER_RANGE_END_LABEL","startLabel","startDesc","startHelperText","endLabel","endDesc","endHelperText","RANGE","handleDateRangeChange","allowInput","handleInputStartChange","onStartBlur","handleInputEndChange","onEndBlur","TimefieldControl","getTimeFormat","time","CheckboxControl","tooltipIcon","checkboxLabel","Boolean","ToggleControl","overrideLabelKeyOn","overrideLabelKeyOff","defaultOnEditLabel","TOGGLE_ON_LABEL","defaultOffEditLabel","TOGGLE_OFF_LABEL","labelOn","labelOff","toggleControl","Toggle","toggled","labelB","labelA","onToggle","CheckboxsetControl","checkboxes","Information16","RadiosetControl","setEnabledStateOfOptionalPanels","handleCheckedDisabled","isRadioButtonDisabled","targetValue","valueSet","parsePanelTree","ConditionsUtils","panelIds","updateType","oldVal","newVal","convertTargetValue","radioValue","valueStates","itemDisabled","newRadioSelection","optionalPanel","getOptionalPanel","RadioButton","horizontal","getControlValueStates","DropDown","emptyLabel","disableEmptyListDropdown","overrideEmptyListPlaceholder","emptyLabelOverride","handleComboOnChange","handleOnInputChange","genSchemaSelectOptions","genSelectOptions","genFieldSelectOptions","selectedOption","option","schemaName","getSelectedOption","dropDown","SELECTSCHEMA","DROPDOWN_TOOLTIP_CLEARSELECTION","dropdownComponent","SelectItem","Select","inline","ComboBox","ariaLabel","onInputChange","getDatasetMetadataSchemas","MultiSelectControl","handleOnChange","setShouldRender","shouldRender","selectedValues","selectedOptions","selectedItems","multiSelectDropdown","DROPDOWN_TOOLTIP_CLEARALL","overrideEmptyLabelKey","defaultEmptyLabel","MULTISELECT_DROPDOWN_EMPTY_LABEL","overrideOptionsSelectedLabelKey","defaultOptionsSelectedLabel","MULTISELECT_DROPDOWN_OPTIONS_SELECTED_LABEL","FilterableMultiSelect","initialSelectedItems","MultiSelect","SomeofselectControl","updateSelections","tableOptions","selectable","SelectColumnsControl","allSelectedFields","FIELDPICKER_FIELDCOLUMN_LABEL","onFieldPickerClose","func","StructureEditorControl","controlFactory","subCtrlName","rowCtrlNames","_getSubControlDef","_getColumnIndex","_makeRow","_makeControlTable","negate","args","reject_1","StructureTableControl","addColumns","removeColumns","indexOfRow","columnName","columnNames","newRows","_reject","dataColumnIndex","NEW_COLUMN","defaultRowIndex","defaultRowValue","newControlValues","getOnPanelContainer","StructurelisteditorControl","ReadonlyTableControl","overrideLabelKey","defaultEditLabel","READONLYTABLE_EDIT_BUTTON_LABEL","getHideEditButton","ControlItem","showRequiredIndicator","indicator","LABEL_INDICATOR_REQUIRED","LABEL_INDICATOR_OPTIONAL","accessibleControls","SPINNER","TOGGLETEXT","LIST","TOGGLE","CODE","MULTISELECT","tableControls","createdControl","complex_types","dataModelFields","columnExists","fieldValueMatchesProto","fieldColumnValues","_findFieldColumnValues","columnValue","allValid","valueInDataset","dataModelField","baseValues","baseIndexOf","isString","dataType","_includes","param1Date","param2Date","getTime","valueDate","trimSpaces","startDate","endDate","regExp","timeDateFormat","valueLength","compareValue","getConditionOps","customOps","ops","cellNotEmpty","colNotExists","colDoesExists","equals","greaterThan","isEmpty","isNotEmpty","lessThan","matches","notContains","notEquals","notMatches","isDateTime","dmTypeEquals","dmTypeNotEquals","dmMeasurementEquals","dmMeasurementNotEquals","dmRoleEquals","dmRoleNotEquals","lengthEquals","lengthLessThan","lengthGreaterThan","custOp","PropertiesController","propertiesStore","handlers","propertyListener","controllerHandler","titleChangeHandler","visibleDefinitions","enabledDefinitions","filterDefinitions","filteredEnumDefinitions","allowChangeDefinitions","conditionalDefaultDefinitions","customControls","summaryPanelControls","controllerHandlerCalled","commandStack","CommandStack","custPropSumPanelValues","sharedCtrlInfo","isSummaryPanel","visibleSubPanelCounter","conditionOps","expressionRecentlyUsed","expressionFieldsRecentlyUsed","selectionListeners","getStore","inHandlers","DEFAULT_LOCALE","convertTypes","formData","makeForm","setForm","_parseUiConditions","UiConditionsParser","_parseSummaryControls","conditionsUtil","_assign","_addToControlValues","setInitialAddRemoveRows","setInitialTableButtonState","filteredTearsheets","FILTER","ALLOWCHANGE","CONDITIONALDEFAULT","dfnIndex","conditionDefinitions","retCond","conditionKey","baseId","convertNestedPropertyId","childProperties","panelTreeRoot","parseUiContent","resolveParameterRefs","_populateFieldData","multiSchema","_isMultiSchemaControl","_indexOfField","k","_getDefaultSubControlValue","fieldName","controlsNames","controlNames","getTitle","custOps","getDatasetMetadata","schemas","schemaNames","_filterSharedDataset","defs","skipControlName","sharedCtrlList","propNames","fieldNames","skipName","usedFields","sharedProp","arrayValue","fieldIdx","usedFieldsList","inDatasetMetadata","_loop","dupNamedSchemas","filterSchema","multipleSchemas","_canHaveMultipleSchemas","_notifySelectionListener","setDisableRowMoveButtons","getDisableRowMoveButtons","some","el","listener","selections","enumSet","replacementItems","newControl","_loop2","initialValue","allowValidations","convertedValue","_convertObjectStructure","ACTIONS","UPDATE_PROPERTY","previousValue","propertyValue","filteredValue","filterHiddenControls","controlState","getControlType","valueState","valueType","applyProperties","convert","returnValues","valueFilters","filteredValues","propKey","isInitProps","inValues","currentValues","convertedValues","conditionalDefaultValues","SET_PROPERTIES","updatePanelState","setActiveTearsheetId","getActiveTearsheetId","updateActionState","filterHiddenDisable","filterSuccess","filterDisplayError","_isUndefined","filteredPipeline","_filterDisplayErrors","_filterMessages","requiredMessages","_filterNonRequiredErrors","_filterHiddenDisabledErrors","filteredMessages","pipelineMessages","paramKey","paramMessage","_filterErrors","testMessage","parameterError","clearErrorMessage","_i","_Object$keys","rowNumber","_moveMessageRows","secondRow","firstRowErrorMsg","secondRowErrorMsg","_i2","_Object$keys2","colNumber","fromRow","toRow","valuesObj","valueObj","saveDisable","wideFlyoutPrimaryButtonDisable","setSummaryPanelControls","inSummary","createFormControl","customCtrl","renderControl","maxLengthForMultiLineControls","maxLengthForSingleLineControls","setAddRemoveRows","setHideEditButton","staticRowsArr","validateSelectionValues","updateStaticRows","clearStaticRows","_this5","setTableButtonEnabled","setInitialTableButtonSubControlState","_this6","valueIdx","getTableButtonEnabled","every","validateParameterDefAgainstSchema","parameterDef","validator","SchemaValidator","canvasPrefix","pipelinePrefix","addSchema","parameterDefsV3Schema","uihintsV3Schema","conditionsV3Schema","operatorsV3Schema","dataRecordMetadataV3Schema","getValidator","valResult","validate","nestedErrors","errors","console","validateAgainstSchema","TitleEditor","focused","titleValidation","editTitleClickHandler","helpClickHandler","createRef","TITLE_EDITOR_LABEL","textInputOnFocus","textInputOnBlur","headingEnabled","showHeading","handleTitleChange","newTitle","propertiesTitleEditButtonLabel","helpButtonLabel","TITLE_EDITOR_HELPBUTTON_LABEL","closeButtonLabel","PROPERTIESEDIT_CLOSEBUTTON_LABEL","titleValidationTypes","titleWithWarning","titleWithErrror","propertiesTitleEdit","helpButton","Help16","closeButton","closeHandler","Close16","rightFlyoutTabsView","onKeyPress","_handleKeyPress","onFocus","FLYOUT_WIDTH_SMALL","styles","flyoutWidthSmall","FLYOUT_WIDTH_MEDIUM","flyoutWidthMedium","FLYOUT_WIDTH_LARGE","flyoutWidthLarge","FLYOUT_WIDTH_MAX","flyoutWidthMax","PropertiesMain","propertiesController","setPropertiesConfig","propertiesInfo","initialEditorSize","setEditorSize","setCustomControls","setConditionOps","customConditionOps","setLight","setAppData","setHandlers","callbacks","previousErrorMessages","PROPERTIES_LOADED","getEditorSize","applyPropertiesEditing","updateEditorSize","_getOverrideSize","_getResizeButton","_isResizeButtonRequired","setPropertiesHasMounted","newProps","newEditorSize","schemaValidation","inputDataModel","originalTitle","initialValueInfo","uiParameterKeys","_getUiOnlyKeys","_setValueInforProperties","buttonLabels","primary","PROPERTIESEDIT_APPLYBUTTON_LABEL","secondary","PROPERTIESEDIT_REJECTBUTTON_LABEL","propertiesActionLabelHandler","PROPERTIES_ACTION_LABEL","node_label","defaultEditorSize","editorSizeInForm","overrideSize","resizeButton","LEFT","RIGHT","enableResize","valueInfo","conditionReturnValueHandling","CONDITION_RETURN_VALUE_HANDLING","NULL","returnValueFiltering","_omit","_pick","uiOnlyKeys","cancelSource","closePropertiesDialog","closeProperties","newErrorMessages","applyPropertiesWithoutEdit","errorMessages","getPropertiesActionLabel","command","getCommandStack","APPLY","applyOnBlurEnabled","CANCEL","getApplyButtonLabel","getRejectButtonLabel","propertiesLabel","propertiesTitle","buttonsContainer","resizeBtn","hasHeading","resizeIcon","resizeBtnLabel","PROPERTIESEDIT_RESIZEBUTTON_EXPAND_LABEL","PROPERTIESEDIT_RESIZEBUTTON_CONTRACT_LABEL","resize","editorForm","onHide","overrideStyle","Provider","forwardRef","CommonProperties","hasError","createPropertiesMainComponent","revertState","propertiesMainHasMounted","closeEditor","instance","closeAndRevertContainer","errorInfo","PROPERTIES_UNEXPECTED_MESSAGE","errorHeading","supportMessage","PROPERTIES_SUPPORT_MESSAGE","closeText","closeFunction","revertText","PROPERTIESEDIT_REVERTBUTTON_LABEL","revertFunction","propertiesLandmarkRoleLabel","PROPERTIES_ERROR_LABEL","PROPERTIES_REVERT_MESSAGE","PROPERTIES_CLOSE_MESSAGE","displayAppropriateUIFallback","ACCORDIONS","convertValueDataTypes"],"mappings":"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"}
|