@deephaven/iris-grid 0.59.1-beta.0 → 0.59.1-beta.12

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 (74) hide show
  1. package/dist/EmptyIrisGridModel.d.ts +62 -0
  2. package/dist/EmptyIrisGridModel.d.ts.map +1 -0
  3. package/dist/EmptyIrisGridModel.js +168 -0
  4. package/dist/EmptyIrisGridModel.js.map +1 -0
  5. package/dist/GotoRow.d.ts.map +1 -1
  6. package/dist/GotoRow.js +1 -0
  7. package/dist/GotoRow.js.map +1 -1
  8. package/dist/IrisGrid.d.ts +18 -14
  9. package/dist/IrisGrid.d.ts.map +1 -1
  10. package/dist/IrisGrid.js +185 -157
  11. package/dist/IrisGrid.js.map +1 -1
  12. package/dist/IrisGridModel.d.ts +5 -4
  13. package/dist/IrisGridModel.d.ts.map +1 -1
  14. package/dist/IrisGridModel.js +2 -1
  15. package/dist/IrisGridModel.js.map +1 -1
  16. package/dist/IrisGridModelFactory.d.ts +2 -2
  17. package/dist/IrisGridModelFactory.d.ts.map +1 -1
  18. package/dist/IrisGridModelFactory.js +1 -1
  19. package/dist/IrisGridModelFactory.js.map +1 -1
  20. package/dist/IrisGridModelUpdater.d.ts +3 -1
  21. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  22. package/dist/IrisGridModelUpdater.js +8 -1
  23. package/dist/IrisGridModelUpdater.js.map +1 -1
  24. package/dist/IrisGridPartitionSelector.css +14 -36
  25. package/dist/IrisGridPartitionSelector.css.map +1 -1
  26. package/dist/IrisGridPartitionSelector.d.ts +39 -38
  27. package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
  28. package/dist/IrisGridPartitionSelector.js +253 -227
  29. package/dist/IrisGridPartitionSelector.js.map +1 -1
  30. package/dist/IrisGridPartitionedTableModel.d.ts +25 -0
  31. package/dist/IrisGridPartitionedTableModel.d.ts.map +1 -0
  32. package/dist/IrisGridPartitionedTableModel.js +74 -0
  33. package/dist/IrisGridPartitionedTableModel.js.map +1 -0
  34. package/dist/IrisGridProxyModel.d.ts +18 -4
  35. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  36. package/dist/IrisGridProxyModel.js +84 -5
  37. package/dist/IrisGridProxyModel.js.map +1 -1
  38. package/dist/IrisGridTableModel.d.ts +14 -4
  39. package/dist/IrisGridTableModel.d.ts.map +1 -1
  40. package/dist/IrisGridTableModel.js +96 -21
  41. package/dist/IrisGridTableModel.js.map +1 -1
  42. package/dist/IrisGridTableModelTemplate.d.ts +7 -7
  43. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  44. package/dist/IrisGridTableModelTemplate.js +1 -1
  45. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  46. package/dist/IrisGridTreeTableModel.js +2 -4
  47. package/dist/IrisGridTreeTableModel.js.map +1 -1
  48. package/dist/IrisGridUtils.d.ts +7 -7
  49. package/dist/IrisGridUtils.d.ts.map +1 -1
  50. package/dist/IrisGridUtils.js +33 -34
  51. package/dist/IrisGridUtils.js.map +1 -1
  52. package/dist/MissingPartitionError.d.ts +6 -0
  53. package/dist/MissingPartitionError.d.ts.map +1 -0
  54. package/dist/MissingPartitionError.js +14 -0
  55. package/dist/MissingPartitionError.js.map +1 -0
  56. package/dist/PartitionedGridModel.d.ts +38 -0
  57. package/dist/PartitionedGridModel.d.ts.map +1 -0
  58. package/dist/PartitionedGridModel.js +15 -0
  59. package/dist/PartitionedGridModel.js.map +1 -0
  60. package/dist/index.d.ts +3 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +3 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.d.ts +2 -2
  65. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.d.ts.map +1 -1
  66. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -1
  67. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  68. package/package.json +16 -15
  69. package/dist/PartitionSelectorSearch.css +0 -23
  70. package/dist/PartitionSelectorSearch.css.map +0 -1
  71. package/dist/PartitionSelectorSearch.d.ts +0 -78
  72. package/dist/PartitionSelectorSearch.d.ts.map +0 -1
  73. package/dist/PartitionSelectorSearch.js +0 -343
  74. package/dist/PartitionSelectorSearch.js.map +0 -1
package/dist/IrisGrid.js CHANGED
@@ -40,6 +40,7 @@ import { Aggregations, AggregationEdit, AggregationUtils, ChartBuilder, CustomCo
40
40
  import IrisGridUtils from "./IrisGridUtils.js";
41
41
  import CrossColumnSearch from "./CrossColumnSearch.js";
42
42
  import IrisGridModel from "./IrisGridModel.js";
43
+ import { isPartitionedGridModel } from "./PartitionedGridModel.js";
43
44
  import IrisGridPartitionSelector from "./IrisGridPartitionSelector.js";
44
45
  import SelectDistinctBuilder from "./sidebar/SelectDistinctBuilder.js";
45
46
  import AdvancedSettingsType from "./sidebar/AdvancedSettingsType.js";
@@ -51,6 +52,7 @@ import IrisGridCellOverflowModal from "./IrisGridCellOverflowModal.js";
51
52
  import GotoRow from "./GotoRow.js";
52
53
  import AggregationOperation from "./sidebar/aggregations/AggregationOperation.js";
53
54
  import { IrisGridThemeContext } from "./IrisGridThemeProvider.js";
55
+ import { isMissingPartitionError } from "./MissingPartitionError.js";
54
56
  import { jsx as _jsx } from "react/jsx-runtime";
55
57
  import { jsxs as _jsxs } from "react/jsx-runtime";
56
58
  var log = Log.module('IrisGrid');
@@ -297,7 +299,7 @@ export class IrisGrid extends Component {
297
299
  }), {
298
300
  max: 1
299
301
  }));
300
- _defineProperty(this, "getCachedFilter", memoize((customFilters, quickFilters, advancedFilters, partitionFilters, searchFilter) => [...(customFilters !== null && customFilters !== void 0 ? customFilters : []), ...(partitionFilters !== null && partitionFilters !== void 0 ? partitionFilters : []), ...IrisGridUtils.getFiltersFromFilterMap(quickFilters), ...IrisGridUtils.getFiltersFromFilterMap(advancedFilters), ...(searchFilter !== undefined ? [searchFilter] : [])], {
302
+ _defineProperty(this, "getCachedFilter", memoize((customFilters, quickFilters, advancedFilters, searchFilter) => [...(customFilters !== null && customFilters !== void 0 ? customFilters : []), ...IrisGridUtils.getFiltersFromFilterMap(quickFilters), ...IrisGridUtils.getFiltersFromFilterMap(advancedFilters), ...(searchFilter !== undefined ? [searchFilter] : [])], {
301
303
  max: 1
302
304
  }));
303
305
  _defineProperty(this, "getCachedTheme", memoize((contextTheme, theme, isEditable, floatingRowCount) => {
@@ -438,7 +440,8 @@ export class IrisGrid extends Component {
438
440
  }));
439
441
  _defineProperty(this, "handleGotoValueChanged", input => {
440
442
  this.setState({
441
- gotoValue: input
443
+ gotoValue: input,
444
+ gotoValueManuallyChanged: true
442
445
  });
443
446
  this.debouncedSeekRow(input);
444
447
  });
@@ -496,8 +499,6 @@ export class IrisGrid extends Component {
496
499
  this.handleDownloadCanceled = this.handleDownloadCanceled.bind(this);
497
500
  this.handleDownloadCompleted = this.handleDownloadCompleted.bind(this);
498
501
  this.handlePartitionChange = this.handlePartitionChange.bind(this);
499
- this.handlePartitionFetchAll = this.handlePartitionFetchAll.bind(this);
500
- this.handlePartitionDone = this.handlePartitionDone.bind(this);
501
502
  this.handleColumnVisibilityChanged = this.handleColumnVisibilityChanged.bind(this);
502
503
  this.handleColumnVisibilityReset = this.handleColumnVisibilityReset.bind(this);
503
504
  this.handleCrossColumnSearch = this.handleCrossColumnSearch.bind(this);
@@ -566,11 +567,11 @@ export class IrisGrid extends Component {
566
567
  customColumnFormatMap,
567
568
  isFilterBarShown: _isFilterBarShown,
568
569
  isSelectingPartition,
570
+ partitions,
571
+ partitionConfig,
569
572
  model: _model,
570
573
  movedColumns: movedColumnsProp,
571
574
  movedRows: movedRowsProp,
572
- partitions,
573
- partitionColumns,
574
575
  rollupConfig: _rollupConfig,
575
576
  userColumnWidths: _userColumnWidths,
576
577
  userRowHeights,
@@ -614,10 +615,10 @@ export class IrisGrid extends Component {
614
615
  metrics: undefined,
615
616
  keyHandlers,
616
617
  mouseHandlers,
617
- partitions,
618
- partitionColumns,
619
- partitionTable: null,
620
- partitionFilters: [],
618
+ partitionConfig: partitionConfig !== null && partitionConfig !== void 0 ? partitionConfig : partitions && partitions.length ? {
619
+ partitions,
620
+ mode: 'partition'
621
+ } : undefined,
621
622
  // setAdvancedFilter and setQuickFilter mutate the arguments
622
623
  // so we want to always use map copies from the state instead of props
623
624
  quickFilters: _quickFilters ? new Map(_quickFilters) : new Map(),
@@ -683,20 +684,15 @@ export class IrisGrid extends Component {
683
684
  gotoValueSelectedColumnName: (_model$columns$0$name = (_model$columns$ = _model.columns[0]) === null || _model$columns$ === void 0 ? void 0 : _model$columns$.name) !== null && _model$columns$0$name !== void 0 ? _model$columns$0$name : '',
684
685
  gotoValueSelectedFilter: FilterType.eqIgnoreCase,
685
686
  gotoValue: '',
687
+ gotoValueManuallyChanged: false,
686
688
  columnHeaderGroups: columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : _model.initialColumnHeaderGroups
687
689
  };
688
690
  }
689
691
  componentDidMount() {
690
692
  var {
691
- partitionColumns,
692
693
  model
693
694
  } = this.props;
694
- var columns = partitionColumns.length ? partitionColumns : model.columns.filter(c => c.isPartitionColumn);
695
- if (model.isFilterRequired && model.isValuesTableAvailable && columns.length) {
696
- this.loadPartitionsTable(columns);
697
- } else {
698
- this.initState();
699
- }
695
+ this.initState();
700
696
  this.startListening(model);
701
697
  }
702
698
  componentDidUpdate(prevProps, prevState) {
@@ -1237,6 +1233,20 @@ export class IrisGrid extends Component {
1237
1233
  this.updateFormatterSettings(settings);
1238
1234
  }
1239
1235
  initState() {
1236
+ var {
1237
+ model
1238
+ } = this.props;
1239
+ try {
1240
+ if (isPartitionedGridModel(model) && model.isPartitionRequired) {
1241
+ this.loadPartitionsTable(model);
1242
+ } else {
1243
+ this.loadTableState();
1244
+ }
1245
+ } catch (error) {
1246
+ this.handleTableLoadError(error);
1247
+ }
1248
+ }
1249
+ loadTableState() {
1240
1250
  var {
1241
1251
  applyInputFiltersOnInit,
1242
1252
  inputFilters,
@@ -1265,67 +1275,72 @@ export class IrisGrid extends Component {
1265
1275
  });
1266
1276
  this.initFormatter();
1267
1277
  }
1268
- loadPartitionsTable(partitionColumns) {
1278
+ loadPartitionsTable(model) {
1269
1279
  var _this = this;
1270
1280
  return _asyncToGenerator(function* () {
1271
- var {
1272
- model
1273
- } = _this.props;
1274
- _this.setState({
1275
- isSelectingPartition: true
1276
- });
1277
1281
  try {
1278
- var partitionTable = yield _this.pending.add(model.valuesTable(partitionColumns), resolved => resolved.close());
1279
- var columns = partitionTable.columns.slice(0, partitionColumns.length);
1280
- var sorts = columns.map(column => column.sort().desc());
1281
- partitionTable.applySort(sorts);
1282
- partitionTable.setViewport(0, 0, columns);
1283
- var _data = yield _this.pending.add(partitionTable.getViewportData());
1284
- if (_data.rows.length > 0) {
1285
- var row = _data.rows[0];
1286
- var values = columns.map(column => row.get(column));
1287
- _this.updatePartition(values, partitionColumns);
1288
- _this.setState({
1289
- isSelectingPartition: true
1290
- });
1291
- } else {
1292
- log.info('Table does not have any data, just fetching all');
1293
- _this.setState({
1294
- isSelectingPartition: false
1295
- });
1296
- _this.handlePartitionFetchAll();
1297
- }
1282
+ var partitionConfig = yield _this.getInitialPartitionConfig(model);
1298
1283
  _this.setState({
1299
- partitionTable,
1300
- partitionColumns
1301
- }, () => {
1302
- _this.initState();
1303
- });
1284
+ isSelectingPartition: true,
1285
+ partitionConfig
1286
+ }, _this.loadTableState);
1304
1287
  } catch (error) {
1305
- _this.handleTableLoadError(error);
1288
+ if (!PromiseUtils.isCanceled(error)) {
1289
+ _this.handleTableLoadError(error);
1290
+ }
1306
1291
  }
1307
1292
  })();
1308
1293
  }
1309
- updatePartition(partitions, partitionColumns) {
1310
- var partitionFilters = [];
1311
- for (var i = 0; i < partitionColumns.length; i += 1) {
1312
- var partition = partitions[i];
1313
- var partitionColumn = partitionColumns[i];
1314
- if (partition !== null && !(TableUtils.isCharType(partitionColumn.type) && partition === '')) {
1315
- var {
1316
- model: _model2
1317
- } = this.props;
1318
- var partitionText = TableUtils.isCharType(partitionColumn.type) ? _model2.displayString(partition, partitionColumn.type, partitionColumn.name) : partition;
1319
- var partitionFilter = this.tableUtils.makeQuickFilterFromComponent(partitionColumn, partitionText);
1320
- if (partitionFilter !== null) {
1321
- partitionFilters.push(partitionFilter);
1322
- }
1294
+
1295
+ /**
1296
+ * Gets the initial partition config for the currently set model.
1297
+ * Sorts the key table and gets the first key.
1298
+ * If the table is ticking, it will wait for the first tick.
1299
+ */
1300
+ getInitialPartitionConfig(model) {
1301
+ var _this2 = this;
1302
+ return _asyncToGenerator(function* () {
1303
+ var {
1304
+ partitionConfig
1305
+ } = _this2.state;
1306
+ if (partitionConfig !== undefined) {
1307
+ // User already has a partition selected, just use that
1308
+ return partitionConfig;
1323
1309
  }
1324
- }
1325
- this.setState({
1326
- partitions,
1327
- partitionFilters
1328
- });
1310
+ var keyTable = yield _this2.pending.add(model.partitionKeysTable(), resolved => resolved.close());
1311
+ var {
1312
+ dh
1313
+ } = model;
1314
+ var sorts = keyTable.columns.map(column => column.sort().desc());
1315
+ keyTable.applySort(sorts);
1316
+ keyTable.setViewport(0, 0);
1317
+ return new Promise((resolve, reject) => {
1318
+ // We want to wait for the first UPDATED event instead of just getting viewport data here
1319
+ // It's possible that the key table does not have any rows of data yet, so just wait until it does have one
1320
+ keyTable.addEventListener(dh.Table.EVENT_UPDATED, event => {
1321
+ try {
1322
+ var {
1323
+ detail: _data
1324
+ } = event;
1325
+ if (_data.rows.length === 0) {
1326
+ // Table is empty, wait for the next updated event
1327
+ return;
1328
+ }
1329
+ var row = _data.rows[0];
1330
+ var values = keyTable.columns.map(column => row.get(column));
1331
+ var newPartition = {
1332
+ partitions: values,
1333
+ mode: 'partition'
1334
+ };
1335
+ keyTable.close();
1336
+ resolve(newPartition);
1337
+ } catch (e) {
1338
+ keyTable.close();
1339
+ reject(e);
1340
+ }
1341
+ });
1342
+ });
1343
+ })();
1329
1344
  }
1330
1345
  copyCell(columnIndex, rowIndex) {
1331
1346
  var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
@@ -1685,24 +1700,10 @@ export class IrisGrid extends Component {
1685
1700
  log.debug2('handleAnimationEnd');
1686
1701
  this.isAnimating = false;
1687
1702
  }
1688
- handlePartitionChange(partitions) {
1689
- var {
1690
- partitionColumns
1691
- } = this.state;
1692
- if (partitionColumns.length === 0) {
1693
- return;
1694
- }
1695
- this.updatePartition(partitions, partitionColumns);
1696
- }
1697
- handlePartitionFetchAll() {
1703
+ handlePartitionChange(partitionConfig) {
1704
+ this.startLoading('Partitioning...');
1698
1705
  this.setState({
1699
- partitionFilters: [],
1700
- isSelectingPartition: false
1701
- });
1702
- }
1703
- handlePartitionDone() {
1704
- this.setState({
1705
- isSelectingPartition: false
1706
+ partitionConfig
1706
1707
  });
1707
1708
  }
1708
1709
  handleTableLoadError(error) {
@@ -1800,15 +1801,15 @@ export class IrisGrid extends Component {
1800
1801
  } else {
1801
1802
  var columnIndex = 0;
1802
1803
  var {
1803
- model: _model3
1804
+ model: _model2
1804
1805
  } = this.props;
1805
1806
  var {
1806
1807
  columnCount
1807
- } = _model3;
1808
+ } = _model2;
1808
1809
  for (var i = 0; i < columnCount; i += 1) {
1809
1810
  var modelColumn = this.getModelColumn(i);
1810
1811
  if (modelColumn != null) {
1811
- var _column = _model3.columns[modelColumn];
1812
+ var _column = _model2.columns[modelColumn];
1812
1813
  if (_column != null && TableUtils.isTextType(_column.type)) {
1813
1814
  columnIndex = i;
1814
1815
  break;
@@ -1877,7 +1878,8 @@ export class IrisGrid extends Component {
1877
1878
  gotoValue: value,
1878
1879
  gotoValueSelectedColumnName: columnName,
1879
1880
  gotoRowError: '',
1880
- gotoValueError: ''
1881
+ gotoValueError: '',
1882
+ gotoValueManuallyChanged: false
1881
1883
  });
1882
1884
  this.focusRowInGrid(row);
1883
1885
  (_this$gotoRowRef$curr = this.gotoRowRef.current) === null || _this$gotoRowRef$curr === void 0 ? void 0 : _this$gotoRowRef$curr.focus();
@@ -1892,7 +1894,8 @@ export class IrisGrid extends Component {
1892
1894
  gotoRow: '',
1893
1895
  gotoValue: '',
1894
1896
  gotoRowError: '',
1895
- gotoValueError: ''
1897
+ gotoValueError: '',
1898
+ gotoValueManuallyChanged: false
1896
1899
  });
1897
1900
  return;
1898
1901
  }
@@ -1912,64 +1915,65 @@ export class IrisGrid extends Component {
1912
1915
  gotoValue: text,
1913
1916
  gotoValueSelectedColumnName: name,
1914
1917
  gotoRowError: '',
1915
- gotoValueError: ''
1918
+ gotoValueError: '',
1919
+ gotoValueManuallyChanged: false
1916
1920
  });
1917
1921
  }
1918
1922
  commitPending() {
1919
- var _this2 = this;
1923
+ var _this3 = this;
1920
1924
  return _asyncToGenerator(function* () {
1921
1925
  var _document, _document$activeEleme;
1922
1926
  var {
1923
1927
  model
1924
- } = _this2.props;
1928
+ } = _this3.props;
1925
1929
  if (!isEditableGridModel(model) || !model.isEditable) {
1926
1930
  throw new Error('Cannot save, table is not editable');
1927
1931
  }
1928
1932
  var {
1929
1933
  pendingSavePromise
1930
- } = _this2.state;
1934
+ } = _this3.state;
1931
1935
  if (pendingSavePromise != null) {
1932
1936
  throw new Error('Save already in progress');
1933
1937
  }
1934
1938
  var containsGridCellInputField = (_document = document) === null || _document === void 0 ? void 0 : (_document$activeEleme = _document.activeElement) === null || _document$activeEleme === void 0 ? void 0 : _document$activeEleme.classList.contains('grid-cell-input-field');
1935
1939
  if (containsGridCellInputField != null && containsGridCellInputField) {
1936
- var _this2$grid;
1940
+ var _this3$grid;
1937
1941
  if (document.activeElement != null && document.activeElement.classList.contains('error')) {
1938
1942
  throw new ValidationError('Current input is invalid');
1939
1943
  }
1940
1944
 
1941
1945
  // Focus the grid again to commit any pending input changes
1942
- (_this2$grid = _this2.grid) === null || _this2$grid === void 0 ? void 0 : _this2$grid.focus();
1946
+ (_this3$grid = _this3.grid) === null || _this3$grid === void 0 ? void 0 : _this3$grid.focus();
1943
1947
  }
1944
- var newPendingSavePromise = _this2.pending.add(model.commitPending()).then(() => {
1945
- _this2.setState({
1948
+ var newPendingSavePromise = _this3.pending.add(model.commitPending()).then(() => {
1949
+ _this3.setState({
1946
1950
  pendingSaveError: null,
1947
1951
  pendingSavePromise: null
1948
1952
  });
1949
1953
  }).catch(err => {
1950
1954
  if (!PromiseUtils.isCanceled(err)) {
1951
- _this2.setState({
1955
+ _this3.setState({
1952
1956
  pendingSaveError: err,
1953
1957
  pendingSavePromise: null
1954
1958
  });
1955
1959
  }
1956
1960
  });
1957
- _this2.setState({
1961
+ _this3.setState({
1958
1962
  pendingSavePromise: newPendingSavePromise
1959
1963
  });
1960
1964
  return newPendingSavePromise;
1961
1965
  })();
1962
1966
  }
1963
1967
  discardPending() {
1964
- var _this3 = this;
1968
+ var _this4 = this;
1965
1969
  return _asyncToGenerator(function* () {
1966
1970
  var {
1967
1971
  pendingSavePromise
1968
- } = _this3.state;
1972
+ } = _this4.state;
1969
1973
  if (pendingSavePromise != null) {
1970
1974
  throw new Error('Cannot cancel a save in progress');
1971
1975
  }
1972
- _this3.setState({
1976
+ _this4.setState({
1973
1977
  pendingSavePromise: null,
1974
1978
  pendingSaveError: null,
1975
1979
  pendingDataMap: new Map(),
@@ -1993,7 +1997,7 @@ export class IrisGrid extends Component {
1993
1997
  * Select all the data for a given row and notify listener
1994
1998
  */
1995
1999
  selectData(columnIndex, rowIndex) {
1996
- var _this4 = this;
2000
+ var _this5 = this;
1997
2001
  var {
1998
2002
  model
1999
2003
  } = this.props;
@@ -2010,7 +2014,7 @@ export class IrisGrid extends Component {
2010
2014
  } = column;
2011
2015
  var value = model.valueForCell(i, rowIndex);
2012
2016
  var text = model.textForCell(i, rowIndex);
2013
- var visibleIndex = _this4.getVisibleColumn(i);
2017
+ var visibleIndex = _this5.getVisibleColumn(i);
2014
2018
  var isExpandable = isExpandableGridModel(model) && model.isRowExpandable(rowIndex);
2015
2019
  var isGrouped = groupedColumns.find(c => c.name === name) != null;
2016
2020
  dataMap[name] = {
@@ -2075,12 +2079,14 @@ export class IrisGrid extends Component {
2075
2079
  }
2076
2080
  handleGotoRowOpened() {
2077
2081
  this.setState({
2078
- isGotoShown: true
2082
+ isGotoShown: true,
2083
+ gotoValueManuallyChanged: false
2079
2084
  });
2080
2085
  }
2081
2086
  handleGotoRowClosed() {
2082
2087
  this.setState({
2083
- isGotoShown: false
2088
+ isGotoShown: false,
2089
+ gotoValueManuallyChanged: false
2084
2090
  });
2085
2091
  }
2086
2092
  handleAdvancedMenuClosed(columnIndex) {
@@ -2224,10 +2230,23 @@ export class IrisGrid extends Component {
2224
2230
  });
2225
2231
  }
2226
2232
  handleRequestFailed(event) {
2227
- var customEvent = event;
2228
- log.error('request failed:', customEvent.detail);
2233
+ var {
2234
+ detail: error
2235
+ } = event;
2236
+ log.error('request failed:', error);
2229
2237
  this.stopLoading();
2230
- if (this.canRollback()) {
2238
+ var {
2239
+ partitionConfig
2240
+ } = this.state;
2241
+ if (isMissingPartitionError(error) && partitionConfig != null) {
2242
+ // We'll try loading the initial partition again
2243
+ this.startLoading('Reloading partition...', true);
2244
+ this.setState({
2245
+ partitionConfig: undefined
2246
+ }, () => {
2247
+ this.initState();
2248
+ });
2249
+ } else if (this.canRollback()) {
2231
2250
  this.startLoading('Rolling back changes...', true);
2232
2251
  this.rollback();
2233
2252
  } else {
@@ -2235,7 +2254,7 @@ export class IrisGrid extends Component {
2235
2254
  var {
2236
2255
  onError
2237
2256
  } = this.props;
2238
- onError(new Error("Error displaying table: ".concat(customEvent.detail)));
2257
+ onError(new Error("Error displaying table: ".concat(error)));
2239
2258
  }
2240
2259
  }
2241
2260
  handleUpdate() {
@@ -2485,7 +2504,7 @@ export class IrisGrid extends Component {
2485
2504
  this.stopLoading();
2486
2505
  (_this$grid24 = this.grid) === null || _this$grid24 === void 0 ? void 0 : _this$grid24.forceUpdate();
2487
2506
  } else {
2488
- this.initState();
2507
+ this.loadTableState();
2489
2508
  }
2490
2509
  }
2491
2510
  handlePendingCommitClicked() {
@@ -2657,17 +2676,17 @@ export class IrisGrid extends Component {
2657
2676
  }
2658
2677
  seekRow(inputString) {
2659
2678
  var _arguments = arguments,
2660
- _this5 = this;
2679
+ _this6 = this;
2661
2680
  return _asyncToGenerator(function* () {
2662
- var _this5$grid;
2681
+ var _this6$grid;
2663
2682
  var isBackwards = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;
2664
2683
  var {
2665
2684
  gotoValueSelectedColumnName: selectedColumnName,
2666
2685
  gotoValueSelectedFilter
2667
- } = _this5.state;
2686
+ } = _this6.state;
2668
2687
  var {
2669
2688
  model
2670
- } = _this5.props;
2689
+ } = _this6.props;
2671
2690
  var {
2672
2691
  dh
2673
2692
  } = model;
@@ -2681,14 +2700,14 @@ export class IrisGrid extends Component {
2681
2700
  if (selectedColumn === undefined) {
2682
2701
  return;
2683
2702
  }
2684
- var searchFromRow = (_this5$grid = _this5.grid) === null || _this5$grid === void 0 ? void 0 : _this5$grid.state.cursorRow;
2703
+ var searchFromRow = (_this6$grid = _this6.grid) === null || _this6$grid === void 0 ? void 0 : _this6$grid.state.cursorRow;
2685
2704
  if (searchFromRow == null) {
2686
2705
  searchFromRow = 0;
2687
2706
  }
2688
2707
  var isContains = gotoValueSelectedFilter === FilterType.contains || gotoValueSelectedFilter === FilterType.containsIgnoreCase;
2689
2708
  var isIgnoreCase = gotoValueSelectedFilter === FilterType.eqIgnoreCase || gotoValueSelectedFilter === FilterType.containsIgnoreCase;
2690
2709
  try {
2691
- var _this5$grid2;
2710
+ var _this6$grid2;
2692
2711
  var {
2693
2712
  formatter
2694
2713
  } = model;
@@ -2725,15 +2744,15 @@ export class IrisGrid extends Component {
2725
2744
  }
2726
2745
  default:
2727
2746
  {
2728
- rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, _this5.tableUtils.makeValue(selectedColumn.type, inputString, formatter.timeZone), undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);
2747
+ rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, _this6.tableUtils.makeValue(selectedColumn.type, inputString, formatter.timeZone), undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);
2729
2748
  }
2730
2749
  }
2731
- (_this5$grid2 = _this5.grid) === null || _this5$grid2 === void 0 ? void 0 : _this5$grid2.setFocusRow(rowIndex);
2732
- _this5.setState({
2750
+ (_this6$grid2 = _this6.grid) === null || _this6$grid2 === void 0 ? void 0 : _this6$grid2.setFocusRow(rowIndex);
2751
+ _this6.setState({
2733
2752
  gotoValueError: ''
2734
2753
  });
2735
2754
  } catch (e) {
2736
- _this5.setState({
2755
+ _this6.setState({
2737
2756
  gotoValueError: 'invalid input'
2738
2757
  });
2739
2758
  }
@@ -3017,19 +3036,35 @@ export class IrisGrid extends Component {
3017
3036
  model
3018
3037
  } = this.props;
3019
3038
  var cursorRow = (_this$grid29 = this.grid) === null || _this$grid29 === void 0 ? void 0 : _this$grid29.state.cursorRow;
3039
+ var {
3040
+ gotoValueSelectedColumnName: prevColumnName,
3041
+ gotoValueManuallyChanged
3042
+ } = this.state;
3020
3043
  if (cursorRow != null) {
3021
3044
  var _index = model.getColumnIndexByName(columnName);
3022
3045
  var _column2 = IrisGridUtils.getColumnByName(model.columns, columnName);
3046
+ var prevColumn = IrisGridUtils.getColumnByName(model.columns, prevColumnName);
3023
3047
  if (_index == null || _column2 == null) {
3024
3048
  return;
3025
3049
  }
3026
3050
  var _value3 = model.valueForCell(_index, cursorRow);
3027
3051
  var text = IrisGridUtils.convertValueToText(_value3, _column2.type);
3028
- this.setState({
3029
- gotoValueSelectedColumnName: columnName,
3030
- gotoValue: text,
3031
- gotoValueError: ''
3032
- });
3052
+
3053
+ // do NOT update value if user manually changed value AND column type remains the same
3054
+ if (gotoValueManuallyChanged && _column2.type === (prevColumn === null || prevColumn === void 0 ? void 0 : prevColumn.type)) {
3055
+ this.setState({
3056
+ gotoValueSelectedColumnName: columnName,
3057
+ gotoValueError: ''
3058
+ });
3059
+ } else {
3060
+ // do update, and set goToValueManuallyChanged to false because value was automatically changed
3061
+ this.setState({
3062
+ gotoValueSelectedColumnName: columnName,
3063
+ gotoValue: text,
3064
+ gotoValueError: '',
3065
+ gotoValueManuallyChanged: false
3066
+ });
3067
+ }
3033
3068
  }
3034
3069
  this.setState({
3035
3070
  gotoValueSelectedColumnName: columnName,
@@ -3051,7 +3086,7 @@ export class IrisGrid extends Component {
3051
3086
  render() {
3052
3087
  var _rollupConfig$columns3,
3053
3088
  _rollupConfig$columns4,
3054
- _this6 = this,
3089
+ _this7 = this,
3055
3090
  _this$grid31,
3056
3091
  _this$grid31$state$dr,
3057
3092
  _openOptions;
@@ -3091,10 +3126,6 @@ export class IrisGrid extends Component {
3091
3126
  hoverSelectColumn,
3092
3127
  quickFilters,
3093
3128
  advancedFilters,
3094
- partitions,
3095
- partitionFilters,
3096
- partitionTable,
3097
- partitionColumns,
3098
3129
  searchFilter,
3099
3130
  selectDistinctColumns,
3100
3131
  movedColumns,
@@ -3138,13 +3169,14 @@ export class IrisGrid extends Component {
3138
3169
  gotoValueError,
3139
3170
  gotoValueSelectedColumnName,
3140
3171
  gotoValue,
3141
- gotoValueSelectedFilter
3172
+ gotoValueSelectedFilter,
3173
+ partitionConfig
3142
3174
  } = this.state;
3143
3175
  if (!isReady) {
3144
3176
  return null;
3145
3177
  }
3146
3178
  var theme = this.getTheme();
3147
- var filter = this.getCachedFilter(customFilters, quickFilters, advancedFilters, partitionFilters, searchFilter);
3179
+ var filter = this.getCachedFilter(customFilters, quickFilters, advancedFilters, searchFilter);
3148
3180
  var userColumnWidths = metricCalculator.getUserColumnWidths();
3149
3181
  var stateOverride = this.getCachedStateOverride(hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverseType, rollupConfig, isMenuShown);
3150
3182
  var top = metrics ? metrics.top : 0;
@@ -3269,7 +3301,7 @@ export class IrisGrid extends Component {
3269
3301
  var columnIndex = visibleColumns[i];
3270
3302
  var columnX = _allColumnXs.get(columnIndex);
3271
3303
  var columnWidth = _allColumnWidths.get(columnIndex);
3272
- var modelColumn = _this6.getModelColumn(columnIndex);
3304
+ var modelColumn = _this7.getModelColumn(columnIndex);
3273
3305
  if (modelColumn != null) {
3274
3306
  var isFilterable = model.isFilterable(modelColumn);
3275
3307
  if (isFilterable && columnX != null && columnWidth != null && columnWidth > 0) {
@@ -3294,21 +3326,21 @@ export class IrisGrid extends Component {
3294
3326
  'filter-set': isFilterSet
3295
3327
  }),
3296
3328
  onClick: () => {
3297
- _this6.setState({
3329
+ _this7.setState({
3298
3330
  shownAdvancedFilter: columnIndex
3299
3331
  });
3300
3332
  },
3301
3333
  onContextMenu: event => {
3302
- var _this6$grid;
3303
- (_this6$grid = _this6.grid) === null || _this6$grid === void 0 ? void 0 : _this6$grid.handleContextMenu(event);
3334
+ var _this7$grid;
3335
+ (_this7$grid = _this7.grid) === null || _this7$grid === void 0 ? void 0 : _this7$grid.handleContextMenu(event);
3304
3336
  },
3305
3337
  onMouseEnter: () => {
3306
- _this6.setState({
3338
+ _this7.setState({
3307
3339
  hoverAdvancedFilter: columnIndex
3308
3340
  });
3309
3341
  },
3310
3342
  onMouseLeave: () => {
3311
- _this6.setState({
3343
+ _this7.setState({
3312
3344
  hoverAdvancedFilter: null
3313
3345
  });
3314
3346
  },
@@ -3361,7 +3393,7 @@ export class IrisGrid extends Component {
3361
3393
  width: columnWidth,
3362
3394
  height: columnHeaderHeight
3363
3395
  };
3364
- var _modelColumn = _this6.getModelColumn(columnIndex);
3396
+ var _modelColumn = _this7.getModelColumn(columnIndex);
3365
3397
  if (_modelColumn != null) {
3366
3398
  var _column3 = model.columns[_modelColumn];
3367
3399
  if (_column3 == null) {
@@ -3381,9 +3413,9 @@ export class IrisGrid extends Component {
3381
3413
  style: _style2,
3382
3414
  children: /*#__PURE__*/_jsx(Popper, {
3383
3415
  className: "advanced-filter-menu-popper",
3384
- onEntered: _this6.getAdvancedMenuOpenedHandler(columnIndex),
3416
+ onEntered: _this7.getAdvancedMenuOpenedHandler(columnIndex),
3385
3417
  onExited: () => {
3386
- _this6.handleAdvancedMenuClosed(columnIndex);
3418
+ _this7.handleAdvancedMenuClosed(columnIndex);
3387
3419
  },
3388
3420
  isShown: shownAdvancedFilter === columnIndex,
3389
3421
  interactive: true,
@@ -3391,7 +3423,7 @@ export class IrisGrid extends Component {
3391
3423
  options: {
3392
3424
  positionFixed: true
3393
3425
  },
3394
- children: _this6.getCachedAdvancedFilterMenuActions(model, _column3, advancedFilterOptions, sortDirection, formatter)
3426
+ children: _this7.getCachedAdvancedFilterMenuActions(model, _column3, advancedFilterOptions, sortDirection, formatter)
3395
3427
  })
3396
3428
  }, columnIndex);
3397
3429
  advancedFilterMenus.push(element);
@@ -3518,15 +3550,10 @@ export class IrisGrid extends Component {
3518
3550
  unmountOnExit: true,
3519
3551
  children: /*#__PURE__*/_jsx("div", {
3520
3552
  className: "iris-grid-partition-selector-wrapper iris-grid-bar iris-grid-bar-primary",
3521
- children: partitionTable && partitionColumns.length && partitions.length && /*#__PURE__*/_jsx(IrisGridPartitionSelector, {
3522
- dh: model.dh,
3523
- table: partitionTable,
3524
- getFormattedString: (value, type, stringName) => model.displayString(value, type, stringName),
3525
- columns: partitionColumns,
3526
- partitions: partitions,
3527
- onChange: this.handlePartitionChange,
3528
- onFetchAll: this.handlePartitionFetchAll,
3529
- onDone: this.handlePartitionDone
3553
+ children: isPartitionedGridModel(model) && model.isPartitionRequired && partitionConfig && /*#__PURE__*/_jsx(IrisGridPartitionSelector, {
3554
+ model: model,
3555
+ partitionConfig: partitionConfig,
3556
+ onChange: this.handlePartitionChange
3530
3557
  })
3531
3558
  })
3532
3559
  }), /*#__PURE__*/_jsx(CSSTransition, {
@@ -3598,7 +3625,8 @@ export class IrisGrid extends Component {
3598
3625
  pendingRowCount: pendingRowCount,
3599
3626
  pendingDataMap: pendingDataMap,
3600
3627
  frozenColumns: frozenColumns,
3601
- columnHeaderGroups: columnHeaderGroups
3628
+ columnHeaderGroups: columnHeaderGroups,
3629
+ partitionConfig: partitionConfig
3602
3630
  }), !isMenuShown && /*#__PURE__*/_jsx("div", {
3603
3631
  className: "grid-settings-button",
3604
3632
  children: /*#__PURE__*/_jsx(Button, {
@@ -3727,8 +3755,8 @@ _defineProperty(IrisGrid, "defaultProps", {
3727
3755
  onError: () => undefined,
3728
3756
  onStateChange: () => undefined,
3729
3757
  onAdvancedSettingsChange: () => undefined,
3730
- partitions: [],
3731
- partitionColumns: [],
3758
+ partitions: undefined,
3759
+ partitionConfig: undefined,
3732
3760
  quickFilters: EMPTY_MAP,
3733
3761
  selectDistinctColumns: EMPTY_ARRAY,
3734
3762
  sorts: EMPTY_ARRAY,