@deephaven/iris-grid 0.6.3-beta.0 → 0.7.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/IrisGrid.d.ts +1 -0
  2. package/dist/IrisGrid.d.ts.map +1 -1
  3. package/dist/IrisGrid.js +80 -30
  4. package/dist/IrisGrid.js.map +1 -1
  5. package/dist/IrisGridBottomBar.js +1 -1
  6. package/dist/IrisGridModelUpdater.js +1 -1
  7. package/dist/IrisGridModelUpdater.js.map +1 -1
  8. package/dist/IrisGridTableModel.d.ts.map +1 -1
  9. package/dist/IrisGridTableModel.js +2 -1
  10. package/dist/IrisGridTableModel.js.map +1 -1
  11. package/dist/IrisGridTreeTableModel.js +1 -1
  12. package/dist/IrisGridUtils.js +32 -32
  13. package/dist/IrisGridUtils.js.map +1 -1
  14. package/dist/PendingDataBottomBar.js +1 -1
  15. package/dist/PendingDataBottomBar.js.map +1 -1
  16. package/dist/TableUtils.d.ts.map +1 -1
  17. package/dist/TableUtils.js +3 -1
  18. package/dist/TableUtils.js.map +1 -1
  19. package/dist/ToastBottomBar.js +1 -1
  20. package/dist/ToastBottomBar.js.map +1 -1
  21. package/dist/memoizeClear.js +1 -1
  22. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.d.ts.map +1 -1
  23. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +4 -12
  24. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  25. package/dist/mousehandlers/IrisGridContextMenuHandler.js +1 -1
  26. package/dist/sidebar/AdvancedSettingsMenu.js +2 -2
  27. package/dist/sidebar/CustomColumnBuilder.js +2 -2
  28. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  29. package/dist/sidebar/InputEditor.js +1 -1
  30. package/dist/sidebar/RollupRows.js +10 -10
  31. package/dist/sidebar/RollupRows.js.map +1 -1
  32. package/dist/sidebar/SelectDistinctBuilder.js +5 -5
  33. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  34. package/dist/sidebar/VisibilityOrderingBuilder.js +10 -10
  35. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  36. package/dist/sidebar/aggregations/AggregationEdit.js +3 -3
  37. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  38. package/dist/sidebar/aggregations/AggregationUtils.js +1 -1
  39. package/dist/sidebar/aggregations/Aggregations.js +4 -4
  40. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  41. package/dist/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +13 -12
@@ -2,6 +2,7 @@ export class IrisGrid extends React.Component<any, any, any> {
2
2
  static minDebounce: number;
3
3
  static maxDebounce: number;
4
4
  static loadingSpinnerDelay: number;
5
+ static makeQuickFilter(column: any, text: any, timeZone: any): any;
5
6
  constructor(props: any);
6
7
  handleAdvancedFilterChange(column: any, filter: any, options: any): void;
7
8
  handleAdvancedFilterSortChange(column: any, direction: any, addToExisting?: boolean): void;
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGrid.d.ts","sourceRoot":"","sources":["../src/IrisGrid.jsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IrisGrid.d.ts","sourceRoot":"","sources":["../src/IrisGrid.jsx"],"names":[],"mappings":"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"}
package/dist/IrisGrid.js CHANGED
@@ -2,7 +2,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
2
2
 
3
3
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
4
4
 
5
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
5
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
6
6
 
7
7
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
8
8
 
@@ -23,6 +23,7 @@ import dh, { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';
23
23
  import { Pending, PromiseUtils, ValidationError } from '@deephaven/utils';
24
24
  import throttle from 'lodash.throttle';
25
25
  import debounce from 'lodash.debounce';
26
+ import clamp from 'lodash.clamp';
26
27
  import PendingDataBottomBar from "./PendingDataBottomBar.js";
27
28
  import IrisGridCopyHandler from "./IrisGridCopyHandler.js";
28
29
  import FilterInputField from "./FilterInputField.js";
@@ -66,6 +67,16 @@ function isEmptyConfig(_ref) {
66
67
  }
67
68
 
68
69
  export class IrisGrid extends Component {
70
+ static makeQuickFilter(column, text, timeZone) {
71
+ try {
72
+ return TableUtils.makeQuickFilter(column, text, timeZone);
73
+ } catch (err) {
74
+ log.error('Error creating quick filter', err);
75
+ }
76
+
77
+ return null;
78
+ }
79
+
69
80
  constructor(props) {
70
81
  super(props);
71
82
 
@@ -171,7 +182,7 @@ export class IrisGrid extends Component {
171
182
 
172
183
  _defineProperty(this, "getCachedHiddenColumns", memoize(hiddenColumns => hiddenColumns, {
173
184
  max: 1,
174
- normalizer: (_ref2) => {
185
+ normalizer: _ref2 => {
175
186
  var [hiddenColumns] = _ref2;
176
187
  return hiddenColumns.join();
177
188
  }
@@ -179,7 +190,7 @@ export class IrisGrid extends Component {
179
190
 
180
191
  _defineProperty(this, "getAggregationMap", memoize((columns, aggregations) => {
181
192
  var aggregationMap = {};
182
- aggregations.forEach((_ref3) => {
193
+ aggregations.forEach(_ref3 => {
183
194
  var {
184
195
  operation,
185
196
  selected,
@@ -192,7 +203,7 @@ export class IrisGrid extends Component {
192
203
 
193
204
  _defineProperty(this, "getOperationMap", memoize((columns, aggregations) => {
194
205
  var operationMap = {};
195
- aggregations.filter(a => !AggregationUtils.isRollupOperation(a.operation)).forEach((_ref4) => {
206
+ aggregations.filter(a => !AggregationUtils.isRollupOperation(a.operation)).forEach(_ref4 => {
196
207
  var {
197
208
  operation,
198
209
  selected,
@@ -656,13 +667,13 @@ export class IrisGrid extends Component {
656
667
  var newAdvancedFilters = replaceExisting ? new Map() : new Map(advancedFilters);
657
668
  var newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);
658
669
  var isChanged = replaceExisting && advancedFilters.size > 0;
659
- inputFilters.forEach((_ref5) => {
670
+ inputFilters.forEach(_ref5 => {
660
671
  var {
661
672
  name,
662
673
  type,
663
674
  value
664
675
  } = _ref5;
665
- var modelIndex = model.columns.findIndex((_ref6) => {
676
+ var modelIndex = model.columns.findIndex(_ref6 => {
666
677
  var {
667
678
  name: columnName,
668
679
  type: columnType
@@ -717,17 +728,9 @@ export class IrisGrid extends Component {
717
728
  }
718
729
  }
719
730
 
720
- var filter = null;
721
-
722
- try {
723
- filter = TableUtils.makeQuickFilter(column, value, formatter.timeZone);
724
- } catch (err) {
725
- log.error('Error creating quick filter', err);
726
- }
727
-
728
731
  quickFilters.set(modelIndex, {
729
- filter,
730
- text: value
732
+ text: value,
733
+ filter: IrisGrid.makeQuickFilter(column, value, formatter.timeZone)
731
734
  });
732
735
  return true;
733
736
  }
@@ -743,7 +746,7 @@ export class IrisGrid extends Component {
743
746
 
744
747
  log.debug('Setting advanced filter', modelIndex, filter);
745
748
  this.startLoading('Filtering...', true);
746
- this.setState((_ref7) => {
749
+ this.setState(_ref7 => {
747
750
  var {
748
751
  advancedFilters
749
752
  } = _ref7;
@@ -774,7 +777,7 @@ export class IrisGrid extends Component {
774
777
  setQuickFilter(modelIndex, filter, text) {
775
778
  log.debug('Setting quick filter', modelIndex, filter, text);
776
779
  this.startLoading('Filtering...', true);
777
- this.setState((_ref8) => {
780
+ this.setState(_ref8 => {
778
781
  var {
779
782
  quickFilters
780
783
  } = _ref8;
@@ -835,7 +838,7 @@ export class IrisGrid extends Component {
835
838
 
836
839
  removeColumnFilter(modelColumn) {
837
840
  this.startLoading('Filtering...', true);
838
- this.setState((_ref10) => {
841
+ this.setState(_ref10 => {
839
842
  var {
840
843
  advancedFilters,
841
844
  quickFilters
@@ -923,10 +926,9 @@ export class IrisGrid extends Component {
923
926
  text
924
927
  } = value;
925
928
  var column = columns[key];
926
- var filter = TableUtils.makeQuickFilter(column, text, formatter.timeZone);
927
929
  newQuickFilters.set(key, {
928
930
  text,
929
- filter
931
+ filter: IrisGrid.makeQuickFilter(column, text, formatter.timeZone)
930
932
  });
931
933
  });
932
934
  this.startLoading('Rebuilding filters...', true);
@@ -1722,7 +1724,7 @@ export class IrisGrid extends Component {
1722
1724
 
1723
1725
  handleFilterBarChange(value) {
1724
1726
  this.startLoading('Filtering...', true);
1725
- this.setState((_ref12) => {
1727
+ this.setState(_ref12 => {
1726
1728
  var {
1727
1729
  focusedFilterBarColumn,
1728
1730
  quickFilters
@@ -1800,7 +1802,7 @@ export class IrisGrid extends Component {
1800
1802
  }
1801
1803
 
1802
1804
  handleMenuBack() {
1803
- this.setState((_ref13) => {
1805
+ this.setState(_ref13 => {
1804
1806
  var {
1805
1807
  openOptions
1806
1808
  } = _ref13;
@@ -1813,7 +1815,7 @@ export class IrisGrid extends Component {
1813
1815
  }
1814
1816
 
1815
1817
  handleMenuSelect(option) {
1816
- this.setState((_ref14) => {
1818
+ this.setState(_ref14 => {
1817
1819
  var {
1818
1820
  openOptions
1819
1821
  } = _ref14;
@@ -2063,7 +2065,7 @@ export class IrisGrid extends Component {
2063
2065
  handleAggregationChange(aggregation) {
2064
2066
  log.debug('handleAggregationChange', aggregation);
2065
2067
  this.startLoading("Aggregating ".concat(aggregation.operation, "..."));
2066
- this.setState((_ref15) => {
2068
+ this.setState(_ref15 => {
2067
2069
  var {
2068
2070
  aggregationSettings
2069
2071
  } = _ref15;
@@ -2450,25 +2452,72 @@ export class IrisGrid extends Component {
2450
2452
 
2451
2453
  var columnTooltip = null;
2452
2454
 
2453
- if (shownColumnTooltip != null && metrics) {
2455
+ if (shownColumnTooltip != null && metrics && this.gridWrapper) {
2454
2456
  var {
2455
2457
  columnHeaderHeight,
2456
2458
  visibleColumnXs: _visibleColumnXs,
2457
- visibleColumnWidths: _visibleColumnWidths
2459
+ visibleColumnWidths: _visibleColumnWidths,
2460
+ width
2458
2461
  } = metrics;
2459
2462
 
2460
2463
  var _columnX = _visibleColumnXs.get(shownColumnTooltip);
2461
2464
 
2462
2465
  var _columnWidth = _visibleColumnWidths.get(shownColumnTooltip);
2466
+ /**
2467
+ * Create a wrapper dom element, the size of the column header.
2468
+ * The wrapper acts as tooltip parent, the tooltip component
2469
+ * will trigger hide on mouseleave of wrapper or tooltip.
2470
+ * The wrapper should be bound to within the grid dimensions,
2471
+ * so popper only remains triggered while mouse is inside the panel.
2472
+ */
2473
+
2474
+
2475
+ var boundedLeft = Math.max(0, _columnX);
2476
+ var boundedWidth = _columnWidth;
2477
+
2478
+ if (_columnX + _columnWidth > width) {
2479
+ // column is extending past right edge
2480
+ boundedWidth = width - _columnX;
2481
+ } else if (_columnX < 0) {
2482
+ // column is extending past left edge
2483
+ boundedWidth = _columnWidth - Math.abs(_columnX);
2484
+ }
2463
2485
 
2464
2486
  var wrapperStyle = {
2465
2487
  position: 'absolute',
2466
2488
  top: 0,
2467
- left: _columnX,
2468
- width: _columnWidth,
2489
+ left: boundedLeft,
2490
+ width: boundedWidth,
2469
2491
  height: columnHeaderHeight,
2470
2492
  pointerEvents: 'none'
2471
2493
  };
2494
+ /**
2495
+ * Because the popper parent wrapper center is no longer the same as
2496
+ * the column label center, we create a popper virtual ref, to handle
2497
+ * positioning and keep the popper centered on the label. Creates a
2498
+ * 1px x headerHeight virtual object, placed centered on the column
2499
+ * label, clamped to 0 + margin to width - margin. We add a margin,
2500
+ * otherwise the arrow wants to escape the boundary.
2501
+ */
2502
+
2503
+ var gridRect = this.gridWrapper.getBoundingClientRect();
2504
+ var popperMargin = 20;
2505
+ var virtualReference = {
2506
+ clientWidth: 1,
2507
+ clientHeight: columnHeaderHeight,
2508
+
2509
+ getBoundingClientRect() {
2510
+ return {
2511
+ top: gridRect.top,
2512
+ left: gridRect.left + clamp(_columnX + _columnWidth / 2, popperMargin, width - popperMargin),
2513
+ bottom: gridRect.top + columnHeaderHeight,
2514
+ right: gridRect.left + clamp(_columnX + _columnWidth / 2, popperMargin, width - popperMargin) + 1,
2515
+ width: 1,
2516
+ height: columnHeaderHeight
2517
+ };
2518
+ }
2519
+
2520
+ };
2472
2521
  var popperOptions = {
2473
2522
  placement: 'bottom',
2474
2523
  modifiers: {
@@ -2490,7 +2539,8 @@ export class IrisGrid extends Component {
2490
2539
  timeout: 400,
2491
2540
  interactive: true,
2492
2541
  options: popperOptions,
2493
- ref: this.handleTooltipRef
2542
+ ref: this.handleTooltipRef,
2543
+ referenceObject: virtualReference
2494
2544
  }, /*#__PURE__*/React.createElement(ColumnStatistics, {
2495
2545
  model: model,
2496
2546
  column: column,