@elyra/canvas 12.10.2 → 12.11.2
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-7f93e705.js +2 -0
- package/dist/canvas-constants-7f93e705.js.map +1 -0
- package/dist/canvas-constants-ac5daafb.js +2 -0
- package/dist/canvas-constants-ac5daafb.js.map +1 -0
- package/dist/canvas-controller-190542a6.js +2 -0
- package/dist/canvas-controller-190542a6.js.map +1 -0
- package/dist/canvas-controller-cbee8dd7.js +2 -0
- package/dist/canvas-controller-cbee8dd7.js.map +1 -0
- package/dist/canvas-logger-815781bb.js +2 -0
- package/dist/canvas-logger-815781bb.js.map +1 -0
- package/dist/canvas-logger-a0f1beaa.js +2 -0
- package/dist/canvas-logger-a0f1beaa.js.map +1 -0
- package/dist/common-canvas-8d2ddc6b.js +2 -0
- package/dist/common-canvas-8d2ddc6b.js.map +1 -0
- package/dist/common-canvas-e0a57cdb.js +2 -0
- package/dist/common-canvas-e0a57cdb.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-09ec10eb.js +2 -0
- package/dist/common-properties-09ec10eb.js.map +1 -0
- package/dist/common-properties-f1b96e0f.js +2 -0
- package/dist/common-properties-f1b96e0f.js.map +1 -0
- package/dist/datarecord-metadata-v3-schema-bda88f2e.js +2 -0
- package/dist/datarecord-metadata-v3-schema-bda88f2e.js.map +1 -0
- package/dist/datarecord-metadata-v3-schema-d7ad05cd.js +2 -0
- package/dist/datarecord-metadata-v3-schema-d7ad05cd.js.map +1 -0
- package/dist/en-2ed89528.js +2 -0
- package/dist/en-2ed89528.js.map +1 -0
- package/dist/en-e93855cc.js +2 -0
- package/dist/en-e93855cc.js.map +1 -0
- package/dist/extends-39f57612.js +7 -0
- package/dist/extends-39f57612.js.map +1 -0
- package/dist/extends-51d9ddcc.js +7 -0
- package/dist/extends-51d9ddcc.js.map +1 -0
- package/dist/flexible-table-154a3359.js +2 -0
- package/dist/flexible-table-154a3359.js.map +1 -0
- package/dist/flexible-table-5e4a1e6d.js +2 -0
- package/dist/flexible-table-5e4a1e6d.js.map +1 -0
- package/dist/icon-811ffddd.js +2 -0
- package/dist/icon-811ffddd.js.map +1 -0
- package/dist/icon-d6909a68.js +2 -0
- package/dist/icon-d6909a68.js.map +1 -0
- package/dist/index-4fd90a14.js +2 -0
- package/dist/index-4fd90a14.js.map +1 -0
- package/dist/index-6d138021.js +2 -0
- package/dist/index-6d138021.js.map +1 -0
- package/dist/isArrayLikeObject-31e5e646.js +2 -0
- package/dist/isArrayLikeObject-31e5e646.js.map +1 -0
- package/dist/isArrayLikeObject-7c33c7fd.js +2 -0
- package/dist/isArrayLikeObject-7c33c7fd.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/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-335252dd.js +2 -0
- package/dist/toolbar-335252dd.js.map +1 -0
- package/dist/toolbar-85e6c77b.js +2 -0
- package/dist/toolbar-85e6c77b.js.map +1 -0
- package/locales/command-actions/locales/en.json +7 -1
- package/locales/command-actions/locales/eo.json +7 -1
- package/locales/command-actions/locales/index.js +3 -1
- package/locales/command-actions/locales/ko.json +9 -0
- package/locales/common-canvas/locales/en.json +3 -0
- package/locales/common-canvas/locales/eo.json +3 -0
- package/locales/common-canvas/locales/index.js +3 -1
- package/locales/common-canvas/locales/ko.json +32 -0
- package/locales/common-properties/locales/index.js +3 -1
- package/locales/common-properties/locales/ko.json +93 -0
- package/locales/palette/locales/index.js +3 -1
- package/locales/palette/locales/ko.json +10 -0
- package/locales/toolbar/locales/index.js +3 -1
- package/locales/toolbar/locales/ko.json +8 -0
- package/package.json +2 -1
- package/src/color-picker/color-picker-panel.jsx +61 -0
- package/src/color-picker/color-picker.jsx +37 -0
- package/src/color-picker/color-picker.scss +46 -0
- package/src/command-actions/colorSelectedObjectsAction.js +72 -0
- package/src/command-actions/deleteObjectsAction.js +16 -11
- package/src/command-actions/pasteAction.js +50 -21
- package/src/common-canvas/canvas-controller.js +32 -5
- package/src/common-canvas/cc-bottom-panel.jsx +15 -9
- package/src/common-canvas/cc-contents.jsx +115 -8
- package/src/common-canvas/cc-toolbar.jsx +7 -6
- package/src/common-canvas/common-canvas-utils.js +73 -90
- package/src/common-canvas/common-canvas.scss +5 -5
- package/src/common-canvas/constants/canvas-constants.js +17 -16
- package/src/common-canvas/label-util.js +1 -1
- package/src/common-canvas/svg-canvas-d3.js +20 -107
- package/src/common-canvas/svg-canvas-d3.scss +66 -4
- package/src/common-canvas/svg-canvas-pipeline.js +201 -0
- package/src/common-canvas/svg-canvas-renderer.js +325 -339
- package/src/common-canvas/svg-canvas-utils-links.js +3 -3
- package/src/common-canvas/svg-canvas-utils-nodes.js +22 -44
- package/src/common-properties/actions.js +4 -0
- package/src/common-properties/components/field-picker/field-picker.jsx +33 -36
- package/src/common-properties/components/field-picker/field-picker.scss +20 -23
- package/src/common-properties/components/flexible-table/flexible-table.jsx +46 -31
- package/src/common-properties/components/flexible-table/flexible-table.scss +14 -17
- package/src/common-properties/components/properties-buttons/properties-buttons.jsx +28 -21
- package/src/common-properties/components/table-buttons/table-buttons.jsx +3 -1
- package/src/common-properties/components/table-buttons/table-buttons.scss +8 -8
- package/src/common-properties/components/title-editor/title-editor.jsx +31 -4
- package/src/common-properties/components/title-editor/title-editor.scss +30 -5
- package/src/common-properties/components/virtualized-table/virtualized-table.jsx +119 -27
- package/src/common-properties/components/virtualized-table/virtualized-table.scss +72 -8
- package/src/common-properties/constants/constants.js +5 -1
- package/src/common-properties/constants/form-constants.js +1 -0
- package/src/common-properties/controls/abstract-table.jsx +12 -11
- package/src/common-properties/controls/abstract-table.scss +6 -2
- package/src/common-properties/controls/dropdown/dropdown.scss +4 -0
- package/src/common-properties/controls/expression/expression-builder/expression-select-field-function.jsx +2 -2
- package/src/common-properties/controls/expression/expression.scss +1 -1
- package/src/common-properties/controls/passwordfield/passwordfield.jsx +2 -2
- package/src/common-properties/controls/readonlytable/readonlytable.jsx +4 -2
- package/src/common-properties/controls/selectcolumns/selectcolumns.scss +0 -19
- package/src/common-properties/controls/someofselect/someofselect.scss +2 -2
- package/src/common-properties/form/ControlInfo.js +8 -0
- package/src/common-properties/form/EditorForm.js +4 -0
- package/src/common-properties/form/ParameterInfo.js +4 -0
- package/src/common-properties/panels/sub-panel/cell.jsx +18 -23
- package/src/common-properties/panels/sub-panel/sub-panel.scss +5 -22
- package/src/common-properties/properties-controller.js +18 -0
- package/src/common-properties/properties-main/properties-main.jsx +15 -9
- package/src/common-properties/properties-main/properties-main.scss +9 -2
- package/src/common-properties/properties-store.js +27 -1
- package/src/common-properties/reducers/properties-settings.js +17 -1
- package/src/context-menu/common-context-menu.jsx +74 -29
- package/src/context-menu/context-menu-wrapper.jsx +2 -2
- package/src/icons/icon.jsx +5 -46
- package/src/index.scss +1 -0
- package/src/object-model/api-pipeline.js +18 -7
- package/src/object-model/object-model.js +27 -3
- package/src/object-model/redux/reducers/canvasinfo.js +36 -0
- package/src/object-model/redux/reducers/comments.js +58 -10
- package/src/object-model/redux/reducers/externalpipelineflows.js +1 -0
- package/src/object-model/redux/reducers/links.js +9 -7
- package/src/object-model/redux/reducers/selectioninfo.js +2 -1
- package/src/palette/palette-content-list-item.jsx +8 -1
- package/src/palette/palette-dialog-content-grid-node.jsx +8 -1
- package/src/toolbar/toolbar-action-item.jsx +75 -11
- package/src/toolbar/toolbar-overflow-item.jsx +2 -3
- package/src/tooltip/tooltip.jsx +4 -1
- package/stats.html +1 -1
- package/dist/canvas-constants-af93267a.js +0 -2
- package/dist/canvas-constants-af93267a.js.map +0 -1
- package/dist/canvas-constants-ffce3b78.js +0 -2
- package/dist/canvas-constants-ffce3b78.js.map +0 -1
- package/dist/canvas-controller-3f67c4fb.js +0 -2
- package/dist/canvas-controller-3f67c4fb.js.map +0 -1
- package/dist/canvas-controller-cee447d2.js +0 -2
- package/dist/canvas-controller-cee447d2.js.map +0 -1
- package/dist/common-canvas-e212a9c1.js +0 -2
- package/dist/common-canvas-e212a9c1.js.map +0 -1
- package/dist/common-canvas-e98191b3.js +0 -2
- package/dist/common-canvas-e98191b3.js.map +0 -1
- package/dist/common-properties-653e50e3.js +0 -2
- package/dist/common-properties-653e50e3.js.map +0 -1
- package/dist/common-properties-e2c6def7.js +0 -2
- package/dist/common-properties-e2c6def7.js.map +0 -1
- package/dist/datarecord-metadata-v3-schema-10ddafaf.js +0 -2
- package/dist/datarecord-metadata-v3-schema-10ddafaf.js.map +0 -1
- package/dist/datarecord-metadata-v3-schema-1504c843.js +0 -2
- package/dist/datarecord-metadata-v3-schema-1504c843.js.map +0 -1
- package/dist/en-517f38fc.js +0 -2
- package/dist/en-517f38fc.js.map +0 -1
- package/dist/en-dc6f2e9f.js +0 -2
- package/dist/en-dc6f2e9f.js.map +0 -1
- package/dist/extends-5a45f92e.js +0 -7
- package/dist/extends-5a45f92e.js.map +0 -1
- package/dist/extends-a52336ca.js +0 -8
- package/dist/extends-a52336ca.js.map +0 -1
- package/dist/flexible-table-e6ccbe58.js +0 -2
- package/dist/flexible-table-e6ccbe58.js.map +0 -1
- package/dist/flexible-table-f60c1680.js +0 -2
- package/dist/flexible-table-f60c1680.js.map +0 -1
- package/dist/index-567978da.js +0 -2
- package/dist/index-567978da.js.map +0 -1
- package/dist/index-59486e9a.js +0 -2
- package/dist/index-59486e9a.js.map +0 -1
- package/dist/isEmpty-def8f509.js +0 -2
- package/dist/isEmpty-def8f509.js.map +0 -1
- package/dist/isEmpty-e171b734.js +0 -2
- package/dist/isEmpty-e171b734.js.map +0 -1
- package/dist/toolbar-404bf690.js +0 -2
- package/dist/toolbar-404bf690.js.map +0 -1
- package/dist/toolbar-611d8ab9.js +0 -2
- package/dist/toolbar-611d8ab9.js.map +0 -1
|
@@ -20,6 +20,7 @@ import PropTypes from "prop-types";
|
|
|
20
20
|
import { MenuItem, SubMenu } from "react-contextmenu";
|
|
21
21
|
import Icon from "../icons/icon.jsx";
|
|
22
22
|
import { CONTEXT_MENU_CARBON_ICONS } from "../common-canvas/constants/canvas-constants";
|
|
23
|
+
import ColorPickerPanel from "../color-picker/color-picker-panel.jsx";
|
|
23
24
|
|
|
24
25
|
// context-menu sizing
|
|
25
26
|
const CONTEXT_MENU_WIDTH = 160; // see context-menu.css .react-context-menu margin
|
|
@@ -33,6 +34,7 @@ class CommonContextMenu extends React.Component {
|
|
|
33
34
|
super(props);
|
|
34
35
|
this.state = {};
|
|
35
36
|
this.itemSelected = this.itemSelected.bind(this);
|
|
37
|
+
this.colorClicked = this.colorClicked.bind(this);
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
onContextMenu(e) {
|
|
@@ -48,6 +50,10 @@ class CommonContextMenu extends React.Component {
|
|
|
48
50
|
}
|
|
49
51
|
}
|
|
50
52
|
|
|
53
|
+
colorClicked(color) {
|
|
54
|
+
this.props.contextHandler("colorSelectedObjects", { color });
|
|
55
|
+
}
|
|
56
|
+
|
|
51
57
|
calculateMenuSize(menu) {
|
|
52
58
|
var numDividers = 0;
|
|
53
59
|
for (let i = 0; i < menu.length; ++i) {
|
|
@@ -129,40 +135,28 @@ class CommonContextMenu extends React.Component {
|
|
|
129
135
|
|
|
130
136
|
} else if (submenu) {
|
|
131
137
|
previousDivider = false;
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
// Ensure that the combined menu position, plus the menu width,
|
|
138
|
-
// plus the submenu width, does not exceed the viewport bounds.
|
|
139
|
-
if (menuPos.x + menuSize.width + submenuSize.width > canvasRect.right) {
|
|
140
|
-
rtl = true;
|
|
141
|
-
}
|
|
138
|
+
if (menuDefinition[i].menu === "colorPicker") {
|
|
139
|
+
const disabled = false;
|
|
140
|
+
const subMenuSize = { width: CONTEXT_MENU_WIDTH, height: 50 };
|
|
141
|
+
const subMenuContent = this.buildColorPickerPanel();
|
|
142
142
|
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
const subMenu = this.buildSubMenu(
|
|
144
|
+
menuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);
|
|
145
|
+
menuItems.push(subMenu);
|
|
145
146
|
|
|
146
|
-
|
|
147
|
-
// submenu will not be moved. Otherwise, y will be used to move the
|
|
148
|
-
// submenu up fully into the view port.
|
|
149
|
-
const offset = (y > 0) ? 0 : y - EXTRA_OFFSET;
|
|
147
|
+
runningYPos += CONTEXT_MENU_LINK_HEIGHT;
|
|
150
148
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
149
|
+
} else {
|
|
150
|
+
const disabled = { disabled: this.areAllSubmenuItemsDisabled(menuDefinition[i].menu) };
|
|
151
|
+
const subMenuSize = this.calculateMenuSize(menuDefinition[i].menu);
|
|
152
|
+
const subMenuContent = this.buildMenu(menuDefinition[i].menu, menuSize, menuPos, canvasRect);
|
|
154
153
|
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
const subMenu = this.buildSubMenu(
|
|
155
|
+
menuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);
|
|
156
|
+
menuItems.push(subMenu);
|
|
157
157
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
<div key={i + 1} style={subMenuPosStyle} className="context-menu-popover">
|
|
161
|
-
{submenuItems}
|
|
162
|
-
</div>
|
|
163
|
-
</SubMenu>
|
|
164
|
-
);
|
|
165
|
-
runningYPos += CONTEXT_MENU_LINK_HEIGHT;
|
|
158
|
+
runningYPos += CONTEXT_MENU_LINK_HEIGHT;
|
|
159
|
+
}
|
|
166
160
|
|
|
167
161
|
} else {
|
|
168
162
|
previousDivider = false;
|
|
@@ -178,6 +172,57 @@ class CommonContextMenu extends React.Component {
|
|
|
178
172
|
return menuItems;
|
|
179
173
|
}
|
|
180
174
|
|
|
175
|
+
buildColorPickerPanel() {
|
|
176
|
+
return (
|
|
177
|
+
<ColorPickerPanel clickActionHandler={this.colorPickHandler} clickActionHandler={this.colorClicked} />
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
buildSubMenu(menuDefinition, index, subMenuContent, runningYPos, menuPos,
|
|
182
|
+
menuSize, subMenuSize, canvasRect, disabled) {
|
|
183
|
+
const rtl = this.buildRtlState(menuPos, menuSize, subMenuSize, canvasRect);
|
|
184
|
+
const subMenuPosStyle = this.buildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect);
|
|
185
|
+
|
|
186
|
+
const icon = <Icon type={CONTEXT_MENU_CARBON_ICONS.CHEVRONARROWS.RIGHT} disabled={false} className={"react-contextmenu-submenu-icon"} />;
|
|
187
|
+
const menuItem = <div>{menuDefinition[index].label}{icon} </div>;
|
|
188
|
+
|
|
189
|
+
return (
|
|
190
|
+
<SubMenu title={menuItem} key={index + 1} className="contextmenu-submenu" rtl={rtl} {...disabled}>
|
|
191
|
+
<div key={index + 1} style={subMenuPosStyle} className="context-menu-popover">
|
|
192
|
+
{subMenuContent}
|
|
193
|
+
</div>
|
|
194
|
+
</SubMenu>
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Returns a boolean to indicate whether the submenu should appear on the
|
|
199
|
+
// right of the context menu (rtl === false) or on the left of the context
|
|
200
|
+
// menu (rtl === true).
|
|
201
|
+
buildRtlState(menuPos, menuSize, subMenuSize, canvasRect) {
|
|
202
|
+
// Ensure that the combined menu position, plus the menu width,
|
|
203
|
+
// plus the submenu width, does not exceed the viewport bounds.
|
|
204
|
+
return (menuPos.x + menuSize.width + subMenuSize.width > canvasRect.right);
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Returns a style object that can be applied to the sub-menu to adjust
|
|
209
|
+
// its vertical (y) position. This may be necessary if the submenu is tall
|
|
210
|
+
// enough that it would be displayed off the bottom of the canvas area.
|
|
211
|
+
buildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect) {
|
|
212
|
+
// Does the submenu go below the bottom of the viewport?
|
|
213
|
+
const y = canvasRect.bottom - (menuPos.y + runningYPos + subMenuSize.height);
|
|
214
|
+
|
|
215
|
+
// If submenu is not below the viewport bottom set offset to 0 so the
|
|
216
|
+
// submenu will not be moved. Otherwise, y will be used to move the
|
|
217
|
+
// submenu up fully into the view port.
|
|
218
|
+
const offset = (y > 0) ? 0 : y - EXTRA_OFFSET;
|
|
219
|
+
|
|
220
|
+
const subMenuPosStyle = {
|
|
221
|
+
top: offset + "px" // Use negative to push the menu up
|
|
222
|
+
};
|
|
223
|
+
return subMenuPosStyle;
|
|
224
|
+
}
|
|
225
|
+
|
|
181
226
|
render() {
|
|
182
227
|
// Reposition contextMenu so that it does not show off the screen
|
|
183
228
|
const menuSize = this.calculateMenuSize(this.props.menuDefinition);
|
|
@@ -83,8 +83,8 @@ export default class ContextMenuWrapper extends React.Component {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
contextMenuClicked(action) {
|
|
87
|
-
this.props.contextMenuActionHandler(action);
|
|
86
|
+
contextMenuClicked(action, param) {
|
|
87
|
+
this.props.contextMenuActionHandler(action, param);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
render() {
|
package/src/icons/icon.jsx
CHANGED
|
@@ -19,30 +19,21 @@ import PropTypes from "prop-types";
|
|
|
19
19
|
import classNames from "classnames";
|
|
20
20
|
import SVG from "react-inlinesvg";
|
|
21
21
|
|
|
22
|
-
import ArrangeHorizontally from "./../../assets/images/arrange_horizontally.svg";
|
|
23
|
-
import ArrangeVertically from "./../../assets/images/arrange_vertically.svg";
|
|
24
22
|
import Double from "./../../assets/images/double.svg";
|
|
25
23
|
import Integer from "./../../assets/images/integer.svg";
|
|
26
24
|
import StringIcon from "./../../assets/images/string.svg";
|
|
27
|
-
import ToggleNotificationPanel from "./../../assets/images/notification_counter_icon.svg";
|
|
28
|
-
import PaletteClose from "./../../assets/images/palette/palette_close.svg";
|
|
29
|
-
import PaletteOpen from "./../../assets/images/palette/palette_open.svg";
|
|
30
|
-
import ZoomToFit from "./../../assets/images/zoom_to_fit.svg";
|
|
31
25
|
|
|
32
26
|
import { WarningFilled16, ErrorFilled16, CheckmarkFilled16, InformationFilled16, Information16,
|
|
33
27
|
ChevronDown16, ChevronUp16, ChevronLeft16, ChevronRight16,
|
|
34
|
-
OverflowMenuVertical16,
|
|
35
28
|
AddAlt16,
|
|
36
29
|
Settings16,
|
|
37
30
|
Search16,
|
|
38
31
|
Warning16,
|
|
39
32
|
Edit16,
|
|
40
|
-
StopFilledAlt16, Play16, Undo16, Redo16, Cut16, Copy16, Paste16, AddComment16, TrashCan16,
|
|
41
|
-
ZoomIn16, ZoomOut16,
|
|
42
33
|
CircleDash16, RulerAlt16, ListNumbered16, ListBulleted16, Flag16, ChartVennDiagram16,
|
|
43
34
|
Calendar16, Time16, EventSchedule16 } from "@carbon/icons-react";
|
|
44
35
|
|
|
45
|
-
import { ERROR, WARNING, INFO, SUCCESS, CANVAS_CARBON_ICONS, CONTEXT_MENU_CARBON_ICONS
|
|
36
|
+
import { ERROR, WARNING, INFO, SUCCESS, CANVAS_CARBON_ICONS, CONTEXT_MENU_CARBON_ICONS } from "../common-canvas/constants/canvas-constants";
|
|
46
37
|
import { CONDITION_MESSAGE_TYPE, CARBON_ICONS, DATA_TYPE } from "../common-properties/constants/constants";
|
|
47
38
|
|
|
48
39
|
const iconClassName = "properties-icon";
|
|
@@ -51,20 +42,14 @@ export default class Icon extends React.Component {
|
|
|
51
42
|
constructor() {
|
|
52
43
|
super();
|
|
53
44
|
this.canvasIcons = {
|
|
54
|
-
arrangeHorizontally: ArrangeHorizontally,
|
|
55
|
-
arrangeVertically: ArrangeVertically,
|
|
56
45
|
double: Double,
|
|
57
46
|
integer: Integer,
|
|
58
|
-
string: StringIcon
|
|
59
|
-
toggleNotificationPanel: ToggleNotificationPanel,
|
|
60
|
-
paletteClose: PaletteClose,
|
|
61
|
-
paletteOpen: PaletteOpen,
|
|
62
|
-
zoomToFit: ZoomToFit
|
|
47
|
+
string: StringIcon
|
|
63
48
|
};
|
|
64
49
|
}
|
|
65
50
|
|
|
66
51
|
getCarbonIcon(type, customClassName) {
|
|
67
|
-
const className =
|
|
52
|
+
const className = iconClassName + " " + customClassName;
|
|
68
53
|
|
|
69
54
|
switch (type) {
|
|
70
55
|
case (ERROR):
|
|
@@ -97,8 +82,6 @@ export default class Icon extends React.Component {
|
|
|
97
82
|
case (CARBON_ICONS.EDIT):
|
|
98
83
|
return <Edit16 className={className} disabled={this.props.disabled} />;
|
|
99
84
|
|
|
100
|
-
case (CANVAS_CARBON_ICONS.OVERFLOWMENU):
|
|
101
|
-
return <OverflowMenuVertical16 className={className} disabled={this.props.disabled} />;
|
|
102
85
|
case (CANVAS_CARBON_ICONS.SEARCH):
|
|
103
86
|
return <Search16 className={className} disabled={this.props.disabled} />;
|
|
104
87
|
case (CANVAS_CARBON_ICONS.WARNING_UNFILLED):
|
|
@@ -107,29 +90,6 @@ export default class Icon extends React.Component {
|
|
|
107
90
|
case (CONTEXT_MENU_CARBON_ICONS.CHEVRONARROWS.RIGHT):
|
|
108
91
|
return <ChevronRight16 className={className} disabled={this.props.disabled} />;
|
|
109
92
|
|
|
110
|
-
case (TOOLBAR_ACTIONS.TOOLBAR_STOP):
|
|
111
|
-
return <StopFilledAlt16 className={className} disabled={this.props.disabled} />;
|
|
112
|
-
case (TOOLBAR_ACTIONS.TOOLBAR_RUN):
|
|
113
|
-
return <Play16 className={className} disabled={this.props.disabled} />;
|
|
114
|
-
case (TOOLBAR_ACTIONS.TOOLBAR_UNDO):
|
|
115
|
-
return <Undo16 className={className} disabled={this.props.disabled} />;
|
|
116
|
-
case (TOOLBAR_ACTIONS.TOOLBAR_REDO):
|
|
117
|
-
return <Redo16 className={className} disabled={this.props.disabled} />;
|
|
118
|
-
case (TOOLBAR_ACTIONS.TOOLBAR_CUT):
|
|
119
|
-
return <Cut16 className={className} disabled={this.props.disabled} />;
|
|
120
|
-
case (TOOLBAR_ACTIONS.TOOLBAR_COPY):
|
|
121
|
-
return <Copy16 className={className} disabled={this.props.disabled} />;
|
|
122
|
-
case (TOOLBAR_ACTIONS.TOOLBAR_PASTE):
|
|
123
|
-
return <Paste16 className={className} disabled={this.props.disabled} />;
|
|
124
|
-
case (TOOLBAR_ACTIONS.TOOLBAR_CREATE_AUTO_COMMENT):
|
|
125
|
-
return <AddComment16 className={className} disabled={this.props.disabled} />;
|
|
126
|
-
case (TOOLBAR_ACTIONS.TOOLBAR_DELETE_SELECTED_OBJECTS):
|
|
127
|
-
return <TrashCan16 className={className} disabled={this.props.disabled} />;
|
|
128
|
-
case (TOOLBAR_ACTIONS.TOOLBAR_ZOOM_IN):
|
|
129
|
-
return <ZoomIn16 className={className} disabled={this.props.disabled} />;
|
|
130
|
-
case (TOOLBAR_ACTIONS.TOOLBAR_ZOOM_OUT):
|
|
131
|
-
return <ZoomOut16 className={className} disabled={this.props.disabled} />;
|
|
132
|
-
|
|
133
93
|
case (CARBON_ICONS.MEASUREMENTS.EMPTY):
|
|
134
94
|
return <CircleDash16 className={className} disabled={this.props.disabled} />;
|
|
135
95
|
case (CARBON_ICONS.MEASUREMENTS.SCALE):
|
|
@@ -163,7 +123,7 @@ export default class Icon extends React.Component {
|
|
|
163
123
|
if (!icon) {
|
|
164
124
|
icon = this.getCanvasIcon(this.props.type);
|
|
165
125
|
if (typeof icon !== "undefined") {
|
|
166
|
-
const className =
|
|
126
|
+
const className = classNames("canvas-icon", iconClassName, this.props.className);
|
|
167
127
|
icon = <SVG src={icon} className={className} disabled={this.props.disabled} />;
|
|
168
128
|
} else {
|
|
169
129
|
icon = <div />;
|
|
@@ -181,6 +141,5 @@ Icon.defaultProps = {
|
|
|
181
141
|
Icon.propTypes = {
|
|
182
142
|
type: PropTypes.string.isRequired,
|
|
183
143
|
className: PropTypes.string,
|
|
184
|
-
disabled: PropTypes.bool
|
|
185
|
-
noAddedClasses: PropTypes.bool
|
|
144
|
+
disabled: PropTypes.bool
|
|
186
145
|
};
|
package/src/index.scss
CHANGED
|
@@ -100,6 +100,18 @@ export default class APIPipeline {
|
|
|
100
100
|
}, data);
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
+
addPastedObjects(data) {
|
|
104
|
+
this.objectModel.executeWithSelectionChange((inData) => {
|
|
105
|
+
this.store.dispatch({ type: "ADD_PASTED_OBJECTS", data: inData, pipelineId: this.pipelineId });
|
|
106
|
+
}, data);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
deletePastedObjects(data) {
|
|
110
|
+
this.objectModel.executeWithSelectionChange((inData) => {
|
|
111
|
+
this.store.dispatch({ type: "DELETE_PASTED_OBJECTS", data: inData, pipelineId: this.pipelineId });
|
|
112
|
+
}, data);
|
|
113
|
+
}
|
|
114
|
+
|
|
103
115
|
// Returns an object containing and array of nodes and an array of comments
|
|
104
116
|
// that match the array of objectIds passed in.
|
|
105
117
|
filterNodesAndComments(objectIds) {
|
|
@@ -128,6 +140,10 @@ export default class APIPipeline {
|
|
|
128
140
|
this.store.dispatch({ type: "SET_OBJECTS_CLASS_NAME", data: { objIds: objectIds, newClassName: newClassName }, pipelineId: this.pipelineId });
|
|
129
141
|
}
|
|
130
142
|
|
|
143
|
+
setObjectsColorClassName(objectIds, newColorClass) {
|
|
144
|
+
this.store.dispatch({ type: "SET_OBJECTS_COLOR_CLASS_NAME", data: { objIds: objectIds, newColorClass: newColorClass }, pipelineId: this.pipelineId });
|
|
145
|
+
}
|
|
146
|
+
|
|
131
147
|
disconnectObjects(objectIds) {
|
|
132
148
|
let linksToDelete = [];
|
|
133
149
|
objectIds.forEach((id) => {
|
|
@@ -291,7 +307,7 @@ export default class APIPipeline {
|
|
|
291
307
|
createNode(data) {
|
|
292
308
|
let nodeTemplate = data.nodeTemplate;
|
|
293
309
|
// If the nodeTemplate has app_data.ui_data field then it will be a
|
|
294
|
-
//
|
|
310
|
+
// template that conforms to the pipelineFlow schema and needs to be
|
|
295
311
|
// converted to the internal format for a node.
|
|
296
312
|
if (has(data.nodeTemplate, "app_data.ui_data")) {
|
|
297
313
|
nodeTemplate = this.objectModel.convertNodeTemplate(nodeTemplate);
|
|
@@ -624,8 +640,7 @@ export default class APIPipeline {
|
|
|
624
640
|
}
|
|
625
641
|
|
|
626
642
|
isDataNode(objId) {
|
|
627
|
-
|
|
628
|
-
return (typeof node !== "undefined"); // node will be undefined if objId references a comment
|
|
643
|
+
return this.getNode(objId);
|
|
629
644
|
}
|
|
630
645
|
|
|
631
646
|
sizeAndPositionObjects(objectsInfo, linksInfo) {
|
|
@@ -977,7 +992,6 @@ export default class APIPipeline {
|
|
|
977
992
|
createComment(source) {
|
|
978
993
|
let comment = {
|
|
979
994
|
id: this.objectModel.getUniqueId(CREATE_COMMENT),
|
|
980
|
-
class_name: "d3-comment-rect",
|
|
981
995
|
content: "",
|
|
982
996
|
height: 42,
|
|
983
997
|
width: 175,
|
|
@@ -1001,9 +1015,6 @@ export default class APIPipeline {
|
|
|
1001
1015
|
}
|
|
1002
1016
|
|
|
1003
1017
|
addComment(data) {
|
|
1004
|
-
if (typeof data.selectedObjectIds === "undefined") {
|
|
1005
|
-
data.selectedObjectIds = [];
|
|
1006
|
-
}
|
|
1007
1018
|
this.store.dispatch({ type: "ADD_COMMENT", data: data, pipelineId: this.pipelineId });
|
|
1008
1019
|
}
|
|
1009
1020
|
|
|
@@ -246,6 +246,7 @@ export default class ObjectModel {
|
|
|
246
246
|
: PipelineInHandler.convertPipelinesToCanvasInfoPipelines(pd, this.getCanvasLayout());
|
|
247
247
|
// Need to make sure pipeline IDs are unique.
|
|
248
248
|
newPd = this.cloneSupernodeContents(supernode, newPd);
|
|
249
|
+
newPd = this.prepareNodes(newPd, this.getNodeLayout(), this.getCanvasLayout(), supernode);
|
|
249
250
|
|
|
250
251
|
} else {
|
|
251
252
|
const newPipeline = this.createEmptyPipeline();
|
|
@@ -256,6 +257,28 @@ export default class ObjectModel {
|
|
|
256
257
|
return supernode;
|
|
257
258
|
}
|
|
258
259
|
|
|
260
|
+
// Returns an object containing nodes and pipelines. The nodes are the
|
|
261
|
+
// same as the array of nodes passed in except that, any supernodes within
|
|
262
|
+
// the array will have their app_data.pipeline_data fields removed. The
|
|
263
|
+
// pipelines returned will be any pipelines that were contained within the
|
|
264
|
+
// app_data.pipeline_data fields.
|
|
265
|
+
extractAddDataPipelines(inNodes) {
|
|
266
|
+
const pipelines = [];
|
|
267
|
+
const nodes = [];
|
|
268
|
+
inNodes.forEach((n) => {
|
|
269
|
+
if (CanvasUtils.isSupernode(n)) {
|
|
270
|
+
const pDataArray = get(n, "app_data.pipeline_data");
|
|
271
|
+
if (pDataArray) {
|
|
272
|
+
pipelines.push(...pDataArray);
|
|
273
|
+
delete n.app_data.pipeline_data;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
nodes.push(n);
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
return { nodes, pipelines };
|
|
280
|
+
}
|
|
281
|
+
|
|
259
282
|
getPaletteNode(nodeOpIdRef) {
|
|
260
283
|
let outNodeType = null;
|
|
261
284
|
if (nodeOpIdRef && !isEmpty(this.getPaletteData())) {
|
|
@@ -1636,7 +1659,9 @@ export default class ObjectModel {
|
|
|
1636
1659
|
setSelections(newSelections, pipelineId) {
|
|
1637
1660
|
// This will return the default API pipeline if a pipelineId is not provided.
|
|
1638
1661
|
const selPipelineId = this.getAPIPipeline(pipelineId).pipelineId;
|
|
1639
|
-
this.executeWithSelectionChange(
|
|
1662
|
+
this.executeWithSelectionChange(
|
|
1663
|
+
this.store.dispatch, { type: "SET_SELECTIONS", data: { selections: newSelections }, pipelineId: selPipelineId }
|
|
1664
|
+
);
|
|
1640
1665
|
}
|
|
1641
1666
|
|
|
1642
1667
|
deleteSelectedObjects() {
|
|
@@ -1732,11 +1757,10 @@ export default class ObjectModel {
|
|
|
1732
1757
|
return connectedNodesIdsGroup.length === nodeIds.length;
|
|
1733
1758
|
}
|
|
1734
1759
|
|
|
1735
|
-
// Returns true if all the selected
|
|
1760
|
+
// Returns true if all the selected objects are links.
|
|
1736
1761
|
areAllSelectedObjectsLinks() {
|
|
1737
1762
|
const nonLinkIndex = this.getSelectedObjects().findIndex((selObj) => !this.isLink(selObj));
|
|
1738
1763
|
return nonLinkIndex === -1;
|
|
1739
|
-
|
|
1740
1764
|
}
|
|
1741
1765
|
|
|
1742
1766
|
// Recursive function to add all connected nodes into the group.
|
|
@@ -162,6 +162,7 @@ export default (state = {}, action) => {
|
|
|
162
162
|
case "REMOVE_NODE_ATTR":
|
|
163
163
|
case "SET_NODE_LABEL":
|
|
164
164
|
case "SET_OBJECTS_CLASS_NAME":
|
|
165
|
+
case "SET_OBJECTS_COLOR_CLASS_NAME":
|
|
165
166
|
case "SET_INPUT_PORT_LABEL":
|
|
166
167
|
case "SET_OUTPUT_PORT_LABEL":
|
|
167
168
|
case "SET_INPUT_PORT_SUBFLOW_NODE_REF":
|
|
@@ -236,6 +237,7 @@ export default (state = {}, action) => {
|
|
|
236
237
|
return Object.assign({}, state, { pipelines: canvasInfoPipelines });
|
|
237
238
|
}
|
|
238
239
|
|
|
240
|
+
case "ADD_PASTED_OBJECTS":
|
|
239
241
|
case "ADD_AND_UPDATE_OBJECTS": {
|
|
240
242
|
let canvasInfoPipelines = state.pipelines
|
|
241
243
|
.map((pipeline) => {
|
|
@@ -277,6 +279,36 @@ export default (state = {}, action) => {
|
|
|
277
279
|
return Object.assign({}, state, { pipelines: canvasInfoPipelines });
|
|
278
280
|
}
|
|
279
281
|
|
|
282
|
+
case "DELETE_PASTED_OBJECTS": {
|
|
283
|
+
const canvasInfoPipelines = state.pipelines
|
|
284
|
+
// Filter out the pipelines to delete
|
|
285
|
+
.filter((pipeline) => (!isPipelineToDelete(pipeline, action.data.pipelinesToDelete)))
|
|
286
|
+
// Modify the pipeline to remove nodes, comments and links
|
|
287
|
+
.map((pipeline) => {
|
|
288
|
+
if (pipeline.id === action.pipelineId) {
|
|
289
|
+
// Remove pasted nodes
|
|
290
|
+
const newNodes = nodes(pipeline.nodes,
|
|
291
|
+
{ type: "DELETE_NODES", data: action.data });
|
|
292
|
+
|
|
293
|
+
// Remove pasted comments
|
|
294
|
+
const newComments = comments(pipeline.comments,
|
|
295
|
+
{ type: "DELETE_COMMENTS", data: action.data });
|
|
296
|
+
|
|
297
|
+
// Remove pasted links
|
|
298
|
+
const newLinks = links(pipeline.links,
|
|
299
|
+
{ type: "REMOVE_LINKS", data: action.data });
|
|
300
|
+
|
|
301
|
+
return Object.assign({}, pipeline, {
|
|
302
|
+
nodes: newNodes,
|
|
303
|
+
comments: newComments,
|
|
304
|
+
links: newLinks });
|
|
305
|
+
}
|
|
306
|
+
return pipeline;
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
return Object.assign({}, state, { pipelines: canvasInfoPipelines });
|
|
310
|
+
}
|
|
311
|
+
|
|
280
312
|
case "SET_SUPERNODE_EXPAND_STATE": {
|
|
281
313
|
const canvasInfoPipelines = state.pipelines
|
|
282
314
|
.map((pipeline) => {
|
|
@@ -476,3 +508,7 @@ export default (state = {}, action) => {
|
|
|
476
508
|
return state;
|
|
477
509
|
}
|
|
478
510
|
};
|
|
511
|
+
|
|
512
|
+
function isPipelineToDelete(pipeline, pipelinesToDelete) {
|
|
513
|
+
return (pipelinesToDelete.some((p) => p.id === pipeline.id));
|
|
514
|
+
}
|
|
@@ -15,6 +15,9 @@
|
|
|
15
15
|
*/
|
|
16
16
|
/* eslint arrow-body-style: ["off"] */
|
|
17
17
|
|
|
18
|
+
|
|
19
|
+
import CanvasUtils from "../../../common-canvas/common-canvas-utils.js";
|
|
20
|
+
|
|
18
21
|
export default (state = [], action) => {
|
|
19
22
|
switch (action.type) {
|
|
20
23
|
case "MOVE_OBJECTS":
|
|
@@ -53,15 +56,7 @@ export default (state = [], action) => {
|
|
|
53
56
|
|
|
54
57
|
|
|
55
58
|
case "ADD_COMMENT": {
|
|
56
|
-
const newComment =
|
|
57
|
-
id: action.data.id,
|
|
58
|
-
class_name: action.data.class_name,
|
|
59
|
-
content: action.data.content,
|
|
60
|
-
height: action.data.height,
|
|
61
|
-
width: action.data.width,
|
|
62
|
-
x_pos: action.data.x_pos,
|
|
63
|
-
y_pos: action.data.y_pos
|
|
64
|
-
};
|
|
59
|
+
const newComment = getCommentFromData(action.data);
|
|
65
60
|
return [
|
|
66
61
|
...state,
|
|
67
62
|
newComment
|
|
@@ -69,9 +64,10 @@ export default (state = [], action) => {
|
|
|
69
64
|
}
|
|
70
65
|
|
|
71
66
|
case "ADD_COMMENTS": {
|
|
67
|
+
const comments = action.data.commentsToAdd.map((cd) => getCommentFromData(cd));
|
|
72
68
|
return [
|
|
73
69
|
...state,
|
|
74
|
-
...
|
|
70
|
+
...comments
|
|
75
71
|
];
|
|
76
72
|
}
|
|
77
73
|
|
|
@@ -139,6 +135,20 @@ export default (state = [], action) => {
|
|
|
139
135
|
return comment;
|
|
140
136
|
});
|
|
141
137
|
|
|
138
|
+
case "SET_OBJECTS_COLOR_CLASS_NAME":
|
|
139
|
+
return state.map((comment) => {
|
|
140
|
+
const idx = action.data.objIds.indexOf(comment.id);
|
|
141
|
+
if (idx > -1) {
|
|
142
|
+
const newColorClass =
|
|
143
|
+
Array.isArray(action.data.newColorClass) ? (action.data.newColorClass[idx] || null) : action.data.newColorClass;
|
|
144
|
+
const className = replaceColorClass(comment.class_name, newColorClass);
|
|
145
|
+
const newComment = Object.assign({}, comment, { class_name: className });
|
|
146
|
+
return newComment;
|
|
147
|
+
}
|
|
148
|
+
return comment;
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
|
|
142
152
|
case "SET_OBJECTS_CLASS_NAME":
|
|
143
153
|
return state.map((comment) => {
|
|
144
154
|
const idx = action.data.objIds.indexOf(comment.id);
|
|
@@ -201,3 +211,41 @@ export default (state = [], action) => {
|
|
|
201
211
|
return state;
|
|
202
212
|
}
|
|
203
213
|
};
|
|
214
|
+
|
|
215
|
+
function replaceColorClass(className, newColorClass) {
|
|
216
|
+
let cn = "";
|
|
217
|
+
if (className) {
|
|
218
|
+
cn = removeCurrentColorClass(className);
|
|
219
|
+
cn = addNewColorClass(cn, newColorClass);
|
|
220
|
+
} else {
|
|
221
|
+
cn = newColorClass;
|
|
222
|
+
}
|
|
223
|
+
return cn;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function removeCurrentColorClass(className) {
|
|
227
|
+
const cn = className
|
|
228
|
+
.split(" ")
|
|
229
|
+
.filter((tok) => !CanvasUtils.getBkgColorClass(tok))
|
|
230
|
+
.join(" ");
|
|
231
|
+
return cn;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function addNewColorClass(className, newColorClass) {
|
|
235
|
+
return className ? className + " " + newColorClass : newColorClass;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function getCommentFromData(data) {
|
|
239
|
+
const newComment = {
|
|
240
|
+
id: data.id,
|
|
241
|
+
content: data.content,
|
|
242
|
+
height: data.height,
|
|
243
|
+
width: data.width,
|
|
244
|
+
x_pos: data.x_pos,
|
|
245
|
+
y_pos: data.y_pos
|
|
246
|
+
};
|
|
247
|
+
if (typeof data.class_name !== "undefined") {
|
|
248
|
+
newComment.class_name = data.class_name;
|
|
249
|
+
}
|
|
250
|
+
return newComment;
|
|
251
|
+
}
|
|
@@ -287,14 +287,16 @@ export default (state = [], action) => {
|
|
|
287
287
|
// to each of the selected nodes.
|
|
288
288
|
case "ADD_COMMENT": {
|
|
289
289
|
const createdLinks = [];
|
|
290
|
-
action.data.selectedObjectIds
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
290
|
+
if (action.data.selectedObjectIds) {
|
|
291
|
+
action.data.selectedObjectIds.forEach((objId, i) => {
|
|
292
|
+
createdLinks.push({
|
|
293
|
+
id: action.data.linkIds[i],
|
|
294
|
+
srcNodeId: action.data.id,
|
|
295
|
+
trgNodeId: action.data.selectedObjectIds[i],
|
|
296
|
+
type: COMMENT_LINK
|
|
297
|
+
});
|
|
296
298
|
});
|
|
297
|
-
}
|
|
299
|
+
}
|
|
298
300
|
return [
|
|
299
301
|
...state,
|
|
300
302
|
...createdLinks
|
|
@@ -29,9 +29,10 @@ export default (state = {}, action) => {
|
|
|
29
29
|
case "CLEAR_SELECTIONS":
|
|
30
30
|
return {};
|
|
31
31
|
|
|
32
|
+
case "ADD_PASTED_OBJECTS":
|
|
32
33
|
case "SET_SELECTIONS":
|
|
33
34
|
return {
|
|
34
|
-
pipelineId: action.
|
|
35
|
+
pipelineId: action.pipelineId,
|
|
35
36
|
selections: [...action.data.selections]
|
|
36
37
|
};
|
|
37
38
|
|
|
@@ -42,6 +42,7 @@ class PaletteContentListItem extends React.Component {
|
|
|
42
42
|
this.showShortDescription = this.showShortDescription.bind(this);
|
|
43
43
|
|
|
44
44
|
this.onDragStart = this.onDragStart.bind(this);
|
|
45
|
+
this.onDragEnd = this.onDragEnd.bind(this);
|
|
45
46
|
this.onDoubleClick = this.onDoubleClick.bind(this);
|
|
46
47
|
this.onMouseOver = this.onMouseOver.bind(this);
|
|
47
48
|
this.onMouseLeave = this.onMouseLeave.bind(this);
|
|
@@ -61,7 +62,7 @@ class PaletteContentListItem extends React.Component {
|
|
|
61
62
|
// We cannot use the dataTransfer object for the nodeTemplate because
|
|
62
63
|
// the dataTransfer data is not available during dragOver events so we set
|
|
63
64
|
// the nodeTemplate into the canvas controller.
|
|
64
|
-
this.props.canvasController.
|
|
65
|
+
this.props.canvasController.nodeTemplateDragStart(this.props.nodeTypeInfo.nodeType);
|
|
65
66
|
|
|
66
67
|
// On firefox, the drag will not start unless something is written to
|
|
67
68
|
// the dataTransfer object so just write an empty string
|
|
@@ -72,6 +73,11 @@ class PaletteContentListItem extends React.Component {
|
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
|
|
76
|
+
// This is needed in-case the drag ends somewhere other than the canvas area.
|
|
77
|
+
onDragEnd() {
|
|
78
|
+
this.props.canvasController.nodeTemplateDragEnd();
|
|
79
|
+
}
|
|
80
|
+
|
|
75
81
|
onDoubleClick() {
|
|
76
82
|
if (this.props.canvasController.createAutoNode) {
|
|
77
83
|
this.props.canvasController.createAutoNode(this.props.nodeTypeInfo.nodeType);
|
|
@@ -295,6 +301,7 @@ class PaletteContentListItem extends React.Component {
|
|
|
295
301
|
onMouseLeave={this.onMouseLeave}
|
|
296
302
|
onMouseDown={this.props.isEditingEnabled ? this.onMouseDown : null}
|
|
297
303
|
onDragStart={this.props.isEditingEnabled ? this.onDragStart : null}
|
|
304
|
+
onDragEnd={this.props.isEditingEnabled ? this.onDragEnd : null}
|
|
298
305
|
onDoubleClick={this.props.isEditingEnabled ? this.onDoubleClick : null}
|
|
299
306
|
>
|
|
300
307
|
{categoryLabel}
|
|
@@ -36,6 +36,7 @@ class PaletteDialogContentGridNode extends React.Component {
|
|
|
36
36
|
this.ghostData = null;
|
|
37
37
|
|
|
38
38
|
this.onDragStart = this.onDragStart.bind(this);
|
|
39
|
+
this.onDragEnd = this.onDragEnd.bind(this);
|
|
39
40
|
this.onDoubleClick = this.onDoubleClick.bind(this);
|
|
40
41
|
this.onMouseOver = this.onMouseOver.bind(this);
|
|
41
42
|
this.onMouseLeave = this.onMouseLeave.bind(this);
|
|
@@ -55,7 +56,7 @@ class PaletteDialogContentGridNode extends React.Component {
|
|
|
55
56
|
// We cannot use the dataTransfer object for the nodeTemplate because
|
|
56
57
|
// the dataTransfer data is not available during dragOver events so we set
|
|
57
58
|
// the nodeTemplate into the canvas controller.
|
|
58
|
-
this.props.canvasController.
|
|
59
|
+
this.props.canvasController.nodeTemplateDragStart(this.props.nodeTemplate);
|
|
59
60
|
|
|
60
61
|
// On firefox, the drag will not start unless something is written to
|
|
61
62
|
// the dataTransfer object so just write an empty string
|
|
@@ -66,6 +67,11 @@ class PaletteDialogContentGridNode extends React.Component {
|
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
|
|
70
|
+
// This is needed in-case the drag ends somewhere other than the canvas area.
|
|
71
|
+
onDragEnd() {
|
|
72
|
+
this.props.canvasController.nodeTemplateDragEnd();
|
|
73
|
+
}
|
|
74
|
+
|
|
69
75
|
onDoubleClick() {
|
|
70
76
|
if (this.props.canvasController.createAutoNode) {
|
|
71
77
|
this.props.canvasController.createAutoNode(this.props.nodeTemplate);
|
|
@@ -134,6 +140,7 @@ class PaletteDialogContentGridNode extends React.Component {
|
|
|
134
140
|
onMouseLeave={this.onMouseLeave}
|
|
135
141
|
onMouseDown={this.props.isEditingEnabled ? this.onMouseDown : null}
|
|
136
142
|
onDragStart={this.props.isEditingEnabled ? this.onDragStart : null}
|
|
143
|
+
onDragEnd={this.props.isEditingEnabled ? this.onDragEnd : null}
|
|
137
144
|
onDoubleClick={this.props.isEditingEnabled ? this.onDoubleClick : null}
|
|
138
145
|
className="palette-dialog-grid-node-outer"
|
|
139
146
|
>
|