@elyra/canvas 12.22.0 → 12.23.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/canvas-constants-09ffa4d4.js +2 -0
- package/dist/canvas-constants-09ffa4d4.js.map +1 -0
- package/dist/canvas-constants-ab55d0fd.js +2 -0
- package/dist/canvas-constants-ab55d0fd.js.map +1 -0
- package/dist/canvas-controller-017926a9.js +2 -0
- package/dist/canvas-controller-017926a9.js.map +1 -0
- package/dist/canvas-controller-51626884.js +2 -0
- package/dist/canvas-controller-51626884.js.map +1 -0
- package/dist/{canvas-logger-a0f1beaa.js → canvas-logger-3459dfc2.js} +2 -2
- package/dist/{canvas-logger-a0f1beaa.js.map → canvas-logger-3459dfc2.js.map} +1 -1
- package/dist/{canvas-logger-815781bb.js → canvas-logger-fa8cef5b.js} +2 -2
- package/dist/{canvas-logger-815781bb.js.map → canvas-logger-fa8cef5b.js.map} +1 -1
- package/dist/common-canvas-3330e83f.js +2 -0
- package/dist/common-canvas-3330e83f.js.map +1 -0
- package/dist/common-canvas-b2956514.js +2 -0
- package/dist/common-canvas-b2956514.js.map +1 -0
- package/dist/common-canvas.es.js +1 -1
- package/dist/common-canvas.es.js.map +1 -1
- package/dist/common-canvas.js +1 -1
- package/dist/common-canvas.js.map +1 -1
- package/dist/common-properties-9d77f8e1.js +2 -0
- package/dist/common-properties-9d77f8e1.js.map +1 -0
- package/dist/common-properties-a31de521.js +2 -0
- package/dist/common-properties-a31de521.js.map +1 -0
- package/dist/{createClass-6db89a23.js → createClass-72b049bc.js} +1 -1
- package/dist/createClass-72b049bc.js.map +1 -0
- package/dist/{createClass-32a0cf0f.js → createClass-d5cac0b7.js} +1 -1
- package/dist/createClass-d5cac0b7.js.map +1 -0
- package/dist/{datarecord-metadata-v3-schema-6b6384ff.js → datarecord-metadata-v3-schema-03db5d5d.js} +2 -2
- package/dist/{datarecord-metadata-v3-schema-6b6384ff.js.map → datarecord-metadata-v3-schema-03db5d5d.js.map} +1 -1
- package/dist/{datarecord-metadata-v3-schema-81228a9a.js → datarecord-metadata-v3-schema-07d7682c.js} +2 -2
- package/dist/{datarecord-metadata-v3-schema-81228a9a.js.map → datarecord-metadata-v3-schema-07d7682c.js.map} +1 -1
- package/dist/extends-87da7df3.js +7 -0
- package/dist/extends-87da7df3.js.map +1 -0
- package/dist/{extends-12382a72.js → extends-dc95dba8.js} +2 -2
- package/dist/extends-dc95dba8.js.map +1 -0
- package/dist/flexible-table-59ad2c83.js +2 -0
- package/dist/flexible-table-59ad2c83.js.map +1 -0
- package/dist/flexible-table-5c4fbb7b.js +2 -0
- package/dist/flexible-table-5c4fbb7b.js.map +1 -0
- package/dist/{getPrototypeOf-bf88242f.js → getPrototypeOf-4e282dd3.js} +1 -1
- package/dist/getPrototypeOf-4e282dd3.js.map +1 -0
- package/dist/{getPrototypeOf-a1c3fe64.js → getPrototypeOf-b3806813.js} +1 -1
- package/dist/getPrototypeOf-b3806813.js.map +1 -0
- package/dist/{icon-1ef0f3b9.js → icon-2c16236a.js} +2 -2
- package/dist/{icon-162ec1ee.js.map → icon-2c16236a.js.map} +1 -1
- package/dist/{icon-162ec1ee.js → icon-816af0e7.js} +2 -2
- package/dist/{icon-1ef0f3b9.js.map → icon-816af0e7.js.map} +1 -1
- package/dist/index-2f6be19d.js +2 -0
- package/dist/index-2f6be19d.js.map +1 -0
- package/dist/index-6f739fa1.js +2 -0
- package/dist/index-6f739fa1.js.map +1 -0
- 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.es.js.map +1 -1
- package/dist/lib/command-stack.js +1 -1
- package/dist/lib/command-stack.js.map +1 -1
- package/dist/lib/context-menu.es.js +1 -1
- package/dist/lib/context-menu.es.js.map +1 -1
- package/dist/lib/context-menu.js +1 -1
- package/dist/lib/context-menu.js.map +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.es.js.map +1 -1
- package/dist/lib/tooltip.js +1 -1
- package/dist/lib/tooltip.js.map +1 -1
- package/dist/styles/common-canvas.min.css +1 -1
- package/dist/styles/common-canvas.min.css.map +1 -1
- package/dist/{toolbar-bb5bee87.js → toolbar-2ef99bd8.js} +2 -2
- package/dist/{toolbar-59ce5251.js.map → toolbar-2ef99bd8.js.map} +1 -1
- package/dist/{toolbar-59ce5251.js → toolbar-cb967e26.js} +2 -2
- package/dist/{toolbar-bb5bee87.js.map → toolbar-cb967e26.js.map} +1 -1
- package/locales/common-properties/locales/en.json +2 -0
- package/package.json +1 -1
- package/src/common-canvas/cc-contents.jsx +14 -2
- package/src/common-canvas/constants/canvas-constants.js +1 -0
- package/src/common-canvas/svg-canvas-d3.js +8 -0
- package/src/common-canvas/svg-canvas-d3.scss +1 -1
- package/src/common-canvas/svg-canvas-renderer.js +165 -130
- package/src/common-canvas/svg-canvas-utils-decs.js +3 -2
- package/src/common-canvas/svg-canvas-utils-textarea.js +19 -5
- package/src/common-properties/components/editor-form/editor-form.jsx +6 -8
- package/src/common-properties/components/flexible-table/flexible-table.scss +1 -0
- package/src/common-properties/components/virtualized-table/virtualized-table.jsx +38 -34
- package/src/common-properties/components/virtualized-table/virtualized-table.scss +17 -0
- package/src/common-properties/constants/constants.js +3 -0
- package/src/common-properties/controls/expression/expression-builder/expression-select-field-function.jsx +25 -18
- package/src/common-properties/controls/expression/expressionInfo-parser.js +11 -0
- package/src/common-properties/controls/passwordfield/passwordfield.jsx +2 -2
- package/src/common-properties/controls/toggle/toggle.jsx +1 -3
- package/src/common-properties/controls/toggle/toggle.scss +7 -4
- package/src/common-properties/form/EditorForm.js +4 -2
- package/src/common-properties/ui-conditions/ui-conditions-parser.js +1 -1
- package/src/common-properties/ui-conditions/ui-groups-parser.js +1 -1
- package/src/common-properties/util/property-utils.js +3 -0
- package/src/context-menu/common-context-menu.jsx +7 -0
- package/src/context-menu/context-menu-wrapper.jsx +30 -15
- package/src/object-model/api-pipeline.js +6 -9
- package/src/object-model/layout-dimensions.js +2 -2
- package/src/object-model/pipeline-out-handler.js +1 -1
- package/src/object-model/redux/reducers/canvasinfo.js +0 -1
- package/src/object-model/redux/reducers/nodes.js +0 -9
- package/stats.html +1 -1
- package/dist/canvas-constants-34cdb7df.js +0 -2
- package/dist/canvas-constants-34cdb7df.js.map +0 -1
- package/dist/canvas-constants-3c09c7f6.js +0 -2
- package/dist/canvas-constants-3c09c7f6.js.map +0 -1
- package/dist/canvas-controller-ccb05f9f.js +0 -2
- package/dist/canvas-controller-ccb05f9f.js.map +0 -1
- package/dist/canvas-controller-feabad26.js +0 -2
- package/dist/canvas-controller-feabad26.js.map +0 -1
- package/dist/common-canvas-bcfe04ef.js +0 -2
- package/dist/common-canvas-bcfe04ef.js.map +0 -1
- package/dist/common-canvas-c4f77878.js +0 -2
- package/dist/common-canvas-c4f77878.js.map +0 -1
- package/dist/common-properties-597dd249.js +0 -2
- package/dist/common-properties-597dd249.js.map +0 -1
- package/dist/common-properties-de0ca66b.js +0 -2
- package/dist/common-properties-de0ca66b.js.map +0 -1
- package/dist/createClass-32a0cf0f.js.map +0 -1
- package/dist/createClass-6db89a23.js.map +0 -1
- package/dist/extends-12382a72.js.map +0 -1
- package/dist/extends-195c6b49.js +0 -7
- package/dist/extends-195c6b49.js.map +0 -1
- package/dist/flexible-table-056c538e.js +0 -2
- package/dist/flexible-table-056c538e.js.map +0 -1
- package/dist/flexible-table-7fb8a62e.js +0 -2
- package/dist/flexible-table-7fb8a62e.js.map +0 -1
- package/dist/getPrototypeOf-a1c3fe64.js.map +0 -1
- package/dist/getPrototypeOf-bf88242f.js.map +0 -1
- package/dist/index-61be3509.js +0 -2
- package/dist/index-61be3509.js.map +0 -1
- package/dist/index-8076376e.js +0 -2
- package/dist/index-8076376e.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-6f739fa1.js","sources":["../src/common-properties/components/properties-buttons/properties-buttons.jsx","../node_modules/lodash/isEqual.js","../src/common-properties/constants/form-constants.js","../node_modules/lodash/_createBaseEach.js","../node_modules/lodash/_baseEach.js","../node_modules/lodash/_baseMap.js","../node_modules/lodash/_compareAscending.js","../node_modules/lodash/_compareMultiple.js","../node_modules/lodash/_baseOrderBy.js","../node_modules/lodash/_baseSortBy.js","../node_modules/lodash/_isIterateeCall.js","../node_modules/lodash/sortBy.js","../utils/logger.js","../src/common-properties/util/property-utils.js","../src/common-properties/components/truncated-content-tooltip/truncated-content-tooltip.jsx","../src/common-properties/components/truncated-content-tooltip/index.js","../src/common-properties/components/field-picker/field-picker.jsx","../src/common-properties/components/field-picker/index.js"],"sourcesContent":["/*\n * Copyright 2017-2022 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 { injectIntl } from \"react-intl\";\nimport PropTypes from \"prop-types\";\nimport { Button } from \"carbon-components-react\";\nimport classNames from \"classnames\";\nimport defaultMessages from \"../../../../locales/common-properties/locales/en.json\";\n\n\nclass PropertiesButtons extends Component {\n\n\trender() {\n\t\tconst applyButtonLabel = (typeof this.props.applyLabel === \"undefined\")\n\t\t\t? this.props.intl.formatMessage({ id: \"propertiesEdit.applyButton.label\", defaultMessage: defaultMessages[\"propertiesEdit.applyButton.label\"] })\n\t\t\t: this.props.applyLabel;\n\t\tconst rejectButtonLabel = (typeof this.props.rejectLabel === \"undefined\")\n\t\t\t? this.props.intl.formatMessage({ id: \"propertiesEdit.rejectButton.label\", defaultMessage: defaultMessages[\"propertiesEdit.rejectButton.label\"] })\n\t\t\t: this.props.rejectLabel;\n\n\t\tlet rejectButton;\n\t\tif (this.props.cancelHandler) {\n\t\t\trejectButton = (\n\t\t\t\t<Button\n\t\t\t\t\tdata-id=\"properties-cancel-button\"\n\t\t\t\t\tclassName=\"properties-cancel-button\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tkind=\"secondary\"\n\t\t\t\t\tonClick={this.props.cancelHandler}\n\t\t\t\t>\n\t\t\t\t\t{rejectButtonLabel}\n\t\t\t\t</Button>\n\t\t\t);\n\t\t}\n\t\tlet applyButton;\n\t\tif (this.props.okHandler) {\n\t\t\tapplyButton = (\n\t\t\t\t<Button\n\t\t\t\t\tdata-id=\"properties-apply-button\"\n\t\t\t\t\tclassName=\"properties-apply-button\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tonClick={this.props.okHandler}\n\t\t\t\t\tdisabled={!this.props.applyButtonEnabled}\n\t\t\t\t>\n\t\t\t\t\t{applyButtonLabel}\n\t\t\t\t</Button>\n\t\t\t);\n\t\t}\n\n\t\tconst propertiesModalButtons = this.props.okHandler || this.props.cancelHandler\n\t\t\t? (\n\t\t\t\t<div\n\t\t\t\t\tclassName={classNames(\"properties-modal-buttons\", { \"hide\": (typeof (this.props.showPropertiesButtons) !== \"undefined\" &&\n\t\t\t\t\t\t!this.props.showPropertiesButtons) })}\n\t\t\t\t>\n\t\t\t\t\t{rejectButton}\n\t\t\t\t\t{applyButton}\n\t\t\t\t</div>\n\t\t\t)\n\t\t\t: null;\n\n\t\treturn propertiesModalButtons;\n\t}\n}\n\nPropertiesButtons.propTypes = {\n\tintl: PropTypes.object.isRequired,\n\tcancelHandler: PropTypes.func,\n\tokHandler: PropTypes.func,\n\tapplyLabel: PropTypes.string,\n\trejectLabel: PropTypes.string,\n\tshowPropertiesButtons: PropTypes.bool,\n\tapplyButtonEnabled: PropTypes.bool\n};\n\nPropertiesButtons.defaultProps = {\n\tapplyButtonEnabled: true\n};\n\nexport default injectIntl(PropertiesButtons);\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","/*\n * Copyright 2017-2022 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\nconst ItemType = {\n\tCONTROL: \"control\",\n\tADDITIONAL_LINK: \"additionalLink\",\n\tSTATIC_TEXT: \"staticText\",\n\tHORIZONTAL_SEPARATOR: \"hSeparator\",\n\tPANEL: \"panel\",\n\tTEARSHEET: \"tearsheet\",\n\tSUB_TABS: \"subTabs\",\n\tPRIMARY_TABS: \"primaryTabs\",\n\tPANEL_SELECTOR: \"panelSelector\",\n\tCUSTOM_PANEL: \"customPanel\",\n\tACTION: \"action\",\n\tTEXT_PANEL: \"textPanel\"\n};\n\nconst EditStyle = {\n\tINLINE: \"inline\",\n\tSUBPANEL: \"subpanel\",\n\tON_PANEL: \"on_panel\"\n};\n\nconst Size = {\n\tLARGE: \"large\",\n\tMEDIUM: \"medium\",\n\tSMALL: \"small\"\n};\n\nconst GroupType = {\n\tCONTROLS: \"controls\",\n\tTABS: \"tabs\", // currently not used\n\tSUB_TABS: \"subTabs\",\n\tPANELS: \"panels\",\n\tADDITIONAL: \"additional\",\n\tCOLUMN_SELECTION: \"columnSelection\",\n\tPANEL_SELECTOR: \"panelSelector\",\n\tCUSTOM_PANEL: \"customPanel\",\n\tSUMMARY_PANEL: \"summaryPanel\",\n\tACTION_PANEL: \"actionPanel\",\n\tTEXT_PANEL: \"textPanel\",\n\tTWISTY_PANEL: \"twistyPanel\",\n\tCOLUMN_PANEL: \"columnPanel\",\n\tTEARSHEET_PANEL: \"tearsheetPanel\"\n};\n\nconst PanelType = {\n\tGENERAL: \"general\",\n\tCOLUMN_SELECTION: \"columnSelection\",\n\tCUSTOM: \"custom\",\n\tSUMMARY: \"summary\",\n\tACTION_PANEL: \"actionPanel\",\n\tTWISTY_PANEL: \"twisty\",\n\tCOLUMN_PANEL: \"column\",\n\tTEARSHEET: \"tearsheet\"\n};\n\nconst ControlType = {\n\tCUSTOM: \"custom\",\n\tTEXTFIELD: \"textfield\",\n\tPASSWORDFIELD: \"passwordfield\",\n\tTEXTAREA: \"textarea\",\n\tLIST: \"list\",\n\tEXPRESSION: \"expression\",\n\tNUMBERFIELD: \"numberfield\",\n\tDATEFIELD: \"datefield\",\n\tTIMEFIELD: \"timefield\",\n\tTIMESTAMP: \"timestampfield\",\n\tCHECKBOX: \"checkbox\",\n\tTOGGLE: \"toggle\",\n\tRADIOSET: \"radioset\",\n\tCHECKBOXSET: \"checkboxset\",\n\tONEOFSELECT: \"oneofselect\",\n\tMULTISELECT: \"multiselect\",\n\tSOMEOFSELECT: \"someofselect\",\n\tSELECTCOLUMN: \"selectcolumn\",\n\tSELECTCOLUMNS: \"selectcolumns\",\n\tSELECTSCHEMA: \"selectschema\",\n\tSTRUCTURETABLE: \"structuretable\",\n\tSTRUCTUREEDITOR: \"structureeditor\",\n\tSTRUCTURELISTEDITOR: \"structurelisteditor\",\n\tTOGGLETEXT: \"toggletext\",\n\tREADONLY: \"readonly\",\n\tREADONLYTABLE: \"readonlyTable\",\n\tSPINNER: \"spinner\",\n\tCODE: \"code\",\n\tHIDDEN: \"hidden\"\n};\n\nconst ParamRole = {\n\tTEXT: \"text\",\n\tENUM: \"enum\",\n\tCOLUMN: \"column\",\n\tNEW_COLUMN: \"new_column\",\n\tEXPRESSION: \"expression\",\n\tEMAIL: \"email\",\n\tURL: \"url\",\n\tCOLOR: \"color\",\n\tINTERVAL_YEAR: \"interval_year\",\n\tINTERVAL_DAY: \"interval_day\",\n\tINTERVAL_SECOND: \"interval_second\",\n\tCUSTOM: \"custom\",\n\tUNSPECIFIED: \"\"\n};\n\nconst Type = {\n\tBOOLEAN: \"boolean\",\n\tINTEGER: \"integer\",\n\tLONG: \"long\",\n\tDOUBLE: \"double\",\n\tSTRING: \"string\",\n\tPASSWORD: \"password\",\n\tDATE: \"date\",\n\tTIME: \"time\",\n\tTIMESTAMP: \"timestamp\",\n\tSTRUCTURE: \"structure\",\n\tOBJECT: \"object\"\n};\n\nconst Separator = {\n\tBEFORE: \"before\",\n\tAFTER: \"after\"\n};\n\nconst ORIENTATIONS = {\n\tVERTICAL: \"vertical\",\n\tHORIZONTAL: \"horizontal\"\n};\n\nfunction hasValue(Enum, value) {\n\tfor (var key in Enum) {\n\t\tif (value === Enum[key]) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport { GroupType, PanelType, Type, ParamRole, ControlType, hasValue, EditStyle, Size, ItemType, Separator, ORIENTATIONS };\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nmodule.exports = compareAscending;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","var arrayMap = require('./_arrayMap'),\n baseGet = require('./_baseGet'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n baseSortBy = require('./_baseSortBy'),\n baseUnary = require('./_baseUnary'),\n compareMultiple = require('./_compareMultiple'),\n identity = require('./identity'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nmodule.exports = baseOrderBy;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nmodule.exports = baseSortBy;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseFlatten = require('./_baseFlatten'),\n baseOrderBy = require('./_baseOrderBy'),\n baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\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|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","/*\n * Copyright 2017-2022 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 no-console: [\"error\", { allow: [\"log\", \"warn\", \"error\"] }] */\n\n// Modules\n\n// Globals\n\n// Private Methods ------------------------------------------------------------>\n\nfunction _getErrorMessage(prefix, errorObject, id) {\n\tvar classID = \"\";\n\tvar lineNumber = \"\";\n\tvar message = \"\";\n\n\t// Class name\n\tif (id) {\n\t\tclassID = id + \": \";\n\t}\n\n\tif (errorObject) {\n\t\t// Line number\n\t\tif (errorObject.lineNumber) {\n\t\t\tlineNumber = \"(line \" + errorObject.lineNumber + \"): \";\n\t\t}\n\t\t// Error message\n\t\tif (errorObject.message) {\n\t\t\tmessage = errorObject.message;\n\t\t} else {\n\t\t\tmessage = \"Message unavailable\";\n\t\t}\n\t}\n\n\tvar errorMessage = \"[\" + prefix + \"]: \" +\n\t\t\t\t\t\tclassID +\n\t\t\t\t\t\tlineNumber +\n\t\t\t\t\t\tmessage;\n\n\treturn errorMessage;\n}\n\n/**\n * Prints a DEBUG status message to the console.\n *\n * @param {String} id: Logging ID included in status message.\n * @param {String} errorObject: Error object used to wrap message & line number.\n *\n * @returns void\n */\nfunction _debug(id, errorObject) {\n\tconsole.log(_getErrorMessage(\"DEBUG\", errorObject, id));\n}\n\n/**\n * Prints a INFO status message to the console.\n *\n * @param {String} id: Logging ID included in status message.\n * @param {String} errorObject: Error object used to wrap message & line number.\n *\n * @returns void\n */\nfunction _info(id, errorObject) {\n\tconsole.log(_getErrorMessage(\"INFO\", errorObject, id));\n}\n\n/**\n * Prints a WARNING status message to the console.\n *\n * @param {String} id: Logging ID included in status message.\n * @param {String} errorObject: Error object used to wrap message & line number.\n *\n * @returns void\n */\nfunction _warning(id, errorObject) {\n\tconsole.warn(_getErrorMessage(\"WARNING\", errorObject, id));\n}\n\n/**\n * Prints a ERROR status message to the console.\n *\n * @param {String} id: Logging ID included in status message.\n * @param {String} errorObject: Error object used to wrap message & line number.\n *\n * @returns void\n */\nfunction _error(id, errorObject) {\n\tconsole.error(_getErrorMessage(\"ERROR\", errorObject, id));\n}\n\n// Public Methods ------------------------------------------------------------->\n\nmodule.exports.debug = _debug;\nmodule.exports.info = _info;\nmodule.exports.warn = _warning;\nmodule.exports.error = _error;\n","/*\n * Copyright 2017-2022 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 logger from \"../../../utils/logger\";\nimport { ParamRole } from \"../constants/form-constants\";\nimport { DATA_TYPE, CARBON_ICONS } from \"../constants/constants\";\nimport { cloneDeep } from \"lodash\";\nimport { v4 as uuid4 } from \"uuid\";\nimport defaultMessages1 from \"../../../locales/common-properties/locales/en.json\";\nimport defaultMessages2 from \"../../../locales/command-actions/locales/en.json\";\n\n/**\n * A better type identifier than a simple 'typeOf' call:\n *\n * \ttoType({a: 4}); //\"object\"\n *\ttoType([1, 2, 3]); //\"array\"\n *\t(function() {console.log(toType(arguments))})(); //arguments\n *\ttoType(new ReferenceError); //\"error\"\n *\ttoType(new Date); //\"date\"\n *\ttoType(/a-z/); //\"regexp\"\n *\ttoType(Math); //\"math\"\n *\ttoType(JSON); //\"json\"\n *\ttoType(new Number(4)); //\"number\"\n *\ttoType(new String(\"abc\")); //\"string\"\n *\ttoType(new Boolean(true)); //\"boolean\"\n */\nfunction toType(obj) {\n\treturn ({}).toString.call(obj).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\nfunction copy(obj) {\n\tif (typeof obj !== \"undefined\") {\n\t\treturn cloneDeep(obj);\n\t}\n\treturn obj;\n}\n\nfunction formatMessage(intl, key, substituteObj) {\n\tconst defaultMessages = { ...defaultMessages1, ...defaultMessages2 };\n\tlet formattedMessage;\n\tif (typeof intl !== \"undefined\" && intl !== null) {\n\t\tif (intl.messages[key] === \"\") {\n\t\t\treturn \"\"; // Allow empty strings\n\t\t}\n\t\tformattedMessage = intl.formatMessage({ id: key, defaultMessage: defaultMessages[key] }, substituteObj);\n\t} else {\n\t\tformattedMessage = defaultMessages[key];\n\t}\n\treturn formattedMessage;\n}\n\nfunction generateId() {\n\treturn \"properties-\" + uuid4();\n}\n\n/*\n* Parses text to see if there is any text replace elements ${}\n*/\nfunction evaluateText(text, controller) {\n\ttry {\n\t\tif (!text) {\n\t\t\treturn text;\n\t\t}\n\t\tconst startIdx = text.indexOf(\"${\");\n\t\tif (startIdx < 0) {\n\t\t\treturn text;\n\t\t}\n\t\tconst endIdx = text.substr(startIdx + 2).indexOf(\"}\");\n\t\tif (endIdx < 0) {\n\t\t\treturn text;\n\t\t}\n\t\tconst expression = text.substr(startIdx + 2, endIdx);\n\t\tconst newText = text.replace(\"${\" + expression + \"}\", _evaluateExpression(expression, controller));\n\t\treturn evaluateText(newText, controller); // test to see if there are more expressions\n\t} catch (e) {\n\t\tlogger.warn(\"Invalid expression. Make sure replacement expression in text is a valid expression.\");\n\t\treturn text;\n\t}\n}\n\nfunction _evaluateExpression(expression, controller) {\n\tconst paramStartIdx = expression.indexOf(\"(\");\n\tconst funcName = expression.substr(0, paramStartIdx);\n\tconst parameters = expression.slice(paramStartIdx + 1, -1).split(\",\");\n\tif (parameters.length === 0) {\n\t\treturn \"\";\n\t}\n\tlet value;\n\tlet paramValue;\n\tswitch (funcName) {\n\tcase \"percent\":\n\t\tparamValue = _getExpParameterValue(parameters[0], controller);\n\t\t// 0, undefined, null, or not a number return 0\n\t\tif (!paramValue || isNaN(paramValue)) {\n\t\t\treturn 0;\n\t\t}\n\t\tvalue = 100.0 / paramValue;\n\t\tif (parameters.length > 1) {\n\t\t\tvalue = value.toFixed(parseInt(parameters[1], 10));\n\t\t}\n\t\treturn value;\n\tcase \"sum\":\n\t\tvalue = 0;\n\t\tfor (const param of parameters) {\n\t\t\tparamValue = _getExpParameterValue(param, controller);\n\t\t\tif (!isNaN(paramValue)) {\n\t\t\t\tvalue += paramValue;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\tdefault:\n\t\tbreak;\n\t}\n\treturn \"\";\n}\n\nfunction _getExpParameterValue(expParam, controller) {\n\t// assume property if parameter is a string\n\tif (isNaN(expParam)) {\n\t\treturn controller.getPropertyValue({ name: expParam.trim() });\n\t}\n\treturn parseFloat(expParam);\n}\n\nfunction getTableFieldIndex(control) {\n\tif (control) {\n\t\t// table\n\t\tif (control.subControls) {\n\t\t\tfor (let i = 0; i < control.subControls.length; i++) {\n\t\t\t\tif (control.subControls[i].role === ParamRole.COLUMN) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (control.role === ParamRole.COLUMN) { // array\n\t\t\treturn 0;\n\t\t}\n\t}\n\treturn -1;\n}\n\n// TODO: This can be removed once the WML Play service generates datasetMetadata instead of inputDataModel\n/**\n * Converts old style Modeler inputDataModel into newer datasetMetadata\n */\nfunction convertInputDataModel(dataModel) {\n\tconst datasetMetadata = {};\n\tdatasetMetadata.fields = [];\n\tif (dataModel && dataModel.columns) {\n\t\tfor (const column of dataModel.columns) {\n\t\t\tconst field = {};\n\t\t\tfield.name = column.name;\n\t\t\tfield.type = convertType(column.storage);\n\t\t\tfield.metadata = {};\n\t\t\tfield.metadata.description = \"\";\n\t\t\tif (column.measure) {\n\t\t\t\tfield.metadata.measure = column.measure.toLowerCase();\n\t\t\t}\n\t\t\tif (column.modelingRole) {\n\t\t\t\tfield.metadata.modeling_role = column.modelingRole.toLowerCase();\n\t\t\t}\n\t\t\tdatasetMetadata.fields.push(field);\n\t\t}\n\t}\n\treturn datasetMetadata;\n}\n\n/**\n * Converts from Modeler storage to WML type.\n */\nfunction convertType(storage) {\n\tlet retVal = storage.toLowerCase();\n\tif (storage === \"Real\") {\n\t\tretVal = \"double\";\n\t}\n\treturn retVal;\n}\n\n/**\n * Returns true if any subControl within control has 'structureType === object'\n */\nfunction isSubControlStructureObjectType(control) {\n\tif (control) {\n\t\tif (control.structureType && control.structureType === \"object\") {\n\t\t\treturn true;\n\t\t} else if (control.subControls) {\n\t\t\tfor (const subControl of control.subControls) {\n\t\t\t\tif (subControl.structureType && subControl.structureType === \"object\") {\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (subControl.subControls) {\n\t\t\t\t\tconst objectType = isSubControlStructureObjectType(subControl);\n\t\t\t\t\tif (objectType) { // continue if false\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\treturn false;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Converts the currentValues of a structure control of type 'object'\n * from an array of objects to an array of values.\n * @isList boolean, true if this structure is a list\n * Example currentValues: [{a: 1, b: 2}, {a: 10, b; 20}] || {z: 9, y: 88, x: [\"abc\", \"def\"]}\n * Example convertedValues: [[1, 2], [10, 20]] || [9, 88, [\"abc\", \"def\"]]\n */\nfunction convertObjectStructureToArray(isList, subControls, currentValues) {\n\tconst structureKeys = [];\n\tsubControls.forEach((control) => {\n\t\tstructureKeys.push(control.name);\n\t});\n\n\tif (isList) {\n\t\tconst convertedValues = [];\n\t\tif (typeof currentValues === \"object\" && currentValues !== null && Object.keys(currentValues).length > 0) {\n\t\t\tcurrentValues.forEach((row) => {\n\t\t\t\tif (Array.isArray(row)) { // check if any values in the row is a nested object\n\t\t\t\t\tconst convertedRow = [];\n\t\t\t\t\trow.forEach((field, index) => {\n\t\t\t\t\t\tlet value = field;\n\t\t\t\t\t\tif (typeof field === \"object\" && field !== null && Object.keys(field).length > 0) {\n\t\t\t\t\t\t\tvalue = convertObjectStructureToArray(subControls[index].valueDef.isList, subControls[index].subControls, field);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconvertedRow.push(value);\n\t\t\t\t\t});\n\t\t\t\t\tconvertedValues.push(convertedRow);\n\t\t\t\t} else if (typeof row === \"object\") {\n\t\t\t\t\tconst convertedRow = [];\n\t\t\t\t\tstructureKeys.forEach((key, index) => {\n\t\t\t\t\t\tlet value = typeof row[key] !== \"undefined\" ? row[key] : null;\n\t\t\t\t\t\t// subControls that are type 'object' will need to be converted\n\t\t\t\t\t\tif (subControls[index].structureType && subControls[index].structureType === \"object\") {\n\t\t\t\t\t\t\tvalue = convertObjectStructureToArray(subControls[index].valueDef.isList, subControls[index].subControls, row[key]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconvertedRow.push(value);\n\t\t\t\t\t});\n\t\t\t\t\tconvertedValues.push(convertedRow);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn convertedValues;\n\t}\n\n\tconst converted = [];\n\tstructureKeys.forEach((key, index) => {\n\t\tconst value = typeof currentValues[key] !== \"undefined\" ? currentValues[key] : null;\n\t\tconverted.push(value);\n\t});\n\treturn converted;\n}\n\n/**\n * Converts the currentValues of a structure control of type 'object'\n * from an array of values to an array of objects.\n * @isList boolean, true if this structure is a list\n * @convert boolean, true if the current control values need to be converted.\n * If false, need to determine if the subControls need to be converted\n * Example currentValues: [[1, 2], [10, 20]] || [9, 88, [\"abc\", \"def\"]]\n * Example convertedValues: [{a: 1, b: 2}, {a: 10, b; 20}] || {z: 9, y: 88, x: [\"abc\", \"def\"]}\n */\nfunction convertArrayStructureToObject(isList, subControls, currentValues, convert) {\n\tconst structureKeys = [];\n\tsubControls.forEach((control) => {\n\t\tstructureKeys.push(control.name);\n\t});\n\n\tif (isList && Array.isArray(currentValues)) {\n\t\tconst convertedValues = [];\n\t\tcurrentValues.forEach((row, idx) => {\n\t\t\tif (convert) { // this control needs to be converted, convert all values in this row and determine if there are nested structures to be converted\n\t\t\t\tconst newObject = {};\n\t\t\t\tstructureKeys.forEach((key, keyIndex) => {\n\t\t\t\t\t// subControls that are type 'object' will need to be converted\n\t\t\t\t\tif (subControls[keyIndex].structureType && subControls[keyIndex].structureType === \"object\") { // nested object\n\t\t\t\t\t\tnewObject[key] = convertArrayStructureToObject(subControls[keyIndex].valueDef.isList, subControls[keyIndex].subControls, row[keyIndex], true);\n\t\t\t\t\t} else if (typeof subControls.subControls !== \"undefined\") { // nested array\n\t\t\t\t\t\tnewObject[key] = convertArrayStructureToObject(subControls[keyIndex].valueDef.isList, subControls[keyIndex].subControls, row[keyIndex], false);\n\t\t\t\t\t} else { // value\n\t\t\t\t\t\tnewObject[key] = typeof row[keyIndex] !== \"undefined\" ? row[keyIndex] : null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconvertedValues.push(newObject);\n\t\t\t} else { // determine if each value in the row is a nested structure that needs to be converted\n\t\t\t\tconst convertedRow = [];\n\t\t\t\trow.forEach((field, index) => {\n\t\t\t\t\tlet value = field;\n\t\t\t\t\tif (subControls[index].structureType && subControls[index].structureType === \"object\") {\n\t\t\t\t\t\tvalue = convertArrayStructureToObject(subControls[index].valueDef.isList, subControls[index].subControls, field, true);\n\t\t\t\t\t}\n\t\t\t\t\tconvertedRow.push(value);\n\t\t\t\t});\n\t\t\t\tconvertedValues.push(convertedRow);\n\t\t\t}\n\t\t});\n\t\treturn convertedValues;\n\t}\n\n\tconst converted = {};\n\tstructureKeys.forEach((key, index) => {\n\t\tconverted[key] = currentValues && typeof currentValues[index] !== \"undefined\" ? currentValues[index] : null;\n\t});\n\treturn converted;\n}\n\n/**\n * Converts the input list of currentParameters into a simple array of field names\n * \tWill also remove invalid fields in currentParameters that are not in the data model.\n *\n * @param control the control to format the input list for\n * @param controlValues array of the currentControlValues\n * @param fields the filtered list of fields from the data model\n */\nfunction getFieldsFromControlValues(control, controlValues, fields) {\n\tconst dataColumnIndex = getTableFieldIndex(control);\n\tconst outputList = [];\n\tif (controlValues && dataColumnIndex !== -1) {\n\t\tfor (const controlValue of controlValues) {\n\t\t\tlet fieldName = controlValue;\n\t\t\tif (Array.isArray(controlValue)) {\n\t\t\t\tfieldName = stringifyFieldValue(controlValue[dataColumnIndex], control);\n\t\t\t} else if (toType(controlValue) === \"object\") {\n\t\t\t\tfieldName = stringifyFieldValue(controlValue, control);\n\t\t\t}\n\t\t\toutputList.push(fieldName);\n\t\t}\n\t}\n\treturn outputList;\n}\n\n/**\n * Returns the string field name for both string and object based field values.\n * If the control's propType is structure, return the combined schema and field names.\n *\n * @param value A field value. Can be string or object\n * @param control The control definition for the parameter\n * @param excludeSchema When true, exclude the schema prefix on compound entries\n * @return A string field name value or null\n */\nfunction stringifyFieldValue(value, control, excludeSchema) {\n\tconst theType = toType(value);\n\tif (theType === \"object\") {\n\t\tif (control && control.valueDef && value.link_ref) {\n\t\t\tlet stringName;\n\t\t\tif (!excludeSchema) {\n\t\t\t\tstringName = value.link_ref + \".\" + value.field_name;\n\t\t\t} else {\n\t\t\t\tstringName = value.field_name;\n\t\t\t}\n\t\t\treturn stringName;\n\t\t}\n\t\treturn null;\n\t}\n\treturn value;\n}\n\n/**\n * Returns true if the given field value matches the provided field prototype.\n *\n * @param fieldValue A persistent field value\n * @param fieldProto A field prototype structure\n * @return True if the field value matches the field prototype\n */\nfunction fieldValueMatchesProto(fieldValue, fieldProto) {\n\tconst theType = toType(fieldValue);\n\tif (theType === \"object\" && fieldValue.link_ref) {\n\t\treturn fieldValue.link_ref === fieldProto.schema &&\n\t\t\t\t\t\tfieldValue.field_name === fieldProto.origName;\n\t}\n\treturn fieldValue === fieldProto.name;\n}\n\n/**\n * Converts a display string for a field name into the value it is stored as.\n *\n * @param stringValue A field name, either plain or in schema.name format\n * @param The control The control\n * @param controller Properties controller\n * @return The field name in canonical format for storage (string or object)\n */\nfunction fieldStringToValue(stringValue, control, controller) {\n\tif (control.role === \"column\" && control.valueDef.propType === \"structure\") {\n\t\tconst dataModelFields = controller.getDatasetMetadataFields();\n\t\tfor (const field of dataModelFields) {\n\t\t\tif (field.name === stringValue) {\n\t\t\t\treturn { link_ref: field.schema, field_name: field.origName };\n\t\t\t}\n\t\t}\n\t}\n\treturn stringValue;\n}\n\nfunction getDMDefault(subControlDef, fieldName, fields) {\n\tlet defaultValue;\n\tconst dmField = subControlDef.dmDefault;\n\tif (fieldName) {\n\t\tfor (const field of fields) {\n\t\t\tif (field.name === fieldName) {\n\t\t\t\tswitch (dmField) {\n\t\t\t\tcase \"type\":\n\t\t\t\t\tdefaultValue = field.type;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"description\":\n\t\t\t\t\tdefaultValue = field.metadata.description;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"measure\":\n\t\t\t\t\tdefaultValue = _findCorrespondingValue(field.metadata.measure, subControlDef.values);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"modeling_role\":\n\t\t\t\t\tdefaultValue = _findCorrespondingValue(field.metadata.modeling_role, subControlDef.values);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn defaultValue;\n}\n\nfunction getDMFieldIcon(fields, value, iconType) {\n\tlet icon;\n\tconst correctField = fields.find(function(field) {\n\t\treturn field.origName === value;\n\t});\n\tswitch (iconType) {\n\tcase \"measure\":\n\t\tif (!correctField) {\n\t\t\treturn CARBON_ICONS.MEASUREMENTS.EMPTY;\n\t\t}\n\t\tswitch (correctField.metadata.measure) {\n\t\tcase \"range\":\n\t\t\ticon = CARBON_ICONS.MEASUREMENTS.SCALE;\n\t\t\tbreak;\n\t\tcase \"ordered_set\":\n\t\t\ticon = CARBON_ICONS.MEASUREMENTS.ORDINAL;\n\t\t\tbreak;\n\t\tcase \"discrete\":\n\t\t\ticon = CARBON_ICONS.MEASUREMENTS.DISCRETE;\n\t\t\tbreak;\n\t\tcase \"set\":\n\t\t\ticon = CARBON_ICONS.MEASUREMENTS.NOMINAL;\n\t\t\tbreak;\n\t\tcase \"flag\":\n\t\t\ticon = CARBON_ICONS.MEASUREMENTS.FLAG;\n\t\t\tbreak;\n\t\tcase \"collection\":\n\t\t\ticon = CARBON_ICONS.MEASUREMENTS.NOMINAL;\n\t\t\tbreak;\n\t\tcase \"geospatial\":\n\t\t\ticon = CARBON_ICONS.MEASUREMENTS.NOMINAL;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ticon = CARBON_ICONS.MEASUREMENTS.EMPTY;\n\t\t\tbreak;\n\t\t}\n\t\tbreak;\n\tcase \"type\":\n\t\tif (!correctField) {\n\t\t\treturn \"typeEmpty\";\n\t\t}\n\t\tswitch (correctField.type) {\n\t\tcase DATA_TYPE.DATE:\n\t\t\ticon = DATA_TYPE.DATE;\n\t\t\tbreak;\n\t\tcase DATA_TYPE.TIME:\n\t\t\ticon = DATA_TYPE.TIME;\n\t\t\tbreak;\n\t\tcase DATA_TYPE.TIMESTAMP:\n\t\t\ticon = DATA_TYPE.TIMESTAMP;\n\t\t\tbreak;\n\t\tcase DATA_TYPE.STRING:\n\t\t\ticon = DATA_TYPE.STRING;\n\t\t\tbreak;\n\t\tcase DATA_TYPE.INTEGER:\n\t\t\ticon = DATA_TYPE.INTEGER;\n\t\t\tbreak;\n\t\tcase DATA_TYPE.DOUBLE:\n\t\t\ticon = DATA_TYPE.DOUBLE;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ticon = \"typeEmpty\";\n\t\t\tbreak;\n\t\t}\n\t\tbreak;\n\tdefault:\n\t\tbreak;\n\t}\n\treturn icon;\n}\n\n\n// Attempts to synchronize the Modeler notions of measurement level\n// and modeling role with those defined in datarecord-metadata.\nfunction _findCorrespondingValue(input, values) {\n\t// First try for an exact match\n\tconst idx = values.indexOf(input);\n\tif (idx > -1) {\n\t\treturn values[idx];\n\t}\n\t// Next try for a case insensitive match\n\tconst searchTerm = input.toLowerCase();\n\tfor (const value of values) {\n\t\tif (searchTerm === value.toLowerCase()) {\n\t\t\treturn value;\n\t\t}\n\t}\n\t// Finally try for a startsWith match\n\tfor (const value of values) {\n\t\tif (searchTerm.startsWith(value.substring(0, 6).toLowerCase())) {\n\t\t\treturn value;\n\t\t}\n\t}\n\t// Last resort: Return the original value\n\treturn input;\n}\n\nexport {\n\ttoType,\n\tformatMessage,\n\tevaluateText,\n\tgetTableFieldIndex,\n\tconvertInputDataModel,\n\tisSubControlStructureObjectType,\n\tconvertObjectStructureToArray,\n\tconvertArrayStructureToObject,\n\tgetFieldsFromControlValues,\n\tcopy,\n\tstringifyFieldValue,\n\tfieldValueMatchesProto,\n\tfieldStringToValue,\n\tgenerateId,\n\tgetDMDefault,\n\tgetDMFieldIcon\n};\n","/*\n * Copyright 2017-2022 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 { v4 as uuid4 } from \"uuid\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport { has } from \"lodash\";\n\n// Reusable component to show tooltip if the content is truncated\nexport default class TruncatedContentTooltip extends React.Component {\n\n\trender() {\n\t\tlet tooltipText = this.props.tooltipText;\n\t\tif (typeof this.props.tooltipText !== \"object\") {\n\t\t\ttooltipText = String(this.props.tooltipText);\n\t\t}\n\t\tconst tooltip = (\n\t\t\t<div className=\"properties-tooltips\">\n\t\t\t\t{tooltipText}\n\t\t\t</div>\n\t\t);\n\t\treturn (\n\t\t\t<div className=\"properties-truncated-tooltip\">\n\t\t\t\t<Tooltip\n\t\t\t\t\tid={`${uuid4()}-properties`}\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\tdisable={has(this.props, \"disabled\") ? this.props.disabled : true}\n\t\t\t\t\tshowToolTipIfTruncated\n\t\t\t\t>\n\t\t\t\t\t{this.props.content}\n\t\t\t\t</Tooltip>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nTruncatedContentTooltip.propTypes = {\n\tcontent: PropTypes.element.isRequired,\n\ttooltipText: PropTypes.oneOfType([\n\t\tPropTypes.string.isRequired,\n\t\tPropTypes.object.isRequired,\n\t\tPropTypes.number.isRequired,\n\t\tPropTypes.bool.isRequired,\n\t\tPropTypes.array.isRequired\n\t]),\n\tdisabled: PropTypes.bool\n};\n","/*\n * Copyright 2017-2022 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 TruncatedContentTooltip from \"./truncated-content-tooltip.jsx\";\nexport default TruncatedContentTooltip;\n","/*\n * Copyright 2017-2022 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\", 6] */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport FlexibleTable from \"./../flexible-table\";\nimport TruncatedContentTooltip from \"./../truncated-content-tooltip\";\nimport PropertiesButtons from \"./../properties-buttons\";\nimport * as PropertyUtils from \"./../../util/property-utils\";\n\nimport { Button } from \"carbon-components-react\";\n\nimport { MESSAGE_KEYS, DATA_TYPE, SORT_DIRECTION, ROW_SELECTION } from \"./../../constants/constants\";\nimport Icon from \"./../../../icons/icon.jsx\";\nimport { ArrowLeft24, Reset24 } from \"@carbon/icons-react\";\n\nimport { has, isEmpty, sortBy, isEqual } from \"lodash\";\n\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\n\nimport { v4 as uuid4 } from \"uuid\";\n\nexport default class FieldPicker extends React.Component {\n\tstatic getDerivedStateFromProps(nextProps, prevState) {\n\t\tif (!isEqual(nextProps.fields, prevState.origFields)) {\n\t\t\tlet selectedFields = prevState.selectedFields;\n\t\t\tif (nextProps.currentFields) {\n\t\t\t\tif (!isEqual(Object.keys(nextProps.currentFields), Object.keys(prevState.selectedFields))) {\n\t\t\t\t\tselectedFields = nextProps.currentFields;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ({ fields: nextProps.fields, selectedFields: selectedFields, origFields: nextProps.fields });\n\t\t}\n\t\treturn ({});\n\t}\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tfields: this.props.fields, // list of fields dynamically adjusted by filtered or sort criteria\n\t\t\torigFields: this.props.fields,\n\t\t\tfilterIcons: [],\n\t\t\tfilterText: \"\",\n\t\t\tselectedFields: this.props.currentFields // list of fields selected\n\t\t};\n\t\tthis.multiSchema = props.controller.getDatasetMetadataSchemas() &&\n\t\t\tprops.controller.getDatasetMetadataSchemas().length > 1;\n\t\tthis.filterList = [];\n\n\t\tthis.filterType = this.filterType.bind(this);\n\t\tthis.getTableData = this.getTableData.bind(this);\n\t\tthis.getVisibleData = this.getVisibleData.bind(this);\n\t\tthis.handleSave = this.handleSave.bind(this);\n\t\tthis.handleCancel = this.handleCancel.bind(this);\n\t\tthis.handleReset = this.handleReset.bind(this);\n\t\tthis.getNewSelections = this.getNewSelections.bind(this);\n\t\tthis.onSort = this.onSort.bind(this);\n\t\tthis.onFilter = this.onFilter.bind(this);\n\t\tthis.updateFieldSelections = this.updateFieldSelections.bind(this);\n\t\tthis.filterList = this.getAvailableFilters();\n\t}\n\n\tonFilter(filterString) {\n\t\tthis.setState({ filterText: filterString });\n\t}\n\n\t/**\n\t* Reorder the current list of fields displayed according to the sort column\n\t* @param spec object with a column and direction to sort\n\t*/\n\tonSort(spec) {\n\t\tlet fields = Array.from(this.state.fields);\n\t\tfields = sortBy(fields, function(field) {\n\t\t\tswitch (spec.column) {\n\t\t\tcase \"fieldName\": return field.origName;\n\t\t\tcase \"dataType\": return field.type;\n\t\t\tcase \"schemaName\": return field.schema;\n\t\t\tdefault: return null;\n\t\t\t}\n\t\t});\n\t\tif (spec.direction === SORT_DIRECTION.DESC) {\n\t\t\tfields.reverse();\n\t\t}\n\t\tthis.setState({ fields: fields });\n\t}\n\n\tgetAvailableFilters() {\n\t\tconst filters = [];\n\t\tfor (const key in DATA_TYPE) {\n\t\t\tif (has(DATA_TYPE, key)) {\n\t\t\t\tconst dataType = DATA_TYPE[key];\n\t\t\t\tfor (const field of this.props.fields) {\n\t\t\t\t\tif (dataType === field.type) {\n\t\t\t\t\t\tconst filter = {\n\t\t\t\t\t\t\t\"type\": field.type\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlet duplicate = false;\n\t\t\t\t\t\tfor (const filtered of filters) {\n\t\t\t\t\t\t\tif (filtered.type === filter.type) {\n\t\t\t\t\t\t\t\tduplicate = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!duplicate) {\n\t\t\t\t\t\t\tfilters.push(filter);\n\t\t\t\t\t\t}\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}\n\t\treturn filters;\n\t}\n\n\tgetTableData() {\n\t\tconst fields = this.getVisibleData();\n\t\tconst tableData = [];\n\t\tconst selectedFields = this.state.selectedFields;\n\t\tconst selectedRowsIndex = [];\n\t\tfor (let i = 0; i < selectedFields.length; i++) {\n\t\t\tconst idx = fields.findIndex((field) => field.name === selectedFields[i]);\n\t\t\tif (idx !== -1) {\n\t\t\t\tselectedRowsIndex.push(idx);\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < fields.length; i++) {\n\t\t\tconst field = fields[i];\n\t\t\tconst columns = [];\n\t\t\tlet dmIcon = null;\n\t\t\tif (this.props.dmIcon && this.props.dmIcon !== \"type\") {\n\t\t\t\tconst metadata = this.props.controller.getDatasetMetadataFields();\n\t\t\t\tconst dmIconType = PropertyUtils.getDMFieldIcon(metadata, field.origName, this.props.dmIcon);\n\t\t\t\tconst icon = dmIconType ? <Icon type={dmIconType} /> : null;\n\t\t\t\t// don't show icon for type since it's already being displayed\n\t\t\t\tif (icon) {\n\t\t\t\t\tdmIcon = (\n\t\t\t\t\t\t<div className=\"properties-fp-field-type-icon\">\n\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst fpFieldName = (\n\t\t\t\t<span className=\"properties-fp-field-name\">\n\t\t\t\t\t{field.origName}\n\t\t\t\t</span>\n\t\t\t);\n\n\t\t\tconst fieldNameWithTooltip = (\n\t\t\t\t<TruncatedContentTooltip\n\t\t\t\t\tcontent={fpFieldName}\n\t\t\t\t\ttooltipText={field.origName}\n\t\t\t\t\tdisabled={false}\n\t\t\t\t/>\n\t\t\t);\n\t\t\tconst fieldContent = (\n\t\t\t\t<div className=\"properties-fp-field\">\n\t\t\t\t\t{dmIcon}\n\t\t\t\t\t{fieldNameWithTooltip}\n\t\t\t\t</div>\n\t\t\t);\n\n\t\t\tcolumns.push({\n\t\t\t\tcolumn: \"fieldName\",\n\t\t\t\tcontent: fieldContent,\n\t\t\t\tfieldName: field.origName\n\t\t\t});\n\t\t\tif (this.multiSchema) {\n\t\t\t\tconst schemaContent = (<div className=\"properties-fp-schema\">\n\t\t\t\t\t{field.schema}\n\t\t\t\t</div>);\n\t\t\t\tcolumns.push({ column: \"schemaName\", content: schemaContent });\n\t\t\t}\n\t\t\tcolumns.push({\n\t\t\t\tcolumn: \"dataType\",\n\t\t\t\tcontent: (<div className=\"properties-fp-data\">\n\t\t\t\t\t<div className={\"properties-fp-data-type-icon\"}>\n\t\t\t\t\t\t<Icon type={field.type} />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"properties-fp-field-type\">{field.type}</div>\n\t\t\t\t</div>),\n\t\t\t\tvalue: field.type\n\t\t\t});\n\n\t\t\ttableData.push({ className: \"properties-fp-data-rows\", columns: columns });\n\t\t}\n\t\tthis.selectedRowsIndex = selectedRowsIndex;\n\t\treturn tableData;\n\t}\n\n\t/**\n\t* Returns list of visible fields from search or filter\n\t*/\n\tgetVisibleData() {\n\t\tconst that = this;\n\t\tconst data = this.state.fields;\n\t\tconst\tfilteredData = data.filter(function(row) {\n\t\t\treturn that.state.filterIcons.indexOf(row.type) < 0;\n\t\t});\n\n\t\tconst visibleData = filteredData.filter(function(row) {\n\t\t\tif (typeof that.state.filterText !== \"undefined\" && that.state.filterText !== null) {\n\t\t\t\treturn row.origName.toLowerCase().indexOf(that.state.filterText.toLowerCase()) > -1;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\treturn visibleData;\n\t}\n\n\t/**\n\t * Returns any new columns that were not a part of the original set.\n\t */\n\tgetNewSelections() {\n\t\tconst deltas = [];\n\t\tconst initialValues = this.props.currentFields;\n\t\tif (this.state.selectedFields) {\n\t\t\tfor (let i = 0; i < this.state.selectedFields.length; i++) {\n\t\t\t\tif (typeof initialValues === \"undefined\" || initialValues === null || initialValues.indexOf(this.state.selectedFields[i]) < 0) {\n\t\t\t\t\tdeltas.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn deltas;\n\t}\n\n\thandleSave() {\n\t\tthis.props.closeFieldPicker(this.state.selectedFields, this.getNewSelections());\n\t}\n\n\thandleCancel() {\n\t\tthis.handleReset();\n\t\tthis.props.closeFieldPicker();\n\t}\n\n\tupdateFieldSelections(rowsIndex) {\n\t\tconst fields = this.getVisibleData();\n\t\tconst currField = Array.from(this.state.selectedFields);\n\t\t// Remove previously selected fields\n\t\tlet current = currField.filter(function(value, index, arr) {\n\t\t\tconst idx = fields.findIndex((field) => field.name === currField[index]);\n\t\t\treturn (idx === -1);\n\t\t});\n\t\t// Add new selections in current\n\t\trowsIndex.forEach((rowIndex) => {\n\t\t\tcurrent.push(fields[rowIndex].name);\n\t\t});\n\n\t\tcurrent = Array.from(new Set(current));\n\t\tthis.setState({\n\t\t\tselectedFields: current\n\t\t});\n\t}\n\n\t/**\n\t* Returns true if field is found in list, else false\n\t* @param list array of fields to search through\n\t* @param fieldName field name to find in data\n\t*/\n\tisFieldInList(list, fieldName) {\n\t\treturn list.some(function(field) {\n\t\t\treturn field.name === fieldName;\n\t\t});\n\t}\n\n\thandleReset() {\n\t\tthis.setState({\n\t\t\tselectedFields: this.props.currentFields,\n\t\t\tfilterIcons: [],\n\t\t\tfilterText: \"\",\n\t\t});\n\t}\n\n\tfilterType(evt) {\n\t\tconst type = evt.currentTarget.getAttribute(\"data-type\");\n\t\tconst iconsSelected = Array.from(this.state.filterIcons);\n\t\tconst index = iconsSelected.indexOf(type);\n\t\tif (index < 0) {\n\t\t\ticonsSelected.push(type);\n\t\t} else {\n\t\t\ticonsSelected.splice(index, 1);\n\t\t}\n\t\tthis.setState({ filterIcons: iconsSelected });\n\t}\n\n\t_genBackButton() {\n\t\tif (this.props.rightFlyout) {\n\t\t\tconst applyLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.APPLYBUTTON_LABEL);\n\t\t\tconst rejectLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(), MESSAGE_KEYS.REJECTBUTTON_LABEL);\n\n\t\t\treturn (<PropertiesButtons\n\t\t\t\tokHandler={this.handleSave}\n\t\t\t\tcancelHandler={this.handleCancel}\n\t\t\t\tshowPropertiesButtons\n\t\t\t\tapplyLabel={applyLabel}\n\t\t\t\trejectLabel={rejectLabel}\n\t\t\t/>);\n\t\t}\n\n\t\tconst saveTooltip = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\tMESSAGE_KEYS.FIELDPICKER_SAVEBUTTON_TOOLTIP);\n\t\tconst tooltipId = uuid4() + \"-tooltip-fp\";\n\t\tconst tooltip = (\n\t\t\t<div className=\"properties-tooltips\">\n\t\t\t\t{saveTooltip}\n\t\t\t</div>\n\t\t);\n\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t<Tooltip\n\t\t\t\t\tid={tooltipId}\n\t\t\t\t\ttip={tooltip}\n\t\t\t\t\tdirection=\"left\"\n\t\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\t>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName=\"properties-fp-back-button\"\n\t\t\t\t\t\t\trenderIcon={ArrowLeft24}\n\t\t\t\t\t\t\ticonDescription={this.props.title}\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tkind=\"primary\"\n\t\t\t\t\t\t\tonClick={this.handleSave}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<label className=\"properties-fp-button-label\">{this.props.title}</label>\n\t\t\t\t\t</div>\n\t\t\t\t</Tooltip>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t_genResetButton() {\n\t\tconst resetLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\tMESSAGE_KEYS.FIELDPICKER_RESETBUTTON_LABEL);\n\t\treturn (\n\t\t\t<Button\n\t\t\t\tclassName=\"properties-fp-reset-button-container\"\n\t\t\t\tonClick={this.handleReset}\n\t\t\t\trenderIcon={Reset24}\n\t\t\t\ticonDescription={resetLabel}\n\t\t\t\tsize=\"small\"\n\t\t\t\tkind=\"ghost\"\n\t\t\t>\n\t\t\t\t<span>{resetLabel}</span>\n\t\t\t</Button>\n\t\t);\n\t}\n\n\t_genFilterTypes() {\n\t\tconst that = this;\n\t\tconst filterLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\tMESSAGE_KEYS.FIELDPICKER_FILTER_LABEL);\n\t\tconst filters = this.filterList.map(function(filter, ind) {\n\t\t\tlet enabled = true;\n\t\t\tfor (let i = 0; i < that.state.filterIcons.length; i++) {\n\t\t\t\tif (filter.type === that.state.filterIcons[i]) {\n\t\t\t\t\tenabled = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst filterTooltipId = uuid4() + \"-tooltip-filters-\" + ind;\n\t\t\tconst dataTypeLabel = PropertyUtils.formatMessage(that.props.controller.getReactIntl(), MESSAGE_KEYS[`FIELDPICKER_${filter.type.toUpperCase()}_LABEL`]);\n\t\t\tconst tooltip = (\n\t\t\t\t<div className=\"properties-tooltips\">\n\t\t\t\t\t{dataTypeLabel}\n\t\t\t\t</div>\n\t\t\t);\n\t\t\tconst row = (\n\t\t\t\t<li key={\"filters\" + ind} className=\"properties-fp-filter-list-li\">\n\t\t\t\t\t<div className=\"properties-tooltips-filter\">\n\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\tid={filterTooltipId}\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 icon-tooltip\"\n\t\t\t\t\t\t\tdisable={isEmpty(filter.type)}\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=\"properties-fp-filter\"\n\t\t\t\t\t\t\t\tdata-type={filter.type}\n\t\t\t\t\t\t\t\tonClick={that.filterType.bind(that)}\n\t\t\t\t\t\t\t\taria-label={filterLabel + \" \" + filter.type}\n\t\t\t\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon type={filter.type} disabled={!enabled} />\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</li>\n\t\t\t);\n\t\t\treturn (row);\n\t\t});\n\t\treturn (\n\t\t\t<ul className=\"properties-fp-filter-list\">\n\t\t\t\t<li className=\"properties-fp-filter-list-title properties-fp-filter-list-li\">\n\t\t\t\t\t{filterLabel}\n\t\t\t\t</li>\n\t\t\t\t{filters}\n\t\t\t</ul>\n\t\t);\n\t}\n\n\t_genTable() {\n\n\t\tconst fieldColumnLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\tMESSAGE_KEYS.FIELDPICKER_FIELDCOLUMN_LABEL);\n\t\t// TODO: debug why resource key not used\n\t\tconst schemaColumnLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\tMESSAGE_KEYS.FIELDPICKER_SCHEMACOLUMN_LABEL);\n\t\tconst dataTypeColumnLabel = PropertyUtils.formatMessage(this.props.controller.getReactIntl(),\n\t\t\tMESSAGE_KEYS.FIELDPICKER_DATATYPECOLUMN_LABEL);\n\t\t// TODO get label from resource and make id unique\n\t\tconst headers = [];\n\t\theaders.push({ \"key\": \"fieldName\", \"label\": fieldColumnLabel });\n\t\tif (this.multiSchema) {\n\t\t\theaders.push({ \"key\": \"schemaName\", \"label\": schemaColumnLabel });\n\t\t}\n\t\theaders.push({ \"key\": \"dataType\", \"label\": dataTypeColumnLabel });\n\n\t\tconst tableData = this.getTableData();\n\n\t\treturn (\n\t\t\t<FlexibleTable className=\"properties-fp-table\"\n\t\t\t\tsortable={[\"fieldName\", \"schemaName\", \"dataType\"]}\n\t\t\t\tfilterable={[\"fieldName\"]}\n\t\t\t\tonFilter={this.onFilter}\n\t\t\t\tcolumns={headers}\n\t\t\t\tdata={tableData}\n\t\t\t\tonSort={this.onSort}\n\t\t\t\tfilterKeyword={this.state.filterText}\n\t\t\t\tscrollKey=\"field-picker\"\n\t\t\t\tnoAutoSize\n\t\t\t\ttableLabel={this.props.title ? this.props.title : \"\"}\n\t\t\t\tselectedRows={this.selectedRowsIndex}\n\t\t\t\tupdateRowSelections={this.updateFieldSelections}\n\t\t\t\trowSelection={ROW_SELECTION.MULTIPLE}\n\t\t\t\tlight={this.props.controller.getLight()}\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst backButton = this._genBackButton();\n\t\tconst resetButton = this._genResetButton();\n\t\tconst filterTypes = this._genFilterTypes();\n\t\tconst table = this._genTable();\n\n\t\tif (this.props.rightFlyout) {\n\t\t\treturn (<React.Fragment>\n\t\t\t\t<div className=\"properties-fp-top-row\">\n\t\t\t\t\t{filterTypes}\n\t\t\t\t\t{resetButton}\n\t\t\t\t</div>\n\t\t\t\t{table}\n\t\t\t\t{backButton}\n\t\t\t</React.Fragment>);\n\t\t}\n\n\t\treturn (<div>\n\t\t\t<div className=\"properties-fp-top-row\">\n\t\t\t\t{backButton}\n\t\t\t\t{resetButton}\n\t\t\t</div>\n\t\t\t{filterTypes}\n\t\t\t{table}\n\t\t</div>);\n\t}\n}\n\nFieldPicker.propTypes = {\n\tcloseFieldPicker: PropTypes.func.isRequired,\n\tcurrentFields: PropTypes.array.isRequired,\n\tfields: PropTypes.array, // in current data model\n\ttitle: PropTypes.string,\n\tcontroller: PropTypes.object.isRequired,\n\trightFlyout: PropTypes.bool,\n\tdmIcon: PropTypes.string\n};\n","/*\n * Copyright 2017-2022 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 FieldPicker from \"./field-picker.jsx\";\nexport default FieldPicker;\n"],"names":["PropertiesButtons","_inherits","Component","_classCallCheck","_createClass","key","value","rejectButton","applyButton","applyButtonLabel","this","props","applyLabel","intl","formatMessage","id","defaultMessage","defaultMessages","rejectButtonLabel","rejectLabel","cancelHandler","React","Button","className","type","size","kind","onClick","okHandler","disabled","applyButtonEnabled","classNames","hide","showPropertiesButtons","defaultProps","injectIntl","baseIsEqual","require$$0","isEqual_1","other","ItemType","CONTROL","ADDITIONAL_LINK","STATIC_TEXT","HORIZONTAL_SEPARATOR","PANEL","TEARSHEET","SUB_TABS","PRIMARY_TABS","PANEL_SELECTOR","CUSTOM_PANEL","ACTION","TEXT_PANEL","EditStyle","INLINE","SUBPANEL","ON_PANEL","Size","LARGE","MEDIUM","SMALL","GroupType","CONTROLS","TABS","PANELS","ADDITIONAL","COLUMN_SELECTION","SUMMARY_PANEL","ACTION_PANEL","TWISTY_PANEL","COLUMN_PANEL","TEARSHEET_PANEL","PanelType","GENERAL","CUSTOM","SUMMARY","ControlType","TEXTFIELD","PASSWORDFIELD","TEXTAREA","LIST","EXPRESSION","NUMBERFIELD","DATEFIELD","TIMEFIELD","TIMESTAMP","CHECKBOX","TOGGLE","RADIOSET","CHECKBOXSET","ONEOFSELECT","MULTISELECT","SOMEOFSELECT","SELECTCOLUMN","SELECTCOLUMNS","SELECTSCHEMA","STRUCTURETABLE","STRUCTUREEDITOR","STRUCTURELISTEDITOR","TOGGLETEXT","READONLY","READONLYTABLE","SPINNER","CODE","HIDDEN","ParamRole","TEXT","ENUM","COLUMN","NEW_COLUMN","EMAIL","URL","COLOR","INTERVAL_YEAR","INTERVAL_DAY","INTERVAL_SECOND","UNSPECIFIED","Type","BOOLEAN","INTEGER","LONG","DOUBLE","STRING","PASSWORD","DATE","TIME","STRUCTURE","OBJECT","Separator","BEFORE","AFTER","ORIENTATIONS","VERTICAL","HORIZONTAL","isArrayLike","_baseEach","eachFunc","fromRight","collection","iteratee","length","index","iterable","Object","createBaseEach","baseEach","require$$1","isSymbol","compareAscending","valIsDefined","undefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","arrayMap","baseGet","baseIteratee","require$$2","baseMap","result","Array","baseSortBy","array","comparer","sort","baseUnary","require$$5","compareMultiple","object","orders","objCriteria","criteria","othCriteria","ordersLength","identity","require$$7","isArray","require$$8","eq","isIndex","isObject","require$$3","_isIterateeCall","baseFlatten","baseOrderBy","iteratees","isIterateeCall","sortBy_1","_getErrorMessage","prefix","errorObject","classID","lineNumber","message","console","log","warn","error","toType","obj","toString","call","match","toLowerCase","copy","_cloneDeep","substituteObj","formattedMessage","defaultMessages1","defaultMessages2","messages","generateId","uuid4","evaluateText","text","controller","startIdx","indexOf","endIdx","substr","expression","newText","replace","paramValue","paramStartIdx","funcName","parameters","slice","split","_getExpParameterValue","isNaN","toFixed","parseInt","_step","_iterator","_evaluateExpression","e","logger","expParam","getPropertyValue","name","trim","parseFloat","getTableFieldIndex","control","subControls","i","role","convertInputDataModel","dataModel","datasetMetadata","columns","_step2","column","field","convertType","storage","metadata","description","measure","modelingRole","modeling_role","fields","push","_iterator2","retVal","isSubControlStructureObjectType","structureType","_step3","subControl","_iterator3","convertObjectStructureToArray","isList","currentValues","structureKeys","forEach","convertedValues","_typeof","keys","row","convertedRow","valueDef","converted","convertArrayStructureToObject","convert","idx","newObject","keyIndex","getFieldsFromControlValues","controlValues","dataColumnIndex","outputList","_step4","controlValue","fieldName","stringifyFieldValue","_iterator4","excludeSchema","link_ref","field_name","fieldValueMatchesProto","fieldValue","fieldProto","schema","origName","fieldStringToValue","stringValue","propType","_step5","getDatasetMetadataFields","_iterator5","getDMDefault","subControlDef","defaultValue","dmField","dmDefault","_step6","_findCorrespondingValue","values","_iterator6","getDMFieldIcon","iconType","icon","correctField","find","CARBON_ICONS","MEASUREMENTS","EMPTY","SCALE","ORDINAL","DISCRETE","NOMINAL","FLAG","DATA_TYPE","input","_step7","searchTerm","_iterator7","_step8","startsWith","substring","_iterator8","TruncatedContentTooltip","tooltipText","String","tooltip","Tooltip","tip","direction","disable","_has","showToolTipIfTruncated","content","FieldPicker","_this","state","origFields","filterIcons","filterText","selectedFields","currentFields","multiSchema","getDatasetMetadataSchemas","filterList","filterType","bind","getTableData","getVisibleData","handleSave","handleCancel","handleReset","getNewSelections","onSort","onFilter","updateFieldSelections","getAvailableFilters","filterString","setState","spec","from","_sortBy","SORT_DIRECTION","DESC","reverse","filters","dataType","filter","duplicate","tableData","selectedRowsIndex","findIndex","_loop","dmIcon","dmIconType","PropertyUtils","Icon","fpFieldName","fieldNameWithTooltip","fieldContent","schemaContent","that","deltas","initialValues","closeFieldPicker","rowsIndex","currField","current","arr","rowIndex","Set","list","some","evt","currentTarget","getAttribute","iconsSelected","splice","rightFlyout","getReactIntl","MESSAGE_KEYS","APPLYBUTTON_LABEL","REJECTBUTTON_LABEL","saveTooltip","FIELDPICKER_SAVEBUTTON_TOOLTIP","tooltipId","renderIcon","ArrowLeft24","iconDescription","title","resetLabel","FIELDPICKER_RESETBUTTON_LABEL","Reset24","filterLabel","FIELDPICKER_FILTER_LABEL","map","ind","enabled","filterTooltipId","dataTypeLabel","toUpperCase","_isEmpty","fieldColumnLabel","FIELDPICKER_FIELDCOLUMN_LABEL","schemaColumnLabel","FIELDPICKER_SCHEMACOLUMN_LABEL","dataTypeColumnLabel","FIELDPICKER_DATATYPECOLUMN_LABEL","headers","label","FlexibleTable","sortable","filterable","data","filterKeyword","scrollKey","noAutoSize","tableLabel","selectedRows","updateRowSelections","rowSelection","ROW_SELECTION","MULTIPLE","light","getLight","backButton","_genBackButton","resetButton","_genResetButton","filterTypes","_genFilterTypes","table","_genTable","Fragment","nextProps","prevState","_isEqual"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"../createClass-
|
|
1
|
+
import"../createClass-d5cac0b7.js";import"../isArrayLikeObject-a9c7973b.js";export{C as default}from"../canvas-controller-017926a9.js";import"./command-stack.es.js";import"../canvas-constants-09ffa4d4.js";import"../canvas-logger-fa8cef5b.js";import"../getPrototypeOf-b3806813.js";import"../datarecord-metadata-v3-schema-07d7682c.js";import"../en-8647c347.js";import"uuid";import"redux";import"jsonschema";import"@elyra/pipeline-schemas";import"immutable";
|
|
2
2
|
//# sourceMappingURL=canvas-controller.es.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";require("../createClass-
|
|
1
|
+
"use strict";require("../createClass-72b049bc.js"),require("../isArrayLikeObject-f3b27f64.js");var e=require("../canvas-controller-51626884.js");require("./command-stack.js"),require("../canvas-constants-ab55d0fd.js"),require("../canvas-logger-3459dfc2.js"),require("../getPrototypeOf-4e282dd3.js"),require("../datarecord-metadata-v3-schema-03db5d5d.js"),require("../en-7a0f1db1.js"),require("uuid"),require("redux"),require("jsonschema"),require("@elyra/pipeline-schemas"),require("immutable"),module.exports=e.CanvasController;
|
|
2
2
|
//# sourceMappingURL=canvas-controller.js.map
|
package/dist/lib/canvas.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{c as CommonCanvas}from"../common-canvas-
|
|
1
|
+
export{c as CommonCanvas}from"../common-canvas-3330e83f.js";export{C as CanvasController}from"../canvas-controller-017926a9.js";import"../createClass-d5cac0b7.js";import"../getPrototypeOf-b3806813.js";import"react";import"react-redux";import"react-intl";import"../isArrayLikeObject-a9c7973b.js";import"../icon-816af0e7.js";import"../extends-87da7df3.js";import"react-inlinesvg";import"@carbon/icons-react";import"../canvas-constants-09ffa4d4.js";import"../toolbar-2ef99bd8.js";import"../datarecord-metadata-v3-schema-07d7682c.js";import"../en-8647c347.js";import"react-resize-detector";import"./tooltip.es.js";import"react-portal";import"carbon-components-react";import"../canvas-logger-fa8cef5b.js";import"./context-menu.es.js";import"react-contextmenu";import"../_baseForOwn-d38b560e.js";import"./command-stack.es.js";import"immutable";import"uuid";import"redux";import"jsonschema";import"@elyra/pipeline-schemas";
|
|
2
2
|
//# sourceMappingURL=canvas.es.js.map
|
package/dist/lib/canvas.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../common-canvas-
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../common-canvas-b2956514.js"),r=require("../canvas-controller-51626884.js");require("../createClass-72b049bc.js"),require("../getPrototypeOf-4e282dd3.js"),require("react"),require("react-redux"),require("react-intl"),require("../isArrayLikeObject-f3b27f64.js"),require("../icon-2c16236a.js"),require("../extends-dc95dba8.js"),require("react-inlinesvg"),require("@carbon/icons-react"),require("../canvas-constants-ab55d0fd.js"),require("../toolbar-cb967e26.js"),require("../datarecord-metadata-v3-schema-03db5d5d.js"),require("../en-7a0f1db1.js"),require("react-resize-detector"),require("./tooltip.js"),require("react-portal"),require("carbon-components-react"),require("../canvas-logger-3459dfc2.js"),require("./context-menu.js"),require("react-contextmenu"),require("../_baseForOwn-7d4e8506.js"),require("./command-stack.js"),require("immutable"),require("uuid"),require("redux"),require("jsonschema"),require("@elyra/pipeline-schemas"),exports.CommonCanvas=e.commonCanvas,exports.CanvasController=r.CanvasController;
|
|
2
2
|
//# sourceMappingURL=canvas.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as n,_ as e}from"../createClass-
|
|
1
|
+
import{a as n,_ as e}from"../createClass-d5cac0b7.js";import{Stack as t,Record as o,List as s}from"immutable";var d=function(){function d(){e(this,d);var n=new o({undoCmnds:new s,redoCmnds:new t});this.rec=n()}return n(d,[{key:"do",value:function(n){this.rec=this.rec.merge({undoCmnds:this.rec.undoCmnds.push(n),redoCmnds:new t}),this.rec.undoCmnds.size>100&&(this.rec=this.rec.set("undoCmnds",this.rec.undoCmnds.shift())),n.do()}},{key:"undo",value:function(){if(this.canUndo()){var n=this.getPrevious();this.rec=this.rec.merge({undoCmnds:this.rec.undoCmnds.pop(),redoCmnds:this.rec.redoCmnds.push(n)}),n.undo()}}},{key:"redo",value:function(){if(this.canRedo()){var n=this.getNext();this.rec=this.rec.merge({undoCmnds:this.rec.undoCmnds.push(n),redoCmnds:this.rec.redoCmnds.pop()}),n.redo()}}},{key:"canUndo",value:function(){return!this.rec.undoCmnds.isEmpty()}},{key:"canRedo",value:function(){return!this.rec.redoCmnds.isEmpty()}},{key:"getPrevious",value:function(){return this.rec.undoCmnds.last()}},{key:"getNext",value:function(){return this.rec.redoCmnds.first()}},{key:"getUndoCommands",value:function(){return this.rec.undoCmnds}},{key:"getRedoCommands",value:function(){return this.rec.redoCmnds}}]),d}(),u=function(){function t(){e(this,t),this.commands=new d}return n(t,[{key:"do",value:function(n){this.commands.do(n)}},{key:"undo",value:function(){this.commands.undo()}},{key:"redo",value:function(){this.commands.redo()}},{key:"getUndoCommand",value:function(){return this.commands.canUndo()?this.commands.getPrevious():null}},{key:"getRedoCommand",value:function(){return this.commands.canRedo()?this.commands.getNext():null}},{key:"getStack",value:function(){return{undos:this.commands.getUndoCommands(),redos:this.commands.getRedoCommands()}}},{key:"canUndo",value:function(){return this.commands.canUndo()}},{key:"canRedo",value:function(){return this.commands.canRedo()}},{key:"clearCommandStack",value:function(){this.commands=new d}}]),t}();export{u as default};
|
|
2
2
|
//# sourceMappingURL=command-stack.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-stack.es.js","sources":["../../src/command-stack/internal-stack.js","../../src/command-stack/command-stack.js"],"sourcesContent":["/*\n * Copyright 2017-2022 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 { List, Record, Stack } from \"immutable\";\n\nconst MAX_UNDO_COMMANDS = 100;\n\nexport default class InternalStack {\n\n\tconstructor() {\n\t\tconst recFac = new Record({\n\t\t\tundoCmnds: new List(),\n\t\t\tredoCmnds: new Stack()\n\t\t});\n\n\t\tthis.rec = recFac();\n\t}\n\n\tdo(command) {\n\t\tthis.rec = this.rec.merge({\n\t\t\tundoCmnds: this.rec.undoCmnds.push(command),\n\t\t\tredoCmnds: new Stack()\n\t\t});\n\n\t\tif (this.rec.undoCmnds.size > MAX_UNDO_COMMANDS) {\n\t\t\tthis.rec = this.rec.set(\"undoCmnds\", this.rec.undoCmnds.shift());\n\t\t}\n\t\tcommand.do();\n\t}\n\n\tundo() {\n\t\tif (this.canUndo()) {\n\t\t\tconst prev = this.getPrevious();\n\t\t\tthis.rec = this.rec.merge({\n\t\t\t\tundoCmnds: this.rec.undoCmnds.pop(),\n\t\t\t\tredoCmnds: this.rec.redoCmnds.push(prev)\n\t\t\t});\n\t\t\tprev.undo();\n\t\t}\n\t}\n\n\tredo() {\n\t\tif (this.canRedo()) {\n\t\t\tconst next = this.getNext();\n\t\t\tthis.rec = this.rec.merge({\n\t\t\t\tundoCmnds: this.rec.undoCmnds.push(next),\n\t\t\t\tredoCmnds: this.rec.redoCmnds.pop()\n\t\t\t});\n\t\t\tnext.redo();\n\t\t}\n\t}\n\n\tcanUndo() {\n\t\treturn !this.rec.undoCmnds.isEmpty();\n\t}\n\n\tcanRedo() {\n\t\treturn !this.rec.redoCmnds.isEmpty();\n\t}\n\n\tgetPrevious() {\n\t\treturn this.rec.undoCmnds.last();\n\t}\n\n\tgetNext() {\n\t\treturn this.rec.redoCmnds.first();\n\t}\n\n\tgetUndoCommands() {\n\t\treturn this.rec.undoCmnds;\n\t}\n\n\tgetRedoCommands() {\n\t\treturn this.rec.redoCmnds;\n\t}\n}\n","/*\n * Copyright 2017-2022 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 InternalStack from \"./internal-stack.js\";\n\nexport default class CommandStack {\n\n\tconstructor() {\n\t\tthis.commands = new InternalStack();\n\t}\n\n\tdo(action) {\n\t\tthis.commands.do(action);\n\t}\n\n\tundo() {\n\t\tthis.commands.undo();\n\t}\n\n\tredo() {\n\t\tthis.commands.redo();\n\t}\n\n\tgetUndoCommand() {\n\t\tif (this.commands.canUndo()) {\n\t\t\treturn this.commands.getPrevious();\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetRedoCommand() {\n\t\tif (this.commands.canRedo()) {\n\t\t\treturn this.commands.getNext();\n\t\t}\n\t\treturn null;\n\t}\n\n\t// need this for validation on unit tests\n\tgetStack() {\n\t\treturn {\n\t\t\t\"undos\": this.commands.getUndoCommands(),\n\t\t\t\"redos\": this.commands.getRedoCommands()\n\t\t};\n\t}\n\n\tcanUndo() {\n\t\treturn this.commands.canUndo();\n\t}\n\n\tcanRedo() {\n\t\treturn this.commands.canRedo();\n\t}\n\n\tclearCommandStack() {\n\t\tthis.commands = new InternalStack();\n\t}\n}\n"],"names":["InternalStack","_classCallCheck","recFac","Record","undoCmnds","List","redoCmnds","Stack","this","rec","command","merge","push","size","set","shift","canUndo","prev","getPrevious","pop","undo","canRedo","next","getNext","redo","isEmpty","last","first","CommandStack","commands","action","undos","getUndoCommands","redos","getRedoCommands"],"mappings":"8GAkBA,IAEqBA,aAEpB,aAAcC,UACb,IAAMC,EAAS,IAAIC,EAAO,CACzBC,UAAW,IAAIC,EACfC,UAAW,IAAIC,IAGhBC,KAAKC,IAAMP,
|
|
1
|
+
{"version":3,"file":"command-stack.es.js","sources":["../../src/command-stack/internal-stack.js","../../src/command-stack/command-stack.js"],"sourcesContent":["/*\n * Copyright 2017-2022 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 { List, Record, Stack } from \"immutable\";\n\nconst MAX_UNDO_COMMANDS = 100;\n\nexport default class InternalStack {\n\n\tconstructor() {\n\t\tconst recFac = new Record({\n\t\t\tundoCmnds: new List(),\n\t\t\tredoCmnds: new Stack()\n\t\t});\n\n\t\tthis.rec = recFac();\n\t}\n\n\tdo(command) {\n\t\tthis.rec = this.rec.merge({\n\t\t\tundoCmnds: this.rec.undoCmnds.push(command),\n\t\t\tredoCmnds: new Stack()\n\t\t});\n\n\t\tif (this.rec.undoCmnds.size > MAX_UNDO_COMMANDS) {\n\t\t\tthis.rec = this.rec.set(\"undoCmnds\", this.rec.undoCmnds.shift());\n\t\t}\n\t\tcommand.do();\n\t}\n\n\tundo() {\n\t\tif (this.canUndo()) {\n\t\t\tconst prev = this.getPrevious();\n\t\t\tthis.rec = this.rec.merge({\n\t\t\t\tundoCmnds: this.rec.undoCmnds.pop(),\n\t\t\t\tredoCmnds: this.rec.redoCmnds.push(prev)\n\t\t\t});\n\t\t\tprev.undo();\n\t\t}\n\t}\n\n\tredo() {\n\t\tif (this.canRedo()) {\n\t\t\tconst next = this.getNext();\n\t\t\tthis.rec = this.rec.merge({\n\t\t\t\tundoCmnds: this.rec.undoCmnds.push(next),\n\t\t\t\tredoCmnds: this.rec.redoCmnds.pop()\n\t\t\t});\n\t\t\tnext.redo();\n\t\t}\n\t}\n\n\tcanUndo() {\n\t\treturn !this.rec.undoCmnds.isEmpty();\n\t}\n\n\tcanRedo() {\n\t\treturn !this.rec.redoCmnds.isEmpty();\n\t}\n\n\tgetPrevious() {\n\t\treturn this.rec.undoCmnds.last();\n\t}\n\n\tgetNext() {\n\t\treturn this.rec.redoCmnds.first();\n\t}\n\n\tgetUndoCommands() {\n\t\treturn this.rec.undoCmnds;\n\t}\n\n\tgetRedoCommands() {\n\t\treturn this.rec.redoCmnds;\n\t}\n}\n","/*\n * Copyright 2017-2022 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 InternalStack from \"./internal-stack.js\";\n\nexport default class CommandStack {\n\n\tconstructor() {\n\t\tthis.commands = new InternalStack();\n\t}\n\n\tdo(action) {\n\t\tthis.commands.do(action);\n\t}\n\n\tundo() {\n\t\tthis.commands.undo();\n\t}\n\n\tredo() {\n\t\tthis.commands.redo();\n\t}\n\n\tgetUndoCommand() {\n\t\tif (this.commands.canUndo()) {\n\t\t\treturn this.commands.getPrevious();\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetRedoCommand() {\n\t\tif (this.commands.canRedo()) {\n\t\t\treturn this.commands.getNext();\n\t\t}\n\t\treturn null;\n\t}\n\n\t// need this for validation on unit tests\n\tgetStack() {\n\t\treturn {\n\t\t\t\"undos\": this.commands.getUndoCommands(),\n\t\t\t\"redos\": this.commands.getRedoCommands()\n\t\t};\n\t}\n\n\tcanUndo() {\n\t\treturn this.commands.canUndo();\n\t}\n\n\tcanRedo() {\n\t\treturn this.commands.canRedo();\n\t}\n\n\tclearCommandStack() {\n\t\tthis.commands = new InternalStack();\n\t}\n}\n"],"names":["InternalStack","_classCallCheck","recFac","Record","undoCmnds","List","redoCmnds","Stack","this","rec","_createClass","key","value","command","merge","push","size","set","shift","canUndo","prev","getPrevious","pop","undo","canRedo","next","getNext","redo","isEmpty","last","first","CommandStack","commands","action","undos","getUndoCommands","redos","getRedoCommands"],"mappings":"8GAkBA,IAEqBA,aAEpB,aAAcC,UACb,IAAMC,EAAS,IAAIC,EAAO,CACzBC,UAAW,IAAIC,EACfC,UAAW,IAAIC,IAGhBC,KAAKC,IAAMP,IA2DX,OA1DAQ,MAAAC,SAAAC,MAED,SAAGC,GACFL,KAAKC,IAAMD,KAAKC,IAAIK,MAAM,CACzBV,UAAWI,KAAKC,IAAIL,UAAUW,KAAKF,GACnCP,UAAW,IAAIC,IAGZC,KAAKC,IAAIL,UAAUY,KAnBC,MAoBvBR,KAAKC,IAAMD,KAAKC,IAAIQ,IAAI,YAAaT,KAAKC,IAAIL,UAAUc,UAEzDL,UACAF,WAAAC,MAED,WACC,GAAIJ,KAAKW,UAAW,CACnB,IAAMC,EAAOZ,KAAKa,cAClBb,KAAKC,IAAMD,KAAKC,IAAIK,MAAM,CACzBV,UAAWI,KAAKC,IAAIL,UAAUkB,MAC9BhB,UAAWE,KAAKC,IAAIH,UAAUS,KAAKK,KAEpCA,EAAKG,WAENZ,WAAAC,MAED,WACC,GAAIJ,KAAKgB,UAAW,CACnB,IAAMC,EAAOjB,KAAKkB,UAClBlB,KAAKC,IAAMD,KAAKC,IAAIK,MAAM,CACzBV,UAAWI,KAAKC,IAAIL,UAAUW,KAAKU,GACnCnB,UAAWE,KAAKC,IAAIH,UAAUgB,QAE/BG,EAAKE,WAENhB,cAAAC,MAED,WACC,OAAQJ,KAAKC,IAAIL,UAAUwB,aAC3BjB,cAAAC,MAED,WACC,OAAQJ,KAAKC,IAAIH,UAAUsB,aAC3BjB,kBAAAC,MAED,WACC,OAAOJ,KAAKC,IAAIL,UAAUyB,UAC1BlB,cAAAC,MAED,WACC,OAAOJ,KAAKC,IAAIH,UAAUwB,WAC1BnB,sBAAAC,MAED,WACC,OAAOJ,KAAKC,IAAIL,aAChBO,sBAAAC,MAED,WACC,OAAOJ,KAAKC,IAAIH,eAChB,ICtEmByB,aAEpB,aAAc9B,UACbO,KAAKwB,SAAW,IAAIhC,EA+CpB,OA9CAU,MAAAC,SAAAC,MAED,SAAGqB,GACFzB,KAAKwB,YAAYC,MACjBtB,WAAAC,MAED,WACCJ,KAAKwB,SAAST,UACdZ,WAAAC,MAED,WACCJ,KAAKwB,SAASL,UACdhB,qBAAAC,MAED,WACC,OAAIJ,KAAKwB,SAASb,UACVX,KAAKwB,SAASX,cAEf,QACPV,qBAAAC,MAED,WACC,OAAIJ,KAAKwB,SAASR,UACVhB,KAAKwB,SAASN,UAEf,QAGRf,eAAAC,MACA,WACC,MAAO,CACNsB,MAAS1B,KAAKwB,SAASG,kBACvBC,MAAS5B,KAAKwB,SAASK,sBAExB1B,cAAAC,MAED,WACC,OAAOJ,KAAKwB,SAASb,aACrBR,cAAAC,MAED,WACC,OAAOJ,KAAKwB,SAASR,aACrBb,wBAAAC,MAED,WACCJ,KAAKwB,SAAW,IAAIhC,OACpB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../createClass-
|
|
1
|
+
"use strict";var e=require("../createClass-72b049bc.js"),n=require("immutable"),s=function(){function s(){e._classCallCheck(this,s);var t=new n.Record({undoCmnds:new n.List,redoCmnds:new n.Stack});this.rec=t()}return e._createClass(s,[{key:"do",value:function(e){this.rec=this.rec.merge({undoCmnds:this.rec.undoCmnds.push(e),redoCmnds:new n.Stack}),this.rec.undoCmnds.size>100&&(this.rec=this.rec.set("undoCmnds",this.rec.undoCmnds.shift())),e.do()}},{key:"undo",value:function(){if(this.canUndo()){var e=this.getPrevious();this.rec=this.rec.merge({undoCmnds:this.rec.undoCmnds.pop(),redoCmnds:this.rec.redoCmnds.push(e)}),e.undo()}}},{key:"redo",value:function(){if(this.canRedo()){var e=this.getNext();this.rec=this.rec.merge({undoCmnds:this.rec.undoCmnds.push(e),redoCmnds:this.rec.redoCmnds.pop()}),e.redo()}}},{key:"canUndo",value:function(){return!this.rec.undoCmnds.isEmpty()}},{key:"canRedo",value:function(){return!this.rec.redoCmnds.isEmpty()}},{key:"getPrevious",value:function(){return this.rec.undoCmnds.last()}},{key:"getNext",value:function(){return this.rec.redoCmnds.first()}},{key:"getUndoCommands",value:function(){return this.rec.undoCmnds}},{key:"getRedoCommands",value:function(){return this.rec.redoCmnds}}]),s}(),t=function(){function n(){e._classCallCheck(this,n),this.commands=new s}return e._createClass(n,[{key:"do",value:function(e){this.commands.do(e)}},{key:"undo",value:function(){this.commands.undo()}},{key:"redo",value:function(){this.commands.redo()}},{key:"getUndoCommand",value:function(){return this.commands.canUndo()?this.commands.getPrevious():null}},{key:"getRedoCommand",value:function(){return this.commands.canRedo()?this.commands.getNext():null}},{key:"getStack",value:function(){return{undos:this.commands.getUndoCommands(),redos:this.commands.getRedoCommands()}}},{key:"canUndo",value:function(){return this.commands.canUndo()}},{key:"canRedo",value:function(){return this.commands.canRedo()}},{key:"clearCommandStack",value:function(){this.commands=new s}}]),n}();module.exports=t;
|
|
2
2
|
//# sourceMappingURL=command-stack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-stack.js","sources":["../../src/command-stack/internal-stack.js","../../src/command-stack/command-stack.js"],"sourcesContent":["/*\n * Copyright 2017-2022 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 { List, Record, Stack } from \"immutable\";\n\nconst MAX_UNDO_COMMANDS = 100;\n\nexport default class InternalStack {\n\n\tconstructor() {\n\t\tconst recFac = new Record({\n\t\t\tundoCmnds: new List(),\n\t\t\tredoCmnds: new Stack()\n\t\t});\n\n\t\tthis.rec = recFac();\n\t}\n\n\tdo(command) {\n\t\tthis.rec = this.rec.merge({\n\t\t\tundoCmnds: this.rec.undoCmnds.push(command),\n\t\t\tredoCmnds: new Stack()\n\t\t});\n\n\t\tif (this.rec.undoCmnds.size > MAX_UNDO_COMMANDS) {\n\t\t\tthis.rec = this.rec.set(\"undoCmnds\", this.rec.undoCmnds.shift());\n\t\t}\n\t\tcommand.do();\n\t}\n\n\tundo() {\n\t\tif (this.canUndo()) {\n\t\t\tconst prev = this.getPrevious();\n\t\t\tthis.rec = this.rec.merge({\n\t\t\t\tundoCmnds: this.rec.undoCmnds.pop(),\n\t\t\t\tredoCmnds: this.rec.redoCmnds.push(prev)\n\t\t\t});\n\t\t\tprev.undo();\n\t\t}\n\t}\n\n\tredo() {\n\t\tif (this.canRedo()) {\n\t\t\tconst next = this.getNext();\n\t\t\tthis.rec = this.rec.merge({\n\t\t\t\tundoCmnds: this.rec.undoCmnds.push(next),\n\t\t\t\tredoCmnds: this.rec.redoCmnds.pop()\n\t\t\t});\n\t\t\tnext.redo();\n\t\t}\n\t}\n\n\tcanUndo() {\n\t\treturn !this.rec.undoCmnds.isEmpty();\n\t}\n\n\tcanRedo() {\n\t\treturn !this.rec.redoCmnds.isEmpty();\n\t}\n\n\tgetPrevious() {\n\t\treturn this.rec.undoCmnds.last();\n\t}\n\n\tgetNext() {\n\t\treturn this.rec.redoCmnds.first();\n\t}\n\n\tgetUndoCommands() {\n\t\treturn this.rec.undoCmnds;\n\t}\n\n\tgetRedoCommands() {\n\t\treturn this.rec.redoCmnds;\n\t}\n}\n","/*\n * Copyright 2017-2022 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 InternalStack from \"./internal-stack.js\";\n\nexport default class CommandStack {\n\n\tconstructor() {\n\t\tthis.commands = new InternalStack();\n\t}\n\n\tdo(action) {\n\t\tthis.commands.do(action);\n\t}\n\n\tundo() {\n\t\tthis.commands.undo();\n\t}\n\n\tredo() {\n\t\tthis.commands.redo();\n\t}\n\n\tgetUndoCommand() {\n\t\tif (this.commands.canUndo()) {\n\t\t\treturn this.commands.getPrevious();\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetRedoCommand() {\n\t\tif (this.commands.canRedo()) {\n\t\t\treturn this.commands.getNext();\n\t\t}\n\t\treturn null;\n\t}\n\n\t// need this for validation on unit tests\n\tgetStack() {\n\t\treturn {\n\t\t\t\"undos\": this.commands.getUndoCommands(),\n\t\t\t\"redos\": this.commands.getRedoCommands()\n\t\t};\n\t}\n\n\tcanUndo() {\n\t\treturn this.commands.canUndo();\n\t}\n\n\tcanRedo() {\n\t\treturn this.commands.canRedo();\n\t}\n\n\tclearCommandStack() {\n\t\tthis.commands = new InternalStack();\n\t}\n}\n"],"names":["InternalStack","_classCallCheck","recFac","Record","undoCmnds","List","redoCmnds","Stack","this","rec","command","merge","push","size","set","shift","canUndo","prev","getPrevious","pop","undo","canRedo","next","getNext","redo","isEmpty","last","first","CommandStack","commands","action","undos","getUndoCommands","redos","getRedoCommands"],"mappings":"gFAoBqBA,aAEpB,aAAcC,0BACb,IAAMC,EAAS,IAAIC,SAAO,CACzBC,UAAW,IAAIC,OACfC,UAAW,IAAIC,UAGhBC,KAAKC,IAAMP,
|
|
1
|
+
{"version":3,"file":"command-stack.js","sources":["../../src/command-stack/internal-stack.js","../../src/command-stack/command-stack.js"],"sourcesContent":["/*\n * Copyright 2017-2022 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 { List, Record, Stack } from \"immutable\";\n\nconst MAX_UNDO_COMMANDS = 100;\n\nexport default class InternalStack {\n\n\tconstructor() {\n\t\tconst recFac = new Record({\n\t\t\tundoCmnds: new List(),\n\t\t\tredoCmnds: new Stack()\n\t\t});\n\n\t\tthis.rec = recFac();\n\t}\n\n\tdo(command) {\n\t\tthis.rec = this.rec.merge({\n\t\t\tundoCmnds: this.rec.undoCmnds.push(command),\n\t\t\tredoCmnds: new Stack()\n\t\t});\n\n\t\tif (this.rec.undoCmnds.size > MAX_UNDO_COMMANDS) {\n\t\t\tthis.rec = this.rec.set(\"undoCmnds\", this.rec.undoCmnds.shift());\n\t\t}\n\t\tcommand.do();\n\t}\n\n\tundo() {\n\t\tif (this.canUndo()) {\n\t\t\tconst prev = this.getPrevious();\n\t\t\tthis.rec = this.rec.merge({\n\t\t\t\tundoCmnds: this.rec.undoCmnds.pop(),\n\t\t\t\tredoCmnds: this.rec.redoCmnds.push(prev)\n\t\t\t});\n\t\t\tprev.undo();\n\t\t}\n\t}\n\n\tredo() {\n\t\tif (this.canRedo()) {\n\t\t\tconst next = this.getNext();\n\t\t\tthis.rec = this.rec.merge({\n\t\t\t\tundoCmnds: this.rec.undoCmnds.push(next),\n\t\t\t\tredoCmnds: this.rec.redoCmnds.pop()\n\t\t\t});\n\t\t\tnext.redo();\n\t\t}\n\t}\n\n\tcanUndo() {\n\t\treturn !this.rec.undoCmnds.isEmpty();\n\t}\n\n\tcanRedo() {\n\t\treturn !this.rec.redoCmnds.isEmpty();\n\t}\n\n\tgetPrevious() {\n\t\treturn this.rec.undoCmnds.last();\n\t}\n\n\tgetNext() {\n\t\treturn this.rec.redoCmnds.first();\n\t}\n\n\tgetUndoCommands() {\n\t\treturn this.rec.undoCmnds;\n\t}\n\n\tgetRedoCommands() {\n\t\treturn this.rec.redoCmnds;\n\t}\n}\n","/*\n * Copyright 2017-2022 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 InternalStack from \"./internal-stack.js\";\n\nexport default class CommandStack {\n\n\tconstructor() {\n\t\tthis.commands = new InternalStack();\n\t}\n\n\tdo(action) {\n\t\tthis.commands.do(action);\n\t}\n\n\tundo() {\n\t\tthis.commands.undo();\n\t}\n\n\tredo() {\n\t\tthis.commands.redo();\n\t}\n\n\tgetUndoCommand() {\n\t\tif (this.commands.canUndo()) {\n\t\t\treturn this.commands.getPrevious();\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetRedoCommand() {\n\t\tif (this.commands.canRedo()) {\n\t\t\treturn this.commands.getNext();\n\t\t}\n\t\treturn null;\n\t}\n\n\t// need this for validation on unit tests\n\tgetStack() {\n\t\treturn {\n\t\t\t\"undos\": this.commands.getUndoCommands(),\n\t\t\t\"redos\": this.commands.getRedoCommands()\n\t\t};\n\t}\n\n\tcanUndo() {\n\t\treturn this.commands.canUndo();\n\t}\n\n\tcanRedo() {\n\t\treturn this.commands.canRedo();\n\t}\n\n\tclearCommandStack() {\n\t\tthis.commands = new InternalStack();\n\t}\n}\n"],"names":["InternalStack","_classCallCheck","recFac","Record","undoCmnds","List","redoCmnds","Stack","this","rec","_createClass","key","value","command","merge","push","size","set","shift","canUndo","prev","getPrevious","pop","undo","canRedo","next","getNext","redo","isEmpty","last","first","CommandStack","commands","action","undos","getUndoCommands","redos","getRedoCommands"],"mappings":"gFAoBqBA,aAEpB,aAAcC,0BACb,IAAMC,EAAS,IAAIC,SAAO,CACzBC,UAAW,IAAIC,OACfC,UAAW,IAAIC,UAGhBC,KAAKC,IAAMP,IA2DX,OA1DAQ,mBAAAC,SAAAC,MAED,SAAGC,GACFL,KAAKC,IAAMD,KAAKC,IAAIK,MAAM,CACzBV,UAAWI,KAAKC,IAAIL,UAAUW,KAAKF,GACnCP,UAAW,IAAIC,UAGZC,KAAKC,IAAIL,UAAUY,KAnBC,MAoBvBR,KAAKC,IAAMD,KAAKC,IAAIQ,IAAI,YAAaT,KAAKC,IAAIL,UAAUc,UAEzDL,UACAF,WAAAC,MAED,WACC,GAAIJ,KAAKW,UAAW,CACnB,IAAMC,EAAOZ,KAAKa,cAClBb,KAAKC,IAAMD,KAAKC,IAAIK,MAAM,CACzBV,UAAWI,KAAKC,IAAIL,UAAUkB,MAC9BhB,UAAWE,KAAKC,IAAIH,UAAUS,KAAKK,KAEpCA,EAAKG,WAENZ,WAAAC,MAED,WACC,GAAIJ,KAAKgB,UAAW,CACnB,IAAMC,EAAOjB,KAAKkB,UAClBlB,KAAKC,IAAMD,KAAKC,IAAIK,MAAM,CACzBV,UAAWI,KAAKC,IAAIL,UAAUW,KAAKU,GACnCnB,UAAWE,KAAKC,IAAIH,UAAUgB,QAE/BG,EAAKE,WAENhB,cAAAC,MAED,WACC,OAAQJ,KAAKC,IAAIL,UAAUwB,aAC3BjB,cAAAC,MAED,WACC,OAAQJ,KAAKC,IAAIH,UAAUsB,aAC3BjB,kBAAAC,MAED,WACC,OAAOJ,KAAKC,IAAIL,UAAUyB,UAC1BlB,cAAAC,MAED,WACC,OAAOJ,KAAKC,IAAIH,UAAUwB,WAC1BnB,sBAAAC,MAED,WACC,OAAOJ,KAAKC,IAAIL,aAChBO,sBAAAC,MAED,WACC,OAAOJ,KAAKC,IAAIH,eAChB,ICtEmByB,aAEpB,aAAc9B,0BACbO,KAAKwB,SAAW,IAAIhC,EA+CpB,OA9CAU,mBAAAC,SAAAC,MAED,SAAGqB,GACFzB,KAAKwB,YAAYC,MACjBtB,WAAAC,MAED,WACCJ,KAAKwB,SAAST,UACdZ,WAAAC,MAED,WACCJ,KAAKwB,SAASL,UACdhB,qBAAAC,MAED,WACC,OAAIJ,KAAKwB,SAASb,UACVX,KAAKwB,SAASX,cAEf,QACPV,qBAAAC,MAED,WACC,OAAIJ,KAAKwB,SAASR,UACVhB,KAAKwB,SAASN,UAEf,QAGRf,eAAAC,MACA,WACC,MAAO,CACNsB,MAAS1B,KAAKwB,SAASG,kBACvBC,MAAS5B,KAAKwB,SAASK,sBAExB1B,cAAAC,MAED,WACC,OAAOJ,KAAKwB,SAASb,aACrBR,cAAAC,MAED,WACC,OAAOJ,KAAKwB,SAASR,aACrBb,wBAAAC,MAED,WACCJ,KAAKwB,SAAW,IAAIhC,OACpB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as e,a as t}from"../createClass-
|
|
1
|
+
import{_ as e,a as t}from"../createClass-d5cac0b7.js";import{_ as n,a as o,b as r,c}from"../getPrototypeOf-b3806813.js";import i from"react";import{_ as a,C as l}from"../canvas-constants-09ffa4d4.js";import{_ as u}from"../extends-87da7df3.js";import{MenuItem as s,SubMenu as d}from"react-contextmenu";import{I as m}from"../icon-816af0e7.js";import{L as f}from"../canvas-logger-fa8cef5b.js";import"react-inlinesvg";import"@carbon/icons-react";function p(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,c=o(e);if(t){var i=o(this).constructor;n=Reflect.construct(c,arguments,i)}else n=c.apply(this,arguments);return r(this,n)}}var h=function(o){n(a,o);var r=p(a);function a(t){var n;return e(this,a),(n=r.call(this,t)).logger=new f("CC-ContextMenu"),n.onClick=n.onClick.bind(c(n)),n}return t(a,[{key:"onClick",value:function(e){var t=e.target.dataset.color;this.props.clickActionHandler(t)}},{key:"render",value:function(){return this.logger.log("render"),i.createElement("div",{className:"color-picker-panel",onClick:this.onClick},i.createElement("div",{tabIndex:"0","data-color":"bkg-col-white-0",className:"color-picker-item white-0"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-yellow-20",className:"color-picker-item yellow-20"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-gray-20",className:"color-picker-item gray-20"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-green-20",className:"color-picker-item green-20"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-teal-20",className:"color-picker-item teal-20"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-cyan-20",className:"color-picker-item cyan-20"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-red-50",className:"color-picker-item red-50"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-orange-40",className:"color-picker-item orange-40"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-gray-50",className:"color-picker-item gray-50"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-green-50",className:"color-picker-item green-50"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-teal-50",className:"color-picker-item teal-50"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-cyan-50",className:"color-picker-item cyan-50"}))}}]),a}(i.Component);function v(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,c=o(e);if(t){var i=o(this).constructor;n=Reflect.construct(c,arguments,i)}else n=c.apply(this,arguments);return r(this,n)}}var k=function(o){n(f,o);var r=v(f);function f(t){var n;return e(this,f),(n=r.call(this,t)).state={},n.itemSelected=n.itemSelected.bind(c(n)),n.colorClicked=n.colorClicked.bind(c(n)),n}return t(f,[{key:"onContextMenu",value:function(e){e.preventDefault()}},{key:"itemSelected",value:function(e,t){this.props.contextHandler(e),t&&t.stopPropagation()}},{key:"colorClicked",value:function(e){this.props.contextHandler("colorSelectedObjects",{color:e})}},{key:"calculateMenuSize",value:function(e){for(var t=0,n=0;n<e.length;++n){e[n].divider&&t++}return{height:30*(e.length-t)+1*t,width:160}}},{key:"calculateMenuPos",value:function(e,t,n){var o={x:e.x,y:e.y};return e.y+t.height>n.height&&(o.y=n.height-t.height-5,o.y<0&&(o.y=0)),e.x+t.width>n.width&&(o.x-=t.width),o.x+=1,o.y+=1,o}},{key:"areAllSubmenuItemsDisabled",value:function(e){var t=0,n=0;return e.forEach((function(e){e.divider||t++,!1===e.enable&&n++})),n===t}},{key:"buildMenu",value:function(e,t,n,o){for(var r={className:"contextmenu-divider"},c=[],a=0,l=!1,d=0;d<e.length;++d){var m=e[d].divider,f=e[d].submenu;if(m)l||(c.push(i.createElement(s,{attributes:r,key:d+1,onClick:function(){},divider:!0})),a+=1,l=!0);else if(f)if(l=!1,"colorPicker"===e[d].menu){var p={width:160,height:50},h=this.buildColorPickerPanel(),v=this.buildSubMenu(e,d,h,a,n,t,p,o,!1);c.push(v),a+=30}else{var k={disabled:this.areAllSubmenuItemsDisabled(e[d].menu)},y=this.calculateMenuSize(e[d].menu),b=this.buildMenu(e[d].menu,t,n,o),g=this.buildSubMenu(e,d,b,a,n,t,y,o,k);c.push(g),a+=30}else{l=!1;var x={disabled:!1===e[d].enable};c.push(i.createElement(s,u({onClick:this.itemSelected.bind(null,e[d].action),key:d+1},x),e[d].label)),a+=30}}return c}},{key:"buildColorPickerPanel",value:function(){return i.createElement(h,a({clickActionHandler:this.colorPickHandler},"clickActionHandler",this.colorClicked))}},{key:"buildSubMenu",value:function(e,t,n,o,r,c,a,s,f){var p=this.buildRtlState(r,c,a,s),h=this.buildSubMenuPosStyle(o,r,a,s),v=i.createElement(m,{type:l.CHEVRONARROWS.RIGHT,disabled:!1,className:"react-contextmenu-submenu-icon"}),k=i.createElement("div",null,e[t].label,v," ");return i.createElement(d,u({title:k,key:t+1,className:"contextmenu-submenu",rtl:p},f),i.createElement("div",{key:t+1,style:h,className:"context-menu-popover"},n))}},{key:"buildRtlState",value:function(e,t,n,o){return e.x+t.width+n.width>o.right}},{key:"buildSubMenuPosStyle",value:function(e,t,n,o){var r=o.bottom-(t.y+e+n.height);return{top:(r>0?0:r-5)+"px"}}},{key:"render",value:function(){var e=this.calculateMenuSize(this.props.menuDefinition),t=this.calculateMenuPos(this.props.mousePos,e,this.props.canvasRect),n={left:t.x+"px",top:t.y+"px"},o=this.buildMenu(this.props.menuDefinition,e,t,this.props.canvasRect);return i.createElement("div",{id:"context-menu-popover",className:"context-menu-popover",style:n,onContextMenu:this.onContextMenu},o)}}]),f}(i.Component);function y(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,c=o(e);if(t){var i=o(this).constructor;n=Reflect.construct(c,arguments,i)}else n=c.apply(this,arguments);return r(this,n)}}var b=function(o){n(a,o);var r=y(a);function a(t){var n;return e(this,a),(n=r.call(this,t)).state={},n.contextMenuClicked=n.contextMenuClicked.bind(c(n)),n.handleClickOutside=n.handleClickOutside.bind(c(n)),n}return t(a,[{key:"componentDidMount",value:function(){document.addEventListener("click",this.handleClickOutside,!0)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.handleClickOutside,!0)}},{key:"getCanvasRect",value:function(){var e=document.getElementById(this.props.containingDivId).getBoundingClientRect();return{top:0,bottom:e.bottom-e.top,left:0,right:e.right-e.left,height:e.height,width:e.width}}},{key:"handleClickOutside",value:function(e){e.ctrlKey?e.stopPropagation():this.isOverContextMenu(e)||this.isOverEllipsisButton(e)||(this.props.stopPropagation&&e.stopPropagation(),this.props.closeContextMenu())}},{key:"isOverContextMenu",value:function(e){var t=document.getElementById("context-menu-popover");return!t||t.contains(e.target)}},{key:"isOverEllipsisButton",value:function(e){for(var t=document.getElementsByClassName("d3-node-ellipsis-group"),n=!1,o=0;o<t.length;o++)!1===n&&t[o].contains(e.target)&&(n=!0);return n}},{key:"contextMenuClicked",value:function(e,t){this.props.contextMenuActionHandler(e,t)}},{key:"render",value:function(){return i.createElement(k,{contextHandler:this.contextMenuClicked,menuDefinition:this.props.contextMenuDef,canvasRect:this.getCanvasRect(),mousePos:this.props.contextMenuPos})}}]),a}(i.Component);export{b as default};
|
|
2
2
|
//# sourceMappingURL=context-menu.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-menu.es.js","sources":["../../src/color-picker/color-picker-panel.jsx","../../src/context-menu/common-context-menu.jsx","../../src/context-menu/context-menu-wrapper.jsx"],"sourcesContent":["/*\n * Copyright 2022 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 Logger from \"../logging/canvas-logger.js\";\n\n\nclass ColorPickerPanel extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.logger = new Logger(\"CC-ContextMenu\");\n\n\t\tthis.onClick = this.onClick.bind(this);\n\t}\n\n\tonClick(evt) {\n\t\tconst color = evt.target.dataset.color;\n\t\tthis.props.clickActionHandler(color);\n\t}\n\n\trender() {\n\t\tthis.logger.log(\"render\");\n\t\treturn (\n\t\t\t<div className=\"color-picker-panel\" onClick={this.onClick}>\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-white-0\"} className=\"color-picker-item white-0\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-yellow-20\"} className=\"color-picker-item yellow-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-20\"} className=\"color-picker-item gray-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-20\"} className=\"color-picker-item green-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-20\"} className=\"color-picker-item teal-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-20\"} className=\"color-picker-item cyan-20\" />\n\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-red-50\"} className=\"color-picker-item red-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-orange-40\"} className=\"color-picker-item orange-40\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-50\"} className=\"color-picker-item gray-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-50\"} className=\"color-picker-item green-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-50\"} className=\"color-picker-item teal-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-50\"} className=\"color-picker-item cyan-50\" />\n\t\t\t</div>);\n\t}\n}\n\nColorPickerPanel.propTypes = {\n\tclickActionHandler: PropTypes.func.isRequired,\n\tcloseMenu: PropTypes.func\n};\n\nexport default ColorPickerPanel;\n","/*\n * Copyright 2017-2022 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 no-empty-function: [\"error\", { \"allow\": [\"arrowFunctions\"] }] */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { MenuItem, SubMenu } from \"react-contextmenu\";\nimport Icon from \"../icons/icon.jsx\";\nimport { CONTEXT_MENU_CARBON_ICONS } from \"../common-canvas/constants/canvas-constants\";\nimport ColorPickerPanel from \"../color-picker/color-picker-panel.jsx\";\n\n// context-menu sizing\nconst CONTEXT_MENU_WIDTH = 160; // see context-menu.css .react-context-menu margin\nconst CONTEXT_MENU_LINK_HEIGHT = 30; // see context-menu.css .react-context-menu-item height\nconst CONTEXT_MENU_DIVIDER_HEIGHT = 1; // see context-menu.css .react-context-menu-item height\nconst EXTRA_OFFSET = 5; // Extra offset for vertical menu positioning\n\n\nclass CommonContextMenu extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\t\tthis.itemSelected = this.itemSelected.bind(this);\n\t\tthis.colorClicked = this.colorClicked.bind(this);\n\t}\n\n\tonContextMenu(e) {\n\t\te.preventDefault();\n\t}\n\n\titemSelected(data, selectedEvent) {\n\t\tthis.props.contextHandler(data);\n\t\t// This stops the canvasClicked function from being fired which would\n\t\t// clear any current selections.\n\t\tif (selectedEvent) {\n\t\t\tselectedEvent.stopPropagation();\n\t\t}\n\t}\n\n\tcolorClicked(color) {\n\t\tthis.props.contextHandler(\"colorSelectedObjects\", { color });\n\t}\n\n\tcalculateMenuSize(menu) {\n\t\tvar numDividers = 0;\n\t\tfor (let i = 0; i < menu.length; ++i) {\n\t\t\tconst divider = menu[i].divider;\n\t\t\tif (divider) {\n\t\t\t\tnumDividers++;\n\t\t\t}\n\t\t}\n\n\t\tvar menuSize = {\n\t\t\theight: ((menu.length - numDividers) * CONTEXT_MENU_LINK_HEIGHT) + (numDividers * CONTEXT_MENU_DIVIDER_HEIGHT),\n\t\t\twidth: CONTEXT_MENU_WIDTH\n\t\t};\n\n\t\treturn menuSize;\n\t}\n\n\t// Returns a new position and the canvas rectangle for the context menu based on the current\n\t// mouse position and whether the menu would appear outside the edges of the page.\n\tcalculateMenuPos(mousePos, menuSize, canvasRect) {\n\t\tconst menuPos = { x: mousePos.x, y: mousePos.y };\n\n\t\t// Reposition contextMenu if it will show off the bottom of the page\n\t\tif (mousePos.y + menuSize.height > canvasRect.height) {\n\t\t\tmenuPos.y = canvasRect.height - menuSize.height - EXTRA_OFFSET; // Move up by extra offset so it looks nice\n\n\t\t\t// If repositioning the menu would push it off the top of the page\n\t\t\t// (in very short browser windows) position it at the top.\n\t\t\tif (menuPos.y < 0) {\n\t\t\t\tmenuPos.y = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Reposition contextMenu if it will show off the right of the page\n\t\tif (mousePos.x + menuSize.width > canvasRect.width) {\n\t\t\tmenuPos.x -= menuSize.width;\n\t\t}\n\n\t\treturn menuPos;\n\t}\n\n\tareAllSubmenuItemsDisabled(submenuItems) {\n\t\tlet itemCount = 0;\n\t\tlet disabledCount = 0;\n\t\tsubmenuItems.forEach(function(submenuItem) {\n\t\t\tif (!submenuItem.divider) {\n\t\t\t\titemCount++;\n\t\t\t}\n\t\t\tif (submenuItem.enable === false) {\n\t\t\t\tdisabledCount++;\n\t\t\t}\n\t\t});\n\t\treturn disabledCount === itemCount;\n\t}\n\n\tbuildMenu(menuDefinition, menuSize, menuPos, canvasRect) {\n\t\tconst customDivider = {\n\t\t\tclassName: \"contextmenu-divider\"\n\t\t};\n\n\t\tconst menuItems = [];\n\n\t\tlet runningYPos = 0;\n\t\t// Records if we have just displayed a divider. This is useful because we\n\t\t// only want to display one divider if there is a divider element\n\t\t// immediately after another divider element in the menuDefintion array.\n\t\tlet previousDivider = false;\n\n\t\tfor (let i = 0; i < menuDefinition.length; ++i) {\n\t\t\tconst divider = menuDefinition[i].divider;\n\t\t\tconst submenu = menuDefinition[i].submenu;\n\n\t\t\tif (divider) {\n\t\t\t\tif (!previousDivider) {\n\t\t\t\t\tmenuItems.push(<MenuItem attributes={customDivider} key={i + 1} onClick={() => {}} divider />);\n\t\t\t\t\trunningYPos += CONTEXT_MENU_DIVIDER_HEIGHT;\n\t\t\t\t\tpreviousDivider = true;\n\t\t\t\t}\n\n\t\t\t} else if (submenu) {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tif (menuDefinition[i].menu === \"colorPicker\") {\n\t\t\t\t\tconst disabled = false;\n\t\t\t\t\tconst subMenuSize = { width: CONTEXT_MENU_WIDTH, height: 50 };\n\t\t\t\t\tconst subMenuContent = this.buildColorPickerPanel();\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\n\t\t\t\t} else {\n\t\t\t\t\tconst disabled = { disabled: this.areAllSubmenuItemsDisabled(menuDefinition[i].menu) };\n\t\t\t\t\tconst subMenuSize = this.calculateMenuSize(menuDefinition[i].menu);\n\t\t\t\t\tconst subMenuContent = this.buildMenu(menuDefinition[i].menu, menuSize, menuPos, canvasRect);\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tconst disabled = { disabled: menuDefinition[i].enable === false };\n\t\t\t\tmenuItems.push(\n\t\t\t\t\t<MenuItem onClick={this.itemSelected.bind(null, menuDefinition[i].action)} key={i + 1} {...disabled}>\n\t\t\t\t\t\t{menuDefinition[i].label}\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t}\n\t\t}\n\t\treturn menuItems;\n\t}\n\n\tbuildColorPickerPanel() {\n\t\treturn (\n\t\t\t<ColorPickerPanel clickActionHandler={this.colorPickHandler} clickActionHandler={this.colorClicked} />\n\t\t);\n\t}\n\n\tbuildSubMenu(menuDefinition, index, subMenuContent, runningYPos, menuPos,\n\t\tmenuSize, subMenuSize, canvasRect, disabled) {\n\t\tconst rtl = this.buildRtlState(menuPos, menuSize, subMenuSize, canvasRect);\n\t\tconst subMenuPosStyle = this.buildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect);\n\n\t\tconst icon = <Icon type={CONTEXT_MENU_CARBON_ICONS.CHEVRONARROWS.RIGHT} disabled={false} className={\"react-contextmenu-submenu-icon\"} />;\n\t\tconst menuItem = <div>{menuDefinition[index].label}{icon} </div>;\n\n\t\treturn (\n\t\t\t<SubMenu title={menuItem} key={index + 1} className=\"contextmenu-submenu\" rtl={rtl} {...disabled}>\n\t\t\t\t<div key={index + 1} style={subMenuPosStyle} className=\"context-menu-popover\">\n\t\t\t\t\t{subMenuContent}\n\t\t\t\t</div>\n\t\t\t</SubMenu>\n\t\t);\n\t}\n\n\t// Returns a boolean to indicate whether the submenu should appear on the\n\t// right of the context menu (rtl === false) or on the left of the context\n\t// menu (rtl === true).\n\tbuildRtlState(menuPos, menuSize, subMenuSize, canvasRect) {\n\t\t// Ensure that the combined menu position, plus the menu width,\n\t\t// plus the submenu width, does not exceed the viewport bounds.\n\t\treturn (menuPos.x + menuSize.width + subMenuSize.width > canvasRect.right);\n\n\t}\n\n\t// Returns a style object that can be applied to the sub-menu to adjust\n\t// its vertical (y) position. This may be necessary if the submenu is tall\n\t// enough that it would be displayed off the bottom of the canvas area.\n\tbuildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect) {\n\t\t// Does the submenu go below the bottom of the viewport?\n\t\tconst y = canvasRect.bottom - (menuPos.y + runningYPos + subMenuSize.height);\n\n\t\t// If submenu is not below the viewport bottom set offset to 0 so the\n\t\t// submenu will not be moved. Otherwise, y will be used to move the\n\t\t// submenu up fully into the view port.\n\t\tconst offset = (y > 0) ? 0 : y - EXTRA_OFFSET;\n\n\t\tconst subMenuPosStyle = {\n\t\t\ttop: offset + \"px\" // Use negative to push the menu up\n\t\t};\n\t\treturn subMenuPosStyle;\n\t}\n\n\trender() {\n\t\t// Reposition contextMenu so that it does not show off the screen\n\t\tconst menuSize = this.calculateMenuSize(this.props.menuDefinition);\n\t\tconst menuPos = this.calculateMenuPos(this.props.mousePos, menuSize, this.props.canvasRect);\n\t\tconst posStyle = {\n\t\t\tleft: menuPos.x + \"px\",\n\t\t\ttop: menuPos.y + \"px\"\n\t\t};\n\n\t\tconst menuItems = this.buildMenu(this.props.menuDefinition, menuSize, menuPos, this.props.canvasRect);\n\n\t\treturn (\n\t\t\t<div id=\"context-menu-popover\" className=\"context-menu-popover\" style={posStyle} onContextMenu={this.onContextMenu}>\n\t\t\t\t{menuItems}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nCommonContextMenu.propTypes = {\n\tcontextHandler: PropTypes.func.isRequired,\n\tmenuDefinition: PropTypes.array.isRequired,\n\tcanvasRect: PropTypes.object.isRequired,\n\tmousePos: PropTypes.object.isRequired\n};\n\nexport default CommonContextMenu;\n","/*\n * Copyright 2017-2022 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 CommonContextMenu from \"./common-context-menu.jsx\";\n\nconst CONTEXT_MENU_BUTTON = 2;\n\nexport default class ContextMenuWrapper extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\n\t\tthis.contextMenuClicked = this.contextMenuClicked.bind(this);\n\t\tthis.handleClickOutside = this.handleClickOutside.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tdocument.addEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\tcomponentWillUnmount() {\n\t\tdocument.removeEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\t// Returns an object that describes the dimensions of a rectangle for the\n\t// canvas div with coordinates based on the top left corner of the div. This\n\t// will match the coordinates for the mouse position where the user clicked,\n\t// which is specified in this.props.contextMenuPos object.\n\tgetCanvasRect() {\n\t\tconst containingDiv = document.getElementById(this.props.containingDivId);\n\t\tconst clientRect = containingDiv.getBoundingClientRect();\n\t\tconst canvasRect = {\n\t\t\ttop: 0,\n\t\t\tbottom: clientRect.bottom - clientRect.top,\n\t\t\tleft: 0,\n\t\t\tright: clientRect.right - clientRect.left,\n\t\t\theight: clientRect.height,\n\t\t\twidth: clientRect.width\n\t\t};\n\n\t\treturn canvasRect;\n\t}\n\n\thandleClickOutside(e) {\n\t\t// On Firefox, the context menu gesture emits both a 'context menu' event\n\t\t// and a 'click' event. If the click is processed it causes the\n\t\t// context menu to disappear imediately after it has displayed.\n\t\t// Consequently, when this method is called with the context menu button set\n\t\t// (which indicates one of the additional clicks from Firefox) we just\n\t\t// stop propogation and return. On other browsers we don't get this extra\n\t\t// events.\n\t\t// Also, on Safari, when a user is displaying the context menu with a ctrl-click,\n\t\t// the click is received with a ctrlKey field enabled. So we also ignore that.\n\t\tif (e.button === CONTEXT_MENU_BUTTON || e.ctrlKey) {\n\t\t\te.stopPropagation();\n\t\t\treturn;\n\t\t}\n\n\t\t// If the click was anywhere outside the context menu we just close the menu.\n\t\tconst domNode = document.getElementById(\"context-menu-popover\");\n\t\tif (domNode && !domNode.contains(e.target)) {\n\t\t\t// This stop propagation is needed in common canvas so that selected nodes will\n\t\t\t// remain selected even after clicking outside the context menu to close the menu.\n\t\t\tif (this.props.stopPropagation) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\tthis.props.closeContextMenu();\n\t\t}\n\t}\n\n\tcontextMenuClicked(action, param) {\n\t\tthis.props.contextMenuActionHandler(action, param);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<CommonContextMenu\n\t\t\t\tcontextHandler={this.contextMenuClicked}\n\t\t\t\tmenuDefinition={this.props.contextMenuDef}\n\t\t\t\tcanvasRect={this.getCanvasRect()}\n\t\t\t\tmousePos={this.props.contextMenuPos}\n\t\t\t/>\n\t\t);\n\t}\n}\n\nContextMenuWrapper.propTypes = {\n\tcontextMenuDef: PropTypes.array.isRequired,\n\tcontainingDivId: PropTypes.string.isRequired,\n\tcontextMenuPos: PropTypes.object.isRequired,\n\tcontextMenuActionHandler: PropTypes.func.isRequired,\n\tcloseContextMenu: PropTypes.func.isRequired,\n\tstopPropagation: PropTypes.bool\n};\n"],"names":["props","_classCallCheck","_this","logger","Logger","onClick","bind","evt","color","target","dataset","this","clickActionHandler","log","React","className","tabIndex","Component","state","itemSelected","colorClicked","e","preventDefault","data","selectedEvent","contextHandler","stopPropagation","menu","numDividers","i","length","divider","height","width","mousePos","menuSize","canvasRect","menuPos","x","y","submenuItems","itemCount","disabledCount","forEach","submenuItem","enable","menuDefinition","customDivider","menuItems","runningYPos","previousDivider","submenu","push","MenuItem","attributes","key","subMenuSize","subMenuContent","buildColorPickerPanel","subMenu","buildSubMenu","disabled","areAllSubmenuItemsDisabled","calculateMenuSize","buildMenu","action","label","ColorPickerPanel","colorPickHandler","index","rtl","buildRtlState","subMenuPosStyle","buildSubMenuPosStyle","icon","Icon","type","CONTEXT_MENU_CARBON_ICONS","CHEVRONARROWS","RIGHT","menuItem","SubMenu","title","style","right","bottom","top","calculateMenuPos","posStyle","left","id","onContextMenu","ContextMenuWrapper","contextMenuClicked","handleClickOutside","document","addEventListener","removeEventListener","clientRect","getElementById","containingDivId","getBoundingClientRect","button","ctrlKey","domNode","contains","closeContextMenu","param","contextMenuActionHandler","CommonContextMenu","contextMenuDef","getCanvasRect","contextMenuPos"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context-menu.es.js","sources":["../../src/color-picker/color-picker-panel.jsx","../../src/context-menu/common-context-menu.jsx","../../src/context-menu/context-menu-wrapper.jsx"],"sourcesContent":["/*\n * Copyright 2022 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 Logger from \"../logging/canvas-logger.js\";\n\n\nclass ColorPickerPanel extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.logger = new Logger(\"CC-ContextMenu\");\n\n\t\tthis.onClick = this.onClick.bind(this);\n\t}\n\n\tonClick(evt) {\n\t\tconst color = evt.target.dataset.color;\n\t\tthis.props.clickActionHandler(color);\n\t}\n\n\trender() {\n\t\tthis.logger.log(\"render\");\n\t\treturn (\n\t\t\t<div className=\"color-picker-panel\" onClick={this.onClick}>\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-white-0\"} className=\"color-picker-item white-0\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-yellow-20\"} className=\"color-picker-item yellow-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-20\"} className=\"color-picker-item gray-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-20\"} className=\"color-picker-item green-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-20\"} className=\"color-picker-item teal-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-20\"} className=\"color-picker-item cyan-20\" />\n\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-red-50\"} className=\"color-picker-item red-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-orange-40\"} className=\"color-picker-item orange-40\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-50\"} className=\"color-picker-item gray-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-50\"} className=\"color-picker-item green-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-50\"} className=\"color-picker-item teal-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-50\"} className=\"color-picker-item cyan-50\" />\n\t\t\t</div>);\n\t}\n}\n\nColorPickerPanel.propTypes = {\n\tclickActionHandler: PropTypes.func.isRequired,\n\tcloseMenu: PropTypes.func\n};\n\nexport default ColorPickerPanel;\n","/*\n * Copyright 2017-2022 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 no-empty-function: [\"error\", { \"allow\": [\"arrowFunctions\"] }] */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { MenuItem, SubMenu } from \"react-contextmenu\";\nimport Icon from \"../icons/icon.jsx\";\nimport { CONTEXT_MENU_CARBON_ICONS } from \"../common-canvas/constants/canvas-constants\";\nimport ColorPickerPanel from \"../color-picker/color-picker-panel.jsx\";\n\n// context-menu sizing\nconst CONTEXT_MENU_WIDTH = 160; // see context-menu.css .react-context-menu margin\nconst CONTEXT_MENU_LINK_HEIGHT = 30; // see context-menu.css .react-context-menu-item height\nconst CONTEXT_MENU_DIVIDER_HEIGHT = 1; // see context-menu.css .react-context-menu-item height\nconst EXTRA_OFFSET = 5; // Extra offset for vertical menu positioning\n\n\nclass CommonContextMenu extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\t\tthis.itemSelected = this.itemSelected.bind(this);\n\t\tthis.colorClicked = this.colorClicked.bind(this);\n\t}\n\n\tonContextMenu(e) {\n\t\te.preventDefault();\n\t}\n\n\titemSelected(data, selectedEvent) {\n\t\tthis.props.contextHandler(data);\n\t\t// This stops the canvasClicked function from being fired which would\n\t\t// clear any current selections.\n\t\tif (selectedEvent) {\n\t\t\tselectedEvent.stopPropagation();\n\t\t}\n\t}\n\n\tcolorClicked(color) {\n\t\tthis.props.contextHandler(\"colorSelectedObjects\", { color });\n\t}\n\n\tcalculateMenuSize(menu) {\n\t\tvar numDividers = 0;\n\t\tfor (let i = 0; i < menu.length; ++i) {\n\t\t\tconst divider = menu[i].divider;\n\t\t\tif (divider) {\n\t\t\t\tnumDividers++;\n\t\t\t}\n\t\t}\n\n\t\tvar menuSize = {\n\t\t\theight: ((menu.length - numDividers) * CONTEXT_MENU_LINK_HEIGHT) + (numDividers * CONTEXT_MENU_DIVIDER_HEIGHT),\n\t\t\twidth: CONTEXT_MENU_WIDTH\n\t\t};\n\n\t\treturn menuSize;\n\t}\n\n\t// Returns a new position and the canvas rectangle for the context menu based on the current\n\t// mouse position and whether the menu would appear outside the edges of the page.\n\tcalculateMenuPos(mousePos, menuSize, canvasRect) {\n\t\tconst menuPos = { x: mousePos.x, y: mousePos.y };\n\n\t\t// Reposition contextMenu if it will show off the bottom of the page\n\t\tif (mousePos.y + menuSize.height > canvasRect.height) {\n\t\t\tmenuPos.y = canvasRect.height - menuSize.height - EXTRA_OFFSET; // Move up by extra offset so it looks nice\n\n\t\t\t// If repositioning the menu would push it off the top of the page\n\t\t\t// (in very short browser windows) position it at the top.\n\t\t\tif (menuPos.y < 0) {\n\t\t\t\tmenuPos.y = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Reposition contextMenu if it will show off the right of the page\n\t\tif (mousePos.x + menuSize.width > canvasRect.width) {\n\t\t\tmenuPos.x -= menuSize.width;\n\t\t}\n\n\t\t// Add a pixel to x and y because on Chrome without this the context menu\n\t\t// appears with the top corner of the first menu item under the mouse\n\t\t// cursor. This highlights the first menu item (which looks weird) and, if\n\t\t// the first item is a cascade menu, automatically opens the sub-menu.\n\t\tmenuPos.x += 1;\n\t\tmenuPos.y += 1;\n\n\t\treturn menuPos;\n\t}\n\n\tareAllSubmenuItemsDisabled(submenuItems) {\n\t\tlet itemCount = 0;\n\t\tlet disabledCount = 0;\n\t\tsubmenuItems.forEach(function(submenuItem) {\n\t\t\tif (!submenuItem.divider) {\n\t\t\t\titemCount++;\n\t\t\t}\n\t\t\tif (submenuItem.enable === false) {\n\t\t\t\tdisabledCount++;\n\t\t\t}\n\t\t});\n\t\treturn disabledCount === itemCount;\n\t}\n\n\tbuildMenu(menuDefinition, menuSize, menuPos, canvasRect) {\n\t\tconst customDivider = {\n\t\t\tclassName: \"contextmenu-divider\"\n\t\t};\n\n\t\tconst menuItems = [];\n\n\t\tlet runningYPos = 0;\n\t\t// Records if we have just displayed a divider. This is useful because we\n\t\t// only want to display one divider if there is a divider element\n\t\t// immediately after another divider element in the menuDefintion array.\n\t\tlet previousDivider = false;\n\n\t\tfor (let i = 0; i < menuDefinition.length; ++i) {\n\t\t\tconst divider = menuDefinition[i].divider;\n\t\t\tconst submenu = menuDefinition[i].submenu;\n\n\t\t\tif (divider) {\n\t\t\t\tif (!previousDivider) {\n\t\t\t\t\tmenuItems.push(<MenuItem attributes={customDivider} key={i + 1} onClick={() => {}} divider />);\n\t\t\t\t\trunningYPos += CONTEXT_MENU_DIVIDER_HEIGHT;\n\t\t\t\t\tpreviousDivider = true;\n\t\t\t\t}\n\n\t\t\t} else if (submenu) {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tif (menuDefinition[i].menu === \"colorPicker\") {\n\t\t\t\t\tconst disabled = false;\n\t\t\t\t\tconst subMenuSize = { width: CONTEXT_MENU_WIDTH, height: 50 };\n\t\t\t\t\tconst subMenuContent = this.buildColorPickerPanel();\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\n\t\t\t\t} else {\n\t\t\t\t\tconst disabled = { disabled: this.areAllSubmenuItemsDisabled(menuDefinition[i].menu) };\n\t\t\t\t\tconst subMenuSize = this.calculateMenuSize(menuDefinition[i].menu);\n\t\t\t\t\tconst subMenuContent = this.buildMenu(menuDefinition[i].menu, menuSize, menuPos, canvasRect);\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tconst disabled = { disabled: menuDefinition[i].enable === false };\n\t\t\t\tmenuItems.push(\n\t\t\t\t\t<MenuItem onClick={this.itemSelected.bind(null, menuDefinition[i].action)} key={i + 1} {...disabled}>\n\t\t\t\t\t\t{menuDefinition[i].label}\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t}\n\t\t}\n\t\treturn menuItems;\n\t}\n\n\tbuildColorPickerPanel() {\n\t\treturn (\n\t\t\t<ColorPickerPanel clickActionHandler={this.colorPickHandler} clickActionHandler={this.colorClicked} />\n\t\t);\n\t}\n\n\tbuildSubMenu(menuDefinition, index, subMenuContent, runningYPos, menuPos,\n\t\tmenuSize, subMenuSize, canvasRect, disabled) {\n\t\tconst rtl = this.buildRtlState(menuPos, menuSize, subMenuSize, canvasRect);\n\t\tconst subMenuPosStyle = this.buildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect);\n\n\t\tconst icon = <Icon type={CONTEXT_MENU_CARBON_ICONS.CHEVRONARROWS.RIGHT} disabled={false} className={\"react-contextmenu-submenu-icon\"} />;\n\t\tconst menuItem = <div>{menuDefinition[index].label}{icon} </div>;\n\n\t\treturn (\n\t\t\t<SubMenu title={menuItem} key={index + 1} className=\"contextmenu-submenu\" rtl={rtl} {...disabled}>\n\t\t\t\t<div key={index + 1} style={subMenuPosStyle} className=\"context-menu-popover\">\n\t\t\t\t\t{subMenuContent}\n\t\t\t\t</div>\n\t\t\t</SubMenu>\n\t\t);\n\t}\n\n\t// Returns a boolean to indicate whether the submenu should appear on the\n\t// right of the context menu (rtl === false) or on the left of the context\n\t// menu (rtl === true).\n\tbuildRtlState(menuPos, menuSize, subMenuSize, canvasRect) {\n\t\t// Ensure that the combined menu position, plus the menu width,\n\t\t// plus the submenu width, does not exceed the viewport bounds.\n\t\treturn (menuPos.x + menuSize.width + subMenuSize.width > canvasRect.right);\n\n\t}\n\n\t// Returns a style object that can be applied to the sub-menu to adjust\n\t// its vertical (y) position. This may be necessary if the submenu is tall\n\t// enough that it would be displayed off the bottom of the canvas area.\n\tbuildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect) {\n\t\t// Does the submenu go below the bottom of the viewport?\n\t\tconst y = canvasRect.bottom - (menuPos.y + runningYPos + subMenuSize.height);\n\n\t\t// If submenu is not below the viewport bottom set offset to 0 so the\n\t\t// submenu will not be moved. Otherwise, y will be used to move the\n\t\t// submenu up fully into the view port.\n\t\tconst offset = (y > 0) ? 0 : y - EXTRA_OFFSET;\n\n\t\tconst subMenuPosStyle = {\n\t\t\ttop: offset + \"px\" // Use negative to push the menu up\n\t\t};\n\t\treturn subMenuPosStyle;\n\t}\n\n\trender() {\n\t\t// Reposition contextMenu so that it does not show off the screen\n\t\tconst menuSize = this.calculateMenuSize(this.props.menuDefinition);\n\t\tconst menuPos = this.calculateMenuPos(this.props.mousePos, menuSize, this.props.canvasRect);\n\t\tconst posStyle = {\n\t\t\tleft: menuPos.x + \"px\",\n\t\t\ttop: menuPos.y + \"px\"\n\t\t};\n\n\t\tconst menuItems = this.buildMenu(this.props.menuDefinition, menuSize, menuPos, this.props.canvasRect);\n\n\t\treturn (\n\t\t\t<div id=\"context-menu-popover\" className=\"context-menu-popover\" style={posStyle} onContextMenu={this.onContextMenu}>\n\t\t\t\t{menuItems}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nCommonContextMenu.propTypes = {\n\tcontextHandler: PropTypes.func.isRequired,\n\tmenuDefinition: PropTypes.array.isRequired,\n\tcanvasRect: PropTypes.object.isRequired,\n\tmousePos: PropTypes.object.isRequired\n};\n\nexport default CommonContextMenu;\n","/*\n * Copyright 2017-2022 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 CommonContextMenu from \"./common-context-menu.jsx\";\n\nexport default class ContextMenuWrapper extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\n\t\tthis.contextMenuClicked = this.contextMenuClicked.bind(this);\n\t\tthis.handleClickOutside = this.handleClickOutside.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tdocument.addEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\tcomponentWillUnmount() {\n\t\tdocument.removeEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\t// Returns an object that describes the dimensions of a rectangle for the\n\t// canvas div with coordinates based on the top left corner of the div. This\n\t// will match the coordinates for the mouse position where the user clicked,\n\t// which is specified in this.props.contextMenuPos object.\n\tgetCanvasRect() {\n\t\tconst containingDiv = document.getElementById(this.props.containingDivId);\n\t\tconst clientRect = containingDiv.getBoundingClientRect();\n\t\tconst canvasRect = {\n\t\t\ttop: 0,\n\t\t\tbottom: clientRect.bottom - clientRect.top,\n\t\t\tleft: 0,\n\t\t\tright: clientRect.right - clientRect.left,\n\t\t\theight: clientRect.height,\n\t\t\twidth: clientRect.width\n\t\t};\n\n\t\treturn canvasRect;\n\t}\n\n\thandleClickOutside(e) {\n\t\t// On Safari, when a user is displaying the context menu with a ctrl-click\n\t\t// (which is a supported context menu gesture on the Mac) a secondary click\n\t\t// event is emmitted which is received here with the ctrlKey field enabled.\n\t\t// So we ignore that event otherwse, if we continue, the context menu will\n\t\t// be closed.\n\t\tif (e.ctrlKey) {\n\t\t\te.stopPropagation();\n\t\t\treturn;\n\t\t}\n\n\t\t// If the click was anywhere outside the context menu and\n\t\t// the ellipsis button we just close the menu.\n\t\tif (!this.isOverContextMenu(e) && !this.isOverEllipsisButton(e)) {\n\t\t\t// This stop propagation is needed in common canvas so that selected nodes will\n\t\t\t// remain selected even after clicking outside the context menu to close the menu.\n\t\t\tif (this.props.stopPropagation) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\tthis.props.closeContextMenu();\n\t\t}\n\t}\n\n\t// Retruns true if the event occurred over the context menu.\n\tisOverContextMenu(e) {\n\t\tconst domNode = document.getElementById(\"context-menu-popover\");\n\t\treturn !domNode || domNode.contains(e.target);\n\t}\n\n\t// Returns true if the event occurred over the ellipsis button. Typically\n\t// there will be only one ellipsis button on the canvas, since they are only\n\t// displayed on hover, but in some test cicumstances there might be more\n\t// than one.\n\tisOverEllipsisButton(e) {\n\t\tconst ellipsisNodes = document.getElementsByClassName(\"d3-node-ellipsis-group\");\n\t\tlet state = false;\n\t\tfor (let i = 0; i < ellipsisNodes.length; i++) {\n\t\t\tif (state === false && ellipsisNodes[i].contains(e.target)) {\n\t\t\t\tstate = true;\n\t\t\t}\n\t\t}\n\t\treturn state;\n\t}\n\n\tcontextMenuClicked(action, param) {\n\t\tthis.props.contextMenuActionHandler(action, param);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<CommonContextMenu\n\t\t\t\tcontextHandler={this.contextMenuClicked}\n\t\t\t\tmenuDefinition={this.props.contextMenuDef}\n\t\t\t\tcanvasRect={this.getCanvasRect()}\n\t\t\t\tmousePos={this.props.contextMenuPos}\n\t\t\t/>\n\t\t);\n\t}\n}\n\nContextMenuWrapper.propTypes = {\n\tcontextMenuDef: PropTypes.array.isRequired,\n\tcontainingDivId: PropTypes.string.isRequired,\n\tcontextMenuPos: PropTypes.object.isRequired,\n\tcontextMenuActionHandler: PropTypes.func.isRequired,\n\tcloseContextMenu: PropTypes.func.isRequired,\n\tstopPropagation: PropTypes.bool\n};\n"],"names":["_inherits","props","_classCallCheck","_this","logger","Logger","onClick","bind","_createClass","key","value","evt","color","target","dataset","this","clickActionHandler","log","React","className","tabIndex","Component","state","itemSelected","colorClicked","e","preventDefault","data","selectedEvent","contextHandler","stopPropagation","menu","numDividers","i","length","divider","height","width","mousePos","menuSize","canvasRect","menuPos","x","y","submenuItems","itemCount","disabledCount","forEach","submenuItem","enable","menuDefinition","customDivider","menuItems","runningYPos","previousDivider","submenu","push","MenuItem","attributes","subMenuSize","subMenuContent","buildColorPickerPanel","subMenu","buildSubMenu","disabled","areAllSubmenuItemsDisabled","calculateMenuSize","buildMenu","action","label","ColorPickerPanel","colorPickHandler","index","rtl","buildRtlState","subMenuPosStyle","buildSubMenuPosStyle","icon","Icon","type","CONTEXT_MENU_CARBON_ICONS","CHEVRONARROWS","RIGHT","menuItem","SubMenu","title","style","right","bottom","top","calculateMenuPos","posStyle","left","id","onContextMenu","ContextMenuWrapper","contextMenuClicked","handleClickOutside","document","addEventListener","removeEventListener","clientRect","getElementById","containingDivId","getBoundingClientRect","ctrlKey","isOverContextMenu","isOverEllipsisButton","closeContextMenu","domNode","contains","ellipsisNodes","getElementsByClassName","param","contextMenuActionHandler","CommonContextMenu","contextMenuDef","getCanvasRect","contextMenuPos"],"mappings":"i2BAkBiD,kBAG3BA,OAAA,WACrB,WAAYC,GAAO,MAIqB,OAJrBC,WAClBC,cAAMF,IACDG,OAAS,IAAIC,EAAO,kBAEzBF,EAAKG,QAAUH,EAAKG,QAAQC,aA0B5B,OAzBAC,MAAAC,cAAAC,MAED,SAAQC,GACP,IAAMC,EAAQD,EAAIE,OAAOC,QAAQF,MACjCG,KAAKd,MAAMe,mBAAmBJ,MAC9BH,aAAAC,MAED,WAEC,OADAK,KAAKX,OAAOa,IAAI,UAEfC,uBAAKC,UAAU,qBAAqBb,QAASS,KAAKT,SACjDY,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,uBAAKE,SAAS,IAAI,aAAY,oBAAqBD,UAAU,gCAC7DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,uBAAKE,SAAS,IAAI,aAAY,mBAAoBD,UAAU,+BAC5DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAE3DD,uBAAKE,SAAS,IAAI,aAAY,iBAAkBD,UAAU,6BAC1DD,uBAAKE,SAAS,IAAI,aAAY,oBAAqBD,UAAU,gCAC7DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,uBAAKE,SAAS,IAAI,aAAY,mBAAoBD,UAAU,+BAC5DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,oCAE7D,EA/B6BD,EAAMG,kbCIrC,kBAMuBrB,OAAA,WACtB,WAAYC,GAAO,MAI+B,OAJ/BC,WAClBC,cAAMF,IACDqB,MAAQ,GACbnB,EAAKoB,aAAepB,EAAKoB,aAAahB,WACtCJ,EAAKqB,aAAerB,EAAKqB,aAAajB,aAoNtC,OAnNAC,MAAAC,oBAAAC,MAED,SAAce,GACbA,EAAEC,oBACFjB,mBAAAC,MAED,SAAaiB,EAAMC,GAClBb,KAAKd,MAAM4B,eAAeF,GAGtBC,GACHA,EAAcE,qBAEfrB,mBAAAC,MAED,SAAaE,GACZG,KAAKd,MAAM4B,eAAe,uBAAwB,CAAEjB,MAAAA,OACpDH,wBAAAC,MAED,SAAkBqB,GAEjB,IADA,IAAIC,EAAc,EACTC,EAAI,EAAGA,EAAIF,EAAKG,SAAUD,EAAG,CACrBF,EAAKE,GAAGE,SAEvBH,IASF,MALe,CACdI,OAxC8B,IAwCpBL,EAAKG,OAASF,GAvCS,EAuCmCA,EACpEK,MA1CwB,QAiD1B5B,uBAAAC,MACA,SAAiB4B,EAAUC,EAAUC,GACpC,IAAMC,EAAU,CAAEC,EAAGJ,EAASI,EAAGC,EAAGL,EAASK,GAyB7C,OAtBIL,EAASK,EAAIJ,EAASH,OAASI,EAAWJ,SAC7CK,EAAQE,EAAIH,EAAWJ,OAASG,EAASH,OApDvB,EAwDdK,EAAQE,EAAI,IACfF,EAAQE,EAAI,IAKVL,EAASI,EAAIH,EAASF,MAAQG,EAAWH,QAC5CI,EAAQC,GAAKH,EAASF,OAOvBI,EAAQC,GAAK,EACbD,EAAQE,GAAK,EAENF,KACPhC,iCAAAC,MAED,SAA2BkC,GAC1B,IAAIC,EAAY,EACZC,EAAgB,EASpB,OARAF,EAAaG,SAAQ,SAASC,GACxBA,EAAYb,SAChBU,KAE0B,IAAvBG,EAAYC,QACfH,OAGKA,IAAkBD,KACzBpC,gBAAAC,MAED,SAAUwC,EAAgBX,EAAUE,EAASD,GAa5C,IAZA,IAAMW,EAAgB,CACrBhC,UAAW,uBAGNiC,EAAY,GAEdC,EAAc,EAIdC,GAAkB,EAEbrB,EAAI,EAAGA,EAAIiB,EAAehB,SAAUD,EAAG,CAC/C,IAAME,EAAUe,EAAejB,GAAGE,QAC5BoB,EAAUL,EAAejB,GAAGsB,QAElC,GAAIpB,EACEmB,IACJF,EAAUI,KAAKtC,gBAACuC,GAASC,WAAYP,EAAe1C,IAAKwB,EAAI,EAAG3B,QAAS,aAAU6B,cACnFkB,GA/G+B,EAgH/BC,GAAkB,QAGb,GAAIC,EAEV,GADAD,GAAkB,EACa,gBAA3BJ,EAAejB,GAAGF,KAAwB,CAC7C,IACM4B,EAAc,CAAEtB,MAzHA,IAyH2BD,OAAQ,IACnDwB,EAAiB7C,KAAK8C,wBAEtBC,EAAU/C,KAAKgD,aACpBb,EAAgBjB,EAAG2B,EAAgBP,EAAaZ,EAASF,EAAUoB,EAAanB,GALhE,GAMjBY,EAAUI,KAAKM,GAEfT,GA/H4B,OAiItB,CACN,IAAMW,EAAW,CAAEA,SAAUjD,KAAKkD,2BAA2Bf,EAAejB,GAAGF,OACzE4B,EAAc5C,KAAKmD,kBAAkBhB,EAAejB,GAAGF,MACvD6B,EAAiB7C,KAAKoD,UAAUjB,EAAejB,GAAGF,KAAMQ,EAAUE,EAASD,GAE3EsB,EAAU/C,KAAKgD,aACpBb,EAAgBjB,EAAG2B,EAAgBP,EAAaZ,EAASF,EAAUoB,EAAanB,EAAYwB,GAC7FZ,EAAUI,KAAKM,GAEfT,GA1I4B,OA6IvB,CACNC,GAAkB,EAClB,IAAMU,EAAW,CAAEA,UAAuC,IAA7Bd,EAAejB,GAAGgB,QAC/CG,EAAUI,KACTtC,gBAACuC,KAASnD,QAASS,KAAKQ,aAAahB,KAAK,KAAM2C,EAAejB,GAAGmC,QAAS3D,IAAKwB,EAAI,GAAO+B,GACzFd,EAAejB,GAAGoC,QAGrBhB,GArJ6B,IAwJ/B,OAAOD,KACP3C,4BAAAC,MAED,WACC,OACCQ,gBAACoD,KAAiBtD,mBAAoBD,KAAKwD,uCAAsCxD,KAAKS,kBAEvFf,mBAAAC,MAED,SAAawC,EAAgBsB,EAAOZ,EAAgBP,EAAaZ,EAChEF,EAAUoB,EAAanB,EAAYwB,GACnC,IAAMS,EAAM1D,KAAK2D,cAAcjC,EAASF,EAAUoB,EAAanB,GACzDmC,EAAkB5D,KAAK6D,qBAAqBvB,EAAaZ,EAASkB,EAAanB,GAE/EqC,EAAO3D,gBAAC4D,GAAKC,KAAMC,EAA0BC,cAAcC,MAAOlB,UAAU,EAAO7C,UAAW,mCAC9FgE,EAAWjE,2BAAMgC,EAAesB,GAAOH,MAAOQ,OAEpD,OACC3D,gBAACkE,KAAQC,MAAOF,EAAU1E,IAAK+D,EAAQ,EAAGrD,UAAU,sBAAsBsD,IAAKA,GAAST,GACvF9C,uBAAKT,IAAK+D,EAAQ,EAAGc,MAAOX,EAAiBxD,UAAU,wBACrDyC,OAQLnD,oBAAAC,MACA,SAAc+B,EAASF,EAAUoB,EAAanB,GAG7C,OAAQC,EAAQC,EAAIH,EAASF,MAAQsB,EAAYtB,MAAQG,EAAW+C,SAMrE9E,2BAAAC,MACA,SAAqB2C,EAAaZ,EAASkB,EAAanB,GAEvD,IAAMG,EAAIH,EAAWgD,QAAU/C,EAAQE,EAAIU,EAAcM,EAAYvB,QAUrE,MAHwB,CACvBqD,KAHe9C,EAAI,EAAK,EAAIA,EApMV,GAuMJ,SAGflC,aAAAC,MAED,WAEC,IAAM6B,EAAWxB,KAAKmD,kBAAkBnD,KAAKd,MAAMiD,gBAC7CT,EAAU1B,KAAK2E,iBAAiB3E,KAAKd,MAAMqC,SAAUC,EAAUxB,KAAKd,MAAMuC,YAC1EmD,EAAW,CAChBC,KAAMnD,EAAQC,EAAI,KAClB+C,IAAKhD,EAAQE,EAAI,MAGZS,EAAYrC,KAAKoD,UAAUpD,KAAKd,MAAMiD,eAAgBX,EAAUE,EAAS1B,KAAKd,MAAMuC,YAE1F,OACCtB,uBAAK2E,GAAG,uBAAuB1E,UAAU,uBAAuBmE,MAAOK,EAAUG,cAAe/E,KAAK+E,eACnG1C,QAGH,EAzN8BlC,EAAMG,sbCXjB0E,cAAkB/F,OAAA,WACtC,WAAYC,GAAO,MAK2C,OAL3CC,WAClBC,cAAMF,IACDqB,MAAQ,GAEbnB,EAAK6F,mBAAqB7F,EAAK6F,mBAAmBzF,WAClDJ,EAAK8F,mBAAqB9F,EAAK8F,mBAAmB1F,aAuFlD,OAtFAC,MAAAC,wBAAAC,MAED,WACCwF,SAASC,iBAAiB,QAASpF,KAAKkF,oBAAoB,MAC5DxF,2BAAAC,MAED,WACCwF,SAASE,oBAAoB,QAASrF,KAAKkF,oBAAoB,MAMhExF,oBAAAC,MACA,WACC,IACM2F,EADgBH,SAASI,eAAevF,KAAKd,MAAMsG,iBACxBC,wBAUjC,MATmB,CAClBf,IAAK,EACLD,OAAQa,EAAWb,OAASa,EAAWZ,IACvCG,KAAM,EACNL,MAAOc,EAAWd,MAAQc,EAAWT,KACrCxD,OAAQiE,EAAWjE,OACnBC,MAAOgE,EAAWhE,UAInB5B,yBAAAC,MAED,SAAmBe,GAMdA,EAAEgF,QACLhF,EAAEK,kBAMEf,KAAK2F,kBAAkBjF,IAAOV,KAAK4F,qBAAqBlF,KAGxDV,KAAKd,MAAM6B,iBACdL,EAAEK,kBAEHf,KAAKd,MAAM2G,uBAIbnG,wBAAAC,MACA,SAAkBe,GACjB,IAAMoF,EAAUX,SAASI,eAAe,wBACxC,OAAQO,GAAWA,EAAQC,SAASrF,EAAEZ,WAMvCJ,2BAAAC,MACA,SAAqBe,GAGpB,IAFA,IAAMsF,EAAgBb,SAASc,uBAAuB,0BAClD1F,GAAQ,EACHW,EAAI,EAAGA,EAAI8E,EAAc7E,OAAQD,KAC3B,IAAVX,GAAmByF,EAAc9E,GAAG6E,SAASrF,EAAEZ,UAClDS,GAAQ,GAGV,OAAOA,KACPb,yBAAAC,MAED,SAAmB0D,EAAQ6C,GAC1BlG,KAAKd,MAAMiH,yBAAyB9C,EAAQ6C,MAC5CxG,aAAAC,MAED,WACC,OACCQ,gBAACiG,GACAtF,eAAgBd,KAAKiF,mBACrB9C,eAAgBnC,KAAKd,MAAMmH,eAC3B5E,WAAYzB,KAAKsG,gBACjB/E,SAAUvB,KAAKd,MAAMqH,sBAGvB,EA7F8CpG,EAAMG"}
|