@deephaven/code-studio 1.10.0 → 1.10.2-lerna-v9.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 (48) hide show
  1. package/build/assets/{AppRoot-DBa61MN-.js → AppRoot-Dsp0-nx9.js} +6 -6
  2. package/build/assets/{AppRoot-DBa61MN-.js.map → AppRoot-Dsp0-nx9.js.map} +1 -1
  3. package/build/assets/{Chart-BIf07kH8.js → Chart-P_gTGGZ1.js} +2 -2
  4. package/build/assets/{Chart-BIf07kH8.js.map → Chart-P_gTGGZ1.js.map} +1 -1
  5. package/build/assets/{ControlType-C5GElJ-a.js → ControlType-lgZLQmfY.js} +5 -5
  6. package/build/assets/ControlType-lgZLQmfY.js.map +1 -0
  7. package/build/assets/{FormatterUtils-Cq3W0Brt.js → FormatterUtils-C9ixv8yB.js} +2 -2
  8. package/build/assets/{FormatterUtils-Cq3W0Brt.js.map → FormatterUtils-C9ixv8yB.js.map} +1 -1
  9. package/build/assets/{Grid-jgl_1Y5F.js → Grid-DQPrZJGB.js} +2 -2
  10. package/build/assets/{Grid-jgl_1Y5F.js.map → Grid-DQPrZJGB.js.map} +1 -1
  11. package/build/assets/{GridTokenMouseHandler-B-wL5XnG.js → GridTokenMouseHandler-X2JErABm.js} +2 -2
  12. package/build/assets/{GridTokenMouseHandler-B-wL5XnG.js.map → GridTokenMouseHandler-X2JErABm.js.map} +1 -1
  13. package/build/assets/{IrisGrid-Bd3W_Yin.js → IrisGrid-m82zJTmT.js} +3 -3
  14. package/build/assets/IrisGrid-m82zJTmT.js.map +1 -0
  15. package/build/assets/{IrisGridModel-BfukmHJ3.js → IrisGridModel-BWX_u8pv.js} +3 -3
  16. package/build/assets/{IrisGridModel-BfukmHJ3.js.map → IrisGridModel-BWX_u8pv.js.map} +1 -1
  17. package/build/assets/{IrisGridShortcuts-3KDa3fD6.js → IrisGridShortcuts-QN2zgZUQ.js} +2 -2
  18. package/build/assets/{IrisGridShortcuts-3KDa3fD6.js.map → IrisGridShortcuts-QN2zgZUQ.js.map} +1 -1
  19. package/build/assets/{IrisGridThemeProvider-5dF-t9Qr.js → IrisGridThemeProvider-DtrPDGfJ.js} +2 -2
  20. package/build/assets/{IrisGridThemeProvider-5dF-t9Qr.js.map → IrisGridThemeProvider-DtrPDGfJ.js.map} +1 -1
  21. package/build/assets/{LocalWorkspaceStorage-DcQ5Vw5u.js → LocalWorkspaceStorage-C6dxwi4z.js} +2 -2
  22. package/build/assets/{LocalWorkspaceStorage-DcQ5Vw5u.js.map → LocalWorkspaceStorage-C6dxwi4z.js.map} +1 -1
  23. package/build/assets/{MarkdownEditor-SRpkV0O_.js → MarkdownEditor-B4WFJDBT.js} +2 -2
  24. package/build/assets/{MarkdownEditor-SRpkV0O_.js.map → MarkdownEditor-B4WFJDBT.js.map} +1 -1
  25. package/build/assets/{MarkdownNotebook-CNPTouZ9.js → MarkdownNotebook-Bw-fDcJ8.js} +2 -2
  26. package/build/assets/{MarkdownNotebook-CNPTouZ9.js.map → MarkdownNotebook-Bw-fDcJ8.js.map} +1 -1
  27. package/build/assets/MissingPartitionError-Cw7iLwy0.js +3 -0
  28. package/build/assets/MissingPartitionError-Cw7iLwy0.js.map +1 -0
  29. package/build/assets/{MockChartModel-Cq2AEbSK.js → MockChartModel-C5m_XRVw.js} +2 -2
  30. package/build/assets/{MockChartModel-Cq2AEbSK.js.map → MockChartModel-C5m_XRVw.js.map} +1 -1
  31. package/build/assets/{StyleGuideRoot-DK32pVvK.js → StyleGuideRoot-DGm-hysw.js} +2 -2
  32. package/build/assets/{StyleGuideRoot-DK32pVvK.js.map → StyleGuideRoot-DGm-hysw.js.map} +1 -1
  33. package/build/assets/index-BvYD9pFd.css +1 -0
  34. package/build/assets/index-CqIl8EDR.js +2 -0
  35. package/build/assets/index-CqIl8EDR.js.map +1 -0
  36. package/build/assets/{index-xLR6ePvQ.js → index-DmVB6hX1.js} +3 -3
  37. package/build/assets/{index-xLR6ePvQ.js.map → index-DmVB6hX1.js.map} +1 -1
  38. package/build/assets/{index-6jcMzeMm.js → index-LXmN419B.js} +4 -4
  39. package/build/assets/{index-6jcMzeMm.js.map → index-LXmN419B.js.map} +1 -1
  40. package/build/index.html +2 -2
  41. package/package.json +31 -31
  42. package/build/assets/ControlType-C5GElJ-a.js.map +0 -1
  43. package/build/assets/IrisGrid-Bd3W_Yin.js.map +0 -1
  44. package/build/assets/MissingPartitionError-DfK2fIZt.js +0 -3
  45. package/build/assets/MissingPartitionError-DfK2fIZt.js.map +0 -1
  46. package/build/assets/index-8MZ-NhX8.css +0 -1
  47. package/build/assets/index-BkRmr-gq.js +0 -2
  48. package/build/assets/index-BkRmr-gq.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MissingPartitionError-Cw7iLwy0.js","sources":["../../../utils/dist/isNotNullOrUndefined.js","../../../filters/dist/Utils.js","../../../iris-grid/dist/sidebar/AdvancedSettingsType.js","../../../iris-grid/dist/sidebar/AdvancedSettings.js","../../../iris-grid/dist/sidebar/aggregations/AggregationOperation.js","../../../iris-grid/dist/sidebar/aggregations/AggregationUtils.js","../../../iris-grid/dist/ColumnHeaderGroup.js","../../../iris-grid/dist/PartitionedGridModel.js","../../../iris-grid/dist/IrisGridUtils.js","../../../iris-grid/dist/MissingKeyError.js","../../../iris-grid/dist/IrisGridTableModelTemplate.js","../../../iris-grid/dist/IrisGridTreeTableModel.js","../../../iris-grid/dist/MissingPartitionError.js"],"sourcesContent":["/**\n * Typeguard for identifying a value that is not null or undefined.\n * @param value Value to check\n */\nexport function isNotNullOrUndefined(value) {\n return value != null;\n}\nexport default isNotNullOrUndefined;\n//# sourceMappingURL=isNotNullOrUndefined.js.map","import { Type } from \"./Type.js\";\nexport function getLabelForTextFilter(filterType) {\n switch (filterType) {\n case Type.eq:\n return 'is exactly';\n case Type.eqIgnoreCase:\n return 'is exactly (ignore case)';\n case Type.notEq:\n return 'is not exactly';\n case Type.notEqIgnoreCase:\n return 'is not exactly (ignore case)';\n case Type.contains:\n return 'contains';\n case Type.notContains:\n return 'does not contain';\n case Type.startsWith:\n return 'starts with';\n case Type.endsWith:\n return 'ends with';\n default:\n throw new Error(\"Unrecognized text filter type \".concat(filterType));\n }\n}\nexport function getLabelForNumberFilter(filterType) {\n switch (filterType) {\n case Type.eq:\n return 'is equal to';\n case Type.notEq:\n return 'is not equal to';\n case Type.greaterThan:\n return 'greater than';\n case Type.greaterThanOrEqualTo:\n return 'greater than or equal to';\n case Type.lessThan:\n return 'less than';\n case Type.lessThanOrEqualTo:\n return 'less than or equal to';\n default:\n throw new Error(\"Unrecognized number filter type \".concat(filterType));\n }\n}\nexport function getLabelForDateFilter(filterType) {\n switch (filterType) {\n case Type.eq:\n return 'date is';\n case Type.notEq:\n return 'date is not';\n case Type.notEqIgnoreCase:\n case Type.greaterThan:\n return 'date is after';\n case Type.greaterThanOrEqualTo:\n return 'date is after or equal';\n case Type.lessThan:\n return 'date is before';\n case Type.lessThanOrEqualTo:\n return 'date is before or equal';\n default:\n throw new Error(\"Unrecognized date filter type \".concat(filterType));\n }\n}\nexport function getLabelForBooleanFilter(filterType) {\n switch (filterType) {\n case Type.isTrue:\n return 'Is True';\n case Type.isFalse:\n return 'Is False';\n case Type.isNull:\n return 'Is Null';\n default:\n throw new Error(\"Unrecognized boolean filter type \".concat(filterType));\n }\n}\n//# sourceMappingURL=Utils.js.map","var AdvancedSettingsType = /*#__PURE__*/function (AdvancedSettingsType) {\n AdvancedSettingsType[\"FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS\"] = \"filter-control-change-clears-all-filters\";\n AdvancedSettingsType[\"LINK_CHANGE_CLEARS_ALL_FILTERS\"] = \"link-change-clears-all-filters\";\n return AdvancedSettingsType;\n}(AdvancedSettingsType || {});\nexport default AdvancedSettingsType;\n//# sourceMappingURL=AdvancedSettingsType.js.map","import AdvancedSettingsType from \"./AdvancedSettingsType.js\";\nvar DEFAULTS = Object.freeze([[AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS, false], [AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS, false]]);\nexport default {\n DEFAULTS\n};\n//# sourceMappingURL=AdvancedSettings.js.map","var AggregationOperation = /*#__PURE__*/function (AggregationOperation) {\n AggregationOperation[\"COUNT\"] = \"Count\";\n AggregationOperation[\"MIN\"] = \"Min\";\n AggregationOperation[\"MAX\"] = \"Max\";\n AggregationOperation[\"SUM\"] = \"Sum\";\n AggregationOperation[\"ABS_SUM\"] = \"AbsSum\";\n AggregationOperation[\"VAR\"] = \"Var\";\n AggregationOperation[\"AVG\"] = \"Avg\";\n AggregationOperation[\"MEDIAN\"] = \"Median\";\n AggregationOperation[\"STD\"] = \"Std\";\n AggregationOperation[\"FIRST\"] = \"First\";\n AggregationOperation[\"LAST\"] = \"Last\";\n AggregationOperation[\"SKIP\"] = \"Skip\";\n AggregationOperation[\"COUNT_DISTINCT\"] = \"CountDistinct\";\n AggregationOperation[\"DISTINCT\"] = \"Distinct\";\n AggregationOperation[\"UNIQUE\"] = \"Unique\";\n return AggregationOperation;\n}(AggregationOperation || {});\nexport default AggregationOperation;\n//# sourceMappingURL=AggregationOperation.js.map","import { TableUtils } from '@deephaven/jsapi-utils';\nimport AggregationOperation from \"./AggregationOperation.js\";\nexport var SELECTABLE_OPTIONS = [AggregationOperation.SUM, AggregationOperation.ABS_SUM, AggregationOperation.MIN, AggregationOperation.MAX, AggregationOperation.VAR, AggregationOperation.AVG, AggregationOperation.MEDIAN, AggregationOperation.STD, AggregationOperation.FIRST, AggregationOperation.LAST, AggregationOperation.COUNT_DISTINCT, AggregationOperation.DISTINCT, AggregationOperation.COUNT, AggregationOperation.UNIQUE];\n\n/**\n * Check if an operation requires a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation applies to the whole table, false if applies to columns\n */\nexport var isRollupOperation = type => {\n switch (type) {\n // currently no rollup only operations, but there has been in the past\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is not supported for a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation is not supported for a rollup/table grouping\n */\nexport var isRollupProhibited = type => {\n switch (type) {\n case AggregationOperation.MEDIAN:\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is valid against the given column type\n * @param operationType The operation to check\n * @param columnType The column type to check against\n */\nexport var isValidOperation = (operationType, columnType) => {\n switch (operationType) {\n case AggregationOperation.COUNT:\n case AggregationOperation.FIRST:\n case AggregationOperation.LAST:\n case AggregationOperation.COUNT_DISTINCT:\n case AggregationOperation.DISTINCT:\n case AggregationOperation.UNIQUE:\n return true;\n case AggregationOperation.MEDIAN:\n case AggregationOperation.MIN:\n case AggregationOperation.MAX:\n return TableUtils.isNumberType(columnType) || TableUtils.isDateType(columnType) || TableUtils.isTextType(columnType);\n case AggregationOperation.SUM:\n case AggregationOperation.ABS_SUM:\n case AggregationOperation.VAR:\n case AggregationOperation.AVG:\n case AggregationOperation.STD:\n return TableUtils.isNumberType(columnType);\n case AggregationOperation.SKIP:\n return false;\n // No default case - if AggregationOperation is added, we'll get a compile time error\n }\n};\nexport var filterValidColumns = (columns, operationType) => columns.filter(c => c.isProxy !== true && isValidOperation(operationType, c.type));\nexport var getOperationColumnNames = (columns, operationType, selected, invert) => filterValidColumns(columns, operationType).map(_ref => {\n var {\n name\n } = _ref;\n return name;\n}).filter(name => selected.includes(name) ? !invert : invert);\nexport default {\n isValidOperation,\n isRollupOperation,\n isRollupProhibited,\n filterValidColumns,\n getOperationColumnNames\n};\n//# sourceMappingURL=AggregationUtils.js.map","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; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { GridUtils } from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport Log from '@deephaven/log';\nvar log = Log.module('ColumnHeaderGroup');\nexport function isColumnHeaderGroup(x) {\n return x instanceof ColumnHeaderGroup;\n}\nexport default class ColumnHeaderGroup {\n constructor(_ref) {\n var {\n name,\n children,\n color,\n depth,\n childIndexes,\n parent\n } = _ref;\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"children\", void 0);\n _defineProperty(this, \"depth\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"childIndexes\", void 0);\n _defineProperty(this, \"getVisibleRange\", memoizeOne(movedItems => {\n var flattenedIndexes = this.childIndexes.flat();\n var visibleIndexes = GridUtils.getVisibleIndexes(flattenedIndexes, movedItems);\n var start = Math.min(...visibleIndexes);\n var end = Math.max(...visibleIndexes);\n if (end - start !== flattenedIndexes.length - 1) {\n log.warn(\"Column header group \".concat(this.name, \" is not contiguous\"));\n }\n return [start, end];\n }));\n this.name = name;\n this.children = children;\n this.color = color !== null && color !== void 0 ? color : undefined;\n this.depth = depth;\n this.childIndexes = childIndexes;\n this.parent = parent;\n }\n setParent(parent) {\n this.parent = parent;\n }\n addChildren(children) {\n var newChildren = new Set(this.children.concat(children));\n this.children = [...newChildren];\n }\n removeChildren(children) {\n var newChildren = new Set(this.children);\n children.forEach(name => newChildren.delete(name));\n this.children = [...newChildren];\n }\n get isNew() {\n return this.name.startsWith(ColumnHeaderGroup.NEW_GROUP_PREFIX);\n }\n\n /**\n * Checks if a group is valid.\n * An invalid group needs to be re-parsed with the corresponding model.\n * @returns true if the group is valid (all children have indexes)\n */\n isValid() {\n return this.children.length === this.childIndexes.length;\n }\n}\n_defineProperty(ColumnHeaderGroup, \"NEW_GROUP_PREFIX\", ':newGroup');\n//# sourceMappingURL=ColumnHeaderGroup.js.map","export function isPartitionedGridModelProvider(model) {\n return (model === null || model === void 0 ? void 0 : model.isPartitionRequired) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionColumns) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionKeysTable) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionMergedTable) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionTable) !== undefined;\n}\nexport function isPartitionedGridModel(model) {\n return isPartitionedGridModelProvider(model) && model.partitionConfig !== undefined;\n}\n\n/**\n * A grid model that provides key tables and partitions, cannot accept a `PartitionConfig` being set\n */\n\n/**\n * A grid model that can be partitioned on a column\n */\n//# sourceMappingURL=PartitionedGridModel.js.map","var _excluded = [\"selectedValues\"],\n _excluded2 = [\"selectedValues\"];\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nfunction 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; }\nfunction _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; }\nfunction _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; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { GridUtils } from '@deephaven/grid';\nimport { DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { assertNotNull, bindAllMethods, EMPTY_ARRAY, EMPTY_MAP, isNotNullOrUndefined } from '@deephaven/utils';\nimport AggregationUtils from \"./sidebar/aggregations/AggregationUtils.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport AdvancedSettings from \"./sidebar/AdvancedSettings.js\";\nimport ColumnHeaderGroup from \"./ColumnHeaderGroup.js\";\nimport { isPartitionedGridModelProvider } from \"./PartitionedGridModel.js\";\nvar log = Log.module('IrisGridUtils');\n\n/** @deprecated Use `DehydratedSort` instead */\n\nexport function isPanelStateV1(state) {\n return state.partition !== undefined;\n}\nexport function isPanelStateV2(state) {\n return Array.isArray(state.partitions);\n}\n\n/**\n * Checks if an index is valid for the given array\n * @param x The index to check\n * @param array The array\n * @returns True if the index if valid within the array\n */\nfunction isValidIndex(x, array) {\n return x >= 0 && x < array.length;\n}\nfunction isDateWrapper(value) {\n return (value === null || value === void 0 ? void 0 : value.asDate) != null;\n}\nclass IrisGridUtils {\n /**\n * Exports the state from Grid component to a JSON stringifiable object.\n * See IrisGridCacheUtil for memoization and comparing dehydrated states.\n * @param model The table model to export the Grid state for\n * @param gridState The state of the Grid to export\n * @returns An object that can be stringified and imported with {{@link hydrateGridState}}\n */\n static dehydrateGridState(model, gridState) {\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = gridState;\n var {\n columns\n } = model;\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns].filter(_ref => {\n var {\n to,\n from\n } = _ref;\n return isValidIndex(to, columns) && (typeof from === 'number' && isValidIndex(from, columns) || Array.isArray(from) && isValidIndex(from[0], columns) && isValidIndex(from[1], columns));\n }).map(_ref2 => {\n var {\n to,\n from\n } = _ref2;\n return {\n to: columns[to].name,\n from: Array.isArray(from) ? [columns[from[0]].name, columns[from[1]].name] : columns[from].name\n };\n }),\n movedRows: [...movedRows]\n };\n }\n\n /**\n * Import a state for Grid that was exported with {{@link dehydrateGridState}}\n * @param model The table model to import the state for\n * @param gridState The state of the panel that was saved\n * @returns The gridState props to set on the Grid\n */\n static hydrateGridState(model, gridState) {\n var customColumns = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = gridState;\n var {\n columns\n } = model;\n var customColumnNames = IrisGridUtils.parseCustomColumnNames(customColumns);\n var columnNames = columns.map(_ref3 => {\n var {\n name\n } = _ref3;\n return name;\n }).concat(customColumnNames);\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns].map(_ref4 => {\n var {\n to,\n from\n } = _ref4;\n var getIndex = x => typeof x === 'string' ? columnNames.findIndex(name => name === x) : x;\n return {\n to: getIndex(to),\n from: Array.isArray(from) ? [getIndex(from[0]), getIndex(from[1])] : getIndex(from)\n };\n }).filter(_ref5 => {\n var {\n to,\n from\n } = _ref5;\n return isValidIndex(to, columnNames) && (typeof from === 'number' && isValidIndex(from, columnNames) || Array.isArray(from) && isValidIndex(from[0], columnNames) && isValidIndex(from[1], columnNames));\n }),\n movedRows: [...movedRows]\n };\n }\n\n /**\n * Export the IrisGridPanel state.\n * @param model The table model the state is being dehydrated with\n * @param irisGridPanelState The current IrisGridPanel state\n * @returns The dehydrated IrisGridPanel state\n */\n static dehydrateIrisGridPanelState(model, irisGridPanelState) {\n var {\n isSelectingPartition,\n partitions,\n advancedSettings\n } = irisGridPanelState;\n\n // Return value will be serialized, should not contain undefined\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: [...advancedSettings]\n };\n }\n\n /**\n * Import the saved IrisGridPanel state.\n * @param model The model the state is being hydrated with\n * @param irisGridPanelState Exported IrisGridPanel state\n * @returns The state to apply to the IrisGridPanel\n */\n static hydrateIrisGridPanelState(model, irisGridPanelState) {\n var {\n isSelectingPartition,\n advancedSettings\n } = irisGridPanelState;\n var partitions = [];\n if (isPanelStateV2(irisGridPanelState)) {\n partitions = irisGridPanelState.partitions;\n } else if (irisGridPanelState.partition != null) {\n partitions = [irisGridPanelState.partition];\n }\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: new Map([...AdvancedSettings.DEFAULTS, ...advancedSettings])\n };\n }\n\n /**\n * Export the quick filters to JSON striginfiable object\n * @param quickFilters The quick filters to dehydrate\n * @returns The dehydrated quick filters\n */\n static dehydrateQuickFilters(quickFilters) {\n return [...quickFilters].map(_ref6 => {\n var [columnIndex, quickFilter] = _ref6;\n var {\n text\n } = quickFilter;\n return [columnIndex, {\n text\n }];\n });\n }\n static dehydrateLong(value) {\n return value != null ? \"\".concat(value) : null;\n }\n\n /**\n * Export the sorts from the provided table sorts to JSON stringifiable object\n * @param sorts The table sorts\n * @returns The dehydrated sorts\n */\n static dehydrateSort(sorts) {\n return sorts.map(sort => {\n var {\n column,\n isAbs,\n direction\n } = sort;\n return {\n column: column.name,\n isAbs,\n direction\n };\n });\n }\n\n /**\n * Pulls just the table settings from the panel state, eg. filters/sorts\n * @param panelState The dehydrated panel state\n * @returns A dehydrated table settings object, { partition, partitionColumn, advancedFilters, quickFilters, sorts }\n */\n static extractTableSettings(panelState) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var {\n irisGridPanelState,\n irisGridState\n } = panelState;\n var partitions = isPanelStateV2(irisGridPanelState) ? irisGridPanelState.partitions : [irisGridPanelState.partition];\n var {\n advancedFilters,\n quickFilters,\n sorts\n } = irisGridState;\n return {\n advancedFilters,\n inputFilters,\n partitions,\n quickFilters,\n sorts\n };\n }\n static getInputFiltersForColumns(columns) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return inputFilters.filter(_ref7 => {\n var {\n name,\n type\n } = _ref7;\n return columns.find(_ref8 => {\n var {\n name: columnName,\n type: columnType\n } = _ref8;\n return columnName === name && columnType === type;\n });\n });\n }\n static getFiltersFromFilterMap(filterMap) {\n var filters = [];\n var keys = Array.from(filterMap.keys());\n for (var i = 0; i < keys.length; i += 1) {\n var key = keys[i];\n var item = filterMap.get(key);\n if ((item === null || item === void 0 ? void 0 : item.filter) != null) {\n filters.push(item.filter);\n }\n }\n return filters;\n }\n\n /**\n * Get array of hidden column indexes\n * @param userColumnWidths Map of user column widths\n * @returns Array of hidden column indexes\n */\n static getHiddenColumns(userColumnWidths) {\n return [...userColumnWidths.entries()].filter(_ref9 => {\n var [, value] = _ref9;\n return value === 0;\n }).map(_ref0 => {\n var [key] = _ref0;\n return key;\n });\n }\n static parseCustomColumnNames(customColumns) {\n return customColumns.map(customColumn => customColumn.split('=')[0]);\n }\n static getRemovedCustomColumnNames(oldCustomColumns, customColumns) {\n var oldCustomColumnsNames = IrisGridUtils.parseCustomColumnNames(oldCustomColumns);\n var customColumnNames = IrisGridUtils.parseCustomColumnNames(customColumns);\n return oldCustomColumnsNames.filter(oldCustomColumnName => !customColumnNames.includes(oldCustomColumnName));\n }\n static removeSortsInColumns(sorts, columnNames) {\n return sorts.filter(sort => !columnNames.includes(sort.column.name));\n }\n static removeFiltersInColumns(columns, filters, removedColumnNames) {\n var columnNames = columns.map(_ref1 => {\n var {\n name\n } = _ref1;\n return name;\n });\n var newFilter = new Map(filters);\n removedColumnNames.forEach(columnName => newFilter.delete(columnNames.indexOf(columnName)));\n return newFilter;\n }\n static removeColumnFromMovedColumns(columns, movedColumns, removedColumnNames) {\n var columnNames = columns.map(_ref10 => {\n var {\n name\n } = _ref10;\n return name;\n });\n var newMoves = [...movedColumns];\n var _loop = function _loop() {\n var removedColumnName = removedColumnNames[i];\n var removedColumnIndex = columnNames.findIndex(name => name === removedColumnName);\n var moves = [];\n for (var j = 0; j < newMoves.length; j += 1) {\n var move = newMoves[j];\n var newMove = _objectSpread({}, move);\n var [fromStart, fromEnd] = Array.isArray(move.from) ? move.from : [move.from, move.from];\n if (removedColumnIndex <= move.to) {\n newMove.to -= 1;\n }\n\n // If equal to fromStart, the new fromStart would stay the same\n // It's just the next element in the range which will have the same index after deletion\n if (removedColumnIndex < fromStart) {\n fromStart -= 1;\n }\n if (removedColumnIndex <= fromEnd) {\n fromEnd -= 1;\n }\n if (fromStart <= fromEnd && fromStart !== newMove.to) {\n if (fromStart === fromEnd) {\n moves.push(_objectSpread(_objectSpread({}, newMove), {}, {\n from: fromStart\n }));\n } else {\n moves.push(_objectSpread(_objectSpread({}, newMove), {}, {\n from: [fromStart, fromEnd]\n }));\n }\n }\n\n // get the next index of the removed column after the move is applied\n // eslint-disable-next-line prefer-destructuring\n removedColumnIndex = GridUtils.applyItemMoves(removedColumnIndex, removedColumnIndex, [move])[0][0];\n }\n newMoves = moves;\n columnNames.splice(columnNames.findIndex(name => name === removedColumnName), 1);\n };\n for (var i = 0; i < removedColumnNames.length; i += 1) {\n _loop();\n }\n return newMoves;\n }\n static removeColumnsFromSelectDistinctColumns(selectDistinctColumns, removedColumnNames) {\n return selectDistinctColumns.filter(columnName => !removedColumnNames.includes(columnName));\n }\n static getVisibleColumnsInRange(tableColumns, left, right, movedColumns, hiddenColumns) {\n var columns = [];\n for (var i = left; i <= right; i += 1) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.push(tableColumns[modelIndex]);\n }\n }\n return columns;\n }\n static getPrevVisibleColumns(tableColumns, startIndex, count, movedColumns, hiddenColumns) {\n var columns = [];\n var i = startIndex;\n while (i >= 0 && columns.length < count) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.unshift(tableColumns[modelIndex]);\n }\n i -= 1;\n }\n return columns;\n }\n static getNextVisibleColumns(tableColumns, startIndex, count, movedColumns, hiddenColumns) {\n var columns = [];\n var i = startIndex;\n while (i < tableColumns.length && columns.length < count) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.push(tableColumns[modelIndex]);\n }\n i += 1;\n }\n return columns;\n }\n static getColumnsToFetch(tableColumns, viewportColumns, alwaysFetchColumnNames) {\n var columnsToFetch = [...viewportColumns];\n alwaysFetchColumnNames.forEach(columnName => {\n var column = tableColumns.find(_ref11 => {\n var {\n name\n } = _ref11;\n return name === columnName;\n });\n if (column != null && !viewportColumns.includes(column)) {\n columnsToFetch.push(column);\n }\n });\n return columnsToFetch;\n }\n static getModelViewportColumns(columns, left, right, movedColumns) {\n var hiddenColumns = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n var alwaysFetchColumnNames = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n var bufferPages = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n if (left == null || right == null) {\n return undefined;\n }\n var columnsCenter = IrisGridUtils.getVisibleColumnsInRange(columns, left, right, movedColumns, hiddenColumns);\n var bufferWidth = columnsCenter.length * bufferPages;\n var columnsLeft = IrisGridUtils.getPrevVisibleColumns(columns, left - 1, bufferWidth, movedColumns, hiddenColumns);\n var columnsRight = IrisGridUtils.getNextVisibleColumns(columns, right + 1, bufferWidth, movedColumns, hiddenColumns);\n var bufferedColumns = [...columnsLeft, ...columnsCenter, ...columnsRight];\n return IrisGridUtils.getColumnsToFetch(columns, bufferedColumns, alwaysFetchColumnNames);\n }\n\n /**\n * Validate whether the ranges passed in are valid to take a snapshot from.\n * Multiple selections are valid if all of the selected rows have the same columns selected.\n *\n * @param ranges The ranges to validate\n * @returns True if the ranges are valid, false otherwise\n */\n static isValidSnapshotRanges(ranges) {\n if (ranges == null || ranges.length === 0) {\n return false;\n }\n\n // To verify all the rows selected have the same set of columns selected, build a map with string representations\n // of each range.\n var rangeMap = new Map();\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n var rowMapIndex = \"\".concat(range.startRow, \":\").concat(range.endRow);\n var columnMapIndex = \"\".concat(range.startColumn, \":\").concat(range.endColumn);\n if (!rangeMap.has(rowMapIndex)) {\n rangeMap.set(rowMapIndex, []);\n }\n rangeMap.get(rowMapIndex).push(columnMapIndex);\n }\n var keys = [...rangeMap.keys()];\n var matchColumnRanges = rangeMap.get(keys[0]).sort().join(',');\n for (var _i = 1; _i < keys.length; _i += 1) {\n if (rangeMap.get(keys[_i]).sort().join(',') !== matchColumnRanges) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Check if the provided value is a valid table index\n * @param value A value to check if it's a valid table index\n */\n static isValidIndex(value) {\n if (!Number.isInteger(value)) {\n return false;\n }\n if (!(typeof value === 'number')) {\n return false;\n }\n return value >= 0;\n }\n\n /**\n * Returns all columns used in any of the ranges provided\n * @param ranges The model ranges to get columns for\n * @param allColumns All the columns to pull from\n * @returns The columns selected in the range\n */\n static columnsFromRanges(ranges, allColumns) {\n if (ranges == null || ranges.length === 0) {\n return [];\n }\n if (ranges[0].startColumn === null && ranges[0].endColumn === null) {\n // Snapshot of all the columns\n return [...allColumns];\n }\n var columnSet = new Set();\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n assertNotNull(range.startColumn);\n assertNotNull(range.endColumn);\n for (var c = (_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0; c <= ((_range$endColumn = range.endColumn) !== null && _range$endColumn !== void 0 ? _range$endColumn : allColumns.length - 1); c += 1) {\n var _range$startColumn, _range$endColumn;\n columnSet.add(c);\n }\n }\n return [...columnSet].map(c => allColumns[c]);\n }\n\n /**\n * Transforms an iris data snapshot into a simple data matrix\n * @param data The Iris formatted table data\n * @returns A matrix of the values of the data\n */\n static snapshotDataToMatrix(data) {\n var {\n columns,\n rows\n } = data;\n var result = [];\n for (var r = 0; r < rows.length; r += 1) {\n var row = rows[r];\n var rowData = [];\n for (var c = 0; c < columns.length; c += 1) {\n var column = columns[c];\n var value = row.get(column);\n rowData.push(value);\n }\n result.push(rowData);\n }\n return result;\n }\n\n /**\n * Hydrate model rollup config\n * @param originalColumns Original model columns\n * @param config Dehydrated rollup config\n * @param aggregationSettings Aggregation settings\n * @returns Rollup config for the model\n */\n static getModelRollupConfig(originalColumns, config, aggregationSettings) {\n var _config$columns$lengt, _config$columns;\n if (((_config$columns$lengt = config === null || config === void 0 || (_config$columns = config.columns) === null || _config$columns === void 0 ? void 0 : _config$columns.length) !== null && _config$columns$lengt !== void 0 ? _config$columns$lengt : 0) === 0) {\n return null;\n }\n var {\n columns: groupingColumns = [],\n showConstituents: includeConstituents = true,\n showNonAggregatedColumns = true,\n includeDescriptions = true\n } = config !== null && config !== void 0 ? config : {};\n var {\n aggregations = []\n } = aggregationSettings !== null && aggregationSettings !== void 0 ? aggregationSettings : {};\n var filteredAggregations = aggregations.filter(_ref12 => {\n var {\n operation\n } = _ref12;\n return !AggregationUtils.isRollupProhibited(operation);\n });\n var aggregationColumns = filteredAggregations.map(_ref13 => {\n var {\n operation,\n selected,\n invert\n } = _ref13;\n return AggregationUtils.isRollupOperation(operation) ? [] : AggregationUtils.getOperationColumnNames(originalColumns, operation, selected, invert);\n });\n var aggregationMap = {};\n // Aggregation columns should show first, add them first\n for (var i = 0; i < filteredAggregations.length; i += 1) {\n aggregationMap[filteredAggregations[i].operation] = aggregationColumns[i];\n }\n if (showNonAggregatedColumns) {\n // Filter out any column that already has an aggregation or grouping\n var nonAggregatedColumnSet = new Set(originalColumns.map(c => c.name).filter(name => !groupingColumns.includes(name)));\n aggregationColumns.forEach(columns => {\n columns.forEach(name => nonAggregatedColumnSet.delete(name));\n });\n if (nonAggregatedColumnSet.size > 0) {\n var _aggregationMap$Aggre;\n var existingColumns = (_aggregationMap$Aggre = aggregationMap[AggregationOperation.FIRST]) !== null && _aggregationMap$Aggre !== void 0 ? _aggregationMap$Aggre : [];\n aggregationMap[AggregationOperation.FIRST] = [...existingColumns, ...nonAggregatedColumnSet];\n }\n }\n return {\n groupingColumns,\n includeConstituents,\n includeDescriptions,\n aggregations: aggregationMap\n };\n }\n\n /**\n * @param pendingDataMap Map of pending data\n * @returns A map with the errors in the pending data\n */\n static getPendingErrors(pendingDataMap) {\n pendingDataMap.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(\"Invalid rowIndex \".concat(rowIndex));\n }\n var {\n data\n } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(\"Invalid columnIndex \".concat(columnIndex));\n }\n });\n });\n }\n\n /**\n * Retrieves a column from the provided array at the index, or `null` and logs an error if it's invalid\n *\n * @param columns The columns to get the column from\n * @param columnIndex The column index to get\n */\n static getColumn(columns, columnIndex) {\n if (columnIndex < columns.length) {\n return columns[columnIndex];\n }\n log.error('Unable to retrieve column', columnIndex, '>=', columns.length);\n return null;\n }\n\n /**\n * Retrieves a column from the provided array matching the name, or `null` and logs an error if not found\n * @param columns The columns to get the column from\n * @param columnName The column name to retrieve\n */\n static getColumnByName(columns, columnName) {\n // Columns can contain ColumnBy sources with negative indexes\n var column = Object.values(columns).find(_ref14 => {\n var {\n name\n } = _ref14;\n return name === columnName;\n });\n if (column == null) {\n log.error('Unable to retrieve column by name', columnName, columns.map(_ref15 => {\n var {\n name\n } = _ref15;\n return name;\n }));\n }\n return column;\n }\n\n /**\n * Get filter configs with column names changed to indexes, exclude missing columns\n * @param columns The columns to get column indexes from\n * @param filters Filter configs\n * @returns Updated filter configs with column names changed to indexes\n */\n static changeFilterColumnNamesToIndexes(columns, filters) {\n return filters.map(_ref16 => {\n var {\n name,\n filter\n } = _ref16;\n var index = columns.findIndex(column => column.name === name);\n return index < 0 ? null : [index, filter];\n }).filter(filterConfig => filterConfig != null);\n }\n\n /**\n * @param columnType The column type that the filters will be applied to.\n * @param filterList The list of filters to be combined.\n * @returns The combination of the filters in filterList as text.\n */\n static combineFiltersFromList(columnType, filterList) {\n filterList.sort((a, b) => {\n // move all 'equals' comparisons to end of list\n if (a.operator === 'eq' && b.operator !== 'eq') {\n return 1;\n }\n if (a.operator !== 'eq' && b.operator === 'eq') {\n return -1;\n }\n return a.startColumnIndex - b.startColumnIndex;\n });\n var combinedText = '';\n for (var i = 0; i < filterList.length; i += 1) {\n var {\n text,\n value,\n operator\n } = filterList[i];\n if (value !== undefined) {\n var symbol = '';\n if (operator !== undefined) {\n if (value == null && operator === 'eq') {\n symbol = '=';\n } else if (operator !== 'eq') {\n if (operator === 'startsWith' || operator === 'endsWith') {\n symbol = '*';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n }\n var filterText = \"\".concat(symbol).concat(text);\n if (operator === 'startsWith') {\n filterText = \"\".concat(text).concat(symbol);\n }\n if (columnType != null && value !== null && TableUtils.isCharType(columnType)) {\n filterText = \"\".concat(symbol).concat(String.fromCharCode(parseInt(text, 10)));\n }\n if (i !== 0) {\n combinedText += operator === 'eq' ? ' || ' : ' && ';\n }\n combinedText += filterText;\n }\n }\n return combinedText;\n }\n\n /**\n * Parses the column header groups provided.\n * If undefined, should provide default groups such as from layoutHints\n *\n * @returns Object containing groups array, max depth, map of name to parent group, and map of name to group\n */\n static parseColumnHeaderGroups(model, groupsParam) {\n var makeColumnHeaderGroup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : args => new ColumnHeaderGroup(args);\n var maxDepth = 1;\n var parentMap = new Map();\n var groupMap = new Map();\n\n // Remove any empty groups before parsing\n var groups = groupsParam === null || groupsParam === void 0 ? void 0 : groupsParam.filter(_ref17 => {\n var {\n children\n } = _ref17;\n return children != null && children.length > 0;\n });\n if (groups.length === 0) {\n return {\n groups: [],\n maxDepth,\n parentMap,\n groupMap\n };\n }\n var originalGroupMap = new Map(groups.map(group => [group.name, group]));\n var seenChildren = new Set();\n var addGroup = group => {\n var _group$children;\n var {\n name\n } = group;\n assertNotNull(name, 'Column header group has no name');\n var columnIndex = model.getColumnIndexByName(name);\n // Groups cannot have names matching columns to avoid parent-child collision\n // unless they refer to ColumnBy sources with negative indexes\n if (columnIndex != null && columnIndex >= 0) {\n throw new Error(\"Column header group has same name as column: \".concat(name));\n }\n var existingGroup = groupMap.get(name);\n if (existingGroup) {\n return existingGroup;\n }\n var childIndexes = [];\n var depth = 1;\n if (group.children == null) {\n throw new Error(\"Column header group \".concat(name, \" has no children\"));\n }\n group.children.forEach(childName => {\n if (seenChildren.has(childName)) {\n throw new Error(\"Column group child \".concat(childName, \" specified in multiple groups\"));\n }\n seenChildren.add(childName);\n var childGroup = originalGroupMap.get(childName);\n var childIndex = model.getColumnIndexByName(childName);\n if (childGroup) {\n // Adding another column header group\n var addedGroup = addGroup(childGroup);\n childIndexes.push(...addedGroup.childIndexes);\n depth = Math.max(depth, addedGroup.depth + 1);\n } else if (childIndex != null) {\n // Adding a base column\n childIndexes.push(childIndex);\n depth = Math.max(depth, 1);\n } else {\n throw new Error(\"Unknown child \".concat(childName, \" in group \").concat(name));\n }\n });\n var headerGroupConfig = _objectSpread(_objectSpread({}, group), {}, {\n name,\n children: group.children,\n depth,\n childIndexes: childIndexes.flat()\n });\n var columnHeaderGroup = makeColumnHeaderGroup(headerGroupConfig);\n groupMap.set(name, columnHeaderGroup);\n (_group$children = group.children) === null || _group$children === void 0 || _group$children.forEach(childName => parentMap.set(childName, columnHeaderGroup));\n maxDepth = Math.max(maxDepth, columnHeaderGroup.depth + 1);\n return columnHeaderGroup;\n };\n var groupNames = new Set();\n groups.forEach(group => {\n var {\n name\n } = group;\n if (groupNames.has(name)) {\n throw new Error(\"Duplicate column group name: \".concat(name));\n }\n groupNames.add(name);\n addGroup(group);\n });\n groupMap.forEach(group => {\n var _parentMap$get;\n group.setParent((_parentMap$get = parentMap.get(group.name)) === null || _parentMap$get === void 0 ? void 0 : _parentMap$get.name);\n });\n return {\n groups: [...groupMap.values()],\n maxDepth,\n groupMap,\n parentMap\n };\n }\n\n /**\n * @param value The value of the cell in a column\n * @param columnType The type of the column\n * @returns The value of the cell converted to text\n */\n static convertValueToText(value, columnType) {\n if (columnType != null && TableUtils.isCharType(columnType) && value != null && typeof value === 'number') {\n return String.fromCharCode(value);\n }\n if (TableUtils.isDateType(columnType) && isDateWrapper(value)) {\n var date = new Date(value.asDate());\n var offset = date.getTimezoneOffset();\n var offsetDate = new Date(date.getTime() - offset * 60 * 1000);\n var dateText = offsetDate.toISOString();\n var formattedText = dateText.replace('T', ' ').substring(0, 23);\n return formattedText;\n }\n if (value == null) {\n return '';\n }\n return \"\".concat(value);\n }\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n this.dh = dh;\n this.tableUtils = new TableUtils(dh);\n bindAllMethods(this);\n }\n\n /**\n * Exports the state from IrisGrid to a JSON stringifiable object.\n * See IrisGridCacheUtil for memoization and comparing dehydrated states.\n * @param model The table model to export the state for\n * @param irisGridState The current state of the IrisGrid\n */\n dehydrateIrisGridState(model, irisGridState) {\n var {\n aggregationSettings = {\n aggregations: EMPTY_ARRAY,\n showOnTop: false\n },\n advancedFilters,\n customColumnFormatMap,\n columnAlignmentMap = EMPTY_MAP,\n isFilterBarShown,\n metrics: {\n userColumnWidths,\n userRowHeights\n } = {\n userColumnWidths: EMPTY_MAP,\n userRowHeights: EMPTY_MAP\n },\n quickFilters,\n customColumns,\n conditionalFormats = EMPTY_ARRAY,\n reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns = EMPTY_ARRAY,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n columnHeaderGroups,\n partitionConfig\n } = irisGridState;\n var {\n columns\n } = model;\n var partitionColumns = isPartitionedGridModelProvider(model) ? model.partitionColumns : [];\n\n // Return value will be serialized, should not contain undefined\n return {\n advancedFilters: this.dehydrateAdvancedFilters(columns, advancedFilters),\n aggregationSettings,\n customColumnFormatMap: [...customColumnFormatMap],\n columnAlignmentMap: [...columnAlignmentMap],\n isFilterBarShown,\n quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),\n sorts: IrisGridUtils.dehydrateSort(sorts),\n userColumnWidths: [...userColumnWidths].filter(_ref18 => {\n var [columnIndex] = _ref18;\n return columnIndex != null && columnIndex >= 0 && columnIndex < columns.length;\n }).map(_ref19 => {\n var [columnIndex, width] = _ref19;\n return [columns[columnIndex].name, width];\n }),\n userRowHeights: [...userRowHeights],\n customColumns: [...customColumns],\n conditionalFormats: [...conditionalFormats],\n reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns: [...selectDistinctColumns],\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.dehydratePendingDataMap(columns, pendingDataMap),\n frozenColumns,\n columnHeaderGroups: columnHeaderGroups === null || columnHeaderGroups === void 0 ? void 0 : columnHeaderGroups.map(item => {\n var _item$color;\n return {\n name: item.name,\n children: item.children,\n color: (_item$color = item.color) !== null && _item$color !== void 0 ? _item$color : null\n };\n }),\n partitionConfig: this.dehydratePartitionConfig(partitionColumns, partitionConfig)\n };\n }\n\n /**\n * Import a state for IrisGrid that was exported with {{@link dehydrateIrisGridState}}\n * @param model The table model to import the state with\n * @param irisGridState The saved IrisGrid state\n */\n hydrateIrisGridState(model, irisGridState) {\n var _ref23, _model$layoutHints;\n var {\n advancedFilters,\n aggregationSettings = {\n aggregations: [],\n showOnTop: false\n },\n customColumnFormatMap,\n columnAlignmentMap = [],\n isFilterBarShown,\n quickFilters,\n sorts,\n customColumns,\n conditionalFormats,\n userColumnWidths,\n userRowHeights,\n reverseType,\n reverse,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns = true,\n pendingDataMap = [],\n frozenColumns,\n columnHeaderGroups,\n partitionConfig\n } = irisGridState;\n var {\n columns,\n formatter\n } = model;\n var partitionColumns = isPartitionedGridModelProvider(model) ? model.partitionColumns : [];\n return {\n advancedFilters: this.hydrateAdvancedFilters(columns, advancedFilters, formatter.timeZone),\n aggregationSettings,\n customColumnFormatMap: new Map(customColumnFormatMap),\n columnAlignmentMap: new Map(columnAlignmentMap),\n isFilterBarShown,\n quickFilters: this.hydrateQuickFilters(columns, quickFilters, formatter.timeZone),\n sorts: this.hydrateSort(columns, sorts, true),\n userColumnWidths: new Map(userColumnWidths.map(_ref20 => {\n var [column, width] = _ref20;\n if (typeof column === 'string' || column instanceof String) {\n return [columns.findIndex(_ref21 => {\n var {\n name\n } = _ref21;\n return name === column;\n }), width];\n }\n return [column, width];\n }).filter(_ref22 => {\n var [column] = _ref22;\n return column != null && column >= 0 && column < columns.length;\n })),\n customColumns,\n conditionalFormats,\n userRowHeights: new Map(userRowHeights),\n reverse: reverseType === TableUtils.REVERSE_TYPE.POST_SORT || reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.hydratePendingDataMap(columns, pendingDataMap),\n frozenColumns,\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(model, (_ref23 = columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : (_model$layoutHints = model.layoutHints) === null || _model$layoutHints === void 0 ? void 0 : _model$layoutHints.columnGroups) !== null && _ref23 !== void 0 ? _ref23 : []).groups,\n partitionConfig: this.hydratePartitionConfig(partitionColumns, partitionConfig)\n };\n }\n\n /**\n * Import the saved quick filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedQuickFilters Exported quick filters definitions\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n * @returns The quick filters to apply to the columns\n */\n hydrateQuickFilters(columns, savedQuickFilters, timeZone) {\n var importedFilters = savedQuickFilters.map(_ref24 => {\n var [columnIndex, quickFilter] = _ref24;\n var {\n text\n } = quickFilter;\n var filter = null;\n try {\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n if (column != null) {\n filter = this.tableUtils.makeQuickFilter(column, text, timeZone);\n }\n } catch (error) {\n log.error('hydrateQuickFilters error with', text, error);\n }\n return [columnIndex, {\n text,\n filter\n }];\n });\n return new Map(importedFilters);\n }\n\n /**\n * Export the advanced filters from the provided columns to JSON striginfiable object\n * @param columns The columns for the filters\n * @param advancedFilters The advanced filters to dehydrate\n * @returns The dehydrated advanced filters\n */\n dehydrateAdvancedFilters(columns, advancedFilters) {\n return [...advancedFilters].map(_ref25 => {\n var [columnIndex, advancedFilter] = _ref25;\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n var options = this.dehydrateAdvancedFilterOptions(column, advancedFilter.options);\n return [columnIndex, {\n options\n }];\n });\n }\n\n /**\n * Import the saved advanced filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedAdvancedFilters Exported advanced filters definitions\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns The advanced filters to apply to the columns\n */\n hydrateAdvancedFilters(columns, savedAdvancedFilters, timeZone) {\n var importedFilters = savedAdvancedFilters.map(_ref26 => {\n var [columnIndex, advancedFilter] = _ref26;\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n var options = this.hydrateAdvancedFilterOptions(column, advancedFilter.options);\n var filter = null;\n try {\n var columnRetrieved = IrisGridUtils.getColumn(columns, columnIndex);\n if (columnRetrieved != null) {\n filter = this.tableUtils.makeAdvancedFilter(column, options, timeZone);\n }\n } catch (error) {\n log.error('hydrateAdvancedFilters error with', options, error);\n }\n return [columnIndex, {\n options,\n filter\n }];\n });\n return new Map(importedFilters);\n }\n dehydrateAdvancedFilterOptions(column, options) {\n var {\n selectedValues\n } = options,\n otherOptions = _objectWithoutProperties(options, _excluded);\n return _objectSpread({\n selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => this.dehydrateValue(value, column === null || column === void 0 ? void 0 : column.type))\n }, otherOptions);\n }\n hydrateAdvancedFilterOptions(column, options) {\n var {\n selectedValues\n } = options,\n otherOptions = _objectWithoutProperties(options, _excluded2);\n return _objectSpread({\n selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => this.hydrateValue(value, column === null || column === void 0 ? void 0 : column.type))\n }, otherOptions);\n }\n dehydratePendingDataMap(columns, pendingDataMap) {\n return [...pendingDataMap].map(_ref27 => {\n var [rowIndex, {\n data\n }] = _ref27;\n return [rowIndex, {\n data: [...data].filter(_ref28 => {\n var [c] = _ref28;\n return typeof c === 'number';\n }).map(_ref29 => {\n var [c, value] = _ref29;\n return [columns[c].name, this.dehydrateValue(value, columns[c].type)];\n })\n }];\n });\n }\n hydratePendingDataMap(columns, pendingDataMap) {\n var columnMap = new Map();\n var getColumnIndex = columnName => {\n if (!columnMap.has(columnName)) {\n columnMap.set(columnName, columns.findIndex(_ref30 => {\n var {\n name\n } = _ref30;\n return name === columnName;\n }));\n }\n return columnMap.get(columnName);\n };\n return new Map(pendingDataMap.map(_ref31 => {\n var [rowIndex, {\n data\n }] = _ref31;\n return [rowIndex, {\n data: new Map(data.map(_ref32 => {\n var _getColumnIndex;\n var [columnName, value] = _ref32;\n var index = getColumnIndex(columnName);\n assertNotNull(index);\n return [(_getColumnIndex = getColumnIndex(columnName)) !== null && _getColumnIndex !== void 0 ? _getColumnIndex : null, this.hydrateValue(value, columns[index].type)];\n }))\n }];\n }));\n }\n dehydratePartitionConfig(partitionColumns, partitionConfig) {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n return _objectSpread(_objectSpread({}, partitionConfig), {}, {\n partitions: partitionConfig.partitions.map((partition, index) => this.dehydrateValue(partition, partitionColumns[index].type))\n });\n }\n hydratePartitionConfig(partitionColumns, partitionConfig) {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n return _objectSpread(_objectSpread({}, partitionConfig), {}, {\n partitions: partitionConfig.partitions.map((partition, index) => this.hydrateValue(partition, partitionColumns[index].type))\n });\n }\n\n /**\n * Dehydrates/serializes a value for storage.\n * @param value The value to dehydrate\n * @param columnType The column type\n */\n dehydrateValue(value, columnType) {\n if (TableUtils.isDateType(columnType)) {\n return this.dehydrateDateTime(value);\n }\n if (TableUtils.isLongType(columnType)) {\n return IrisGridUtils.dehydrateLong(value);\n }\n return value;\n }\n\n /**\n * Hydrate a value from it's serialized state\n * @param value The dehydrated value that needs to be hydrated\n * @param columnType The type of column\n */\n hydrateValue(value, columnType) {\n if (TableUtils.isDateType(columnType)) {\n return this.hydrateDateTime(value);\n }\n if (TableUtils.isLongType(columnType)) {\n return this.hydrateLong(value);\n }\n return value;\n }\n dehydrateDateTime(value) {\n return value != null ? this.dh.i18n.DateTimeFormat.format(DateUtils.FULL_DATE_FORMAT, value) : null;\n }\n hydrateDateTime(value) {\n return value != null ? this.dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, value) : null;\n }\n hydrateLong(value) {\n return value != null ? this.dh.LongWrapper.ofString(value) : null;\n }\n\n /**\n * Import the saved sorts to apply to the model. Does not actually apply the sort.\n * @param columns The columns the sorts will be applied to\n * @param sorts Exported sort definitions\n * @param dropReverse If true, drop reverse sort descriptors from the result\n * @returns The sort descriptors to apply to the model\n */\n hydrateSort(columns, sorts) {\n var dropReverse = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n dh\n } = this;\n return sorts.map(sort => {\n var {\n column: columnIndexOrName,\n isAbs,\n direction\n } = sort;\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n var column = typeof columnIndexOrName === 'string' ? IrisGridUtils.getColumnByName(columns, columnIndexOrName) : IrisGridUtils.getColumn(columns, columnIndexOrName);\n if (column != null) {\n return {\n column: {\n name: column.name,\n type: column.type\n },\n isAbs,\n direction\n };\n }\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n // If the item is a reverse sort item, and dropReverse is true, filter it out\n // - it will get applied with the `reverse` property\n // This should only happen when loading a legacy dashboard\n .filter(item => item != null && (item.direction !== TableUtils.sortDirection.reverse || !dropReverse));\n }\n hydrateDhSort(columns, sorts) {\n var {\n dh\n } = this;\n return sorts.map(sortDescriptor => {\n var {\n column: {\n name\n },\n isAbs,\n direction\n } = sortDescriptor;\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n var column = IrisGridUtils.getColumnByName(columns, name);\n if (column != null) {\n var columnSort = column.sort();\n if (isAbs) {\n columnSort = columnSort.abs();\n }\n if (direction === TableUtils.sortDirection.descending) {\n columnSort = columnSort.desc();\n } else {\n columnSort = columnSort.asc();\n }\n return columnSort;\n }\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n .filter(isNotNullOrUndefined);\n }\n\n /**\n * Applies the passed in table settings directly to the provided table\n * @param table The table to apply the settings to\n * @param tableSettings Dehydrated table settings extracted with `extractTableSettings`\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n */\n applyTableSettings(table, tableSettings, timeZone) {\n var {\n columns\n } = table;\n var quickFilters = [];\n if (tableSettings.quickFilters) {\n quickFilters = IrisGridUtils.getFiltersFromFilterMap(this.hydrateQuickFilters(columns, tableSettings.quickFilters, timeZone));\n }\n var advancedFilters = [];\n if (tableSettings.advancedFilters) {\n advancedFilters = IrisGridUtils.getFiltersFromFilterMap(this.hydrateAdvancedFilters(columns, tableSettings.advancedFilters, timeZone));\n }\n var inputFilters = this.getFiltersFromInputFilters(columns, tableSettings.inputFilters, timeZone);\n var sorts = [];\n if (tableSettings.sorts) {\n sorts = this.hydrateDhSort(columns, this.hydrateSort(columns, tableSettings.sorts));\n }\n var filters = [...quickFilters, ...advancedFilters];\n var {\n partitions,\n partitionColumns: partitionColumnNames\n } = tableSettings;\n if (partitions && partitions.length && partitionColumnNames && partitionColumnNames !== null && partitionColumnNames !== void 0 && partitionColumnNames.length) {\n var partitionColumns = partitionColumnNames.map(partitionColumnName => IrisGridUtils.getColumnByName(columns, partitionColumnName));\n for (var i = 0; i < partitionColumns.length; i += 1) {\n if (partitionColumns[i] !== undefined && partitions[i] != null) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n var partitionFilter = partitionColumns[i].filter().eq(this.dh.FilterValue.ofString(partitions[i]));\n filters = [partitionFilter, ...filters];\n }\n }\n }\n filters = [...inputFilters, ...filters];\n table.applyFilter(filters);\n table.applySort(sorts);\n }\n getFiltersFromInputFilters(columns) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var timeZone = arguments.length > 2 ? arguments[2] : undefined;\n return inputFilters.map(_ref33 => {\n var {\n name,\n type,\n value\n } = _ref33;\n var column = columns.find(_ref34 => {\n var {\n name: columnName,\n type: columnType\n } = _ref34;\n return columnName === name && columnType === type;\n });\n if (column) {\n try {\n return this.tableUtils.makeQuickFilter(column, value, timeZone);\n } catch (e) {\n // It may be unable to create it because user hasn't completed their input\n log.debug('Unable to create input filter', e);\n }\n }\n return null;\n }).filter(filter => filter != null);\n }\n\n /**\n * Get the dh.RangeSet representation of the provided ranges.\n * Ranges are sorted prior to creating the RangeSet. Only the rows are taken into account,\n * RangeSet does not have an option for columns.\n * @param ranges The ranges to get the range set for\n * @returns The rangeset for the provided ranges\n */\n rangeSetFromRanges(ranges) {\n var {\n dh\n } = this;\n var rangeSets = ranges.slice().sort((a, b) => {\n assertNotNull(a.startRow);\n assertNotNull(b.startRow);\n return a.startRow - b.startRow;\n }).map(range => {\n var {\n startRow,\n endRow\n } = range;\n assertNotNull(startRow);\n assertNotNull(endRow);\n return dh.RangeSet.ofRange(startRow, endRow);\n });\n return dh.RangeSet.ofRanges(rangeSets);\n }\n\n /**\n * Get the color for a cell value\n * @param theme The IrisGrid theme\n * @param columnType The type of the column\n * @param columnName The name of the column\n * @param value The value of the cell\n * @returns The color for the cell value\n */\n static colorForValue(theme, columnType, columnName, value) {\n if (TableUtils.isDateType(columnType) || columnName === 'Date') {\n assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(columnType)) {\n if (value > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if (value < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n return theme.textColor;\n }\n\n /**\n * Determines the text alignment for a cell value\n * @param columnType The type of the column\n * @param columnName The name of the column\n * @returns The text alignment for the cell value\n */\n static textAlignForValue(columnType, columnName) {\n if (TableUtils.isDateType(columnType) || columnName === 'Date') {\n return 'center';\n }\n if (TableUtils.isNumberType(columnType)) {\n return 'right';\n }\n return 'left';\n }\n}\nexport default IrisGridUtils;\n//# sourceMappingURL=IrisGridUtils.js.map","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; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nclass MissingKeyError extends Error {\n constructor(rowIndex, columnName) {\n super(\"\".concat(columnName, \" can't be empty (on pending row \").concat(rowIndex + 1, \")\"));\n _defineProperty(this, \"isMissingKey\", true);\n _defineProperty(this, \"rowIndex\", void 0);\n _defineProperty(this, \"columnName\", void 0);\n this.rowIndex = rowIndex;\n this.columnName = columnName;\n }\n}\nexport default MissingKeyError;\n//# sourceMappingURL=MissingKeyError.js.map","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; }\nfunction _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; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _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; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable no-underscore-dangle */\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport { GridRange, GridUtils, memoizeClear } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { EventShimCustomEvent, PromiseUtils, assertNotNull } from '@deephaven/utils';\nimport { TableUtils, Formatter, FormatterUtils, DateUtils } from '@deephaven/jsapi-utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport MissingKeyError from \"./MissingKeyError.js\";\nimport { isColumnHeaderGroup } from \"./ColumnHeaderGroup.js\";\nvar log = Log.module('IrisGridTableModelTemplate');\nvar SET_VIEWPORT_THROTTLE = 150;\nvar APPLY_VIEWPORT_THROTTLE = 0;\nexport function isIrisGridTableModelTemplate(model) {\n return model.table !== undefined;\n}\n\n/**\n * Template model for a grid\n */\n\nclass IrisGridTableModelTemplate extends IrisGridModel {\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n throw new Error('Method not implemented.');\n }\n export() {\n throw new Error('Method not implemented.');\n }\n columnStatistics(column) {\n throw new Error('Method not implemented.');\n }\n get customColumns() {\n return [];\n }\n set customColumns(customColumns) {\n throw new Error('Method not implemented.');\n }\n get formatColumns() {\n return [];\n }\n set formatColumns(formatColumns) {\n throw new Error('Method not implemented.');\n }\n updateFrozenColumns(columns) {\n throw new Error('Method not implemented.');\n }\n get rollupConfig() {\n throw new Error('Method not implemented.');\n }\n set rollupConfig(rollupConfig) {\n throw new Error('Method not implemented.');\n }\n get selectDistinctColumns() {\n throw new Error('Method not implemented.');\n }\n set selectDistinctColumns(names) {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Returns an array of the columns in the model\n * The order of model columns should never change once established\n */\n get columns() {\n return this.table.columns;\n }\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n * @param columnAlignmentMap Map of column alignments\n */\n constructor(dh, table) {\n var _formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var columnAlignmentMap = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new Map();\n super(dh);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"irisGridUtils\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"irisFormatter\", void 0);\n _defineProperty(this, \"irisColumnAlignmentMap\", void 0);\n _defineProperty(this, \"inputTable\", void 0);\n _defineProperty(this, \"subscription\", void 0);\n _defineProperty(this, \"table\", void 0);\n _defineProperty(this, \"viewport\", void 0);\n _defineProperty(this, \"viewportData\", void 0);\n _defineProperty(this, \"formattedStringData\", void 0);\n _defineProperty(this, \"pendingStringData\", void 0);\n _defineProperty(this, \"isSaveInProgress\", void 0);\n _defineProperty(this, \"totalsTable\", void 0);\n _defineProperty(this, \"totalsTablePromise\", void 0);\n _defineProperty(this, \"totals\", void 0);\n _defineProperty(this, \"totalsDataMap\", void 0);\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n _defineProperty(this, \"pendingNewDataMap\", void 0);\n _defineProperty(this, \"pendingNewRowCount\", 0);\n _defineProperty(this, \"_columnHeaderGroupMap\", new Map());\n _defineProperty(this, \"columnHeaderParentMap\", new Map());\n _defineProperty(this, \"_columnHeaderMaxDepth\", null);\n _defineProperty(this, \"_columnHeaderGroups\", []);\n _defineProperty(this, \"_isColumnHeaderGroupsInitialized\", false);\n _defineProperty(this, \"_movedColumns\", null);\n _defineProperty(this, \"getMemoizedInitialMovedColumns\", memoize(layoutHints => {\n var _layoutHints$columnGr, _layoutHints$frontCol, _layoutHints$backColu, _layoutHints$frozenCo;\n if (!layoutHints) {\n return [];\n }\n var movedColumns = [];\n var {\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr !== void 0 ? _layoutHints$columnGr : []);\n var moveColumn = (name, toIndex) => {\n var modelIndex = this.getColumnIndexByName(name);\n if (modelIndex == null) {\n throw new Error(\"Unknown layout hint column: \".concat(name));\n }\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n movedColumns = GridUtils.moveItem(visibleIndex, toIndex, movedColumns);\n };\n var moveGroup = (name, toIndex) => {\n var group = groupMap.get(name);\n if (group == null) {\n throw new Error(\"Unknown layout hint group: \".concat(name));\n }\n var visibleRange = group.getVisibleRange(movedColumns);\n movedColumns = GridUtils.moveRange(visibleRange, toIndex, movedColumns);\n };\n var frontColumns = (_layoutHints$frontCol = layoutHints.frontColumns) !== null && _layoutHints$frontCol !== void 0 ? _layoutHints$frontCol : [];\n var backColumns = (_layoutHints$backColu = layoutHints.backColumns) !== null && _layoutHints$backColu !== void 0 ? _layoutHints$backColu : [];\n var frozenColumns = (_layoutHints$frozenCo = layoutHints.frozenColumns) !== null && _layoutHints$frozenCo !== void 0 ? _layoutHints$frozenCo : [];\n if (frontColumns.length > 0 || backColumns.length > 0 || frozenColumns.length > 0) {\n var usedColumns = new Set();\n var frontIndex = 0;\n frozenColumns === null || frozenColumns === void 0 || frozenColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n frontColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n var backIndex = this.columns.length - 1;\n backColumns === null || backColumns === void 0 || backColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n var layoutHintColumnGroups = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups;\n if (layoutHintColumnGroups) {\n var columnGroups = [...groupMap.values()];\n columnGroups.sort((a, b) => a.depth - b.depth);\n columnGroups.forEach(group => {\n var firstChildName = group.children[0];\n var rightModelIndex = this.getColumnIndexByName(firstChildName);\n var rightVisibleIndex;\n if (rightModelIndex != null) {\n rightVisibleIndex = GridUtils.getVisibleIndex(rightModelIndex, movedColumns);\n } else {\n var firstChildGroup = groupMap.get(firstChildName);\n if (!firstChildGroup) {\n throw new Error(\"Unknown column \".concat(firstChildName, \" in group \").concat(group.name));\n }\n var visibleRange = firstChildGroup.getVisibleRange(movedColumns);\n // Columns will be moved to start at the end of the first child group\n [, rightVisibleIndex] = visibleRange;\n }\n for (var i = 1; i < group.children.length; i += 1) {\n var childName = group.children[i];\n var childGroup = groupMap.get(childName);\n var childColumn = this.getColumnIndexByName(childName);\n if (childGroup) {\n // All columns in the group will be before or after the start index\n // Lower level groups are re-arranged first, so they will be contiguous\n var isBeforeGroup = childGroup.getVisibleRange(movedColumns)[0] < rightVisibleIndex;\n var moveToIndex = isBeforeGroup ? rightVisibleIndex - childGroup.childIndexes.length + 1 : rightVisibleIndex + 1;\n moveGroup(childName, moveToIndex);\n rightVisibleIndex = moveToIndex + childGroup.childIndexes.length - 1;\n } else if (childColumn != null) {\n var _isBeforeGroup = GridUtils.getVisibleIndex(childColumn, movedColumns) < rightVisibleIndex;\n var _moveToIndex = _isBeforeGroup ? rightVisibleIndex : rightVisibleIndex + 1;\n moveColumn(childName, _moveToIndex);\n rightVisibleIndex = _moveToIndex;\n }\n }\n });\n }\n this._movedColumns = movedColumns;\n return movedColumns;\n }));\n _defineProperty(this, \"getMemoizedInitialColumnHeaderGroups\", memoize(layoutHints => {\n var _layoutHints$columnGr2;\n return IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr2 = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr2 !== void 0 ? _layoutHints$columnGr2 : []).groups;\n }));\n _defineProperty(this, \"getColumnIndicesByNameMap\", memoize(columns => {\n var indices = new Map();\n columns.forEach((_ref, i) => {\n var {\n name\n } = _ref;\n return indices.set(name, i);\n });\n return indices;\n }));\n _defineProperty(this, \"setViewport\", throttle((top, bottom, columns) => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n var {\n viewport\n } = this;\n if (viewport != null && viewport.top === top && viewport.bottom === bottom && viewport.columns === columns) {\n log.debug2('Ignoring duplicate viewport', viewport);\n return;\n }\n this.viewport = {\n top,\n bottom,\n columns\n };\n log.debug2('setViewport', this.viewport);\n this.applyViewport();\n }, SET_VIEWPORT_THROTTLE));\n /**\n * Applies the current viewport to the underlying table.\n */\n _defineProperty(this, \"applyViewport\", throttle(() => {\n if (!this.viewport) {\n return;\n }\n log.debug2('applyViewport', this.viewport);\n var {\n top,\n bottom,\n columns\n } = this.viewport;\n var [viewportTop, viewportBottom] = this.getCachedViewportRowRange(top, bottom);\n this.applyBufferedViewport(viewportTop, viewportBottom, columns);\n }, APPLY_VIEWPORT_THROTTLE, {\n leading: false\n }));\n _defineProperty(this, \"getCachedFormattedString\", memoizeClear((formatter, value, columnType, columnName, formatOverride) => formatter.getFormattedString(value, columnType, columnName, formatOverride), {\n max: 10000\n }));\n _defineProperty(this, \"getCachedCustomColumnFormatFlag\", memoizeClear(FormatterUtils.isCustomColumnFormatDefined, {\n max: 10000\n }));\n _defineProperty(this, \"getCachedViewportRowRange\", memoize((top, bottom) => {\n var viewHeight = bottom - top;\n var viewportTop = Math.max(0, top - viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES);\n var viewportBottom = bottom + viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n }));\n _defineProperty(this, \"getCachedPendingErrors\", memoize((pendingDataMap, columns, keyColumnCount) => {\n var map = new Map();\n pendingDataMap.forEach((row, rowIndex) => {\n var {\n data: rowData\n } = row;\n for (var i = 0; i < keyColumnCount; i += 1) {\n if (!rowData.has(i)) {\n var _map$get;\n if (!map.has(rowIndex)) {\n map.set(rowIndex, []);\n }\n (_map$get = map.get(rowIndex)) === null || _map$get === void 0 || _map$get.push(new MissingKeyError(rowIndex, columns[i].name));\n }\n }\n });\n return map;\n }));\n this.handleTableDisconnect = this.handleTableDisconnect.bind(this);\n this.handleTableReconnect = this.handleTableReconnect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTotalsUpdate = this.handleTotalsUpdate.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(this);\n this.dh = dh;\n this.irisFormatter = _formatter;\n this.irisColumnAlignmentMap = columnAlignmentMap;\n this.irisGridUtils = new IrisGridUtils(dh);\n this.inputTable = inputTable;\n this.subscription = null;\n this.table = table;\n this.tableUtils = new TableUtils(dh);\n this.viewport = null;\n this.viewportData = null;\n this.formattedStringData = [];\n this.pendingStringData = [];\n this.isSaveInProgress = false;\n this.totalsTable = null;\n this.totalsTablePromise = null;\n this.totals = null;\n this.totalsDataMap = null;\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n this.pendingNewDataMap = new Map();\n this.pendingNewRowCount = 0;\n }\n close() {\n this.table.close();\n if (this.totalsTable !== null) {\n this.totalsTable.close();\n }\n if (this.totalsTablePromise !== null) {\n this.totalsTablePromise.cancel();\n }\n }\n startListening() {\n super.startListening();\n var {\n dh\n } = this;\n this.table.addEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.addEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.addEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.addEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n this.applyViewport();\n }\n stopListening() {\n super.stopListening();\n var {\n dh\n } = this;\n this.table.removeEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.removeEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.removeEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.removeEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.closeSubscription();\n }\n addTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.addEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n\n // Totals table only has one row of data\n totalsTable.setViewport(0, 0);\n }\n removeTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n }\n handleTableDisconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.DISCONNECT));\n }\n handleTableReconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n handleTableUpdate(event) {\n this.copyViewportData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleTotalsUpdate(event) {\n this.copyTotalsData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleRequestFailed(event) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event));\n }\n handleCustomColumnsChanged() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns\n }));\n }\n get rowCount() {\n var _this$totals$operatio, _this$totals;\n return (\n // Table size can be negative if the table isn't ready yet\n Math.max(this.table.size, 0) + this.pendingNewRowCount + ((_this$totals$operatio = (_this$totals = this.totals) === null || _this$totals === void 0 || (_this$totals = _this$totals.operationOrder) === null || _this$totals === void 0 ? void 0 : _this$totals.length) !== null && _this$totals$operatio !== void 0 ? _this$totals$operatio : 0)\n );\n }\n get pendingDataErrors() {\n var _this$inputTable$keyC, _this$inputTable;\n return this.getCachedPendingErrors(this.pendingNewDataMap, this.columns, (_this$inputTable$keyC = (_this$inputTable = this.inputTable) === null || _this$inputTable === void 0 ? void 0 : _this$inputTable.keyColumns.length) !== null && _this$inputTable$keyC !== void 0 ? _this$inputTable$keyC : 0);\n }\n get pendingDataMap() {\n return this.pendingNewDataMap;\n }\n set pendingDataMap(map) {\n if (map === this.pendingNewDataMap) {\n return;\n }\n map.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(\"Invalid rowIndex \".concat(rowIndex));\n }\n var {\n data\n } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(\"Invalid columnIndex \".concat(columnIndex));\n }\n });\n });\n this.pendingNewDataMap = map;\n this.pendingNewRowCount = Math.max(this.pendingNewRowCount, this.maxPendingDataRow);\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n }\n get pendingRowCount() {\n return this.pendingNewRowCount;\n }\n set pendingRowCount(count) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n get maxPendingDataRow() {\n return this.pendingNewDataMap.size > 0 ? Math.max(...this.pendingNewDataMap.keys()) + 1 : 0;\n }\n get columnCount() {\n return this.columns.length;\n }\n get floatingBottomRowCount() {\n var _this$totals$operatio2, _this$totals2;\n return this.totals != null && this.totals.showOnTop ? 0 : (_this$totals$operatio2 = (_this$totals2 = this.totals) === null || _this$totals2 === void 0 || (_this$totals2 = _this$totals2.operationOrder) === null || _this$totals2 === void 0 ? void 0 : _this$totals2.length) !== null && _this$totals$operatio2 !== void 0 ? _this$totals$operatio2 : 0;\n }\n get floatingTopRowCount() {\n var _this$totals$operatio3, _this$totals3;\n return this.totals != null && this.totals.showOnTop ? (_this$totals$operatio3 = (_this$totals3 = this.totals) === null || _this$totals3 === void 0 || (_this$totals3 = _this$totals3.operationOrder) === null || _this$totals3 === void 0 ? void 0 : _this$totals3.length) !== null && _this$totals$operatio3 !== void 0 ? _this$totals$operatio3 : 0 : 0;\n }\n get isValuesTableAvailable() {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n get isChartBuilderAvailable() {\n return true;\n }\n get isOrganizeColumnsAvailable() {\n return true;\n }\n get isTotalsAvailable() {\n return this.table.getTotalsTable != null;\n }\n get isEditable() {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n get isDeletable() {\n return this.keyColumnSet.size > 0;\n }\n get isViewportPending() {\n if (this.viewport == null || this.viewport.columns === undefined || this.viewportData == null) {\n return true;\n }\n // no columns or no rows\n if (this.viewport.columns.length === 0 || this.viewportData.rows.length === 0) {\n return false;\n }\n\n // offset is first row of loaded data\n var pendingTop = this.viewport.top < this.viewportData.offset;\n // offset + row.length is last row of loaded data\n var pendingBottom = this.viewportData.offset + this.viewportData.rows.length < this.viewport.bottom;\n // left column doesn't exist in data\n var pendingLeft = this.viewportData.rows[0].data.get(this.viewport.columns[0].index) === undefined;\n // right column doesn't exist in data\n var pendingRight = this.viewportData.rows[0].data.get(this.viewport.columns[this.viewport.columns.length - 1].index) === undefined;\n return pendingTop || pendingBottom || pendingLeft || pendingRight;\n }\n cacheFormattedValue(x, y, text) {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n cachePendingValue(x, y, text) {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n clearPendingValue(x, y) {\n var column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n textValueForCell(x, y) {\n var _this$pendingStringDa, _this$formattedString;\n // First check if there's any pending values we should read from\n if (((_this$pendingStringDa = this.pendingStringData[x]) === null || _this$pendingStringDa === void 0 ? void 0 : _this$pendingStringDa[y]) !== undefined) {\n return this.pendingStringData[x][y];\n }\n\n // Use a separate cache from memoization just for the strings that are currently displayed\n if (((_this$formattedString = this.formattedStringData[x]) === null || _this$formattedString === void 0 ? void 0 : _this$formattedString[y]) === undefined) {\n var value = this.valueForCell(x, y);\n if (value === null) {\n return null;\n }\n if (value === undefined) {\n return undefined;\n }\n var column = this.sourceColumn(x, y);\n var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(this.formatter, column.name, column.type);\n var formatOverride;\n if (!hasCustomColumnFormat) {\n var formatForCell = this.formatForCell(x, y);\n if ((formatForCell === null || formatForCell === void 0 ? void 0 : formatForCell.formatString) != null) {\n formatOverride = formatForCell;\n }\n }\n var text = this.displayString(value, column.type, column.name, formatOverride);\n this.cacheFormattedValue(x, y, text);\n }\n return this.formattedStringData[x][y];\n }\n textForCell(x, y) {\n var _this$columns$x;\n var text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null && this.pendingDataMap.has(pendingRow)) {\n // Asterisk to show a value is required for a key column on a row that has some data entered\n return '*';\n }\n }\n if (TableUtils.isTextType((_this$columns$x = this.columns[x]) === null || _this$columns$x === void 0 ? void 0 : _this$columns$x.type)) {\n if (text === null) {\n return this.formatter.showNullStrings ? 'null' : '';\n }\n if (text === '') {\n return this.formatter.showEmptyStrings ? 'empty' : '';\n }\n }\n return text !== null && text !== void 0 ? text : '';\n }\n truncationCharForCell(x) {\n var column = this.columns[x];\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type) && this.formatter.truncateNumbersWithPound) {\n return '#';\n }\n return undefined;\n }\n colorForCell(x, y, theme) {\n var data = this.dataForCell(x, y);\n if (data) {\n var {\n format,\n value\n } = data;\n if (value == null || value === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if ((format === null || format === void 0 ? void 0 : format.color) != null && format.color !== '') {\n return format.color;\n }\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n assertNotNull(theme.pendingTextColor);\n return theme.pendingTextColor;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (value != null) {\n var column = this.sourceColumn(x, y);\n return IrisGridUtils.colorForValue(theme, column.type, column.name, value);\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n assertNotNull(theme.errorTextColor);\n return theme.errorTextColor;\n }\n return theme.textColor;\n }\n backgroundColorForCell(x, y, theme) {\n var _this$formatForCell$b, _this$formatForCell;\n return (_this$formatForCell$b = (_this$formatForCell = this.formatForCell(x, y)) === null || _this$formatForCell === void 0 ? void 0 : _this$formatForCell.backgroundColor) !== null && _this$formatForCell$b !== void 0 ? _this$formatForCell$b : null;\n }\n textAlignForCell(x, y) {\n var column = this.sourceColumn(x, y);\n var userTextAlignment = this.columnAlignmentMap.get(column.name);\n if (userTextAlignment != null) {\n return userTextAlignment;\n }\n return IrisGridUtils.textAlignForValue(column.type, column.name);\n }\n textForColumnHeader(x) {\n var _header$displayName;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var header = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(header)) {\n return header.isNew ? '' : header.name;\n }\n return (_header$displayName = header === null || header === void 0 ? void 0 : header.displayName) !== null && _header$displayName !== void 0 ? _header$displayName : header === null || header === void 0 ? void 0 : header.name;\n }\n colorForColumnHeader(x) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var column = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(column)) {\n var _column$color;\n return (_column$color = column.color) !== null && _column$color !== void 0 ? _column$color : null;\n }\n return null;\n }\n tooltipForCell(column, row) {\n if (TableUtils.isDateType(this.columns[column].type)) {\n return this.displayString(this.valueForCell(column, row), this.columns[column].type, this.columns[column].name, {\n formatString: DateUtils.FULL_DATE_FORMAT\n });\n }\n return null;\n }\n getColumnHeaderGroup(modelIndex, depth) {\n var group = this.columnAtDepth(modelIndex, depth);\n if (isColumnHeaderGroup(group)) {\n return group;\n }\n return undefined;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n var _this$columnAtDepth$n, _this$columnAtDepth;\n return this.columnHeaderParentMap.get((_this$columnAtDepth$n = (_this$columnAtDepth = this.columnAtDepth(modelIndex, depth)) === null || _this$columnAtDepth === void 0 ? void 0 : _this$columnAtDepth.name) !== null && _this$columnAtDepth$n !== void 0 ? _this$columnAtDepth$n : '');\n }\n columnAtDepth(x) {\n var _this$columns$x2;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (depth === 0) {\n return this.columns[x];\n }\n var columnName = (_this$columns$x2 = this.columns[x]) === null || _this$columns$x2 === void 0 ? void 0 : _this$columns$x2.name;\n var group = this.columnHeaderParentMap.get(columnName);\n if (!group) {\n return undefined;\n }\n var currentDepth = group.depth;\n while (currentDepth < depth) {\n group = this.columnHeaderParentMap.get(group.name);\n if (!group) {\n return undefined;\n }\n currentDepth = group.depth;\n }\n if (group.depth === depth) {\n return group;\n }\n return undefined;\n }\n textForRowFooter(y) {\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null && this.totals) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get initialMovedColumns() {\n var _this$layoutHints;\n return this.getMemoizedInitialMovedColumns((_this$layoutHints = this.layoutHints) !== null && _this$layoutHints !== void 0 ? _this$layoutHints : undefined);\n }\n get initialColumnHeaderGroups() {\n var _this$layoutHints2;\n return this.getMemoizedInitialColumnHeaderGroups((_this$layoutHints2 = this.layoutHints) !== null && _this$layoutHints2 !== void 0 ? _this$layoutHints2 : undefined);\n }\n get columnHeaderMaxDepth() {\n var _this$_columnHeaderMa;\n return (_this$_columnHeaderMa = this._columnHeaderMaxDepth) !== null && _this$_columnHeaderMa !== void 0 ? _this$_columnHeaderMa : 1;\n }\n set columnHeaderMaxDepth(depth) {\n this._columnHeaderMaxDepth = depth;\n }\n get columnHeaderGroupMap() {\n this.initializeColumnHeaderGroups();\n return this._columnHeaderGroupMap;\n }\n get columnHeaderGroups() {\n this.initializeColumnHeaderGroups();\n return this._columnHeaderGroups;\n }\n set columnHeaderGroups(groups) {\n if (groups === this._columnHeaderGroups) {\n return;\n }\n var {\n groups: newGroups,\n maxDepth,\n parentMap,\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, groups !== null && groups !== void 0 ? groups : this.initialColumnHeaderGroups);\n this._columnHeaderGroups = newGroups;\n this.columnHeaderMaxDepth = maxDepth;\n this.columnHeaderParentMap = parentMap;\n this._columnHeaderGroupMap = groupMap;\n this._isColumnHeaderGroupsInitialized = true;\n }\n initializeColumnHeaderGroups() {\n if (!this._isColumnHeaderGroupsInitialized) {\n var _this$layoutHints$col, _this$layoutHints3;\n this.columnHeaderGroups = IrisGridUtils.parseColumnHeaderGroups(this, (_this$layoutHints$col = (_this$layoutHints3 = this.layoutHints) === null || _this$layoutHints3 === void 0 ? void 0 : _this$layoutHints3.columnGroups) !== null && _this$layoutHints$col !== void 0 ? _this$layoutHints$col : []).groups;\n }\n }\n row(y) {\n var _this$totals$operatio4, _this$totals4, _this$totals$showOnTo, _this$totals5, _this$viewportData$of, _this$viewportData, _this$viewportData$ro, _this$viewportData2;\n var totalsRowCount = (_this$totals$operatio4 = (_this$totals4 = this.totals) === null || _this$totals4 === void 0 || (_this$totals4 = _this$totals4.operationOrder) === null || _this$totals4 === void 0 ? void 0 : _this$totals4.length) !== null && _this$totals$operatio4 !== void 0 ? _this$totals$operatio4 : 0;\n var showOnTop = (_this$totals$showOnTo = (_this$totals5 = this.totals) === null || _this$totals5 === void 0 ? void 0 : _this$totals5.showOnTop) !== null && _this$totals$showOnTo !== void 0 ? _this$totals$showOnTo : false;\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n var _this$totals6, _this$totalsDataMap$g, _this$totalsDataMap;\n var operation = (_this$totals6 = this.totals) === null || _this$totals6 === void 0 ? void 0 : _this$totals6.operationOrder[totalsRow];\n assertNotNull(operation);\n return (_this$totalsDataMap$g = (_this$totalsDataMap = this.totalsDataMap) === null || _this$totalsDataMap === void 0 ? void 0 : _this$totalsDataMap.get(operation)) !== null && _this$totalsDataMap$g !== void 0 ? _this$totalsDataMap$g : null;\n }\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n var _this$pendingNewDataM;\n return (_this$pendingNewDataM = this.pendingNewDataMap.get(pendingRow)) !== null && _this$pendingNewDataM !== void 0 ? _this$pendingNewDataM : null;\n }\n var offset = (_this$viewportData$of = (_this$viewportData = this.viewportData) === null || _this$viewportData === void 0 ? void 0 : _this$viewportData.offset) !== null && _this$viewportData$of !== void 0 ? _this$viewportData$of : 0;\n var viewportY = (showOnTop ? y - totalsRowCount : y) - offset;\n return (_this$viewportData$ro = (_this$viewportData2 = this.viewportData) === null || _this$viewportData2 === void 0 || (_this$viewportData2 = _this$viewportData2.rows) === null || _this$viewportData2 === void 0 ? void 0 : _this$viewportData2[viewportY]) !== null && _this$viewportData$ro !== void 0 ? _this$viewportData$ro : null;\n }\n\n /**\n * Retrieve the source column for given coordinates.\n * - Retrieve the totals column if this is a totals row\n * - Retrieve the source column if it's a proxied column\n * - Otherwise return the column at the given index\n * @param column Column index to get the source column from\n * @param row Row index to get the source column from\n */\n sourceColumn(column, row) {\n var totalsRow = this.totalsRow(row);\n if (totalsRow != null) {\n var _this$totals7, _this$totals$defaultO, _this$totals8, _this$totalsTable;\n var operation = (_this$totals7 = this.totals) === null || _this$totals7 === void 0 ? void 0 : _this$totals7.operationOrder[totalsRow];\n var defaultOperation = (_this$totals$defaultO = (_this$totals8 = this.totals) === null || _this$totals8 === void 0 ? void 0 : _this$totals8.defaultOperation) !== null && _this$totals$defaultO !== void 0 ? _this$totals$defaultO : AggregationOperation.SUM;\n var tableColumn = this.columns[column];\n\n // Find the matching totals table column for the operation\n // When there are multiple aggregations for the column, the column name will be the original name of the column with the operation appended afterward\n // When the the operation is the default operation OR there is only one operation for the column, then the totals column name is just the original column name\n var totalsColumn = (_this$totalsTable = this.totalsTable) === null || _this$totalsTable === void 0 ? void 0 : _this$totalsTable.columns.find(col => {\n var _this$totals9;\n return col.name === \"\".concat(tableColumn.name, \"__\").concat(operation) || (operation === defaultOperation || ((_this$totals9 = this.totals) === null || _this$totals9 === void 0 || (_this$totals9 = _this$totals9.operationMap[col.name]) === null || _this$totals9 === void 0 ? void 0 : _this$totals9.length) === 1) && col.name === tableColumn.name;\n });\n if (totalsColumn != null) {\n return totalsColumn;\n }\n // There may be cases were the totals table doesn't have a column, such as when there's a virtual column\n }\n return this.columns[column];\n }\n\n /**\n * Translate from the row in the model to a row in the totals table.\n * If the row is not a totals row, return null\n * @param y The row in the model to get the totals row for\n * @returns The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y) {\n var _this$totals$operatio5, _this$totals0, _this$totals$showOnTo2, _this$totals1;\n var totalsRowCount = (_this$totals$operatio5 = (_this$totals0 = this.totals) === null || _this$totals0 === void 0 || (_this$totals0 = _this$totals0.operationOrder) === null || _this$totals0 === void 0 ? void 0 : _this$totals0.length) !== null && _this$totals$operatio5 !== void 0 ? _this$totals$operatio5 : 0;\n var showOnTop = (_this$totals$showOnTo2 = (_this$totals1 = this.totals) === null || _this$totals1 === void 0 ? void 0 : _this$totals1.showOnTop) !== null && _this$totals$showOnTo2 !== void 0 ? _this$totals$showOnTo2 : false;\n var totalsRow = showOnTop ? y : y - this.table.size;\n if (totalsRow >= 0 && totalsRow < totalsRowCount) {\n return totalsRow;\n }\n return null;\n }\n\n /**\n * Translate from the row in the model to a pending input row.\n * If the row is not a pending input row, return null\n * @param y The row in the model to get the pending row for\n * @returns The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y) {\n if (!this.isEditable) {\n return null;\n }\n var pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0) {\n return pendingRow;\n }\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param y The row in the model to check if it's a totals table row\n * @returns True if the row is a totals row, false if not\n */\n isTotalsRow(y) {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param y The row in the model to check if it's a pending new row\n * @returns True if the row is a pending new row, false if not\n */\n isPendingRow(y) {\n return this.pendingRow(y) != null;\n }\n dataForCell(x, y) {\n var _this$row;\n return (_this$row = this.row(y)) === null || _this$row === void 0 ? void 0 : _this$row.data.get(x);\n }\n formatForCell(x, y) {\n var _this$dataForCell;\n return (_this$dataForCell = this.dataForCell(x, y)) === null || _this$dataForCell === void 0 ? void 0 : _this$dataForCell.format;\n }\n valueForCell(x, y) {\n var data = this.dataForCell(x, y);\n\n /* JS API current sets null values as undefined in some instances. This means \n we need to nullish coaelesce so all undefined values from the API return null \n since the data has been fetched. undefined is used to indicate the API has not \n fetched data yet */\n if (data) {\n var _data$value;\n return (_data$value = data.value) !== null && _data$value !== void 0 ? _data$value : null;\n }\n return undefined;\n }\n copyViewportData(data) {\n if (data == null) {\n log.warn('invalid data!');\n return;\n }\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n copyTotalsData(totalsData) {\n var _this$totals$defaultO2,\n _this$totals10,\n _this$totals11,\n _this = this;\n if (totalsData == null) {\n log.warn('invalid data!');\n return;\n }\n var {\n columns,\n rows\n } = totalsData;\n if (rows.length !== 1) {\n log.error('Unexpected number of rows received for totals table, ignoring update');\n return;\n }\n var dataMap = new Map();\n var row = rows[0];\n var defaultOperation = (_this$totals$defaultO2 = (_this$totals10 = this.totals) === null || _this$totals10 === void 0 ? void 0 : _this$totals10.defaultOperation) !== null && _this$totals$defaultO2 !== void 0 ? _this$totals$defaultO2 : AggregationOperation.SUM;\n var operationMap = (_this$totals11 = this.totals) === null || _this$totals11 === void 0 ? void 0 : _this$totals11.operationMap;\n var _loop = function _loop() {\n var _operationMap$name$, _operationMap$name;\n var column = columns[c];\n var [name, operation = (_operationMap$name$ = operationMap === null || operationMap === void 0 || (_operationMap$name = operationMap[name]) === null || _operationMap$name === void 0 ? void 0 : _operationMap$name[0]) !== null && _operationMap$name$ !== void 0 ? _operationMap$name$ : defaultOperation] = column.name.split('__');\n if (!dataMap.has(operation)) {\n dataMap.set(operation, {\n data: new Map()\n });\n }\n var {\n data: rowData\n } = dataMap.get(operation);\n var columnIndex = _this.columns.findIndex(col => col.name === name);\n rowData.set(columnIndex, {\n value: row.get(column),\n format: row.getFormat(column)\n });\n };\n for (var c = 0; c < columns.length; c += 1) {\n _loop();\n }\n log.debug2('copyTotalsData', dataMap);\n this.totalsDataMap = dataMap;\n this.formattedStringData = [];\n }\n\n /**\n * Use this as the canonical column index since things like layoutHints could have\n * changed the column order.\n */\n getColumnIndexByName(name) {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param data The data to copy from\n */\n extractViewportData(data) {\n var newData = {\n offset: data.offset,\n rows: []\n };\n var {\n columns\n } = data;\n for (var r = 0; r < data.rows.length; r += 1) {\n var row = data.rows[r];\n var newRow = this.extractViewportRow(row, columns);\n newData.rows.push(newRow);\n }\n return newData;\n }\n extractViewportRow(row, columns) {\n var data = new Map();\n for (var c = 0; c < columns.length; c += 1) {\n var column = columns[c];\n var index = this.getColumnIndexByName(column.name);\n data.set(index !== null && index !== void 0 ? index : column.name, {\n value: row.get(column),\n format: row.getFormat(column)\n });\n }\n return {\n data\n };\n }\n closeSubscription() {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = null;\n }\n this.setViewport.cancel();\n this.applyViewport.cancel();\n }\n get filter() {\n return this.table.filter;\n }\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n get formatter() {\n return this.irisFormatter;\n }\n set formatter(formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED));\n }\n get columnAlignmentMap() {\n return this.irisColumnAlignmentMap;\n }\n set columnAlignmentMap(columnAlignmentMap) {\n this.irisColumnAlignmentMap = columnAlignmentMap;\n }\n displayString(value, columnType) {\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var formatOverride = arguments.length > 3 ? arguments[3] : undefined;\n return this.getCachedFormattedString(this.formatter, value, columnType, columnName, formatOverride);\n }\n get sort() {\n return this.table.sort;\n }\n set sort(sort) {\n this.closeSubscription();\n this.table.applySort(this.irisGridUtils.hydrateDhSort(this.columns, sort));\n this.applyViewport();\n }\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n this.totals = totalsConfig;\n this.formattedStringData = [];\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n this.setTotalsTable(null);\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());\n this.totalsTablePromise.then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n setTotalsTable(totalsTable) {\n log.debug('setTotalsTable', totalsTable);\n if (this.totalsTable !== null) {\n if (this.listenerCount > 0) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.totalsTable.close();\n }\n this.totalsTable = totalsTable;\n this.totalsDataMap = null;\n if (this.listenerCount > 0 && this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n }\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.VIEWPORT_UPDATED));\n log.debug2('applyBufferedViewport', viewportTop, viewportBottom, columns);\n if (this.subscription == null) {\n var _this$table$setViewpo;\n log.debug2('applyBufferedViewport creating new subscription');\n this.subscription = (_this$table$setViewpo = this.table.setViewport(viewportTop, viewportBottom, columns)) !== null && _this$table$setViewpo !== void 0 ? _this$table$setViewpo : null;\n } else {\n log.debug2('applyBufferedViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n }\n snapshot(ranges) {\n var _arguments = arguments,\n _this2 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n var formatValue = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : value => value;\n var consolidateRanges = _arguments.length > 3 && _arguments[3] !== undefined ? _arguments[3] : true;\n if (_this2.subscription == null) {\n throw new Error('No subscription available');\n }\n var consolidated = consolidateRanges ? GridRange.consolidate(ranges) : ranges;\n if (!IrisGridUtils.isValidSnapshotRanges(consolidated)) {\n throw new Error(\"Invalid snapshot ranges \".concat(ranges));\n }\n\n // Need to separate out the floating ranges as they're from a different source\n var topFloatingRowsSet = new Set();\n var tableRanges = [];\n var bottomFloatingRowsSet = new Set();\n for (var i = 0; i < consolidated.length; i += 1) {\n var range = consolidated[i];\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n // Get the rows that are in the top aggregations section\n for (var r = range.startRow; r <= range.endRow && r < _this2.floatingTopRowCount; r += 1) {\n topFloatingRowsSet.add(r);\n }\n\n // Separate out the range that is part of the actual table (ie. not the floating ranges, not aggregations)\n if (range.endRow >= _this2.floatingTopRowCount && range.startRow <= _this2.floatingTopRowCount + _this2.table.size) {\n tableRanges.push(new GridRange(range.startColumn, Math.min(Math.max(0, range.startRow - _this2.floatingTopRowCount)), range.endColumn, Math.min(Math.max(0, range.endRow - _this2.floatingTopRowCount), _this2.table.size - _this2.floatingTopRowCount)));\n }\n // Get the rows that are in the bottom aggregations section\n for (var _r = Math.max(range.startRow, _this2.floatingTopRowCount + _this2.table.size); _r <= range.endRow && _r < _this2.floatingTopRowCount + _this2.table.size + _this2.floatingBottomRowCount; _r += 1) {\n bottomFloatingRowsSet.add(_r);\n }\n }\n var columns = IrisGridUtils.columnsFromRanges(consolidated, _this2.columns);\n var result = [];\n if (includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var topFloatingRows = [...topFloatingRowsSet].sort();\n var _loop2 = function* _loop2() {\n var row = topFloatingRows[_i];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i = 0; _i < topFloatingRows.length; _i += 1) {\n yield* _loop2();\n }\n if (tableRanges.length > 0) {\n var rangeSet = _this2.irisGridUtils.rangeSetFromRanges(tableRanges);\n var snapshot = yield _this2.subscription.snapshot(rangeSet, columns);\n result.push(...snapshot.rows.map(rowData => columns.map(column => formatValue(rowData.get(column), column))));\n }\n var bottomFloatingRows = [...bottomFloatingRowsSet].sort();\n var _loop3 = function* _loop3() {\n var row = bottomFloatingRows[_i2];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i2 = 0; _i2 < bottomFloatingRows.length; _i2 += 1) {\n yield* _loop3();\n }\n return result;\n })();\n }\n\n /**\n * Get a text snapshot of the provided ranges\n * @param ranges The ranges to get the snapshot for\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue Function for formatting the raw value into a string\n * @returns A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n textSnapshot(ranges) {\n var _arguments2 = arguments,\n _this3 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : false;\n var formatValue = _arguments2.length > 2 && _arguments2[2] !== undefined ? _arguments2[2] : value => \"\".concat(value);\n log.debug2('textSnapshot', ranges, includeHeaders);\n var data = yield _this3.snapshot(ranges, includeHeaders, formatValue, false);\n return data.map(row => row.join('\\t')).join('\\n');\n })();\n }\n valuesTable(columns) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var table = null;\n try {\n table = yield _this4.table.copy();\n table.applyFilter([]);\n table.applySort([]);\n return yield table.selectDistinct(Array.isArray(columns) ? columns : [columns]);\n } finally {\n if (table != null) {\n table.close();\n }\n }\n })();\n }\n isColumnMovable(modelIndex, depth) {\n if (modelIndex < 0 || modelIndex >= this.columnCount) {\n return false;\n }\n\n // All groups are movable\n if (depth > 0) {\n return true;\n }\n var columnName = this.columns[modelIndex].name;\n if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName) || !columnName) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n isColumnSortable(modelIndex) {\n var _this$columns$modelIn;\n return (_this$columns$modelIn = this.columns[modelIndex].isSortable) !== null && _this$columns$modelIn !== void 0 ? _this$columns$modelIn : true;\n }\n isKeyColumn(x) {\n return this.keyColumnSet.has(this.columns[x].name);\n }\n isValueColumn(x) {\n return this.valueColumnSet.has(this.columns[x].name);\n }\n isRowMovable() {\n return false;\n }\n isEditableRange(range) {\n var _range$endColumn;\n // Make sure we have an input table and a valid range\n if (this.inputTable == null || range.startRow == null || range.endRow == null) {\n return false;\n }\n\n // Check that the edit is in the editable range\n // If an input table has keyed columns, the non-key columns are always editable\n // If an input table does not have key columns, it is append only and existing rows cannot be editable\n // Pending rows are always editable\n var isPendingRange = this.isPendingRow(range.startRow) && this.isPendingRow(range.endRow);\n var isKeyColumnInRange = false;\n assertNotNull(range.startColumn);\n // Check if any of the columns in grid range are key columns\n var bound = (_range$endColumn = range.endColumn) !== null && _range$endColumn !== void 0 ? _range$endColumn : this.table.size;\n for (var column = range.startColumn; column <= bound; column += 1) {\n var isKey = this.isKeyColumn(column);\n var isValue = this.isValueColumn(column);\n if (!isKey && !isValue) {\n // If any column is not a key or value column, range is not editable\n return false;\n }\n if (isKey) {\n isKeyColumnInRange = true;\n break;\n }\n }\n if (!(isPendingRange || this.keyColumnSet.size !== 0 && !isKeyColumnInRange)) {\n return false;\n }\n return true;\n }\n isDeletableRange(range) {\n return this.inputTable != null && range.startRow != null && range.endRow != null && range.startRow >= this.floatingTopRowCount && range.startRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount && range.endRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount;\n }\n isEditableRanges(ranges) {\n return ranges.every(range => this.isEditableRange(range));\n }\n isDeletableRanges(ranges) {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns A range corresponding to the underlying table\n */\n getTableAreaRange() {\n return new GridRange(null, this.floatingTopRowCount, null, this.floatingTopRowCount + this.table.size - 1);\n }\n\n /**\n * @returns A range corresponding to the pending new rows\n */\n getPendingAreaRange() {\n return new GridRange(null, this.floatingTopRowCount + this.table.size, null, this.floatingTopRowCount + this.table.size + this.pendingNewRowCount - 1);\n }\n\n /**\n * Set value in an editable table\n * @param x The column to set\n * @param y The row to set\n * @param value The value to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForCell(x, y, text) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n return _this5.setValueForRanges([new GridRange(x, y, x, y)], text);\n })();\n }\n\n /**\n * Set value in an editable table\n * @param ranges The ranges to set\n * @param value The values to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForRanges(ranges, text) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n if (!_this6.isEditableRanges(ranges)) {\n throw new Error(\"Edits contain uneditable ranges\");\n }\n try {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n var columnSet = new Set();\n\n // Formatted text for each column\n // Since there could be different formatting for each column, but the value will be the same across rows\n var formattedText = [];\n GridRange.forEachCell(ranges, (x, y) => {\n var column = _this6.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n var value = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n formattedText[x] = value != null ? _this6.displayString(value, column.type, column.name) : null;\n }\n _this6.cachePendingValue(x, y, formattedText[x]);\n });\n\n // Take care of updates to the pending new area first, as they can be updated synchronously\n var pendingAreaRange = _this6.getPendingAreaRange();\n var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {\n assertNotNull(range);\n return GridRange.offset(range, 0, -(_this6.floatingTopRowCount + _this6.table.size));\n });\n if (pendingRanges.length > 0) {\n var newDataMap = new Map(_this6.pendingNewDataMap);\n GridRange.forEachCell(pendingRanges, (columnIndex, rowIndex) => {\n if (!newDataMap.has(rowIndex)) {\n newDataMap.set(rowIndex, {\n data: new Map()\n });\n }\n var column = _this6.columns[columnIndex];\n var row = newDataMap.get(rowIndex);\n assertNotNull(row);\n var {\n data: rowData\n } = row;\n var newRowData = new Map(rowData);\n var value = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n if (value != null) {\n newRowData.set(columnIndex, {\n value\n });\n } else {\n newRowData.delete(columnIndex);\n }\n if (newRowData.size > 0) {\n newDataMap.set(rowIndex, _objectSpread(_objectSpread({}, row), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(rowIndex);\n }\n });\n _this6.pendingDataMap = newDataMap;\n }\n _this6.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n var tableAreaRange = _this6.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this6$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this6.snapshot(tableRanges.map(range => {\n var _range$startRow, _range$endRow;\n return new GridRange(null, (_range$startRow = range === null || range === void 0 ? void 0 : range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : null, null, (_range$endRow = range === null || range === void 0 ? void 0 : range.endRow) !== null && _range$endRow !== void 0 ? _range$endRow : null);\n }));\n var newRows = data.map(row => {\n var newRow = {};\n for (var c = 0; c < _this6.columns.length; c += 1) {\n newRow[_this6.columns[c].name] = row[c];\n }\n columnSet.forEach(column => {\n newRow[column.name] = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n });\n return newRow;\n });\n var result = yield (_this6$inputTable = _this6.inputTable) === null || _this6$inputTable === void 0 ? void 0 : _this6$inputTable.addRows(newRows);\n log.debug('setValueForRanges(', ranges, ',', text, ') set tableRanges', tableRanges, 'result', result);\n }\n\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n GridRange.forEachCell(ranges, (x, y) => {\n var cellText = formattedText[x];\n assertNotNull(cellText);\n _this6.cacheFormattedValue(x, y, cellText);\n });\n } catch (err) {\n log.error('Unable to set ranges', ranges, text, err);\n } finally {\n GridRange.forEachCell(ranges, (x, y) => {\n _this6.clearPendingValue(x, y);\n });\n }\n })();\n }\n setValues() {\n var _arguments3 = arguments,\n _this7 = this;\n return _asyncToGenerator(function* () {\n var edits = _arguments3.length > 0 && _arguments3[0] !== undefined ? _arguments3[0] : [];\n log.debug('setValues(', edits, ')');\n if (!edits.every(edit => {\n var _edit$column, _edit$row;\n return _this7.isEditableRange(GridRange.makeCell((_edit$column = edit.column) !== null && _edit$column !== void 0 ? _edit$column : edit.x, (_edit$row = edit.row) !== null && _edit$row !== void 0 ? _edit$row : edit.y));\n })) {\n throw new Error(\"Edits contain uneditable ranges\");\n }\n try {\n var newDataMap = new Map(_this7.pendingNewDataMap);\n\n // Cache the display values\n edits.forEach(edit => {\n var _edit$column2, _edit$row2;\n var {\n text\n } = edit;\n var x = (_edit$column2 = edit.column) !== null && _edit$column2 !== void 0 ? _edit$column2 : edit.x;\n var y = (_edit$row2 = edit.row) !== null && _edit$row2 !== void 0 ? _edit$row2 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cachePendingValue(x, y, formattedText);\n\n // Take care of updates to the pending new area as well, as that can be updated synchronously\n var pendingRow = _this7.pendingRow(y);\n if (pendingRow != null) {\n if (!newDataMap.has(pendingRow)) {\n newDataMap.set(pendingRow, {\n data: new Map()\n });\n }\n var row = newDataMap.get(pendingRow);\n assertNotNull(row);\n var {\n data: rowData\n } = row;\n var newRowData = new Map(rowData);\n if (value != null) {\n newRowData.set(x, {\n value\n });\n } else {\n newRowData.delete(x);\n }\n if (newRowData.size > 0) {\n newDataMap.set(pendingRow, _objectSpread(_objectSpread({}, row), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(pendingRow);\n }\n }\n });\n _this7.pendingDataMap = newDataMap;\n\n // Send an update right after setting the pending map so the values are displayed immediately\n _this7.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n\n // Need to group by row...\n var rowEditMap = edits.reduce((rowMap, edit) => {\n var _edit$row3, _rowMap$get;\n var y = (_edit$row3 = edit.row) !== null && _edit$row3 !== void 0 ? _edit$row3 : edit.y;\n if (!rowMap.has(y)) {\n rowMap.set(y, []);\n }\n (_rowMap$get = rowMap.get(y)) === null || _rowMap$get === void 0 || _rowMap$get.push(edit);\n return rowMap;\n }, new Map());\n var ranges = GridRange.consolidate(edits.map(edit => {\n var _edit$column3, _edit$row4;\n return GridRange.makeCell((_edit$column3 = edit.column) !== null && _edit$column3 !== void 0 ? _edit$column3 : edit.x, (_edit$row4 = edit.row) !== null && _edit$row4 !== void 0 ? _edit$row4 : edit.y);\n }));\n var tableAreaRange = _this7.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this7$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this7.snapshot(tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(null, range.startRow, null, range.endRow);\n }));\n var newRows = data.map((row, dataIndex) => {\n var rowIndex = null;\n var r = dataIndex;\n for (var i = 0; i < tableRanges.length; i += 1) {\n var range = tableRanges[i];\n assertNotNull(range);\n var rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n assertNotNull(range.startRow);\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n var newRow = {};\n for (var c = 0; c < _this7.columns.length; c += 1) {\n newRow[_this7.columns[c].name] = row[c];\n }\n assertNotNull(rowIndex);\n var rowEdits = rowEditMap.get(rowIndex);\n if (rowEdits != null) {\n rowEdits.forEach(edit => {\n var _edit$column4;\n var column = _this7.columns[(_edit$column4 = edit.column) !== null && _edit$column4 !== void 0 ? _edit$column4 : edit.x];\n newRow[column.name] = _this7.tableUtils.makeValue(column.type, edit.text, _this7.formatter.timeZone);\n });\n }\n return newRow;\n });\n log.info('setValues setting tableRanges', tableRanges);\n var result = yield (_this7$inputTable = _this7.inputTable) === null || _this7$inputTable === void 0 ? void 0 : _this7$inputTable.addRows(newRows);\n log.info('setValues set tableRanges', tableRanges, 'SUCCESS', result);\n }\n\n // We've sent the changes to the server, but have not yet got an update with those changes committed\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n edits.forEach(edit => {\n var _edit$column5, _edit$row5;\n var {\n text\n } = edit;\n var x = (_edit$column5 = edit.column) !== null && _edit$column5 !== void 0 ? _edit$column5 : edit.x;\n var y = (_edit$row5 = edit.row) !== null && _edit$row5 !== void 0 ? _edit$row5 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cacheFormattedValue(x, y, formattedText);\n });\n } finally {\n edits.forEach(edit => {\n _this7.clearPendingValue(edit.column, edit.row);\n });\n }\n })();\n }\n commitPending() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (_this8.pendingNewDataMap.size <= 0) {\n throw new Error('No pending changes to commit');\n }\n try {\n var _this8$inputTable, _this8$viewport$botto, _this8$viewport;\n _this8.isSaveInProgress = true;\n var newRows = [];\n _this8.pendingNewDataMap.forEach(row => {\n var newRow = {};\n row.data.forEach((_ref2, columnIndex) => {\n var {\n value\n } = _ref2;\n var columnName = typeof columnIndex === 'string' ? columnIndex : _this8.columns[columnIndex].name;\n newRow[columnName] = value;\n });\n newRows.push(newRow);\n });\n var result = yield (_this8$inputTable = _this8.inputTable) === null || _this8$inputTable === void 0 ? void 0 : _this8$inputTable.addRows(newRows);\n log.debug('commitPending()', _this8.pendingNewDataMap, 'result', result);\n _this8.pendingNewDataMap = new Map();\n _this8.pendingNewRowCount = Math.max(0, ((_this8$viewport$botto = (_this8$viewport = _this8.viewport) === null || _this8$viewport === void 0 ? void 0 : _this8$viewport.bottom) !== null && _this8$viewport$botto !== void 0 ? _this8$viewport$botto : 0) - _this8.table.size);\n _this8.formattedStringData = [];\n _this8.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n } finally {\n _this8.isSaveInProgress = false;\n }\n })();\n }\n editValueForCell(column, row) {\n var _this$textValueForCel;\n return (_this$textValueForCel = this.textValueForCell(column, row)) !== null && _this$textValueForCel !== void 0 ? _this$textValueForCel : '';\n }\n delete(ranges) {\n return _asyncToGenerator(function* () {\n throw new Error('Delete not implemented');\n })();\n }\n isValidForCell(x, y, value) {\n try {\n var column = this.columns[x];\n this.tableUtils.makeValue(column.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n_defineProperty(IrisGridTableModelTemplate, \"ROW_BUFFER_PAGES\", 1);\nexport default IrisGridTableModelTemplate;\n//# sourceMappingURL=IrisGridTableModelTemplate.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction 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; }\nfunction _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; }\nfunction _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; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull, EMPTY_ARRAY, EventShimCustomEvent } from '@deephaven/utils';\nimport IrisGridTableModelTemplate from \"./IrisGridTableModelTemplate.js\";\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nvar log = Log.module('IrisGridTreeTableModel');\nvar VirtualGroupColumn = Object.freeze({\n name: '__DH_UI_GROUP__',\n displayName: 'Group',\n type: TableUtils.dataType.STRING,\n constituentType: TableUtils.dataType.STRING,\n isPartitionColumn: false,\n isSortable: false,\n isProxy: true,\n description: 'Key column',\n index: -1,\n filter: () => {\n throw new Error('Filter not implemented for virtual column');\n },\n sort: () => {\n throw new Error('Sort not implemented for virtual column');\n },\n formatColor: () => {\n throw new Error('Color not implemented for virtual column');\n },\n get: () => {\n throw new Error('get not implemented for virtual column');\n },\n getFormat: () => {\n throw new Error('getFormat not implemented for virtual column');\n },\n formatNumber: () => {\n throw new Error('formatNumber not implemented for virtual column');\n },\n formatDate: () => {\n throw new Error('formatDate not implemented for virtual column');\n }\n});\n/**\n * Check if a row is a UITreeRow\n * @param row The row to check\n * @returns True if the row is a UITreeRow and false otherwise\n */\nexport function isUITreeRow(row) {\n return row != null && typeof row === 'object' && 'hasChildren' in row && 'isExpanded' in row && 'depth' in row && typeof row.hasChildren === 'boolean' && typeof row.isExpanded === 'boolean' && typeof row.depth === 'number';\n}\nfunction isLayoutTreeTable(table) {\n return table.layoutHints !== undefined;\n}\nexport function isIrisGridTreeTableModel(tableModel) {\n return tableModel.showExtraGroupColumn != null;\n}\nclass IrisGridTreeTableModel extends IrisGridTableModelTemplate {\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var columnAlignmentMap = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new Map();\n super(dh, table, formatter, inputTable, columnAlignmentMap);\n /** We keep a virtual column at the front that tracks the \"group\" that is expanded */\n _defineProperty(this, \"virtualColumns\", void 0);\n _defineProperty(this, \"showExtraGroupCol\", true);\n _defineProperty(this, \"getCachedColumns\", memoize((virtualColumns, tableColumns) => [...virtualColumns, ...tableColumns]));\n _defineProperty(this, \"getCachedGroupColumns\", memoize((virtualColumns, tableGroupedColumns) => [...virtualColumns, ...tableGroupedColumns]));\n _defineProperty(this, \"getCachedFilterableColumnSet\", memoize((columns, isAggregatedColumnsAvailable, aggregatedColumns, groupedColumns, virtualColumns) => {\n if (isAggregatedColumnsAvailable) {\n return new Set(\n // Virtual and aggregated columns are not filterable\n columns.filter(c => !virtualColumns.includes(c) && !aggregatedColumns.includes(c)).map(c1 => columns.findIndex(c2 => c1.name === c2.name)));\n }\n // For compatibility with the Enterprise JSAPI,\n // only groupedColumns are filterable on rollup tables\n // if aggregatedColumns API is not available.\n return new Set(((groupedColumns === null || groupedColumns === void 0 ? void 0 : groupedColumns.length) > 0 ? groupedColumns : columns).filter(c => !virtualColumns.includes(c)).map(c1 => columns.findIndex(c2 => c1.name === c2.name)));\n }));\n _defineProperty(this, \"getCachedGroupedColumnSet\", memoize(groupedColumns => new Set(groupedColumns.map(c1 => this.columns.findIndex(c2 => c1.name === c2.name)))));\n this.virtualColumns = this.showExtraGroupColumn && table.groupedColumns.length > 1 ? [VirtualGroupColumn] : [];\n }\n get showExtraGroupColumn() {\n return this.showExtraGroupCol;\n }\n set showExtraGroupColumn(showExtraGroupCol) {\n if (this.showExtraGroupCol === showExtraGroupCol) {\n return;\n }\n this.showExtraGroupCol = showExtraGroupCol;\n this.updateVirtualColumns();\n }\n updateVirtualColumns() {\n this.virtualColumns = this.showExtraGroupColumn && this.table.groupedColumns.length > 1 ? [VirtualGroupColumn] : [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns\n }));\n }\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n var viewportColumns = [\n // Need to always fetch the grouped columns so we always have key data for the rows\n // Used to display our virtual key column\n ...this.table.groupedColumns, ...columns.filter(c => !this.virtualColumns.includes(c) && !this.groupedColumns.includes(c))];\n this.table.setViewport(viewportTop, viewportBottom, viewportColumns);\n }\n textForCell(x, y) {\n var column = this.sourceColumn(x, y);\n var row = this.row(y);\n if (row != null && column != null) {\n if (!row.hasChildren && column.constituentType != null) {\n var _this$columns$x;\n var value = this.valueForCell(x, y);\n var text = this.displayString(value, column.constituentType, column.name);\n if (TableUtils.isTextType((_this$columns$x = this.columns[x]) === null || _this$columns$x === void 0 ? void 0 : _this$columns$x.type)) {\n if (value === null) {\n return this.formatter.showNullStrings ? 'null' : '';\n }\n if (text === '') {\n return this.formatter.showEmptyStrings ? 'empty' : '';\n }\n }\n return text;\n }\n\n // Show empty string instead of null in rollup grouping columns (issue #1483)\n if (row.hasChildren && row.depth <= x + 1 && this.valueForCell(x, y) === null && this.getCachedGroupedColumnSet(this.groupedColumns).has(x)) {\n return '';\n }\n }\n return super.textForCell(x, y);\n }\n colorForCell(x, y, theme) {\n var data = this.dataForCell(x, y);\n if (data) {\n var {\n format,\n value\n } = data;\n if (value == null || value === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if ((format === null || format === void 0 ? void 0 : format.color) != null && format.color !== '') {\n return format.color;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (value != null) {\n var column = this.sourceColumn(x, y);\n var row = this.row(y);\n assertNotNull(row);\n var columnTypeForFormatting = column.type;\n\n // For tree table leaf nodes, use the constituent type for formatting\n if (isUITreeRow(row) && row.hasChildren === false && column.constituentType != null) {\n columnTypeForFormatting = column.constituentType;\n }\n return IrisGridUtils.colorForValue(theme, columnTypeForFormatting, column.name, value);\n }\n }\n return theme.textColor;\n }\n textAlignForCell(x, y) {\n var _this$columnAlignment;\n var column = this.sourceColumn(x, y);\n var userTextAlignment = (_this$columnAlignment = this.columnAlignmentMap) === null || _this$columnAlignment === void 0 ? void 0 : _this$columnAlignment.get(column.name);\n if (userTextAlignment != null) {\n return userTextAlignment;\n }\n var row = this.row(y);\n var typeForFormatting = column.type;\n\n // For tree table leaf nodes, use the constituent type for formatting\n if (isUITreeRow(row) && row.hasChildren === false && column.constituentType != null) {\n typeForFormatting = column.constituentType;\n }\n return IrisGridUtils.textAlignForValue(typeForFormatting, column.name);\n }\n extractViewportRow(row, columns) {\n var {\n isExpanded,\n hasChildren,\n depth\n } = row;\n var extractedRow = super.extractViewportRow(row, columns);\n var modifiedData = new Map(extractedRow.data);\n if (hasChildren) {\n for (var i = 0; i < this.virtualColumns.length; i += 1) {\n var key = i + (depth - 1) + (this.virtualColumns.length - 1);\n var cellData = modifiedData.get(key);\n if (cellData == null) {\n log.warn('Missing key data for virtual column', i, depth, key, row);\n } else {\n modifiedData.set(i, cellData);\n }\n }\n }\n return _objectSpread(_objectSpread({}, extractedRow), {}, {\n data: modifiedData,\n isExpanded,\n hasChildren,\n depth\n });\n }\n snapshot(ranges, includeHeaders) {\n var _arguments = arguments,\n _this = this;\n return _asyncToGenerator(function* () {\n var _this$viewport$column;\n var formatValue = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : value => value;\n assertNotNull(_this.viewport);\n assertNotNull(_this.viewportData);\n var columns = (_this$viewport$column = _this.viewport.columns) !== null && _this$viewport$column !== void 0 ? _this$viewport$column : _this.columns;\n var result = [];\n if (includeHeaders != null && includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var viewportRange = new GridRange(0, _this.viewportData.offset, columns.length, _this.viewportData.offset + _this.viewportData.rows.length - 1);\n for (var i = 0; i < ranges.length; i += 1) {\n var intersection = GridRange.intersection(viewportRange, ranges[i]);\n assertNotNull(intersection);\n assertNotNull(intersection.startRow);\n assertNotNull(intersection.endRow);\n for (var r = intersection.startRow; r <= intersection.endRow; r += 1) {\n var resultRow = [];\n var viewportRow = _this.viewportData.rows[r - _this.viewportData.offset];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (var c = intersection.startColumn; c <= intersection.endColumn; c += 1) {\n var _viewportRow$data$get;\n resultRow.push(formatValue((_viewportRow$data$get = viewportRow.data.get(c)) === null || _viewportRow$data$get === void 0 ? void 0 : _viewportRow$data$get.value, _this.columns[c]));\n }\n result.push(resultRow);\n }\n }\n return result;\n })();\n }\n get columns() {\n return this.getCachedColumns(this.virtualColumns, super.columns);\n }\n get aggregatedColumns() {\n return this.isAggregatedColumnsAvailable ? this.table.aggregatedColumns : EMPTY_ARRAY;\n }\n get groupedColumns() {\n return this.getCachedGroupColumns(this.virtualColumns, this.table.groupedColumns);\n }\n sourceForCell(column, row) {\n if (column >= this.virtualColumns.length) {\n return {\n column,\n row\n };\n }\n var depth = this.depthForRow(row);\n return {\n column: column + depth,\n row\n };\n }\n sourceColumn(column, row) {\n if (column >= this.virtualColumns.length) {\n return super.sourceColumn(column, row);\n }\n var depth = this.depthForRow(row);\n return this.columns[column + depth];\n }\n getClearFilterRange(column) {\n if (column >= this.virtualColumns.length) {\n return super.getClearFilterRange(column);\n }\n // Source for the proxied column could be any of the grouped columns.\n // Return the range of columns matching the grouped columns.\n return [this.virtualColumns.length, this.groupedColumns.length];\n }\n get layoutHints() {\n if (isLayoutTreeTable(this.table)) {\n return this.table.layoutHints;\n }\n return undefined;\n }\n get hasExpandableRows() {\n return true;\n }\n get isAggregatedColumnsAvailable() {\n return (\n // aggregatedColumns are not available in the Legacy API\n // and Core API before v0.39.4\n this.table.aggregatedColumns !== undefined\n );\n }\n get isExpandAllAvailable() {\n return this.table.expandAll !== undefined;\n }\n get isChartBuilderAvailable() {\n return false;\n }\n get isOrganizeColumnsAvailable() {\n return true;\n }\n get isSelectDistinctAvailable() {\n return false;\n }\n get isReversible() {\n return false;\n }\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns, this.isAggregatedColumnsAvailable, this.aggregatedColumns, this.groupedColumns, this.virtualColumns).has(columnIndex);\n }\n isColumnMovable(column) {\n return column >= this.groupedColumns.length;\n }\n isRowExpandable(y) {\n var _row$hasChildren;\n var row = this.row(y);\n return (_row$hasChildren = row === null || row === void 0 ? void 0 : row.hasChildren) !== null && _row$hasChildren !== void 0 ? _row$hasChildren : false;\n }\n isRowExpanded(y) {\n var _row$isExpanded;\n var row = this.row(y);\n return (_row$isExpanded = row === null || row === void 0 ? void 0 : row.isExpanded) !== null && _row$isExpanded !== void 0 ? _row$isExpanded : false;\n }\n setRowExpanded(y, isExpanded) {\n var expandDescendants = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (this.isExpandAllAvailable) {\n this.table.setExpanded(y, isExpanded, expandDescendants);\n } else {\n this.table.setExpanded(y, isExpanded);\n }\n }\n expandAll() {\n if (this.table.expandAll != null) {\n this.table.expandAll();\n }\n }\n collapseAll() {\n if (this.table.collapseAll != null) {\n this.table.collapseAll();\n }\n }\n depthForRow(y) {\n var _row$depth;\n var row = this.row(y);\n return ((_row$depth = row === null || row === void 0 ? void 0 : row.depth) !== null && _row$depth !== void 0 ? _row$depth : 1) - 1;\n }\n updateFrozenColumns(columns) {\n if (columns.length > 0) {\n throw new Error('Cannot freeze columns on a tree table');\n }\n }\n}\nexport default IrisGridTreeTableModel;\n//# sourceMappingURL=IrisGridTreeTableModel.js.map","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; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nclass MissingPartitionError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isMissingPartitionError\", true);\n }\n}\nexport function isMissingPartitionError(err) {\n return (err === null || err === void 0 ? void 0 : err.isMissingPartitionError) === true;\n}\nexport default MissingPartitionError;\n//# sourceMappingURL=MissingPartitionError.js.map"],"names":["isNotNullOrUndefined","value","getLabelForTextFilter","filterType","Type","getLabelForNumberFilter","getLabelForDateFilter","getLabelForBooleanFilter","AdvancedSettingsType","DEFAULTS","AdvancedSettings","AggregationOperation","SELECTABLE_OPTIONS","isRollupOperation","type","isRollupProhibited","isValidOperation","operationType","columnType","TableUtils","filterValidColumns","columns","c","getOperationColumnNames","selected","invert","_ref","name","AggregationUtils","_defineProperty","e","r","_toPropertyKey","t","i","_toPrimitive","log","Log","isColumnHeaderGroup","x","ColumnHeaderGroup","children","color","depth","childIndexes","parent","memoizeOne","movedItems","flattenedIndexes","visibleIndexes","GridUtils","start","end","newChildren","isPartitionedGridModelProvider","model","isPartitionedGridModel","_excluded","_excluded2","_objectWithoutProperties","o","_objectWithoutPropertiesLoose","n","ownKeys","_objectSpread","isPanelStateV1","state","isPanelStateV2","isValidIndex","array","isDateWrapper","IrisGridUtils","gridState","isStuckToBottom","isStuckToRight","movedColumns","movedRows","to","from","_ref2","customColumns","customColumnNames","columnNames","_ref3","_ref4","getIndex","_ref5","irisGridPanelState","isSelectingPartition","partitions","advancedSettings","quickFilters","_ref6","columnIndex","quickFilter","text","sorts","sort","column","isAbs","direction","panelState","inputFilters","irisGridState","advancedFilters","_ref7","_ref8","columnName","filterMap","filters","keys","key","item","userColumnWidths","_ref9","_ref0","customColumn","oldCustomColumns","oldCustomColumnsNames","oldCustomColumnName","removedColumnNames","_ref1","newFilter","_ref10","newMoves","_loop","removedColumnName","removedColumnIndex","moves","j","move","newMove","fromStart","fromEnd","selectDistinctColumns","tableColumns","left","right","hiddenColumns","modelIndex","startIndex","count","viewportColumns","alwaysFetchColumnNames","columnsToFetch","_ref11","bufferPages","columnsCenter","bufferWidth","columnsLeft","columnsRight","bufferedColumns","ranges","rangeMap","range","rowMapIndex","columnMapIndex","matchColumnRanges","_i","allColumns","columnSet","assertNotNull","_range$startColumn","_range$endColumn","data","rows","result","row","rowData","originalColumns","config","aggregationSettings","_config$columns$lengt","_config$columns","groupingColumns","includeConstituents","showNonAggregatedColumns","includeDescriptions","aggregations","filteredAggregations","_ref12","operation","aggregationColumns","_ref13","aggregationMap","nonAggregatedColumnSet","_aggregationMap$Aggre","existingColumns","pendingDataMap","rowIndex","_ref14","_ref15","_ref16","filter","index","filterConfig","filterList","a","b","combinedText","operator","symbol","filterText","groupsParam","makeColumnHeaderGroup","args","maxDepth","parentMap","groupMap","groups","_ref17","originalGroupMap","group","seenChildren","addGroup","_group$children","existingGroup","childName","childGroup","childIndex","addedGroup","headerGroupConfig","columnHeaderGroup","groupNames","_parentMap$get","date","offset","offsetDate","dateText","formattedText","dh","bindAllMethods","EMPTY_ARRAY","customColumnFormatMap","columnAlignmentMap","EMPTY_MAP","isFilterBarShown","userRowHeights","conditionalFormats","reverse","rollupConfig","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","frozenColumns","columnHeaderGroups","partitionConfig","partitionColumns","_ref18","_ref19","width","_item$color","_ref23","_model$layoutHints","reverseType","formatter","_ref20","_ref21","_ref22","savedQuickFilters","timeZone","importedFilters","_ref24","error","_ref25","advancedFilter","options","savedAdvancedFilters","_ref26","columnRetrieved","selectedValues","otherOptions","_ref27","_ref28","_ref29","columnMap","getColumnIndex","_ref30","_ref31","_ref32","_getColumnIndex","partition","DateUtils","dropReverse","columnIndexOrName","sortDescriptor","columnSort","table","tableSettings","partitionColumnNames","partitionColumnName","partitionFilter","_ref33","_ref34","rangeSets","startRow","endRow","theme","MissingKeyError","asyncGeneratorStep","u","_asyncToGenerator","_next","_throw","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","isIrisGridTableModelTemplate","IrisGridTableModelTemplate","IrisGridModel","valueType","insensitive","contains","isBackwards","formatColumns","names","_formatter","Formatter","inputTable","memoize","layoutHints","_layoutHints$columnGr","_layoutHints$frontCol","_layoutHints$backColu","_layoutHints$frozenCo","moveColumn","toIndex","visibleIndex","moveGroup","visibleRange","frontColumns","backColumns","usedColumns","frontIndex","backIndex","layoutHintColumnGroups","columnGroups","firstChildName","rightModelIndex","rightVisibleIndex","firstChildGroup","childColumn","isBeforeGroup","moveToIndex","_isBeforeGroup","_moveToIndex","_layoutHints$columnGr2","indices","throttle","top","bottom","viewport","viewportTop","viewportBottom","memoizeClear","formatOverride","FormatterUtils","viewHeight","keyColumnCount","map","_map$get","totalsTable","EventShimCustomEvent","event","_this$totals$operatio","_this$totals","_this$inputTable$keyC","_this$inputTable","_this$totals$operatio2","_this$totals2","_this$totals$operatio3","_this$totals3","pendingTop","pendingBottom","pendingLeft","pendingRight","y","_this$pendingStringDa","_this$formattedString","hasCustomColumnFormat","formatForCell","_this$columns$x","pendingRow","format","_this$formatForCell$b","_this$formatForCell","userTextAlignment","_header$displayName","header","_column$color","_this$columnAtDepth$n","_this$columnAtDepth","_this$columns$x2","currentDepth","totalsRow","_this$layoutHints","_this$layoutHints2","_this$_columnHeaderMa","newGroups","_this$layoutHints$col","_this$layoutHints3","_this$totals$operatio4","_this$totals4","_this$totals$showOnTo","_this$totals5","_this$viewportData$of","_this$viewportData","_this$viewportData$ro","_this$viewportData2","totalsRowCount","showOnTop","_this$totals6","_this$totalsDataMap$g","_this$totalsDataMap","_this$pendingNewDataM","viewportY","_this$totals7","_this$totals$defaultO","_this$totals8","_this$totalsTable","defaultOperation","tableColumn","totalsColumn","col","_this$totals9","_this$totals$operatio5","_this$totals0","_this$totals$showOnTo2","_this$totals1","_this$row","_this$dataForCell","_data$value","totalsData","_this$totals$defaultO2","_this$totals10","_this$totals11","_this","dataMap","operationMap","_operationMap$name$","_operationMap$name","newData","newRow","totalsConfig","PromiseUtils","err","_this$table$setViewpo","_arguments","_this2","includeHeaders","formatValue","consolidateRanges","consolidated","GridRange","topFloatingRowsSet","tableRanges","bottomFloatingRowsSet","_r","topFloatingRows","_loop2","rangeSet","snapshot","bottomFloatingRows","_loop3","_i2","_arguments2","_this3","_this4","_this$columns$modelIn","isPendingRange","isKeyColumnInRange","bound","isKey","isValue","_this5","_this6","pendingAreaRange","pendingRanges","newDataMap","newRowData","tableAreaRange","_this6$inputTable","_range$startRow","_range$endRow","newRows","cellText","_arguments3","_this7","edits","edit","_edit$column","_edit$row","_edit$column2","_edit$row2","rowEditMap","rowMap","_edit$row3","_rowMap$get","_edit$column3","_edit$row4","_this7$inputTable","dataIndex","rangeRowCount","rowEdits","_edit$column4","_edit$column5","_edit$row5","_this8","_this8$inputTable","_this8$viewport$botto","_this8$viewport","_this$textValueForCel","VirtualGroupColumn","isUITreeRow","isLayoutTreeTable","isIrisGridTreeTableModel","tableModel","IrisGridTreeTableModel","virtualColumns","tableGroupedColumns","isAggregatedColumnsAvailable","aggregatedColumns","groupedColumns","c1","c2","showExtraGroupCol","columnTypeForFormatting","_this$columnAlignment","typeForFormatting","isExpanded","hasChildren","extractedRow","modifiedData","cellData","_this$viewport$column","viewportRange","intersection","resultRow","viewportRow","_viewportRow$data$get","_row$hasChildren","_row$isExpanded","expandDescendants","_row$depth","MissingPartitionError","isMissingPartitionError"],"mappings":"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"}