@deephaven/dashboard-core-plugins 1.22.1 → 1.22.2-alpha-pivot-builder.0730ba6.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/ChartBuilderPlugin.js +8 -15
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartPanelPlugin.js +13 -6
- package/dist/ChartPanelPlugin.js.map +1 -1
- package/dist/ChartWidgetPlugin.js +11 -4
- package/dist/ChartWidgetPlugin.js.map +1 -1
- package/dist/ConsolePlugin.js +38 -46
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.js +63 -44
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPanelPlugin.js +3 -5
- package/dist/GridPanelPlugin.js.map +1 -1
- package/dist/GridWidgetPlugin.d.ts +18 -1
- package/dist/GridWidgetPlugin.d.ts.map +1 -1
- package/dist/GridWidgetPlugin.js +54 -30
- package/dist/GridWidgetPlugin.js.map +1 -1
- package/dist/LinkerPlugin.js +3 -5
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.js +18 -17
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPanelPlugin.js +3 -5
- package/dist/PandasPanelPlugin.js.map +1 -1
- package/dist/PandasWidgetPlugin.js +3 -7
- package/dist/PandasWidgetPlugin.js.map +1 -1
- package/dist/TablePluginWrapper.js +8 -10
- package/dist/TablePluginWrapper.js.map +1 -1
- package/dist/WidgetLoaderPlugin.js +24 -29
- package/dist/WidgetLoaderPlugin.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +63 -79
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +32 -58
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +4 -5
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +7 -10
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +8 -12
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/linker/Linker.js +100 -192
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.js +23 -31
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +65 -66
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.js +6 -14
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +4 -6
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.js +7 -9
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.js +136 -220
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/ChartPanelUtils.js +3 -4
- package/dist/panels/ChartPanelUtils.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +33 -52
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.js +68 -130
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/CorePanel.js +6 -18
- package/dist/panels/CorePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +109 -165
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.js +30 -55
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.js +81 -141
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js +68 -87
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.js +45 -68
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +28 -6
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +224 -280
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.js +1 -3
- package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
- package/dist/panels/LogPanel.js +6 -13
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.js +28 -50
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.js +19 -38
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.js +157 -292
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.js +5 -15
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/PandasReloadButton.js +1 -3
- package/dist/panels/PandasReloadButton.js.map +1 -1
- package/dist/panels/WidgetPanel.js +42 -51
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +6 -10
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/useConfigureRuff.js +8 -9
- package/dist/useConfigureRuff.js.map +1 -1
- package/dist/useDashboardColumnFilters.js +4 -7
- package/dist/useDashboardColumnFilters.js.map +1 -1
- package/dist/useGridLinker.js +9 -16
- package/dist/useGridLinker.js.map +1 -1
- package/dist/useIrisGridModel.d.ts +2 -2
- package/dist/useIrisGridModel.d.ts.map +1 -1
- package/dist/useIrisGridModel.js +34 -6
- package/dist/useIrisGridModel.js.map +1 -1
- package/dist/useTablePlugin.js +27 -14
- package/dist/useTablePlugin.js.map +1 -1
- package/package.json +24 -24
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
2
8
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
3
9
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
@@ -64,14 +70,11 @@ export class LinkerOverlayContent extends Component {
|
|
|
64
70
|
}
|
|
65
71
|
/** Gets the on screen points for a link start or end spec */
|
|
66
72
|
getPointFromLinkPoint(linkPoint) {
|
|
67
|
-
var
|
|
68
|
-
panelManager,
|
|
69
|
-
linkTargetPropMap
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
panelId: linkPointId,
|
|
73
|
-
columnName
|
|
74
|
-
} = linkPoint;
|
|
73
|
+
var _this$props = this.props,
|
|
74
|
+
panelManager = _this$props.panelManager,
|
|
75
|
+
linkTargetPropMap = _this$props.linkTargetPropMap;
|
|
76
|
+
var linkPointId = linkPoint.panelId,
|
|
77
|
+
columnName = linkPoint.columnName;
|
|
75
78
|
var panelId = linkPointId;
|
|
76
79
|
var linkTargetHandlers = linkTargetPropMap.get(linkPointId);
|
|
77
80
|
if (linkTargetHandlers != null) {
|
|
@@ -107,10 +110,9 @@ export class LinkerOverlayContent extends Component {
|
|
|
107
110
|
return LayoutUtils.getTabPoint(glContainer);
|
|
108
111
|
}
|
|
109
112
|
handleOperatorChanged(linkId, type) {
|
|
110
|
-
var
|
|
111
|
-
links,
|
|
112
|
-
onLinksUpdated
|
|
113
|
-
} = this.props;
|
|
113
|
+
var _this$props2 = this.props,
|
|
114
|
+
links = _this$props2.links,
|
|
115
|
+
onLinksUpdated = _this$props2.onLinksUpdated;
|
|
114
116
|
var newLinks = links.map(link => link.id === linkId ? _objectSpread(_objectSpread({}, link), {}, {
|
|
115
117
|
operator: type
|
|
116
118
|
}) : link);
|
|
@@ -122,9 +124,7 @@ export class LinkerOverlayContent extends Component {
|
|
|
122
124
|
});
|
|
123
125
|
}
|
|
124
126
|
handleResize() {
|
|
125
|
-
var
|
|
126
|
-
dialog
|
|
127
|
-
} = this.state;
|
|
127
|
+
var dialog = this.state.dialog;
|
|
128
128
|
if (dialog && this.dialogRef.current) {
|
|
129
129
|
var rect = this.dialogRef.current.getBoundingClientRect();
|
|
130
130
|
var dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);
|
|
@@ -138,10 +138,9 @@ export class LinkerOverlayContent extends Component {
|
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
140
|
handleMouseMove(event) {
|
|
141
|
-
var
|
|
142
|
-
offset,
|
|
143
|
-
isDragging
|
|
144
|
-
} = this.state;
|
|
141
|
+
var _this$state = this.state,
|
|
142
|
+
offset = _this$state.offset,
|
|
143
|
+
isDragging = _this$state.isDragging;
|
|
145
144
|
this.setState({
|
|
146
145
|
mouse: {
|
|
147
146
|
x: event.clientX,
|
|
@@ -188,10 +187,9 @@ export class LinkerOverlayContent extends Component {
|
|
|
188
187
|
mode: 'delete'
|
|
189
188
|
});
|
|
190
189
|
} else if (event.key === 'Delete' || event.key === 'Backspace') {
|
|
191
|
-
var
|
|
192
|
-
selectedIds,
|
|
193
|
-
onLinkDeleted
|
|
194
|
-
} = this.props;
|
|
190
|
+
var _this$props3 = this.props,
|
|
191
|
+
selectedIds = _this$props3.selectedIds,
|
|
192
|
+
onLinkDeleted = _this$props3.onLinkDeleted;
|
|
195
193
|
event.preventDefault();
|
|
196
194
|
selectedIds.forEach(id => onLinkDeleted(id));
|
|
197
195
|
}
|
|
@@ -205,50 +203,53 @@ export class LinkerOverlayContent extends Component {
|
|
|
205
203
|
}
|
|
206
204
|
}
|
|
207
205
|
handleEscapePressed() {
|
|
208
|
-
var
|
|
209
|
-
onCancel
|
|
210
|
-
} = this.props;
|
|
206
|
+
var onCancel = this.props.onCancel;
|
|
211
207
|
onCancel();
|
|
212
208
|
}
|
|
213
209
|
render() {
|
|
214
|
-
var
|
|
215
|
-
disabled,
|
|
216
|
-
links,
|
|
217
|
-
selectedIds,
|
|
218
|
-
messageText,
|
|
219
|
-
onLinkSelected,
|
|
220
|
-
onLinkDeleted,
|
|
221
|
-
onAllLinksDeleted,
|
|
222
|
-
onDone
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
mode
|
|
229
|
-
} = this.state;
|
|
210
|
+
var _this$props4 = this.props,
|
|
211
|
+
disabled = _this$props4.disabled,
|
|
212
|
+
links = _this$props4.links,
|
|
213
|
+
selectedIds = _this$props4.selectedIds,
|
|
214
|
+
messageText = _this$props4.messageText,
|
|
215
|
+
onLinkSelected = _this$props4.onLinkSelected,
|
|
216
|
+
onLinkDeleted = _this$props4.onLinkDeleted,
|
|
217
|
+
onAllLinksDeleted = _this$props4.onAllLinksDeleted,
|
|
218
|
+
onDone = _this$props4.onDone;
|
|
219
|
+
var _this$state2 = this.state,
|
|
220
|
+
mouse = _this$state2.mouse,
|
|
221
|
+
dialog = _this$state2.dialog,
|
|
222
|
+
isDragging = _this$state2.isDragging,
|
|
223
|
+
mode = _this$state2.mode;
|
|
230
224
|
var visibleLinks = links.map(link => {
|
|
231
225
|
try {
|
|
232
226
|
var _mouse$x, _mouse$y;
|
|
233
|
-
var
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
operator
|
|
240
|
-
} = link;
|
|
227
|
+
var id = link.id,
|
|
228
|
+
type = link.type,
|
|
229
|
+
isReversed = link.isReversed,
|
|
230
|
+
start = link.start,
|
|
231
|
+
end = link.end,
|
|
232
|
+
operator = link.operator;
|
|
241
233
|
var startColumnType = start.columnType;
|
|
242
|
-
var
|
|
234
|
+
var _this$getPointFromLin = this.getPointFromLinkPoint(start),
|
|
235
|
+
_this$getPointFromLin2 = _slicedToArray(_this$getPointFromLin, 2),
|
|
236
|
+
x1 = _this$getPointFromLin2[0],
|
|
237
|
+
y1 = _this$getPointFromLin2[1];
|
|
243
238
|
var x2 = (_mouse$x = mouse === null || mouse === void 0 ? void 0 : mouse.x) !== null && _mouse$x !== void 0 ? _mouse$x : x1;
|
|
244
239
|
var y2 = (_mouse$y = mouse === null || mouse === void 0 ? void 0 : mouse.y) !== null && _mouse$y !== void 0 ? _mouse$y : y1;
|
|
245
240
|
if (end != null) {
|
|
246
|
-
|
|
241
|
+
var _this$getPointFromLin3 = this.getPointFromLinkPoint(end);
|
|
242
|
+
var _this$getPointFromLin4 = _slicedToArray(_this$getPointFromLin3, 2);
|
|
243
|
+
x2 = _this$getPointFromLin4[0];
|
|
244
|
+
y2 = _this$getPointFromLin4[1];
|
|
247
245
|
}
|
|
248
246
|
if (isReversed != null && isReversed) {
|
|
249
|
-
var
|
|
250
|
-
|
|
251
|
-
|
|
247
|
+
var tmpX = x1,
|
|
248
|
+
tmpY = y1;
|
|
249
|
+
x1 = x2;
|
|
250
|
+
y1 = y2;
|
|
251
|
+
x2 = tmpX;
|
|
252
|
+
y2 = tmpY;
|
|
252
253
|
}
|
|
253
254
|
var className = classNames('linker-link', {
|
|
254
255
|
disabled
|
|
@@ -284,17 +285,15 @@ export class LinkerOverlayContent extends Component {
|
|
|
284
285
|
'danger-delete': mode === 'delete'
|
|
285
286
|
}),
|
|
286
287
|
children: [visibleLinks.map(_ref => {
|
|
287
|
-
var
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
type
|
|
297
|
-
} = _ref;
|
|
288
|
+
var x1 = _ref.x1,
|
|
289
|
+
y1 = _ref.y1,
|
|
290
|
+
x2 = _ref.x2,
|
|
291
|
+
y2 = _ref.y2,
|
|
292
|
+
id = _ref.id,
|
|
293
|
+
className = _ref.className,
|
|
294
|
+
operator = _ref.operator,
|
|
295
|
+
startColumnType = _ref.startColumnType,
|
|
296
|
+
type = _ref.type;
|
|
298
297
|
return /*#__PURE__*/_jsx(LinkerLink, {
|
|
299
298
|
className: className,
|
|
300
299
|
id: id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerOverlayContent.js","names":["React","Component","classNames","Button","ContextActions","GLOBAL_SHORTCUTS","Tooltip","LayoutUtils","Log","vsGripper","Type","FilterType","clamp","isLinkableFromPanel","LinkerLink","jsx","_jsx","jsxs","_jsxs","log","module","LinkerOverlayContent","constructor","props","_defineProperty","handleBlur","bind","handleResize","handleMouseMove","handleMouseDown","handleMouseUp","handleKeyDown","handleKeyUp","handleEscapePressed","handleOperatorChanged","dialogRef","createRef","state","mouse","undefined","dialog","offset","x","y","isDragging","mode","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","linkTargetPropMap","panelId","linkPointId","columnName","linkTargetHandlers","get","coordinates","getCoordinates","panel","getOpenedPanelById","Error","concat","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","linkId","type","links","onLinksUpdated","newLinks","map","link","id","_objectSpread","operator","setState","current","rect","getBoundingClientRect","dialogX","innerWidth","width","dialogY","innerHeight","height","event","clientX","clientY","preventDefault","right","bottom","key","selectedIds","onLinkDeleted","forEach","onCancel","render","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","visibleLinks","_mouse$x","_mouse$y","isReversed","start","end","startColumnType","columnType","x1","y1","x2","y2","tmpX","tmpY","className","interactive","has","warn","filter","item","children","_ref","onClick","onDelete","isSelected","eq","onOperatorChanged","dragging","ref","style","draggable","kind","icon","onMouseDown","actions","action","shortcut","LINKER_CLOSE","isGlobal"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"sourcesContent":["import React, { Component, type ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, type PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container } from '@deephaven/golden-layout';\nimport { vsGripper } from '@deephaven/icons';\nimport {\n type TypeValue as FilterTypeValue,\n Type as FilterType,\n} from '@deephaven/filters';\nimport clamp from 'lodash.clamp';\nimport {\n isLinkableFromPanel,\n type Link,\n type LinkerCoordinate,\n type LinkPoint,\n type LinkType,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\nimport { type LinkTargetProps } from './LinkerEvent';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n type: LinkType;\n operator: FilterTypeValue;\n startColumnType: string | null;\n};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n selectedIds: Set<string>;\n messageText: string;\n onLinkSelected: (linkId: string) => void;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onLinksUpdated: (newLinks: Link[]) => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n linkTargetPropMap: Map<string, LinkTargetProps>;\n};\n\ntype Point = { x: number; y: number };\n\nexport type LinkerOverlayContentState = {\n mouse?: Point;\n dialog?: Point;\n offset: Point;\n isDragging: boolean;\n mode: 'select' | 'delete';\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n\n this.dialogRef = React.createRef();\n\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: { x: 0, y: 0 },\n isDragging: false,\n mode: 'select',\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n\n dialogRef: React.RefObject<HTMLInputElement>;\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager, linkTargetPropMap } = this.props;\n const { panelId: linkPointId, columnName } = linkPoint;\n\n let panelId = linkPointId;\n const linkTargetHandlers = linkTargetPropMap.get(linkPointId);\n\n if (linkTargetHandlers != null) {\n panelId = linkTargetHandlers.panelId;\n const coordinates = linkTargetHandlers.getCoordinates(columnName);\n if (coordinates != null) {\n return coordinates;\n }\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (linkTargetHandlers == null && panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint(glContainer as unknown as Container);\n }\n\n handleOperatorChanged(linkId: string, type: FilterTypeValue): void {\n const { links, onLinksUpdated } = this.props;\n const newLinks: Link[] = links.map(link =>\n link.id === linkId ? { ...link, operator: type } : link\n );\n onLinksUpdated(newLinks);\n }\n\n handleBlur(): void {\n this.setState({ mode: 'select' });\n }\n\n handleResize(): void {\n const { dialog } = this.state;\n if (dialog && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n const dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n const { offset, isDragging } = this.state;\n this.setState({\n mouse: { x: event.clientX, y: event.clientY },\n });\n\n if (isDragging && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(\n window.innerWidth - (event.clientX + rect.width + offset.x),\n 0,\n window.innerWidth - rect.width\n );\n\n const dialogY = clamp(\n window.innerHeight - (event.clientY + rect.height + offset.y),\n 0,\n window.innerHeight - rect.height\n );\n\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n event.preventDefault();\n const offset: Point = { x: 0, y: 0 };\n if (this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset,\n });\n }\n\n handleMouseUp(): void {\n this.setState({\n isDragging: false,\n });\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete',\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n const { selectedIds, onLinkDeleted } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n\n handleKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select',\n });\n }\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouse, dialog, isDragging, mode } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end, operator } = link;\n const startColumnType = start.columnType;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouse?.x ?? x1;\n let y2 = mouse?.y ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null },\n { 'link-is-selected': selectedIds.has(id) },\n { 'danger-delete': mode === 'delete' }\n );\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n } as const;\n } catch (error) {\n log.warn('Unable to get point for link', link, error);\n return null;\n }\n })\n .filter(item => item != null);\n\n return (\n <div\n className={classNames('linker-overlay', {\n 'danger-delete': mode === 'delete',\n })}\n >\n {visibleLinks.map(\n ({\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n }) => (\n <LinkerLink\n className={className}\n id={id}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n key={id}\n onClick={onLinkSelected}\n onDelete={onLinkDeleted}\n isSelected={selectedIds.has(id)}\n operator={operator ?? FilterType.eq}\n startColumnType={startColumnType}\n type={type}\n onOperatorChanged={this.handleOperatorChanged}\n />\n )\n )}\n <div\n className={classNames('linker-toast-dialog', {\n dragging: isDragging,\n })}\n ref={this.dialogRef}\n style={{ bottom: dialog?.y, right: dialog?.x }}\n data-testid=\"linker-toast-dialog\"\n >\n <Button\n draggable\n kind=\"inline\"\n className=\"btn-drag-handle\"\n icon={vsGripper}\n onClick={() => {\n // no-op\n }}\n onMouseDown={this.handleMouseDown}\n >\n {!isDragging && <Tooltip>Drag to reposition</Tooltip>}\n </Button>\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <Button kind=\"secondary\" onClick={onAllLinksDeleted}>\n Clear All\n </Button>\n <Button kind=\"primary\" onClick={onDone}>\n Done\n </Button>\n </div>\n </div>\n <ContextActions\n actions={[\n {\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true,\n },\n ]}\n />\n </div>\n );\n }\n}\n\nexport default LinkerOverlayContent;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"LinkerOverlayContent.js","names":["React","Component","classNames","Button","ContextActions","GLOBAL_SHORTCUTS","Tooltip","LayoutUtils","Log","vsGripper","Type","FilterType","clamp","isLinkableFromPanel","LinkerLink","jsx","_jsx","jsxs","_jsxs","log","module","LinkerOverlayContent","constructor","props","_defineProperty","handleBlur","bind","handleResize","handleMouseMove","handleMouseDown","handleMouseUp","handleKeyDown","handleKeyUp","handleEscapePressed","handleOperatorChanged","dialogRef","createRef","state","mouse","undefined","dialog","offset","x","y","isDragging","mode","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","_this$props","panelManager","linkTargetPropMap","linkPointId","panelId","columnName","linkTargetHandlers","get","coordinates","getCoordinates","panel","getOpenedPanelById","Error","concat","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","linkId","type","_this$props2","links","onLinksUpdated","newLinks","map","link","id","_objectSpread","operator","setState","current","rect","getBoundingClientRect","dialogX","innerWidth","width","dialogY","innerHeight","height","event","_this$state","clientX","clientY","preventDefault","right","bottom","key","_this$props3","selectedIds","onLinkDeleted","forEach","onCancel","render","_this$props4","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","_this$state2","visibleLinks","_mouse$x","_mouse$y","isReversed","start","end","startColumnType","columnType","_this$getPointFromLin","_this$getPointFromLin2","_slicedToArray","x1","y1","x2","y2","_this$getPointFromLin3","_this$getPointFromLin4","tmpX","tmpY","className","interactive","has","warn","filter","item","children","_ref","onClick","onDelete","isSelected","eq","onOperatorChanged","dragging","ref","style","draggable","kind","icon","onMouseDown","actions","action","shortcut","LINKER_CLOSE","isGlobal"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"sourcesContent":["import React, { Component, type ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, type PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container } from '@deephaven/golden-layout';\nimport { vsGripper } from '@deephaven/icons';\nimport {\n type TypeValue as FilterTypeValue,\n Type as FilterType,\n} from '@deephaven/filters';\nimport clamp from 'lodash.clamp';\nimport {\n isLinkableFromPanel,\n type Link,\n type LinkerCoordinate,\n type LinkPoint,\n type LinkType,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\nimport { type LinkTargetProps } from './LinkerEvent';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n type: LinkType;\n operator: FilterTypeValue;\n startColumnType: string | null;\n};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n selectedIds: Set<string>;\n messageText: string;\n onLinkSelected: (linkId: string) => void;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onLinksUpdated: (newLinks: Link[]) => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n linkTargetPropMap: Map<string, LinkTargetProps>;\n};\n\ntype Point = { x: number; y: number };\n\nexport type LinkerOverlayContentState = {\n mouse?: Point;\n dialog?: Point;\n offset: Point;\n isDragging: boolean;\n mode: 'select' | 'delete';\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n\n this.dialogRef = React.createRef();\n\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: { x: 0, y: 0 },\n isDragging: false,\n mode: 'select',\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n\n dialogRef: React.RefObject<HTMLInputElement>;\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager, linkTargetPropMap } = this.props;\n const { panelId: linkPointId, columnName } = linkPoint;\n\n let panelId = linkPointId;\n const linkTargetHandlers = linkTargetPropMap.get(linkPointId);\n\n if (linkTargetHandlers != null) {\n panelId = linkTargetHandlers.panelId;\n const coordinates = linkTargetHandlers.getCoordinates(columnName);\n if (coordinates != null) {\n return coordinates;\n }\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (linkTargetHandlers == null && panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint(glContainer as unknown as Container);\n }\n\n handleOperatorChanged(linkId: string, type: FilterTypeValue): void {\n const { links, onLinksUpdated } = this.props;\n const newLinks: Link[] = links.map(link =>\n link.id === linkId ? { ...link, operator: type } : link\n );\n onLinksUpdated(newLinks);\n }\n\n handleBlur(): void {\n this.setState({ mode: 'select' });\n }\n\n handleResize(): void {\n const { dialog } = this.state;\n if (dialog && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n const dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n const { offset, isDragging } = this.state;\n this.setState({\n mouse: { x: event.clientX, y: event.clientY },\n });\n\n if (isDragging && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(\n window.innerWidth - (event.clientX + rect.width + offset.x),\n 0,\n window.innerWidth - rect.width\n );\n\n const dialogY = clamp(\n window.innerHeight - (event.clientY + rect.height + offset.y),\n 0,\n window.innerHeight - rect.height\n );\n\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n event.preventDefault();\n const offset: Point = { x: 0, y: 0 };\n if (this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset,\n });\n }\n\n handleMouseUp(): void {\n this.setState({\n isDragging: false,\n });\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete',\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n const { selectedIds, onLinkDeleted } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n\n handleKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select',\n });\n }\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouse, dialog, isDragging, mode } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end, operator } = link;\n const startColumnType = start.columnType;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouse?.x ?? x1;\n let y2 = mouse?.y ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null },\n { 'link-is-selected': selectedIds.has(id) },\n { 'danger-delete': mode === 'delete' }\n );\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n } as const;\n } catch (error) {\n log.warn('Unable to get point for link', link, error);\n return null;\n }\n })\n .filter(item => item != null);\n\n return (\n <div\n className={classNames('linker-overlay', {\n 'danger-delete': mode === 'delete',\n })}\n >\n {visibleLinks.map(\n ({\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n }) => (\n <LinkerLink\n className={className}\n id={id}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n key={id}\n onClick={onLinkSelected}\n onDelete={onLinkDeleted}\n isSelected={selectedIds.has(id)}\n operator={operator ?? FilterType.eq}\n startColumnType={startColumnType}\n type={type}\n onOperatorChanged={this.handleOperatorChanged}\n />\n )\n )}\n <div\n className={classNames('linker-toast-dialog', {\n dragging: isDragging,\n })}\n ref={this.dialogRef}\n style={{ bottom: dialog?.y, right: dialog?.x }}\n data-testid=\"linker-toast-dialog\"\n >\n <Button\n draggable\n kind=\"inline\"\n className=\"btn-drag-handle\"\n icon={vsGripper}\n onClick={() => {\n // no-op\n }}\n onMouseDown={this.handleMouseDown}\n >\n {!isDragging && <Tooltip>Drag to reposition</Tooltip>}\n </Button>\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <Button kind=\"secondary\" onClick={onAllLinksDeleted}>\n Clear All\n </Button>\n <Button kind=\"primary\" onClick={onDone}>\n Done\n </Button>\n </div>\n </div>\n <ContextActions\n actions={[\n {\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true,\n },\n ]}\n />\n </div>\n );\n }\n}\n\nexport default LinkerOverlayContent;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -44,12 +44,8 @@ class LinkerUtils {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
// Check column type compatibility
|
|
47
|
-
var
|
|
48
|
-
|
|
49
|
-
} = start;
|
|
50
|
-
var {
|
|
51
|
-
columnType: endColumnType
|
|
52
|
-
} = end;
|
|
47
|
+
var startColumnType = start.columnType;
|
|
48
|
+
var endColumnType = end.columnType;
|
|
53
49
|
|
|
54
50
|
// Null columnType in ending link point allows linking to any type
|
|
55
51
|
var isCompatibleType = endColumnType === null || TableUtils.isCompatibleType(startColumnType, endColumnType);
|
|
@@ -69,15 +65,11 @@ class LinkerUtils {
|
|
|
69
65
|
* @returns Column matching the link point, undefined if not found
|
|
70
66
|
*/
|
|
71
67
|
static findColumn(columns, _ref) {
|
|
72
|
-
var
|
|
73
|
-
|
|
74
|
-
columnType
|
|
75
|
-
} = _ref;
|
|
68
|
+
var columnName = _ref.columnName,
|
|
69
|
+
columnType = _ref.columnType;
|
|
76
70
|
return columns.find(_ref2 => {
|
|
77
|
-
var
|
|
78
|
-
|
|
79
|
-
type
|
|
80
|
-
} = _ref2;
|
|
71
|
+
var name = _ref2.name,
|
|
72
|
+
type = _ref2.type;
|
|
81
73
|
return name === columnName && type === columnType;
|
|
82
74
|
});
|
|
83
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerUtils.js","names":["nanoid","TableUtils","Log","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","isLinkableColumn","column","description","startsWith","log","module","LinkerUtils","isLinkValid","start","end","isolatedLinkerPanelId","panelId","debug2","
|
|
1
|
+
{"version":3,"file":"LinkerUtils.js","names":["nanoid","TableUtils","Log","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","isLinkableColumn","column","description","startsWith","log","module","LinkerUtils","isLinkValid","start","end","isolatedLinkerPanelId","panelId","debug2","startColumnType","columnType","endColumnType","isCompatibleType","findColumn","columns","_ref","columnName","find","_ref2","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","_link$end","push","_objectSpread","id"],"sources":["../../src/linker/LinkerUtils.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport { type PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { type TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport Log from '@deephaven/log';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink' | 'chartLink';\n\nexport type LinkPoint = {\n panelId: string;\n columnName: string;\n columnType: string | null;\n};\n\nexport type LinkPointOptions = {\n /**\n * The type of link this point is associated with.\n * If this point is the end point of a link, this will set the type of the link.\n */\n type: LinkType;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n operator?: FilterTypeValue;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string | null;\n description?: string | null;\n};\n\nexport type LinkDataValue<T = unknown> = {\n operator?: FilterTypeValue; // Default behavior treats no operator as equals\n text: string;\n value: T;\n startColumnIndex: number;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string | null;\n filterList: LinkDataValue<T>[];\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\n// [x,y] screen coordinates used by the Linker\nexport type LinkerCoordinate = [number, number];\n\nexport type LinkableFromPanel = PanelComponent & {\n getCoordinateForColumn: (name: string) => LinkerCoordinate;\n};\n\nexport type LinkablePanel = LinkableFromPanel & {\n setFilterMap: (filterMap: LinkFilterMap) => void;\n unsetFilterValue: (name: string, type: string | null) => void;\n};\n\nexport function isLinkableFromPanel(\n panel: PanelComponent\n): panel is LinkableFromPanel {\n const p = panel as LinkableFromPanel;\n return typeof p.getCoordinateForColumn === 'function';\n}\n\nexport function isLinkablePanel(panel: PanelComponent): panel is LinkablePanel {\n const p = panel as LinkablePanel;\n return (\n isLinkableFromPanel(panel) &&\n typeof p.setFilterMap === 'function' &&\n typeof p.unsetFilterValue === 'function'\n );\n}\n\nexport function isLinkableColumn(column: LinkColumn): boolean {\n // TODO: core/#3358 Use preview/original type property instead of checking description\n return (\n column.description == null ||\n !column.description.startsWith('Preview of type: ')\n );\n}\n\nconst log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static isLinkValid(\n start: LinkPoint,\n end: LinkPoint,\n isolatedLinkerPanelId?: string | string[]\n ): boolean {\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if (\n start.panelId == null ||\n end.panelId == null ||\n start.panelId === end.panelId ||\n (isolatedLinkerPanelId != null &&\n isolatedLinkerPanelId !== start.panelId &&\n isolatedLinkerPanelId !== end.panelId)\n ) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return false;\n }\n\n // Check column type compatibility\n const { columnType: startColumnType } = start;\n const { columnType: endColumnType } = end;\n\n // Null columnType in ending link point allows linking to any type\n const isCompatibleType =\n endColumnType === null ||\n TableUtils.isCompatibleType(startColumnType, endColumnType);\n\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return false;\n }\n\n return true;\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(\n columns: readonly LinkColumn[],\n { columnName, columnType }: LinkPoint\n ): LinkColumn | undefined {\n return columns.find(\n ({ name, type }) => name === columnName && type === columnType\n );\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(\n links: Link[],\n panelId: string | string[],\n cloneId: string\n ): Link[] {\n const clonedLinks: Link[] = [];\n links.forEach(link => {\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,12 +4,10 @@ import { SocketedButton } from '@deephaven/components';
|
|
|
4
4
|
import "./ChartColumnSelectorOverlay.css";
|
|
5
5
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
6
|
function ChartColumnSelectorOverlay(_ref) {
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
onMouseLeave
|
|
12
|
-
} = _ref;
|
|
7
|
+
var columns = _ref.columns,
|
|
8
|
+
onColumnSelected = _ref.onColumnSelected,
|
|
9
|
+
_onMouseEnter = _ref.onMouseEnter,
|
|
10
|
+
onMouseLeave = _ref.onMouseLeave;
|
|
13
11
|
return /*#__PURE__*/_jsx("div", {
|
|
14
12
|
className: "chart-panel-overlay chart-column-selector-overlay",
|
|
15
13
|
children: /*#__PURE__*/_jsxs("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartColumnSelectorOverlay.js","names":["React","classNames","SocketedButton","jsx","_jsx","jsxs","_jsxs","ChartColumnSelectorOverlay","_ref","columns","onColumnSelected","onMouseEnter","onMouseLeave","className","children","map","column","makeButtonClassName","name","onClick","disabled","isValid","isLinked","isActive","columnName","concat"],"sources":["../../src/panels/ChartColumnSelectorOverlay.tsx"],"sourcesContent":["import React, { type MouseEventHandler, type ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { SocketedButton } from '@deephaven/components';\nimport './ChartColumnSelectorOverlay.scss';\n\nexport interface SelectorColumn {\n name: string;\n type: string;\n isValid: boolean;\n isActive: boolean;\n}\n\ninterface ChartColumnSelectorOverlayProps {\n columns: SelectorColumn[];\n onColumnSelected: (name: string) => void;\n onMouseEnter?: (column: SelectorColumn) => void;\n onMouseLeave?: MouseEventHandler<HTMLButtonElement>;\n}\n\nfunction ChartColumnSelectorOverlay({\n columns,\n onColumnSelected,\n onMouseEnter,\n onMouseLeave,\n}: ChartColumnSelectorOverlayProps): ReactElement {\n return (\n <div className=\"chart-panel-overlay chart-column-selector-overlay\">\n <div className={classNames('chart-panel-overlay-content')}>\n <div className=\"info-message\">\n This plot requires a filter control to be added to the layout or a\n table link to be created on the following columns:\n </div>\n <div className=\"waiting-column-select-list\">\n {columns.map(column => (\n <SocketedButton\n key={column.name}\n className={classNames(\n 'btn-chart-column-selector',\n ChartColumnSelectorOverlay.makeButtonClassName(column.name)\n )}\n onClick={() => onColumnSelected(column.name)}\n onMouseEnter={() => {\n onMouseEnter?.(column);\n }}\n onMouseLeave={onMouseLeave}\n disabled={!column.isValid}\n isLinked={column.isActive}\n >\n {column.name}\n </SocketedButton>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nChartColumnSelectorOverlay.makeButtonClassName = (columnName: string) =>\n `btn-chart-column-selector-${columnName}`;\n\nexport default ChartColumnSelectorOverlay;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAqD,OAAO;AACxE,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,cAAc,QAAQ,uBAAuB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiBvD,SAASC,0BAA0BA,CAAAC,IAAA,EAKe;EAAA,
|
|
1
|
+
{"version":3,"file":"ChartColumnSelectorOverlay.js","names":["React","classNames","SocketedButton","jsx","_jsx","jsxs","_jsxs","ChartColumnSelectorOverlay","_ref","columns","onColumnSelected","onMouseEnter","onMouseLeave","className","children","map","column","makeButtonClassName","name","onClick","disabled","isValid","isLinked","isActive","columnName","concat"],"sources":["../../src/panels/ChartColumnSelectorOverlay.tsx"],"sourcesContent":["import React, { type MouseEventHandler, type ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { SocketedButton } from '@deephaven/components';\nimport './ChartColumnSelectorOverlay.scss';\n\nexport interface SelectorColumn {\n name: string;\n type: string;\n isValid: boolean;\n isActive: boolean;\n}\n\ninterface ChartColumnSelectorOverlayProps {\n columns: SelectorColumn[];\n onColumnSelected: (name: string) => void;\n onMouseEnter?: (column: SelectorColumn) => void;\n onMouseLeave?: MouseEventHandler<HTMLButtonElement>;\n}\n\nfunction ChartColumnSelectorOverlay({\n columns,\n onColumnSelected,\n onMouseEnter,\n onMouseLeave,\n}: ChartColumnSelectorOverlayProps): ReactElement {\n return (\n <div className=\"chart-panel-overlay chart-column-selector-overlay\">\n <div className={classNames('chart-panel-overlay-content')}>\n <div className=\"info-message\">\n This plot requires a filter control to be added to the layout or a\n table link to be created on the following columns:\n </div>\n <div className=\"waiting-column-select-list\">\n {columns.map(column => (\n <SocketedButton\n key={column.name}\n className={classNames(\n 'btn-chart-column-selector',\n ChartColumnSelectorOverlay.makeButtonClassName(column.name)\n )}\n onClick={() => onColumnSelected(column.name)}\n onMouseEnter={() => {\n onMouseEnter?.(column);\n }}\n onMouseLeave={onMouseLeave}\n disabled={!column.isValid}\n isLinked={column.isActive}\n >\n {column.name}\n </SocketedButton>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nChartColumnSelectorOverlay.makeButtonClassName = (columnName: string) =>\n `btn-chart-column-selector-${columnName}`;\n\nexport default ChartColumnSelectorOverlay;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAqD,OAAO;AACxE,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,cAAc,QAAQ,uBAAuB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiBvD,SAASC,0BAA0BA,CAAAC,IAAA,EAKe;EAAA,IAJhDC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IACPC,gBAAgB,GAAAF,IAAA,CAAhBE,gBAAgB;IAChBC,aAAY,GAAAH,IAAA,CAAZG,YAAY;IACZC,YAAY,GAAAJ,IAAA,CAAZI,YAAY;EAEZ,oBACER,IAAA;IAAKS,SAAS,EAAC,mDAAmD;IAAAC,QAAA,eAChER,KAAA;MAAKO,SAAS,EAAEZ,UAAU,CAAC,6BAA6B,CAAE;MAAAa,QAAA,gBACxDV,IAAA;QAAKS,SAAS,EAAC,cAAc;QAAAC,QAAA,EAAC;MAG9B,CAAK,CAAC,eACNV,IAAA;QAAKS,SAAS,EAAC,4BAA4B;QAAAC,QAAA,EACxCL,OAAO,CAACM,GAAG,CAACC,MAAM,iBACjBZ,IAAA,CAACF,cAAc;UAEbW,SAAS,EAAEZ,UAAU,CACnB,2BAA2B,EAC3BM,0BAA0B,CAACU,mBAAmB,CAACD,MAAM,CAACE,IAAI,CAC5D,CAAE;UACFC,OAAO,EAAEA,CAAA,KAAMT,gBAAgB,CAACM,MAAM,CAACE,IAAI,CAAE;UAC7CP,YAAY,EAAEA,CAAA,KAAM;YAClBA,aAAY,aAAZA,aAAY,eAAZA,aAAY,CAAGK,MAAM,CAAC;UACxB,CAAE;UACFJ,YAAY,EAAEA,YAAa;UAC3BQ,QAAQ,EAAE,CAACJ,MAAM,CAACK,OAAQ;UAC1BC,QAAQ,EAAEN,MAAM,CAACO,QAAS;UAAAT,QAAA,EAEzBE,MAAM,CAACE;QAAI,GAbPF,MAAM,CAACE,IAcE,CACjB;MAAC,CACC,CAAC;IAAA,CACH;EAAC,CACH,CAAC;AAEV;AAEAX,0BAA0B,CAACU,mBAAmB,GAAIO,UAAkB,iCAAAC,MAAA,CACrCD,UAAU,CAAE;AAE3C,eAAejB,0BAA0B","ignoreList":[]}
|
|
@@ -7,15 +7,13 @@ import { TextUtils } from '@deephaven/utils';
|
|
|
7
7
|
import "./ChartFilterOverlay.css";
|
|
8
8
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
9
9
|
function ChartFilterOverlay(_ref) {
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
waitingInputMap
|
|
18
|
-
} = _ref;
|
|
10
|
+
var columnMap = _ref.columnMap,
|
|
11
|
+
inputFilterMap = _ref.inputFilterMap,
|
|
12
|
+
linkedColumnMap = _ref.linkedColumnMap,
|
|
13
|
+
onAdd = _ref.onAdd,
|
|
14
|
+
onOpenLinker = _ref.onOpenLinker,
|
|
15
|
+
waitingFilterMap = _ref.waitingFilterMap,
|
|
16
|
+
waitingInputMap = _ref.waitingInputMap;
|
|
19
17
|
var inputMessage = useMemo(() => {
|
|
20
18
|
var waitingColumns = Array.from(waitingInputMap.keys());
|
|
21
19
|
var needsInputFilterValue = waitingColumns.find(columnName => inputFilterMap.get(columnName) != null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartFilterOverlay.js","names":["React","useCallback","useMemo","classNames","FontAwesomeIcon","Button","vsPass","vsWarning","TextUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ChartFilterOverlay","_ref","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","waitingColumns","Array","from","keys","needsInputFilterValue","find","columnName","get","needsLinkValue","columnsText","join","map","item","concat","columns","values","handleAddClick","event","stopPropagation","preventDefault","handleOpenLinker","isWaitingFilters","size","isWaitingInput","className","children","column","isColumnWaiting","has","name","icon","kind","onClick"],"sources":["../../src/panels/ChartFilterOverlay.tsx"],"sourcesContent":["import React, {\n type MouseEvent,\n type ReactElement,\n useCallback,\n useMemo,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { TextUtils } from '@deephaven/utils';\nimport { type ColumnName, type InputFilter } from '@deephaven/iris-grid';\nimport './ChartFilterOverlay.scss';\n\nexport type ColumnMap = Map<ColumnName, { name: string; type: string }>;\n\ninterface ChartFilterOverlayProps {\n columnMap: ColumnMap;\n inputFilterMap: Map<ColumnName, InputFilter>;\n linkedColumnMap: Map<string, unknown>;\n onAdd: (columns: InputFilter[]) => void;\n onOpenLinker: () => void;\n waitingFilterMap: Map<string, InputFilter>;\n waitingInputMap: Map<ColumnName, unknown>;\n}\n\nfunction ChartFilterOverlay({\n columnMap,\n inputFilterMap,\n linkedColumnMap,\n onAdd,\n onOpenLinker,\n waitingFilterMap,\n waitingInputMap,\n}: ChartFilterOverlayProps): ReactElement {\n const inputMessage = useMemo(() => {\n const waitingColumns = Array.from(waitingInputMap.keys());\n const needsInputFilterValue = waitingColumns.find(\n (columnName: ColumnName) => inputFilterMap.get(columnName) != null\n );\n const needsLinkValue = waitingColumns.find(\n columnName => linkedColumnMap.get(columnName) != null\n );\n const columnsText = TextUtils.join(waitingColumns.map(item => `\"${item}\"`));\n if (\n needsInputFilterValue != null &&\n needsInputFilterValue &&\n needsLinkValue != null &&\n needsLinkValue\n ) {\n return `Use a filter control or linked table to set a value for ${columnsText}`;\n }\n if (needsInputFilterValue != null && needsInputFilterValue) {\n return `Set a filter control value for ${columnsText}`;\n }\n return `Double click a row in a linked table to set a value for ${columnsText}`;\n }, [inputFilterMap, linkedColumnMap, waitingInputMap]);\n\n const columns = useMemo(() => Array.from(columnMap.values()), [columnMap]);\n\n const handleAddClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n event.preventDefault();\n\n onAdd(Array.from(waitingFilterMap.values()));\n },\n [onAdd, waitingFilterMap]\n );\n\n const handleOpenLinker = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n event.preventDefault();\n\n onOpenLinker();\n },\n [onOpenLinker]\n );\n\n const isWaitingFilters = waitingFilterMap.size > 0;\n const isWaitingInput = !isWaitingFilters && waitingInputMap.size > 0;\n\n return (\n <div className=\"chart-panel-overlay chart-filter-overlay\">\n <div\n className={classNames(\n 'chart-panel-overlay-content chart-filter-overlay-content',\n { 'chart-filter-waiting-filter': isWaitingFilters },\n { 'chart-filter-waiting-input': isWaitingInput }\n )}\n >\n {isWaitingFilters && (\n <>\n <div className=\"info-message\">\n This plot requires a filter control to be added to the layout or a\n table link to be created on the following columns:\n </div>\n <div className=\"waiting-filter-list\">\n {columns.map(column => {\n const isColumnWaiting = waitingFilterMap.has(column.name);\n const icon = isColumnWaiting ? vsWarning : vsPass;\n return (\n <div\n key={column.name}\n className={classNames('waiting-filter-item', {\n 'is-invalid': isColumnWaiting,\n })}\n >\n <FontAwesomeIcon icon={icon} />\n {column.name}\n </div>\n );\n })}\n </div>\n <div>\n <Button kind=\"primary\" onClick={handleAddClick}>\n Add Input Filters\n </Button>\n <Button kind=\"primary\" onClick={handleOpenLinker}>\n Open Linker Tool\n </Button>\n </div>\n </>\n )}\n {isWaitingInput && (\n <>\n <div className=\"info-message\">Waiting for User Input</div>\n <div className=\"\">{inputMessage}</div>\n </>\n )}\n </div>\n </div>\n );\n}\n\nexport default ChartFilterOverlay;\n"],"mappings":"AAAA,OAAOA,KAAK,IAGVC,WAAW,EACXC,OAAO,QACF,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,SAASC,MAAM,EAAEC,SAAS,QAAQ,kBAAkB;AACpD,SAASC,SAAS,QAAQ,kBAAkB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAgB7C,SAASC,kBAAkBA,CAAAC,IAAA,EAQe;EAAA,
|
|
1
|
+
{"version":3,"file":"ChartFilterOverlay.js","names":["React","useCallback","useMemo","classNames","FontAwesomeIcon","Button","vsPass","vsWarning","TextUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ChartFilterOverlay","_ref","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","waitingColumns","Array","from","keys","needsInputFilterValue","find","columnName","get","needsLinkValue","columnsText","join","map","item","concat","columns","values","handleAddClick","event","stopPropagation","preventDefault","handleOpenLinker","isWaitingFilters","size","isWaitingInput","className","children","column","isColumnWaiting","has","name","icon","kind","onClick"],"sources":["../../src/panels/ChartFilterOverlay.tsx"],"sourcesContent":["import React, {\n type MouseEvent,\n type ReactElement,\n useCallback,\n useMemo,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { TextUtils } from '@deephaven/utils';\nimport { type ColumnName, type InputFilter } from '@deephaven/iris-grid';\nimport './ChartFilterOverlay.scss';\n\nexport type ColumnMap = Map<ColumnName, { name: string; type: string }>;\n\ninterface ChartFilterOverlayProps {\n columnMap: ColumnMap;\n inputFilterMap: Map<ColumnName, InputFilter>;\n linkedColumnMap: Map<string, unknown>;\n onAdd: (columns: InputFilter[]) => void;\n onOpenLinker: () => void;\n waitingFilterMap: Map<string, InputFilter>;\n waitingInputMap: Map<ColumnName, unknown>;\n}\n\nfunction ChartFilterOverlay({\n columnMap,\n inputFilterMap,\n linkedColumnMap,\n onAdd,\n onOpenLinker,\n waitingFilterMap,\n waitingInputMap,\n}: ChartFilterOverlayProps): ReactElement {\n const inputMessage = useMemo(() => {\n const waitingColumns = Array.from(waitingInputMap.keys());\n const needsInputFilterValue = waitingColumns.find(\n (columnName: ColumnName) => inputFilterMap.get(columnName) != null\n );\n const needsLinkValue = waitingColumns.find(\n columnName => linkedColumnMap.get(columnName) != null\n );\n const columnsText = TextUtils.join(waitingColumns.map(item => `\"${item}\"`));\n if (\n needsInputFilterValue != null &&\n needsInputFilterValue &&\n needsLinkValue != null &&\n needsLinkValue\n ) {\n return `Use a filter control or linked table to set a value for ${columnsText}`;\n }\n if (needsInputFilterValue != null && needsInputFilterValue) {\n return `Set a filter control value for ${columnsText}`;\n }\n return `Double click a row in a linked table to set a value for ${columnsText}`;\n }, [inputFilterMap, linkedColumnMap, waitingInputMap]);\n\n const columns = useMemo(() => Array.from(columnMap.values()), [columnMap]);\n\n const handleAddClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n event.preventDefault();\n\n onAdd(Array.from(waitingFilterMap.values()));\n },\n [onAdd, waitingFilterMap]\n );\n\n const handleOpenLinker = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n event.preventDefault();\n\n onOpenLinker();\n },\n [onOpenLinker]\n );\n\n const isWaitingFilters = waitingFilterMap.size > 0;\n const isWaitingInput = !isWaitingFilters && waitingInputMap.size > 0;\n\n return (\n <div className=\"chart-panel-overlay chart-filter-overlay\">\n <div\n className={classNames(\n 'chart-panel-overlay-content chart-filter-overlay-content',\n { 'chart-filter-waiting-filter': isWaitingFilters },\n { 'chart-filter-waiting-input': isWaitingInput }\n )}\n >\n {isWaitingFilters && (\n <>\n <div className=\"info-message\">\n This plot requires a filter control to be added to the layout or a\n table link to be created on the following columns:\n </div>\n <div className=\"waiting-filter-list\">\n {columns.map(column => {\n const isColumnWaiting = waitingFilterMap.has(column.name);\n const icon = isColumnWaiting ? vsWarning : vsPass;\n return (\n <div\n key={column.name}\n className={classNames('waiting-filter-item', {\n 'is-invalid': isColumnWaiting,\n })}\n >\n <FontAwesomeIcon icon={icon} />\n {column.name}\n </div>\n );\n })}\n </div>\n <div>\n <Button kind=\"primary\" onClick={handleAddClick}>\n Add Input Filters\n </Button>\n <Button kind=\"primary\" onClick={handleOpenLinker}>\n Open Linker Tool\n </Button>\n </div>\n </>\n )}\n {isWaitingInput && (\n <>\n <div className=\"info-message\">Waiting for User Input</div>\n <div className=\"\">{inputMessage}</div>\n </>\n )}\n </div>\n </div>\n );\n}\n\nexport default ChartFilterOverlay;\n"],"mappings":"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","ignoreList":[]}
|