@deephaven/iris-grid 0.42.1-beta.2 → 0.43.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 (288) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +1 -0
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/ColumnStatistics.d.ts.map +1 -1
  4. package/dist/IrisGrid.d.ts.map +1 -1
  5. package/dist/IrisGridModel.d.ts +5 -0
  6. package/dist/IrisGridModel.d.ts.map +1 -1
  7. package/dist/IrisGridProxyModel.d.ts +1 -0
  8. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  9. package/dist/IrisGridTableModel.d.ts +1 -0
  10. package/dist/IrisGridTableModel.d.ts.map +1 -1
  11. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  12. package/package.json +15 -15
  13. package/dist/AdvancedFilterCreator.css +0 -106
  14. package/dist/AdvancedFilterCreator.css.map +0 -1
  15. package/dist/AdvancedFilterCreator.js +0 -524
  16. package/dist/AdvancedFilterCreator.js.map +0 -1
  17. package/dist/AdvancedFilterCreatorFilterItem.css +0 -9
  18. package/dist/AdvancedFilterCreatorFilterItem.css.map +0 -1
  19. package/dist/AdvancedFilterCreatorFilterItem.js +0 -184
  20. package/dist/AdvancedFilterCreatorFilterItem.js.map +0 -1
  21. package/dist/AdvancedFilterCreatorSelectValue.css +0 -50
  22. package/dist/AdvancedFilterCreatorSelectValue.css.map +0 -1
  23. package/dist/AdvancedFilterCreatorSelectValue.js +0 -301
  24. package/dist/AdvancedFilterCreatorSelectValue.js.map +0 -1
  25. package/dist/AdvancedFilterCreatorSelectValueList.js +0 -272
  26. package/dist/AdvancedFilterCreatorSelectValueList.js.map +0 -1
  27. package/dist/ColumnHeaderGroup.js +0 -61
  28. package/dist/ColumnHeaderGroup.js.map +0 -1
  29. package/dist/ColumnStatistics.css +0 -76
  30. package/dist/ColumnStatistics.css.map +0 -1
  31. package/dist/ColumnStatistics.js +0 -197
  32. package/dist/ColumnStatistics.js.map +0 -1
  33. package/dist/CommonTypes.js +0 -2
  34. package/dist/CommonTypes.js.map +0 -1
  35. package/dist/CrossColumnSearch.css +0 -35
  36. package/dist/CrossColumnSearch.css.map +0 -1
  37. package/dist/CrossColumnSearch.js +0 -199
  38. package/dist/CrossColumnSearch.js.map +0 -1
  39. package/dist/FilterInputField.css +0 -56
  40. package/dist/FilterInputField.css.map +0 -1
  41. package/dist/FilterInputField.js +0 -232
  42. package/dist/FilterInputField.js.map +0 -1
  43. package/dist/GotoRow.css +0 -45
  44. package/dist/GotoRow.css.map +0 -1
  45. package/dist/GotoRow.js +0 -298
  46. package/dist/GotoRow.js.map +0 -1
  47. package/dist/IrisGrid.css +0 -359
  48. package/dist/IrisGrid.css.map +0 -1
  49. package/dist/IrisGrid.js +0 -3647
  50. package/dist/IrisGrid.js.map +0 -1
  51. package/dist/IrisGridBottomBar.css +0 -85
  52. package/dist/IrisGridBottomBar.css.map +0 -1
  53. package/dist/IrisGridBottomBar.js +0 -36
  54. package/dist/IrisGridBottomBar.js.map +0 -1
  55. package/dist/IrisGridCellOverflowModal.css +0 -17
  56. package/dist/IrisGridCellOverflowModal.css.map +0 -1
  57. package/dist/IrisGridCellOverflowModal.js +0 -157
  58. package/dist/IrisGridCellOverflowModal.js.map +0 -1
  59. package/dist/IrisGridCellRendererUtils.js +0 -20
  60. package/dist/IrisGridCellRendererUtils.js.map +0 -1
  61. package/dist/IrisGridCopyHandler.css +0 -64
  62. package/dist/IrisGridCopyHandler.css.map +0 -1
  63. package/dist/IrisGridCopyHandler.js +0 -331
  64. package/dist/IrisGridCopyHandler.js.map +0 -1
  65. package/dist/IrisGridDataBarCellRenderer.js +0 -10
  66. package/dist/IrisGridDataBarCellRenderer.js.map +0 -1
  67. package/dist/IrisGridIcons.js +0 -25
  68. package/dist/IrisGridIcons.js.map +0 -1
  69. package/dist/IrisGridMetricCalculator.js +0 -33
  70. package/dist/IrisGridMetricCalculator.js.map +0 -1
  71. package/dist/IrisGridModel.js +0 -255
  72. package/dist/IrisGridModel.js.map +0 -1
  73. package/dist/IrisGridModelFactory.js +0 -27
  74. package/dist/IrisGridModelFactory.js.map +0 -1
  75. package/dist/IrisGridModelUpdater.js +0 -96
  76. package/dist/IrisGridModelUpdater.js.map +0 -1
  77. package/dist/IrisGridPartitionSelector.css +0 -48
  78. package/dist/IrisGridPartitionSelector.css.map +0 -1
  79. package/dist/IrisGridPartitionSelector.js +0 -198
  80. package/dist/IrisGridPartitionSelector.js.map +0 -1
  81. package/dist/IrisGridProxyModel.js +0 -527
  82. package/dist/IrisGridProxyModel.js.map +0 -1
  83. package/dist/IrisGridRenderer.js +0 -779
  84. package/dist/IrisGridRenderer.js.map +0 -1
  85. package/dist/IrisGridShortcuts.js +0 -59
  86. package/dist/IrisGridShortcuts.js.map +0 -1
  87. package/dist/IrisGridTableModel.js +0 -269
  88. package/dist/IrisGridTableModel.js.map +0 -1
  89. package/dist/IrisGridTableModelTemplate.js +0 -1589
  90. package/dist/IrisGridTableModelTemplate.js.map +0 -1
  91. package/dist/IrisGridTestUtils.js +0 -121
  92. package/dist/IrisGridTestUtils.js.map +0 -1
  93. package/dist/IrisGridTextCellRenderer.js +0 -139
  94. package/dist/IrisGridTextCellRenderer.js.map +0 -1
  95. package/dist/IrisGridTheme.js +0 -96
  96. package/dist/IrisGridTheme.js.map +0 -1
  97. package/dist/IrisGridTheme.module.css +0 -69
  98. package/dist/IrisGridTheme.module.css.map +0 -1
  99. package/dist/IrisGridTreeTableModel.js +0 -145
  100. package/dist/IrisGridTreeTableModel.js.map +0 -1
  101. package/dist/IrisGridUtils.js +0 -1279
  102. package/dist/IrisGridUtils.js.map +0 -1
  103. package/dist/MissingKeyError.js +0 -15
  104. package/dist/MissingKeyError.js.map +0 -1
  105. package/dist/PartitionSelectorSearch.css +0 -22
  106. package/dist/PartitionSelectorSearch.css.map +0 -1
  107. package/dist/PartitionSelectorSearch.js +0 -317
  108. package/dist/PartitionSelectorSearch.js.map +0 -1
  109. package/dist/PendingDataBottomBar.css +0 -13
  110. package/dist/PendingDataBottomBar.css.map +0 -1
  111. package/dist/PendingDataBottomBar.js +0 -98
  112. package/dist/PendingDataBottomBar.js.map +0 -1
  113. package/dist/TableViewportUpdater.js +0 -156
  114. package/dist/TableViewportUpdater.js.map +0 -1
  115. package/dist/ToastBottomBar.js +0 -42
  116. package/dist/ToastBottomBar.js.map +0 -1
  117. package/dist/TreeTableViewportUpdater.js +0 -96
  118. package/dist/TreeTableViewportUpdater.js.map +0 -1
  119. package/dist/declaration.d.js +0 -2
  120. package/dist/declaration.d.js.map +0 -1
  121. package/dist/format-context-menus/CustomFormatAction.css +0 -25
  122. package/dist/format-context-menus/CustomFormatAction.css.map +0 -1
  123. package/dist/format-context-menus/CustomFormatAction.js +0 -132
  124. package/dist/format-context-menus/CustomFormatAction.js.map +0 -1
  125. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -53
  126. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +0 -1
  127. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -59
  128. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +0 -1
  129. package/dist/format-context-menus/FormatContextMenuUtils.js +0 -63
  130. package/dist/format-context-menus/FormatContextMenuUtils.js.map +0 -1
  131. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -43
  132. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +0 -1
  133. package/dist/format-context-menus/index.js +0 -4
  134. package/dist/format-context-menus/index.js.map +0 -1
  135. package/dist/index.js +0 -24
  136. package/dist/index.js.map +0 -1
  137. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -21
  138. package/dist/key-handlers/ClearFilterKeyHandler.js.map +0 -1
  139. package/dist/key-handlers/CopyKeyHandler.js +0 -31
  140. package/dist/key-handlers/CopyKeyHandler.js.map +0 -1
  141. package/dist/key-handlers/ReverseKeyHandler.js +0 -32
  142. package/dist/key-handlers/ReverseKeyHandler.js.map +0 -1
  143. package/dist/key-handlers/index.js +0 -4
  144. package/dist/key-handlers/index.js.map +0 -1
  145. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +0 -175
  146. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +0 -1
  147. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +0 -139
  148. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +0 -1
  149. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -83
  150. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +0 -1
  151. package/dist/mousehandlers/IrisGridContextMenuHandler.css +0 -19
  152. package/dist/mousehandlers/IrisGridContextMenuHandler.css.map +0 -1
  153. package/dist/mousehandlers/IrisGridContextMenuHandler.js +0 -1218
  154. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +0 -1
  155. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -28
  156. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +0 -1
  157. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -80
  158. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +0 -1
  159. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +0 -126
  160. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +0 -1
  161. package/dist/mousehandlers/IrisGridSortMouseHandler.js +0 -46
  162. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +0 -1
  163. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +0 -151
  164. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +0 -1
  165. package/dist/mousehandlers/PendingMouseHandler.js +0 -39
  166. package/dist/mousehandlers/PendingMouseHandler.js.map +0 -1
  167. package/dist/mousehandlers/index.js +0 -11
  168. package/dist/mousehandlers/index.js.map +0 -1
  169. package/dist/sidebar/AdvancedSettings.js +0 -6
  170. package/dist/sidebar/AdvancedSettings.js.map +0 -1
  171. package/dist/sidebar/AdvancedSettingsMenu.js +0 -29
  172. package/dist/sidebar/AdvancedSettingsMenu.js.map +0 -1
  173. package/dist/sidebar/AdvancedSettingsType.js +0 -7
  174. package/dist/sidebar/AdvancedSettingsType.js.map +0 -1
  175. package/dist/sidebar/ChartBuilder.css +0 -56
  176. package/dist/sidebar/ChartBuilder.css.map +0 -1
  177. package/dist/sidebar/ChartBuilder.js +0 -443
  178. package/dist/sidebar/ChartBuilder.js.map +0 -1
  179. package/dist/sidebar/CustomColumnBuilder.css +0 -58
  180. package/dist/sidebar/CustomColumnBuilder.css.map +0 -1
  181. package/dist/sidebar/CustomColumnBuilder.js +0 -384
  182. package/dist/sidebar/CustomColumnBuilder.js.map +0 -1
  183. package/dist/sidebar/CustomColumnInput.js +0 -90
  184. package/dist/sidebar/CustomColumnInput.js.map +0 -1
  185. package/dist/sidebar/InputEditor.css +0 -35
  186. package/dist/sidebar/InputEditor.css.map +0 -1
  187. package/dist/sidebar/InputEditor.js +0 -177
  188. package/dist/sidebar/InputEditor.js.map +0 -1
  189. package/dist/sidebar/OptionType.js +0 -19
  190. package/dist/sidebar/OptionType.js.map +0 -1
  191. package/dist/sidebar/RollupRows.css +0 -120
  192. package/dist/sidebar/RollupRows.css.map +0 -1
  193. package/dist/sidebar/RollupRows.js +0 -519
  194. package/dist/sidebar/RollupRows.js.map +0 -1
  195. package/dist/sidebar/SelectDistinctBuilder.css +0 -41
  196. package/dist/sidebar/SelectDistinctBuilder.css.map +0 -1
  197. package/dist/sidebar/SelectDistinctBuilder.js +0 -155
  198. package/dist/sidebar/SelectDistinctBuilder.js.map +0 -1
  199. package/dist/sidebar/TableCsvExporter.css +0 -32
  200. package/dist/sidebar/TableCsvExporter.css.map +0 -1
  201. package/dist/sidebar/TableCsvExporter.js +0 -399
  202. package/dist/sidebar/TableCsvExporter.js.map +0 -1
  203. package/dist/sidebar/TableSaver.js +0 -487
  204. package/dist/sidebar/TableSaver.js.map +0 -1
  205. package/dist/sidebar/aggregations/AggregationEdit.css +0 -61
  206. package/dist/sidebar/aggregations/AggregationEdit.css.map +0 -1
  207. package/dist/sidebar/aggregations/AggregationEdit.js +0 -155
  208. package/dist/sidebar/aggregations/AggregationEdit.js.map +0 -1
  209. package/dist/sidebar/aggregations/AggregationOperation.js +0 -19
  210. package/dist/sidebar/aggregations/AggregationOperation.js.map +0 -1
  211. package/dist/sidebar/aggregations/AggregationUtils.js +0 -59
  212. package/dist/sidebar/aggregations/AggregationUtils.js.map +0 -1
  213. package/dist/sidebar/aggregations/Aggregations.css +0 -43
  214. package/dist/sidebar/aggregations/Aggregations.css.map +0 -1
  215. package/dist/sidebar/aggregations/Aggregations.js +0 -178
  216. package/dist/sidebar/aggregations/Aggregations.js.map +0 -1
  217. package/dist/sidebar/aggregations/index.js +0 -2
  218. package/dist/sidebar/aggregations/index.js.map +0 -1
  219. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +0 -123
  220. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +0 -1
  221. package/dist/sidebar/conditional-formatting/ConditionEditor.js +0 -243
  222. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +0 -1
  223. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.css +0 -22
  224. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.css.map +0 -1
  225. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +0 -109
  226. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +0 -1
  227. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -18
  228. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +0 -1
  229. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css +0 -57
  230. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css.map +0 -1
  231. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +0 -150
  232. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +0 -1
  233. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +0 -635
  234. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +0 -1
  235. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +0 -122
  236. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +0 -1
  237. package/dist/sidebar/conditional-formatting/StyleEditor.css +0 -55
  238. package/dist/sidebar/conditional-formatting/StyleEditor.css.map +0 -1
  239. package/dist/sidebar/conditional-formatting/StyleEditor.js +0 -150
  240. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +0 -1
  241. package/dist/sidebar/icons/BarIcon.js +0 -24
  242. package/dist/sidebar/icons/BarIcon.js.map +0 -1
  243. package/dist/sidebar/icons/FormatColumnWhereIcon.js +0 -42
  244. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +0 -1
  245. package/dist/sidebar/icons/FormatRowWhereIcon.js +0 -36
  246. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +0 -1
  247. package/dist/sidebar/icons/HistogramIcon.js +0 -24
  248. package/dist/sidebar/icons/HistogramIcon.js.map +0 -1
  249. package/dist/sidebar/icons/LineIcon.js +0 -27
  250. package/dist/sidebar/icons/LineIcon.js.map +0 -1
  251. package/dist/sidebar/icons/PieIcon.js +0 -24
  252. package/dist/sidebar/icons/PieIcon.js.map +0 -1
  253. package/dist/sidebar/icons/ScatterIcon.js +0 -74
  254. package/dist/sidebar/icons/ScatterIcon.js.map +0 -1
  255. package/dist/sidebar/icons/index.js +0 -8
  256. package/dist/sidebar/icons/index.js.map +0 -1
  257. package/dist/sidebar/index.js +0 -18
  258. package/dist/sidebar/index.js.map +0 -1
  259. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css +0 -68
  260. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +0 -1
  261. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +0 -964
  262. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +0 -1
  263. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +0 -132
  264. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +0 -1
  265. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css +0 -29
  266. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css.map +0 -1
  267. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +0 -188
  268. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +0 -1
  269. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +0 -81
  270. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +0 -1
  271. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +0 -30
  272. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +0 -1
  273. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +0 -158
  274. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +0 -1
  275. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +0 -146
  276. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +0 -1
  277. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +0 -59
  278. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +0 -1
  279. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +0 -139
  280. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +0 -1
  281. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +0 -44
  282. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +0 -1
  283. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +0 -129
  284. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +0 -1
  285. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js +0 -4
  286. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +0 -1
  287. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +0 -261
  288. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +0 -1
package/dist/IrisGrid.js DELETED
@@ -1,3647 +0,0 @@
1
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
3
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
7
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
8
- import React, { Component } from 'react';
9
- import memoize from 'memoizee';
10
- import classNames from 'classnames';
11
- import { CSSTransition } from 'react-transition-group';
12
- import PropTypes from 'prop-types';
13
- import deepEqual from 'deep-equal';
14
- import Log from '@deephaven/log';
15
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
16
- import { ContextActions, Stack, Menu, Page, Popper, ThemeExport, Tooltip, Button, ContextActionUtils } from '@deephaven/components';
17
- import { Grid, GridRange, GridUtils, isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';
18
- import { dhEye, dhFilterFilled, dhGraphLineUp, dhTriangleDownSquare, vsClose, vsCloudDownload, vsEdit, vsFilter, vsMenu, vsReply, vsRuby, vsSearch, vsSplitHorizontal, vsSymbolOperator, vsTools } from '@deephaven/icons';
19
- import { DateUtils, Formatter, FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';
20
- import { assertNotNull, copyToClipboard, EMPTY_ARRAY, EMPTY_MAP, Pending, PromiseUtils, ValidationError, getOrThrow } from '@deephaven/utils';
21
- import { Type as FilterType } from '@deephaven/filters';
22
- import throttle from 'lodash.throttle';
23
- import debounce from 'lodash.debounce';
24
- import clamp from 'lodash.clamp';
25
- import { getFormatColumns } from "./sidebar/conditional-formatting/ConditionalFormattingUtils.js";
26
- import PendingDataBottomBar from "./PendingDataBottomBar.js";
27
- import IrisGridCopyHandler from "./IrisGridCopyHandler.js";
28
- import FilterInputField from "./FilterInputField.js";
29
- import { ClearFilterKeyHandler, CopyKeyHandler, ReverseKeyHandler } from "./key-handlers/index.js";
30
- import { IrisGridCellOverflowMouseHandler, IrisGridColumnSelectMouseHandler, IrisGridColumnTooltipMouseHandler, IrisGridContextMenuHandler, IrisGridDataSelectMouseHandler, IrisGridFilterMouseHandler, IrisGridRowTreeMouseHandler, IrisGridSortMouseHandler, IrisGridTokenMouseHandler, PendingMouseHandler } from "./mousehandlers/index.js";
31
- import ToastBottomBar from "./ToastBottomBar.js";
32
- import IrisGridMetricCalculator from "./IrisGridMetricCalculator.js";
33
- import IrisGridModelUpdater from "./IrisGridModelUpdater.js";
34
- import IrisGridRenderer from "./IrisGridRenderer.js";
35
- import IrisGridTheme from "./IrisGridTheme.js";
36
- import ColumnStatistics from "./ColumnStatistics.js";
37
- import "./IrisGrid.css";
38
- import AdvancedFilterCreator from "./AdvancedFilterCreator.js";
39
- import { Aggregations, AggregationEdit, AggregationUtils, ChartBuilder, CustomColumnBuilder, OptionType, RollupRows, TableCsvExporter, TableSaver, VisibilityOrderingBuilder } from "./sidebar/index.js";
40
- import IrisGridUtils from "./IrisGridUtils.js";
41
- import CrossColumnSearch from "./CrossColumnSearch.js";
42
- import IrisGridModel from "./IrisGridModel.js";
43
- import IrisGridPartitionSelector from "./IrisGridPartitionSelector.js";
44
- import SelectDistinctBuilder from "./sidebar/SelectDistinctBuilder.js";
45
- import AdvancedSettingsType from "./sidebar/AdvancedSettingsType.js";
46
- import AdvancedSettingsMenu from "./sidebar/AdvancedSettingsMenu.js";
47
- import SHORTCUTS from "./IrisGridShortcuts.js";
48
- import ConditionalFormattingMenu from "./sidebar/conditional-formatting/ConditionalFormattingMenu.js";
49
- import ConditionalFormatEditor from "./sidebar/conditional-formatting/ConditionalFormatEditor.js";
50
- import IrisGridCellOverflowModal from "./IrisGridCellOverflowModal.js";
51
- import GotoRow from "./GotoRow.js";
52
- var log = Log.module('IrisGrid');
53
- var UPDATE_DOWNLOAD_THROTTLE = 500;
54
- var SET_FILTER_DEBOUNCE = 250;
55
- var SEEK_ROW_DEBOUNCE = 250;
56
- var SET_CONDITIONAL_FORMAT_DEBOUNCE = 250;
57
- var DEFAULT_AGGREGATION_SETTINGS = Object.freeze({
58
- aggregations: EMPTY_ARRAY,
59
- showOnTop: false
60
- });
61
- var UNFORMATTED_DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z";
62
- function isEmptyConfig(_ref) {
63
- var {
64
- advancedFilters,
65
- aggregationSettings,
66
- customColumns,
67
- quickFilters,
68
- reverseType,
69
- rollupConfig,
70
- searchFilter,
71
- selectDistinctColumns,
72
- sorts
73
- } = _ref;
74
- return advancedFilters.size === 0 && aggregationSettings.aggregations.length === 0 && customColumns.length === 0 && quickFilters.size === 0 && reverseType === TableUtils.REVERSE_TYPE.NONE && rollupConfig == null && searchFilter == null && selectDistinctColumns.length === 0 && sorts.length === 0;
75
- }
76
- export class IrisGrid extends Component {
77
- constructor(props) {
78
- var _model$layoutHints, _model$layoutHints$hi, _model$columns$0$name, _model$columns$;
79
- super(props);
80
- _defineProperty(this, "grid", void 0);
81
- _defineProperty(this, "gridWrapper", void 0);
82
- _defineProperty(this, "lastFocusedFilterBarColumn", void 0);
83
- _defineProperty(this, "lastLoadedConfig", void 0);
84
- _defineProperty(this, "tooltip", void 0);
85
- _defineProperty(this, "pending", void 0);
86
- _defineProperty(this, "globalColumnFormats", void 0);
87
- _defineProperty(this, "dateTimeFormatterOptions", void 0);
88
- _defineProperty(this, "decimalFormatOptions", void 0);
89
- _defineProperty(this, "integerFormatOptions", void 0);
90
- _defineProperty(this, "truncateNumbersWithPound", void 0);
91
- _defineProperty(this, "loadingScrimStartTime", void 0);
92
- _defineProperty(this, "loadingScrimFinishTime", void 0);
93
- _defineProperty(this, "animationFrame", void 0);
94
- _defineProperty(this, "loadingTimer", void 0);
95
- _defineProperty(this, "renderer", void 0);
96
- _defineProperty(this, "tableSaver", void 0);
97
- _defineProperty(this, "crossColumnRef", void 0);
98
- _defineProperty(this, "isAnimating", void 0);
99
- _defineProperty(this, "filterInputRef", void 0);
100
- _defineProperty(this, "toggleFilterBarAction", void 0);
101
- _defineProperty(this, "toggleSearchBarAction", void 0);
102
- _defineProperty(this, "toggleGotoRowAction", void 0);
103
- _defineProperty(this, "discardAction", void 0);
104
- _defineProperty(this, "commitAction", void 0);
105
- _defineProperty(this, "contextActions", void 0);
106
- _defineProperty(this, "tableUtils", void 0);
107
- _defineProperty(this, "getAdvancedMenuOpenedHandler", memoize(column => this.handleAdvancedMenuOpened.bind(this, column), {
108
- max: 100
109
- }));
110
- _defineProperty(this, "getCachedAdvancedFilterMenuActions", memoize((model, column, advancedFilterOptions, sortDirection, formatter) => /*#__PURE__*/React.createElement(AdvancedFilterCreator, {
111
- model: model,
112
- column: column,
113
- onFilterChange: this.handleAdvancedFilterChange,
114
- onSortChange: this.handleAdvancedFilterSortChange,
115
- onDone: this.handleAdvancedFilterDone,
116
- options: advancedFilterOptions,
117
- sortDirection: sortDirection,
118
- formatter: formatter,
119
- tableUtils: this.tableUtils
120
- }), {
121
- max: 50
122
- }));
123
- _defineProperty(this, "getCachedOptionItems", memoize((isChartBuilderAvailable, isCustomColumnsAvailable, isFormatColumnsAvailable, isRollupAvailable, isTotalsAvailable, isSelectDistinctAvailable, isExportAvailable, toggleFilterBarAction, toggleSearchBarAction, toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, canToggleSearch, showGotoRow, hasAdvancedSettings) => {
124
- var optionItems = [];
125
- if (isChartBuilderAvailable) {
126
- optionItems.push({
127
- type: OptionType.CHART_BUILDER,
128
- title: 'Chart Builder',
129
- icon: dhGraphLineUp
130
- });
131
- }
132
- optionItems.push({
133
- type: OptionType.VISIBILITY_ORDERING_BUILDER,
134
- title: 'Organize Columns',
135
- icon: dhEye
136
- });
137
- if (isFormatColumnsAvailable) {
138
- optionItems.push({
139
- type: OptionType.CONDITIONAL_FORMATTING,
140
- title: 'Conditional Formatting',
141
- icon: vsEdit
142
- });
143
- }
144
- if (isCustomColumnsAvailable) {
145
- optionItems.push({
146
- type: OptionType.CUSTOM_COLUMN_BUILDER,
147
- title: 'Custom Columns',
148
- icon: vsSplitHorizontal
149
- });
150
- }
151
- if (isRollupAvailable) {
152
- optionItems.push({
153
- type: OptionType.ROLLUP_ROWS,
154
- title: 'Rollup Rows',
155
- icon: dhTriangleDownSquare
156
- });
157
- }
158
- if (isTotalsAvailable) {
159
- optionItems.push({
160
- type: OptionType.AGGREGATIONS,
161
- title: 'Aggregate Columns',
162
- icon: vsSymbolOperator
163
- });
164
- }
165
- if (isSelectDistinctAvailable) {
166
- optionItems.push({
167
- type: OptionType.SELECT_DISTINCT,
168
- title: 'Select Distinct Values',
169
- icon: vsRuby
170
- });
171
- }
172
- if (isExportAvailable && canDownloadCsv) {
173
- optionItems.push({
174
- type: OptionType.TABLE_EXPORTER,
175
- title: 'Download CSV',
176
- icon: vsCloudDownload
177
- });
178
- }
179
- if (hasAdvancedSettings) {
180
- optionItems.push({
181
- type: OptionType.ADVANCED_SETTINGS,
182
- title: 'Advanced Settings',
183
- icon: vsTools
184
- });
185
- }
186
- optionItems.push({
187
- type: OptionType.QUICK_FILTERS,
188
- title: 'Quick Filters',
189
- subtitle: toggleFilterBarAction.shortcut.getDisplayText(),
190
- icon: vsFilter,
191
- isOn: isFilterBarShown,
192
- onChange: toggleFilterBarAction.action
193
- });
194
- if (canToggleSearch) {
195
- optionItems.push({
196
- type: OptionType.SEARCH_BAR,
197
- title: 'Search Bar',
198
- subtitle: toggleSearchBarAction.shortcut.getDisplayText(),
199
- icon: vsSearch,
200
- isOn: showSearchBar,
201
- onChange: toggleSearchBarAction.action
202
- });
203
- }
204
- optionItems.push({
205
- type: OptionType.GOTO,
206
- title: 'Go to',
207
- subtitle: toggleGotoRowAction.shortcut.getDisplayText(),
208
- icon: vsReply,
209
- isOn: showGotoRow,
210
- onChange: toggleGotoRowAction.action
211
- });
212
- return Object.freeze(optionItems);
213
- }, {
214
- max: 1
215
- }));
216
- _defineProperty(this, "getCachedHiddenColumns", memoize((metricCalculator, userColumnWidths) => IrisGridUtils.getHiddenColumns(new Map([...metricCalculator.initialColumnWidths, ...userColumnWidths])), {
217
- max: 1
218
- }));
219
- _defineProperty(this, "getAggregationMap", memoize((columns, aggregations) => {
220
- var aggregationMap = {};
221
- aggregations.forEach(_ref2 => {
222
- var {
223
- operation,
224
- selected,
225
- invert
226
- } = _ref2;
227
- aggregationMap[operation] = AggregationUtils.getOperationColumnNames(columns, operation, selected, invert);
228
- });
229
- return aggregationMap;
230
- }));
231
- _defineProperty(this, "getOperationMap", memoize((columns, aggregations) => {
232
- var operationMap = {};
233
- aggregations.filter(a => !AggregationUtils.isRollupOperation(a.operation)).forEach(_ref3 => {
234
- var {
235
- operation,
236
- selected,
237
- invert
238
- } = _ref3;
239
- AggregationUtils.getOperationColumnNames(columns, operation, selected, invert).forEach(name => {
240
- var _operationMap$name;
241
- var newOperations = [...((_operationMap$name = operationMap[name]) !== null && _operationMap$name !== void 0 ? _operationMap$name : []), operation];
242
- operationMap[name] = Object.freeze(newOperations);
243
- });
244
- });
245
- return operationMap;
246
- }));
247
- _defineProperty(this, "getOperationOrder", memoize(aggregations => aggregations.map(a => a.operation).filter(o => !AggregationUtils.isRollupOperation(o))));
248
- _defineProperty(this, "getCachedFormatColumns", memoize((dh, columns, rules) => getFormatColumns(dh, columns, rules)));
249
- _defineProperty(this, "getCachedPreviewFormatColumns", memoize((dh, columns, rulesParam, preview, editIndex) => {
250
- log.debug('getCachedPreviewFormatColumns', rulesParam, preview, editIndex);
251
- if (preview !== undefined && editIndex !== undefined) {
252
- var rules = [...rulesParam];
253
- rules[editIndex] = preview;
254
- return this.getCachedFormatColumns(dh, columns, rules);
255
- }
256
- return this.getCachedFormatColumns(dh, columns, rulesParam);
257
- }));
258
- _defineProperty(this, "getModelRollupConfig", memoize((originalColumns, config, aggregationSettings) => IrisGridUtils.getModelRollupConfig(originalColumns, config, aggregationSettings)));
259
- _defineProperty(this, "getModelTotalsConfig", memoize((columns, config, aggregationSettings) => {
260
- var _config$columns$lengt, _config$columns, _aggregations$length;
261
- var {
262
- aggregations,
263
- showOnTop
264
- } = aggregationSettings;
265
- // If we've got rollups, then aggregations are applied as part of that...
266
- if (((_config$columns$lengt = config === null || config === void 0 ? 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 || ((_aggregations$length = aggregations === null || aggregations === void 0 ? void 0 : aggregations.length) !== null && _aggregations$length !== void 0 ? _aggregations$length : 0) === 0) {
267
- return null;
268
- }
269
- var operationMap = this.getOperationMap(columns, aggregations);
270
- var operationOrder = this.getOperationOrder(aggregations);
271
- return {
272
- operationMap,
273
- operationOrder,
274
- showOnTop
275
- };
276
- }));
277
- _defineProperty(this, "getCachedStateOverride", memoize((hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverseType, rollupConfig, isMenuShown) => ({
278
- hoverSelectColumn,
279
- isFilterBarShown,
280
- isSelectingColumn,
281
- loadingScrimProgress,
282
- quickFilters,
283
- advancedFilters,
284
- sorts,
285
- reverseType,
286
- rollupConfig,
287
- isMenuShown
288
- }), {
289
- max: 1
290
- }));
291
- _defineProperty(this, "getCachedFilter", memoize((customFilters, quickFilters, advancedFilters, partitionFilters, searchFilter) => [...(customFilters !== null && customFilters !== void 0 ? customFilters : []), ...(partitionFilters !== null && partitionFilters !== void 0 ? partitionFilters : []), ...IrisGridUtils.getFiltersFromFilterMap(quickFilters), ...IrisGridUtils.getFiltersFromFilterMap(advancedFilters), ...(searchFilter !== undefined ? [searchFilter] : [])], {
292
- max: 1
293
- }));
294
- _defineProperty(this, "getCachedTheme", memoize((theme, isEditable, floatingRowCount) => _objectSpread(_objectSpread(_objectSpread({}, IrisGridTheme), theme), {}, {
295
- autoSelectRow: !isEditable,
296
- // We only show the row footers when we have floating rows for aggregations
297
- rowFooterWidth: floatingRowCount > 0 ? theme.rowFooterWidth : 0
298
- }), {
299
- max: 1
300
- }));
301
- _defineProperty(this, "getAlwaysFetchColumns", memoize((alwaysFetchColumns, columns, movedColumns, floatingLeftColumnCount, floatingRightColumnCount, draggingRange) => {
302
- var floatingColumns = [];
303
- for (var i = 0; i < floatingLeftColumnCount; i += 1) {
304
- floatingColumns.push(columns[GridUtils.getModelIndex(i, movedColumns)].name);
305
- }
306
- for (var _i = 0; _i < floatingRightColumnCount; _i += 1) {
307
- floatingColumns.push(columns[GridUtils.getModelIndex(columns.length - 1 - _i, movedColumns)].name);
308
- }
309
- if (draggingRange) {
310
- for (var _i2 = draggingRange[0]; _i2 <= draggingRange[1]; _i2 += 1) {
311
- floatingColumns.push(columns[GridUtils.getModelIndex(_i2, movedColumns)].name);
312
- }
313
- }
314
- var columnSet = new Set([...alwaysFetchColumns, ...floatingColumns]);
315
- return Object.freeze([...columnSet]);
316
- }));
317
- _defineProperty(this, "updateSearchFilter", debounce((searchValue, selectedSearchColumns, columns, invertSearchColumns) => {
318
- var {
319
- model
320
- } = this.props;
321
- var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, selectedSearchColumns, columns, invertSearchColumns);
322
- this.setState({
323
- searchFilter
324
- });
325
- }, SET_FILTER_DEBOUNCE));
326
- _defineProperty(this, "handleConditionalFormatEditorUpdate", debounce(conditionalFormatPreview => {
327
- this.setState({
328
- conditionalFormatPreview
329
- });
330
- }, SET_CONDITIONAL_FORMAT_DEBOUNCE));
331
- _defineProperty(this, "handleDownloadProgressUpdate", throttle((tableDownloadProgress, tableDownloadEstimatedTime) => {
332
- var {
333
- tableDownloadStatus
334
- } = this.state;
335
- if (tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING) {
336
- this.setState({
337
- tableDownloadProgress,
338
- tableDownloadEstimatedTime
339
- });
340
- }
341
- }, UPDATE_DOWNLOAD_THROTTLE));
342
- _defineProperty(this, "getOverflowButtonTooltip", memoize(overflowButtonTooltipProps => {
343
- if (overflowButtonTooltipProps == null) {
344
- return null;
345
- }
346
- var wrapperStyle = _objectSpread(_objectSpread({
347
- position: 'absolute'
348
- }, overflowButtonTooltipProps), {}, {
349
- pointerEvents: 'none'
350
- });
351
- var popperOptions = {
352
- placement: 'left',
353
- modifiers: {
354
- flip: {
355
- behavior: ['left', 'right']
356
- }
357
- }
358
- };
359
- return /*#__PURE__*/React.createElement("div", {
360
- style: wrapperStyle
361
- }, /*#__PURE__*/React.createElement(Tooltip, {
362
- key: Date.now(),
363
- options: popperOptions,
364
- ref: this.handleTooltipRef
365
- }, "View full contents"));
366
- }));
367
- _defineProperty(this, "getExpandCellTooltip", memoize(expandCellTooltipProps => {
368
- if (expandCellTooltipProps == null) {
369
- return null;
370
- }
371
- var {
372
- expandTooltipDisplayValue
373
- } = this.state;
374
- var wrapperStyle = _objectSpread(_objectSpread({
375
- position: 'absolute'
376
- }, expandCellTooltipProps), {}, {
377
- pointerEvents: 'none'
378
- });
379
- var popperOptions = {
380
- placement: 'bottom-start'
381
- };
382
- return /*#__PURE__*/React.createElement("div", {
383
- style: wrapperStyle
384
- }, /*#__PURE__*/React.createElement(Tooltip, {
385
- key: Date.now(),
386
- options: popperOptions,
387
- ref: this.handleTooltipRef
388
- }, /*#__PURE__*/React.createElement("div", {
389
- style: {
390
- textAlign: 'left'
391
- }
392
- }, "Click to ", expandTooltipDisplayValue, " row", /*#__PURE__*/React.createElement("br", null), ContextActionUtils.isMacPlatform() ? '⌘' : 'Ctrl+', "Click to expand row and all children")));
393
- }));
394
- _defineProperty(this, "getLinkHoverTooltip", memoize(linkHoverTooltipProps => {
395
- if (linkHoverTooltipProps == null) {
396
- return null;
397
- }
398
- var {
399
- linkHoverDisplayValue
400
- } = this.state;
401
- var wrapperStyle = _objectSpread(_objectSpread({
402
- position: 'absolute'
403
- }, linkHoverTooltipProps), {}, {
404
- pointerEvents: 'none'
405
- });
406
- var popperOptions = {
407
- placement: 'bottom'
408
- };
409
- return /*#__PURE__*/React.createElement("div", {
410
- style: wrapperStyle
411
- }, /*#__PURE__*/React.createElement(Tooltip, {
412
- options: popperOptions,
413
- ref: this.handleTooltipRef
414
- }, /*#__PURE__*/React.createElement("div", {
415
- className: "link-hover-tooltip"
416
- }, linkHoverDisplayValue, " - Click once to follow.", /*#__PURE__*/React.createElement("br", null), "Click and hold to select this cell.")));
417
- }));
418
- _defineProperty(this, "handleGotoValueChanged", input => {
419
- this.setState({
420
- gotoValue: input
421
- });
422
- this.debouncedSeekRow(input);
423
- });
424
- _defineProperty(this, "debouncedSeekRow", debounce(input => {
425
- this.seekRow(input);
426
- }, SEEK_ROW_DEBOUNCE));
427
- this.handleAdvancedFilterChange = this.handleAdvancedFilterChange.bind(this);
428
- this.handleAdvancedFilterSortChange = this.handleAdvancedFilterSortChange.bind(this);
429
- this.handleAdvancedFilterDone = this.handleAdvancedFilterDone.bind(this);
430
- this.handleAdvancedMenuOpened = this.handleAdvancedMenuOpened.bind(this);
431
- this.handleGotoRowOpened = this.handleGotoRowOpened.bind(this);
432
- this.handleGotoRowClosed = this.handleGotoRowClosed.bind(this);
433
- this.handleAdvancedMenuClosed = this.handleAdvancedMenuClosed.bind(this);
434
- this.handleAggregationChange = this.handleAggregationChange.bind(this);
435
- this.handleAggregationsChange = this.handleAggregationsChange.bind(this);
436
- this.handleAggregationEdit = this.handleAggregationEdit.bind(this);
437
- this.handleAnimationLoop = this.handleAnimationLoop.bind(this);
438
- this.handleAnimationStart = this.handleAnimationStart.bind(this);
439
- this.handleAnimationEnd = this.handleAnimationEnd.bind(this);
440
- this.handleChartChange = this.handleChartChange.bind(this);
441
- this.handleChartCreate = this.handleChartCreate.bind(this);
442
- this.handleGridError = this.handleGridError.bind(this);
443
- this.handleFilterBarChange = this.handleFilterBarChange.bind(this);
444
- this.handleFilterBarDone = this.handleFilterBarDone.bind(this);
445
- this.handleFilterBarTab = this.handleFilterBarTab.bind(this);
446
- this.handleCancel = this.handleCancel.bind(this);
447
- this.handleMenu = this.handleMenu.bind(this);
448
- this.handleMenuClose = this.handleMenuClose.bind(this);
449
- this.handleMenuSelect = this.handleMenuSelect.bind(this);
450
- this.handleMenuBack = this.handleMenuBack.bind(this);
451
- this.handleRequestFailed = this.handleRequestFailed.bind(this);
452
- this.handleSelectionChanged = this.handleSelectionChanged.bind(this);
453
- this.handleMovedColumnsChanged = this.handleMovedColumnsChanged.bind(this);
454
- this.handleHeaderGroupsChanged = this.handleHeaderGroupsChanged.bind(this);
455
- this.handleUpdate = this.handleUpdate.bind(this);
456
- this.handleTooltipRef = this.handleTooltipRef.bind(this);
457
- this.handleViewChanged = this.handleViewChanged.bind(this);
458
- this.handleFormatSelection = this.handleFormatSelection.bind(this);
459
- this.handleConditionalFormatCreate = this.handleConditionalFormatCreate.bind(this);
460
- this.handleConditionalFormatEdit = this.handleConditionalFormatEdit.bind(this);
461
- this.handleConditionalFormatsChange = this.handleConditionalFormatsChange.bind(this);
462
- this.handleConditionalFormatEditorSave = this.handleConditionalFormatEditorSave.bind(this);
463
- this.handleConditionalFormatEditorCancel = this.handleConditionalFormatEditorCancel.bind(this);
464
- this.handleUpdateCustomColumns = this.handleUpdateCustomColumns.bind(this);
465
- this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(this);
466
- this.handleSelectDistinctChanged = this.handleSelectDistinctChanged.bind(this);
467
- this.handlePendingDataUpdated = this.handlePendingDataUpdated.bind(this);
468
- this.handlePendingCommitClicked = this.handlePendingCommitClicked.bind(this);
469
- this.handlePendingDiscardClicked = this.handlePendingDiscardClicked.bind(this);
470
- this.handleGotoRowSelectedRowNumberSubmit = this.handleGotoRowSelectedRowNumberSubmit.bind(this);
471
- this.focusRowInGrid = this.focusRowInGrid.bind(this);
472
- this.handleDownloadTable = this.handleDownloadTable.bind(this);
473
- this.handleDownloadTableStart = this.handleDownloadTableStart.bind(this);
474
- this.handleCancelDownloadTable = this.handleCancelDownloadTable.bind(this);
475
- this.handleDownloadCanceled = this.handleDownloadCanceled.bind(this);
476
- this.handleDownloadCompleted = this.handleDownloadCompleted.bind(this);
477
- this.handlePartitionAppend = this.handlePartitionAppend.bind(this);
478
- this.handlePartitionChange = this.handlePartitionChange.bind(this);
479
- this.handlePartitionFetchAll = this.handlePartitionFetchAll.bind(this);
480
- this.handlePartitionDone = this.handlePartitionDone.bind(this);
481
- this.handleColumnVisibilityChanged = this.handleColumnVisibilityChanged.bind(this);
482
- this.handleColumnVisibilityReset = this.handleColumnVisibilityReset.bind(this);
483
- this.handleCrossColumnSearch = this.handleCrossColumnSearch.bind(this);
484
- this.handleRollupChange = this.handleRollupChange.bind(this);
485
- this.handleOverflowClose = this.handleOverflowClose.bind(this);
486
- this.getColumnBoundingRect = this.getColumnBoundingRect.bind(this);
487
- this.handleGotoRowSelectedRowNumberChanged = this.handleGotoRowSelectedRowNumberChanged.bind(this);
488
- this.handleGotoValueSelectedColumnNameChanged = this.handleGotoValueSelectedColumnNameChanged.bind(this);
489
- this.handleGotoValueSelectedFilterChanged = this.handleGotoValueSelectedFilterChanged.bind(this);
490
- this.handleGotoValueChanged = this.handleGotoValueChanged.bind(this);
491
- this.handleGotoValueSubmitted = this.handleGotoValueSubmitted.bind(this);
492
- this.grid = null;
493
- this.gridWrapper = null;
494
- this.lastLoadedConfig = null;
495
- this.pending = new Pending();
496
- this.globalColumnFormats = EMPTY_ARRAY;
497
- this.decimalFormatOptions = {};
498
- this.integerFormatOptions = {};
499
- this.truncateNumbersWithPound = false;
500
-
501
- // When the loading scrim started/when it should extend to the end of the screen.
502
- this.renderer = new IrisGridRenderer();
503
- this.tableSaver = null;
504
- this.crossColumnRef = /*#__PURE__*/React.createRef();
505
- this.isAnimating = false;
506
- this.filterInputRef = /*#__PURE__*/React.createRef();
507
- this.toggleFilterBarAction = {
508
- action: () => this.toggleFilterBar(),
509
- shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER
510
- };
511
- this.toggleSearchBarAction = {
512
- action: () => this.toggleSearchBar(),
513
- shortcut: SHORTCUTS.TABLE.TOGGLE_SEARCH
514
- };
515
- this.toggleGotoRowAction = {
516
- action: () => this.toggleGotoRow(),
517
- shortcut: SHORTCUTS.TABLE.GOTO_ROW
518
- };
519
- this.discardAction = {
520
- action: () => {
521
- var {
522
- model
523
- } = this.props;
524
- if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0) {
525
- this.discardPending().catch(log.error);
526
- }
527
- },
528
- shortcut: SHORTCUTS.INPUT_TABLE.DISCARD
529
- };
530
- this.commitAction = {
531
- action: () => {
532
- var {
533
- model
534
- } = this.props;
535
- if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0 && model.pendingDataErrors.size === 0) {
536
- this.commitPending().catch(log.error);
537
- }
538
- },
539
- shortcut: SHORTCUTS.INPUT_TABLE.COMMIT
540
- };
541
- this.contextActions = [this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, this.discardAction, this.commitAction];
542
- var {
543
- aggregationSettings: _aggregationSettings,
544
- conditionalFormats,
545
- customColumnFormatMap,
546
- isFilterBarShown: _isFilterBarShown,
547
- isSelectingPartition,
548
- model: _model,
549
- movedColumns: movedColumnsProp,
550
- movedRows: movedRowsProp,
551
- partition,
552
- partitionColumn,
553
- rollupConfig: _rollupConfig,
554
- userColumnWidths: _userColumnWidths,
555
- userRowHeights,
556
- showSearchBar: _showSearchBar,
557
- searchValue: _searchValue,
558
- selectedSearchColumns: _selectedSearchColumns,
559
- invertSearchColumns: _invertSearchColumns,
560
- advancedFilters: _advancedFilters,
561
- quickFilters: _quickFilters,
562
- selectDistinctColumns,
563
- pendingDataMap,
564
- canCopy,
565
- frozenColumns,
566
- columnHeaderGroups
567
- } = props;
568
- var keyHandlers = [new ReverseKeyHandler(this), new ClearFilterKeyHandler(this)];
569
- if (canCopy) {
570
- keyHandlers.push(new CopyKeyHandler(this));
571
- }
572
- var {
573
- dh: _dh
574
- } = _model;
575
- var mouseHandlers = [new IrisGridCellOverflowMouseHandler(this), new IrisGridRowTreeMouseHandler(this), new IrisGridTokenMouseHandler(this), new IrisGridColumnSelectMouseHandler(this), new IrisGridColumnTooltipMouseHandler(this), new IrisGridSortMouseHandler(this), new IrisGridFilterMouseHandler(this), new IrisGridContextMenuHandler(this, _dh), new IrisGridDataSelectMouseHandler(this), new PendingMouseHandler(this)];
576
- var _movedColumns = movedColumnsProp.length > 0 ? movedColumnsProp : _model.initialMovedColumns;
577
- var movedRows = movedRowsProp.length > 0 ? movedRowsProp : _model.initialMovedRows;
578
- var _metricCalculator = new IrisGridMetricCalculator({
579
- userColumnWidths: new Map(_userColumnWidths),
580
- userRowHeights: new Map(userRowHeights),
581
- movedColumns: _movedColumns,
582
- initialColumnWidths: new Map(_model === null || _model === void 0 ? void 0 : (_model$layoutHints = _model.layoutHints) === null || _model$layoutHints === void 0 ? void 0 : (_model$layoutHints$hi = _model$layoutHints.hiddenColumns) === null || _model$layoutHints$hi === void 0 ? void 0 : _model$layoutHints$hi.map(name => [_model.getColumnIndexByName(name), 0]))
583
- });
584
- var searchColumns = _selectedSearchColumns !== null && _selectedSearchColumns !== void 0 ? _selectedSearchColumns : [];
585
- var _searchFilter = CrossColumnSearch.createSearchFilter(_dh, _searchValue, searchColumns, _model.columns, _invertSearchColumns);
586
- this.tableUtils = new TableUtils(_dh);
587
- this.state = {
588
- isFilterBarShown: _isFilterBarShown,
589
- isSelectingPartition,
590
- focusedFilterBarColumn: null,
591
- metricCalculator: _metricCalculator,
592
- metrics: undefined,
593
- keyHandlers,
594
- mouseHandlers,
595
- partition,
596
- partitionColumn,
597
- partitionTable: null,
598
- partitionFilters: [],
599
- // setAdvancedFilter and setQuickFilter mutate the arguments
600
- // so we want to always use map copies from the state instead of props
601
- quickFilters: _quickFilters ? new Map(_quickFilters) : new Map(),
602
- advancedFilters: new Map(_advancedFilters),
603
- shownAdvancedFilter: null,
604
- hoverAdvancedFilter: null,
605
- sorts: [],
606
- reverseType: TableUtils.REVERSE_TYPE.NONE,
607
- customColumns: [],
608
- selectDistinctColumns,
609
- // selected range in table
610
- selectedRanges: [],
611
- // Current ongoing copy operation
612
- copyOperation: null,
613
- // The filter that is currently being applied. Reset after update is received
614
- loadingText: null,
615
- loadingScrimProgress: null,
616
- loadingSpinnerShown: false,
617
- movedColumns: _movedColumns,
618
- movedRows,
619
- shownColumnTooltip: null,
620
- formatter: new Formatter(_dh),
621
- isMenuShown: false,
622
- customColumnFormatMap: new Map(customColumnFormatMap),
623
- conditionalFormats,
624
- conditionalFormatEditIndex: null,
625
- conditionalFormatPreview: undefined,
626
- // Column user is hovering over for selection
627
- hoverSelectColumn: null,
628
- isTableDownloading: false,
629
- isReady: false,
630
- tableDownloadStatus: '',
631
- tableDownloadProgress: 0,
632
- tableDownloadEstimatedTime: 0,
633
- showSearchBar: _showSearchBar,
634
- searchFilter: _searchFilter,
635
- searchValue: _searchValue,
636
- selectedSearchColumns: searchColumns,
637
- invertSearchColumns: _invertSearchColumns,
638
- rollupConfig: _rollupConfig,
639
- rollupSelectedColumns: [],
640
- aggregationSettings: _aggregationSettings,
641
- selectedAggregation: null,
642
- openOptions: [],
643
- pendingRowCount: 0,
644
- pendingDataMap: pendingDataMap !== null && pendingDataMap !== void 0 ? pendingDataMap : new Map(),
645
- pendingDataErrors: new Map(),
646
- pendingSavePromise: null,
647
- pendingSaveError: null,
648
- toastMessage: null,
649
- frozenColumns,
650
- showOverflowModal: false,
651
- overflowText: '',
652
- overflowButtonTooltipProps: null,
653
- expandCellTooltipProps: null,
654
- expandTooltipDisplayValue: 'expand',
655
- linkHoverTooltipProps: null,
656
- linkHoverDisplayValue: '',
657
- isGotoShown: false,
658
- gotoRow: '',
659
- gotoRowError: '',
660
- gotoValueError: '',
661
- gotoValueSelectedColumnName: (_model$columns$0$name = (_model$columns$ = _model.columns[0]) === null || _model$columns$ === void 0 ? void 0 : _model$columns$.name) !== null && _model$columns$0$name !== void 0 ? _model$columns$0$name : '',
662
- gotoValueSelectedFilter: FilterType.eqIgnoreCase,
663
- gotoValue: '',
664
- columnHeaderGroups: columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : _model.initialColumnHeaderGroups
665
- };
666
- }
667
- componentDidMount() {
668
- var {
669
- partitionColumn,
670
- model
671
- } = this.props;
672
- var column = partitionColumn !== null && partitionColumn !== void 0 ? partitionColumn : model.columns.find(c => c.isPartitionColumn);
673
- if (model.isFilterRequired && model.isValuesTableAvailable && column != null) {
674
- this.loadPartitionsTable(column);
675
- } else {
676
- this.initState();
677
- }
678
- this.startListening(model);
679
- }
680
- componentDidUpdate(prevProps) {
681
- var {
682
- inputFilters,
683
- isSelectingColumn,
684
- settings,
685
- model,
686
- customFilters,
687
- sorts
688
- } = this.props;
689
- if (model !== prevProps.model) {
690
- this.stopListening(prevProps.model);
691
- this.startListening(model);
692
- }
693
- var changedInputFilters = inputFilters !== prevProps.inputFilters ? inputFilters.filter(inputFilter => !prevProps.inputFilters.includes(inputFilter)) : [];
694
- if (changedInputFilters.length > 0) {
695
- var _advancedSettings$get;
696
- var {
697
- advancedSettings
698
- } = this.props;
699
- var replaceExistingFilters = (_advancedSettings$get = advancedSettings.get(AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get !== void 0 ? _advancedSettings$get : false;
700
- if (replaceExistingFilters) {
701
- this.clearGridInputField();
702
- this.clearCrossColumSearch();
703
- }
704
- this.startLoading('Filtering...', true);
705
- this.applyInputFilters(changedInputFilters, replaceExistingFilters);
706
- }
707
- if (isSelectingColumn !== prevProps.isSelectingColumn) {
708
- this.resetColumnSelection();
709
- }
710
- if (settings !== prevProps.settings) {
711
- this.updateFormatterSettings(settings);
712
- }
713
- if (customFilters !== prevProps.customFilters) {
714
- this.startLoading('Filtering...', true);
715
- }
716
- if (sorts !== prevProps.sorts) {
717
- this.updateSorts(sorts);
718
- }
719
- var {
720
- loadingScrimStartTime,
721
- loadingScrimFinishTime
722
- } = this;
723
- if (loadingScrimStartTime != null && loadingScrimFinishTime != null) {
724
- window.requestAnimationFrame(() => {
725
- var now = Date.now();
726
- var currentTime = now - loadingScrimStartTime;
727
- var totalTime = loadingScrimFinishTime - loadingScrimStartTime;
728
- var loadingScrimProgress = Math.min(currentTime / totalTime, 1);
729
- if (loadingScrimFinishTime < now) {
730
- this.loadingScrimStartTime = undefined;
731
- this.loadingScrimFinishTime = undefined;
732
- }
733
- this.setState(state => {
734
- if (state.loadingScrimProgress == null) {
735
- log.debug2('Ignoring scrim update because loading cancelled.');
736
- return null;
737
- }
738
- return {
739
- loadingScrimProgress
740
- };
741
- });
742
- });
743
- }
744
- this.sendStateChange();
745
- }
746
- componentWillUnmount() {
747
- var {
748
- model
749
- } = this.props;
750
- this.stopListening(model);
751
- this.pending.cancel();
752
- this.updateSearchFilter.cancel();
753
- if (this.loadingTimer) {
754
- clearTimeout(this.loadingTimer);
755
- }
756
- this.handleDownloadProgressUpdate.cancel();
757
- if (this.animationFrame !== undefined) {
758
- cancelAnimationFrame(this.animationFrame);
759
- }
760
- }
761
- getValueForCell(columnIndex, rowIndex) {
762
- var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
763
- var {
764
- model
765
- } = this.props;
766
- var {
767
- dh
768
- } = model;
769
- var modelColumn = this.getModelColumn(columnIndex);
770
- var modelRow = this.getModelRow(rowIndex);
771
- if (rawValue && modelColumn != null && modelRow != null) {
772
- var _value = model.valueForCell(modelColumn, modelRow);
773
- if (TableUtils.isDateType(model.columns[modelColumn].type)) {
774
- // The returned value is just a long value, we should return the value formatted as a full date string
775
- var {
776
- formatter
777
- } = model;
778
- return dh.i18n.DateTimeFormat.format(UNFORMATTED_DATE_PATTERN, _value, dh.i18n.TimeZone.getTimeZone(formatter.timeZone));
779
- }
780
- return _value;
781
- }
782
- if (rawValue) {
783
- return null;
784
- }
785
- if (modelColumn != null && modelRow != null) {
786
- return model.textForCell(modelColumn, modelRow);
787
- }
788
- return '';
789
- }
790
- getModelColumn(columnIndex) {
791
- var {
792
- metrics
793
- } = this.state;
794
- assertNotNull(metrics);
795
- var {
796
- modelColumns
797
- } = metrics;
798
- if (modelColumns == null) {
799
- return null;
800
- }
801
- return columnIndex != null ? modelColumns.get(columnIndex) : null;
802
- }
803
- getModelRow(rowIndex) {
804
- var {
805
- metrics
806
- } = this.state;
807
- assertNotNull(metrics);
808
- var {
809
- modelRows
810
- } = metrics;
811
- if (modelRows == null) {
812
- return null;
813
- }
814
- return rowIndex != null ? modelRows.get(rowIndex) : null;
815
- }
816
- getTheme() {
817
- var _ref4;
818
- var {
819
- model,
820
- theme
821
- } = this.props;
822
- return this.getCachedTheme(theme, (_ref4 = isEditableGridModel(model) && model.isEditable) !== null && _ref4 !== void 0 ? _ref4 : false, model.floatingTopRowCount + model.floatingBottomRowCount);
823
- }
824
- getVisibleColumn(modelIndex) {
825
- var {
826
- movedColumns
827
- } = this.state;
828
- return GridUtils.getVisibleIndex(modelIndex, movedColumns);
829
- }
830
- makeQuickFilter(column, text, timeZone) {
831
- try {
832
- return this.tableUtils.makeQuickFilter(column, text, timeZone);
833
- } catch (err) {
834
- log.error('Error creating quick filter', err);
835
- }
836
- return null;
837
- }
838
-
839
- /**
840
- * Applies the provided input filters as quick filters,
841
- * and clears any existing quickFilters or advancedFilters on that column
842
- * @param inputFilters Array of input filters to apply
843
- * @param replaceExisting If true, new filters will replace the existing ones, instead of merging
844
- */
845
- applyInputFilters(inputFilters) {
846
- var replaceExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
847
- var {
848
- model
849
- } = this.props;
850
- var {
851
- advancedFilters,
852
- quickFilters
853
- } = this.state;
854
- var newAdvancedFilters = replaceExisting ? new Map() : new Map(advancedFilters);
855
- var newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);
856
- var isChanged = replaceExisting && advancedFilters.size > 0;
857
- inputFilters.forEach(_ref5 => {
858
- var {
859
- name,
860
- type,
861
- value
862
- } = _ref5;
863
- var modelIndex = model.columns.findIndex(_ref6 => {
864
- var {
865
- name: columnName,
866
- type: columnType
867
- } = _ref6;
868
- return columnName === name && columnType === type;
869
- });
870
- if (modelIndex >= 0) {
871
- isChanged = newAdvancedFilters.delete(modelIndex) || isChanged;
872
- isChanged = this.applyQuickFilter(modelIndex, value, newQuickFilters) || isChanged;
873
- } else {
874
- log.error('Unable to find column for inputFilter', name, type, value);
875
- }
876
- });
877
- if (isChanged) {
878
- this.setState({
879
- quickFilters: newQuickFilters,
880
- advancedFilters: newAdvancedFilters
881
- });
882
- }
883
- }
884
-
885
- /**
886
- * Applies a quick filter
887
- * @param modelIndex The index in the model of the column to set
888
- * @param value The string value to set to the quick filter
889
- * @param quickFilters The quick filters map
890
- * @returns True if the filters have changed because this quick filter was applied
891
- */
892
- applyQuickFilter(modelIndex, value, quickFilters) {
893
- var {
894
- model
895
- } = this.props;
896
- var {
897
- formatter
898
- } = model;
899
- var column = model.columns[modelIndex];
900
- if (value != null && "".concat(value).trim().length > 0) {
901
- var quickFilter = quickFilters.get(modelIndex);
902
- if (quickFilter != null) {
903
- var {
904
- text
905
- } = quickFilter;
906
- if (text === value) {
907
- log.debug2('Ignoring change to existing filter');
908
- return false;
909
- }
910
- }
911
- quickFilters.set(modelIndex, {
912
- text: value,
913
- filter: this.makeQuickFilter(column, value, formatter.timeZone)
914
- });
915
- return true;
916
- }
917
- return quickFilters.delete(modelIndex);
918
- }
919
- setAdvancedFilterMap(advancedFilters) {
920
- this.setState({
921
- advancedFilters
922
- });
923
- }
924
- setAdvancedFilter(modelIndex, filter, options) {
925
- log.debug('Setting advanced filter', modelIndex, filter);
926
- this.startLoading('Filtering...', true);
927
- this.setState(_ref7 => {
928
- var {
929
- advancedFilters
930
- } = _ref7;
931
- var newAdvancedFilters = new Map(advancedFilters);
932
- if (filter == null) {
933
- newAdvancedFilters.delete(modelIndex);
934
- } else {
935
- newAdvancedFilters.set(modelIndex, {
936
- filter,
937
- options
938
- });
939
- }
940
- return {
941
- advancedFilters: newAdvancedFilters
942
- };
943
- });
944
- }
945
-
946
- /**
947
- * Sets a quick filter against the provided column
948
- * @param modelIndex The index in the model for the column this filter is applied to
949
- * @param filter A filter to apply to the column, or null if there was an error
950
- * @param text The original text the filter was created with
951
- */
952
- setQuickFilter(modelIndex, filter, text) {
953
- log.debug('Setting quick filter', modelIndex, filter, text);
954
- this.startLoading('Filtering...', true);
955
- this.setState(_ref8 => {
956
- var {
957
- quickFilters
958
- } = _ref8;
959
- var newQuickFilters = new Map(quickFilters);
960
- newQuickFilters.set(modelIndex, {
961
- filter,
962
- text
963
- });
964
- return {
965
- quickFilters: newQuickFilters
966
- };
967
- });
968
- }
969
-
970
- /**
971
- * Set grid filters based on the filter map
972
- * @param filterMap Filter map
973
- */
974
- setFilterMap(filterMap) {
975
- var _advancedSettings$get2;
976
- log.debug('setFilterMap', filterMap);
977
- var {
978
- advancedSettings
979
- } = this.props;
980
- var clearFiltersOnLinkerFilterUpdate = (_advancedSettings$get2 = advancedSettings.get(AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get2 !== void 0 ? _advancedSettings$get2 : false;
981
- if (clearFiltersOnLinkerFilterUpdate) {
982
- this.clearAllFilters();
983
- }
984
- var {
985
- model
986
- } = this.props;
987
- filterMap.forEach((_ref9, columnName) => {
988
- var {
989
- columnType,
990
- filterList
991
- } = _ref9;
992
- var column = model.columns.find(c => c.name === columnName && c.type === columnType);
993
- if (column == null) {
994
- return;
995
- }
996
- var columnIndex = model.getColumnIndexByName(column.name);
997
- assertNotNull(columnIndex);
998
- var combinedText = IrisGridUtils.combineFiltersFromList(columnType, filterList);
999
- if (combinedText.length === 0) {
1000
- this.removeQuickFilter(columnIndex);
1001
- } else {
1002
- var {
1003
- formatter
1004
- } = model;
1005
- this.setQuickFilter(columnIndex, this.makeQuickFilter(column, combinedText, formatter.timeZone), "".concat(combinedText));
1006
- }
1007
- });
1008
- }
1009
- removeColumnFilter(modelColumn) {
1010
- this.startLoading('Filtering...', true);
1011
- this.setState(_ref10 => {
1012
- var {
1013
- advancedFilters,
1014
- quickFilters
1015
- } = _ref10;
1016
- var newAdvancedFilters = advancedFilters ? new Map(advancedFilters) : new Map();
1017
- var newQuickFilters = quickFilters ? new Map(quickFilters) : new Map();
1018
- newQuickFilters.delete(modelColumn);
1019
- newAdvancedFilters.delete(modelColumn);
1020
- return {
1021
- quickFilters: newQuickFilters,
1022
- advancedFilters: newAdvancedFilters
1023
- };
1024
- });
1025
- }
1026
- removeQuickFilter(modelColumn) {
1027
- this.startLoading('Clearing Filter...', true);
1028
- this.setState(_ref11 => {
1029
- var {
1030
- quickFilters
1031
- } = _ref11;
1032
- var newQuickFilters = new Map(quickFilters);
1033
- newQuickFilters.delete(modelColumn);
1034
- return {
1035
- quickFilters: newQuickFilters
1036
- };
1037
- });
1038
- }
1039
- clearAllFilters() {
1040
- log.debug('Clearing all filters');
1041
- var {
1042
- advancedFilters,
1043
- quickFilters,
1044
- searchFilter
1045
- } = this.state;
1046
- if (quickFilters.size === 0 && advancedFilters.size === 0 && searchFilter === null) {
1047
- return;
1048
- }
1049
-
1050
- // if there is an active quick filter input field, reset it as well
1051
- this.clearGridInputField();
1052
- this.startLoading('Clearing Filters...', true);
1053
- this.setState({
1054
- quickFilters: new Map(),
1055
- advancedFilters: new Map(),
1056
- searchValue: '',
1057
- searchFilter: undefined
1058
- });
1059
- }
1060
- clearCrossColumSearch() {
1061
- log.debug('Clearing cross-column search');
1062
- this.setState({
1063
- searchValue: '',
1064
- searchFilter: undefined
1065
- });
1066
- }
1067
- clearGridInputField() {
1068
- if (this.filterInputRef.current != null) {
1069
- this.filterInputRef.current.setValue('');
1070
- }
1071
- }
1072
-
1073
- /**
1074
- * Rebuilds all the current filters. Necessary if something like the time zone has changed.
1075
- */
1076
- rebuildFilters() {
1077
- log.debug('Rebuilding filters');
1078
- var {
1079
- model
1080
- } = this.props;
1081
- var {
1082
- advancedFilters,
1083
- quickFilters
1084
- } = this.state;
1085
- var {
1086
- columns,
1087
- formatter
1088
- } = model;
1089
- var newAdvancedFilters = new Map();
1090
- var newQuickFilters = new Map();
1091
- advancedFilters.forEach((value, key) => {
1092
- var {
1093
- options
1094
- } = value;
1095
- var column = columns[key];
1096
- var filter = this.tableUtils.makeAdvancedFilter(column, options, formatter.timeZone);
1097
- newAdvancedFilters.set(key, {
1098
- options,
1099
- filter
1100
- });
1101
- });
1102
- quickFilters.forEach((value, key) => {
1103
- var {
1104
- text
1105
- } = value;
1106
- var column = columns[key];
1107
- newQuickFilters.set(key, {
1108
- text,
1109
- filter: this.makeQuickFilter(column, text, formatter.timeZone)
1110
- });
1111
- });
1112
- this.startLoading('Rebuilding filters...', true);
1113
- this.setState({
1114
- quickFilters: newQuickFilters,
1115
- advancedFilters: newAdvancedFilters
1116
- });
1117
- }
1118
- setFilters(_ref12) {
1119
- var {
1120
- quickFilters,
1121
- advancedFilters
1122
- } = _ref12;
1123
- this.setState({
1124
- quickFilters,
1125
- advancedFilters
1126
- });
1127
- }
1128
- updateFormatterSettings(settings) {
1129
- var _settings$defaultDeci, _settings$defaultInte, _settings$truncateNum;
1130
- var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
1131
- var globalColumnFormats = FormatterUtils.getColumnFormats(settings);
1132
- var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);
1133
- var defaultDecimalFormatOptions = (_settings$defaultDeci = settings === null || settings === void 0 ? void 0 : settings.defaultDecimalFormatOptions) !== null && _settings$defaultDeci !== void 0 ? _settings$defaultDeci : {};
1134
- var defaultIntegerFormatOptions = (_settings$defaultInte = settings === null || settings === void 0 ? void 0 : settings.defaultIntegerFormatOptions) !== null && _settings$defaultInte !== void 0 ? _settings$defaultInte : {};
1135
- var truncateNumbersWithPound = (_settings$truncateNum = settings === null || settings === void 0 ? void 0 : settings.truncateNumbersWithPound) !== null && _settings$truncateNum !== void 0 ? _settings$truncateNum : false;
1136
- var isColumnFormatChanged = !deepEqual(this.globalColumnFormats, globalColumnFormats);
1137
- var isDateFormattingChanged = !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions);
1138
- var isDecimalFormattingChanged = !deepEqual(this.decimalFormatOptions, settings === null || settings === void 0 ? void 0 : settings.defaultDecimalFormatOptions);
1139
- var isIntegerFormattingChanged = !deepEqual(this.integerFormatOptions, defaultIntegerFormatOptions);
1140
- var isTruncateNumbersChanged = this.truncateNumbersWithPound !== truncateNumbersWithPound;
1141
- if (isColumnFormatChanged || isDateFormattingChanged || isDecimalFormattingChanged || isIntegerFormattingChanged || isTruncateNumbersChanged) {
1142
- this.globalColumnFormats = globalColumnFormats;
1143
- this.dateTimeFormatterOptions = dateTimeFormatterOptions;
1144
- this.decimalFormatOptions = defaultDecimalFormatOptions;
1145
- this.integerFormatOptions = defaultIntegerFormatOptions;
1146
- this.truncateNumbersWithPound = truncateNumbersWithPound;
1147
- this.updateFormatter({}, forceUpdate);
1148
- if (isDateFormattingChanged && forceUpdate) {
1149
- this.rebuildFilters();
1150
- }
1151
- }
1152
- }
1153
- updateFormatter(updatedFormats) {
1154
- var _this$globalColumnFor;
1155
- var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
1156
- var {
1157
- customColumnFormatMap
1158
- } = this.state;
1159
- var {
1160
- model
1161
- } = this.props;
1162
- var update = _objectSpread({
1163
- customColumnFormatMap
1164
- }, updatedFormats);
1165
- var mergedColumnFormats = [...((_this$globalColumnFor = this.globalColumnFormats) !== null && _this$globalColumnFor !== void 0 ? _this$globalColumnFor : []), ...update.customColumnFormatMap.values()];
1166
- var formatter = new Formatter(model.dh, mergedColumnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions, this.truncateNumbersWithPound);
1167
- log.debug('updateFormatter', this.globalColumnFormats, mergedColumnFormats);
1168
- this.setState(_objectSpread(_objectSpread({}, update), {}, {
1169
- formatter
1170
- }), () => {
1171
- if (forceUpdate && this.grid) {
1172
- this.grid.forceUpdate();
1173
- }
1174
- });
1175
- }
1176
- initFormatter() {
1177
- var {
1178
- settings
1179
- } = this.props;
1180
- this.updateFormatterSettings(settings);
1181
- }
1182
- initState() {
1183
- var {
1184
- applyInputFiltersOnInit,
1185
- inputFilters,
1186
- sorts,
1187
- model,
1188
- reverseType,
1189
- customColumns,
1190
- searchValue,
1191
- selectedSearchColumns,
1192
- invertSearchColumns
1193
- } = this.props;
1194
- var searchColumns = selectedSearchColumns !== null && selectedSearchColumns !== void 0 ? selectedSearchColumns : [];
1195
- var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, searchColumns, model.columns, invertSearchColumns);
1196
- if (applyInputFiltersOnInit) {
1197
- // There may be more than one input filter on the same column with value === '' applied last
1198
- // We don't want to skip it here, so only excluding the ones that were never applied (null)
1199
- var inputFiltersWithValues = inputFilters.filter(inputFilter => inputFilter.value != null);
1200
- this.applyInputFilters(inputFiltersWithValues);
1201
- }
1202
- this.setState({
1203
- sorts,
1204
- reverseType,
1205
- customColumns,
1206
- isReady: true,
1207
- searchFilter
1208
- });
1209
- this.initFormatter();
1210
- }
1211
- loadPartitionsTable(partitionColumn) {
1212
- var _this = this;
1213
- return _asyncToGenerator(function* () {
1214
- var {
1215
- model
1216
- } = _this.props;
1217
- _this.setState({
1218
- isSelectingPartition: true
1219
- });
1220
- try {
1221
- var partitionTable = yield _this.pending.add(model.valuesTable(partitionColumn), resolved => resolved.close());
1222
- var _column = partitionTable.columns[0];
1223
- var sort = _column.sort().desc();
1224
- partitionTable.applySort([sort]);
1225
- partitionTable.setViewport(0, 0, [_column]);
1226
- var data = yield _this.pending.add(partitionTable.getViewportData());
1227
- if (data.rows.length > 0) {
1228
- var row = data.rows[0];
1229
- var _value2 = row.get(_column);
1230
- _this.updatePartition(_value2, partitionColumn);
1231
- _this.setState({
1232
- isSelectingPartition: true
1233
- });
1234
- } else {
1235
- log.info('Table does not have any data, just fetching all');
1236
- _this.setState({
1237
- isSelectingPartition: false
1238
- });
1239
- _this.handlePartitionFetchAll();
1240
- }
1241
- _this.setState({
1242
- partitionTable,
1243
- partitionColumn
1244
- }, () => {
1245
- _this.initState();
1246
- });
1247
- } catch (error) {
1248
- _this.handleTableLoadError(error);
1249
- }
1250
- })();
1251
- }
1252
- updatePartition(partition, partitionColumn) {
1253
- var {
1254
- model
1255
- } = this.props;
1256
- var partitionFilter = partitionColumn.filter().eq(model.dh.FilterValue.ofString(partition));
1257
- var partitionFilters = [partitionFilter];
1258
- this.setState({
1259
- partition,
1260
- partitionFilters
1261
- });
1262
- }
1263
- copyCell(columnIndex, rowIndex) {
1264
- var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1265
- var {
1266
- canCopy
1267
- } = this.props;
1268
- if (canCopy) {
1269
- var _value3 = String(this.getValueForCell(columnIndex, rowIndex, rawValue));
1270
- copyToClipboard(_value3).catch(e => log.error('Unable to copy cell', e));
1271
- } else {
1272
- log.error('Attempted to copyCell for user without copy permission.');
1273
- }
1274
- }
1275
-
1276
- /**
1277
- * Copy the provided ranges to the clipboard
1278
- * @paramranges The ranges to copy
1279
- * @param includeHeaders Include the headers or not
1280
- * @param formatValues Whether to format values or not
1281
- * @param error Error message if one occurred
1282
- */
1283
- copyRanges(ranges) {
1284
- var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1285
- var formatValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
1286
- var error = arguments.length > 3 ? arguments[3] : undefined;
1287
- var {
1288
- model,
1289
- canCopy
1290
- } = this.props;
1291
- var {
1292
- metricCalculator,
1293
- movedColumns
1294
- } = this.state;
1295
- var userColumnWidths = metricCalculator.getUserColumnWidths();
1296
- if (canCopy) {
1297
- var copyOperation = {
1298
- ranges: GridRange.boundedRanges(ranges, model.columnCount, model.rowCount),
1299
- includeHeaders,
1300
- formatValues,
1301
- movedColumns,
1302
- userColumnWidths,
1303
- error
1304
- };
1305
- this.setState({
1306
- copyOperation
1307
- });
1308
- } else {
1309
- log.error('Attempted copyRanges for user without copy permission.');
1310
- }
1311
- }
1312
- startLoading(loadingText) {
1313
- var resetRanges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1314
- this.setState({
1315
- loadingText
1316
- });
1317
- var theme = this.getTheme();
1318
- if (resetRanges && this.grid) {
1319
- this.grid.clearSelectedRanges();
1320
- this.grid.setViewState({
1321
- top: 0
1322
- }, true);
1323
- }
1324
- if (this.loadingScrimStartTime == null) {
1325
- var _this$gridWrapper$get, _this$gridWrapper;
1326
- var {
1327
- minScrimTransitionTime,
1328
- maxScrimTransitionTime
1329
- } = theme;
1330
- assertNotNull(minScrimTransitionTime);
1331
- assertNotNull(maxScrimTransitionTime);
1332
- var height = (_this$gridWrapper$get = (_this$gridWrapper = this.gridWrapper) === null || _this$gridWrapper === void 0 ? void 0 : _this$gridWrapper.getBoundingClientRect().height) !== null && _this$gridWrapper$get !== void 0 ? _this$gridWrapper$get : 0;
1333
- var scrimTransitionTime = Math.max(minScrimTransitionTime, Math.min(height / 2, maxScrimTransitionTime));
1334
- this.loadingScrimStartTime = Date.now();
1335
- this.loadingScrimFinishTime = this.loadingScrimStartTime + scrimTransitionTime;
1336
- this.setState({
1337
- loadingScrimProgress: 0
1338
- });
1339
- this.loadingTimer = setTimeout(() => {
1340
- this.setState({
1341
- loadingSpinnerShown: true
1342
- });
1343
- }, IrisGrid.loadingSpinnerDelay);
1344
- }
1345
- }
1346
- stopLoading() {
1347
- this.loadingScrimStartTime = undefined;
1348
- this.loadingScrimFinishTime = undefined;
1349
- this.setState({
1350
- loadingText: null,
1351
- loadingScrimProgress: null,
1352
- loadingSpinnerShown: false
1353
- });
1354
- if (this.loadingTimer != null) {
1355
- clearTimeout(this.loadingTimer);
1356
- this.loadingTimer = undefined;
1357
- }
1358
- }
1359
-
1360
- /**
1361
- * Rolls back the table state to the last known safe state, or if that's not available then clears all sorts/filters/custom columns.
1362
- */
1363
- rollback() {
1364
- if (this.lastLoadedConfig) {
1365
- log.debug('loading last loading config', this.lastLoadedConfig);
1366
- var {
1367
- advancedFilters,
1368
- aggregationSettings,
1369
- customColumns,
1370
- quickFilters,
1371
- reverseType,
1372
- rollupConfig,
1373
- searchFilter,
1374
- selectDistinctColumns,
1375
- sorts
1376
- } = this.lastLoadedConfig;
1377
- this.lastLoadedConfig = null;
1378
- this.setState({
1379
- advancedFilters,
1380
- aggregationSettings,
1381
- customColumns,
1382
- quickFilters,
1383
- reverseType,
1384
- rollupConfig,
1385
- searchFilter,
1386
- selectDistinctColumns,
1387
- sorts
1388
- });
1389
- } else {
1390
- log.debug('remove all sorts, filters, and custom columns');
1391
- this.setState({
1392
- advancedFilters: new Map(),
1393
- aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,
1394
- customColumns: [],
1395
- quickFilters: new Map(),
1396
- reverseType: TableUtils.REVERSE_TYPE.NONE,
1397
- rollupConfig: undefined,
1398
- selectDistinctColumns: [],
1399
- sorts: []
1400
- });
1401
- }
1402
- }
1403
-
1404
- /**
1405
- * Check if we can rollback the current state to a safe state.
1406
- * @returns true if there's a previously known safe state or if some of the current state isn't empty.
1407
- */
1408
- canRollback() {
1409
- return this.lastLoadedConfig != null || !isEmptyConfig(this.state);
1410
- }
1411
- startListening(model) {
1412
- model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);
1413
- model.addEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);
1414
- model.addEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);
1415
- model.addEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);
1416
- }
1417
- stopListening(model) {
1418
- model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);
1419
- model.removeEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);
1420
- model.removeEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);
1421
- model.removeEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);
1422
- }
1423
- focus() {
1424
- var _this$grid;
1425
- (_this$grid = this.grid) === null || _this$grid === void 0 ? void 0 : _this$grid.focus();
1426
- }
1427
- focusFilterBar(column) {
1428
- var {
1429
- movedColumns
1430
- } = this.state;
1431
- var {
1432
- model
1433
- } = this.props;
1434
- var {
1435
- columnCount
1436
- } = model;
1437
- var modelColumn = GridUtils.getModelIndex(column, movedColumns);
1438
- if (column == null || column < 0 || columnCount <= column || !model.isFilterable(modelColumn)) {
1439
- this.setState({
1440
- focusedFilterBarColumn: null
1441
- });
1442
- return;
1443
- }
1444
- var {
1445
- metricCalculator,
1446
- metrics
1447
- } = this.state;
1448
- assertNotNull(metrics);
1449
- var {
1450
- left,
1451
- rightVisible,
1452
- lastLeft
1453
- } = metrics;
1454
- if (column < left) {
1455
- var _this$grid2;
1456
- (_this$grid2 = this.grid) === null || _this$grid2 === void 0 ? void 0 : _this$grid2.setViewState({
1457
- left: column
1458
- }, true);
1459
- } else if (rightVisible < column) {
1460
- var _this$grid3, _this$grid4;
1461
- var metricState = (_this$grid3 = this.grid) === null || _this$grid3 === void 0 ? void 0 : _this$grid3.getMetricState();
1462
- assertNotNull(metricState);
1463
- var newLeft = metricCalculator.getLastLeft(metricState, column, metricCalculator.getVisibleWidth(metricState));
1464
- (_this$grid4 = this.grid) === null || _this$grid4 === void 0 ? void 0 : _this$grid4.setViewState({
1465
- left: Math.min(newLeft, lastLeft),
1466
- leftOffset: 0
1467
- }, true);
1468
- }
1469
- this.lastFocusedFilterBarColumn = column;
1470
- this.setState({
1471
- focusedFilterBarColumn: column,
1472
- isFilterBarShown: true
1473
- });
1474
- }
1475
- hideColumnByVisibleIndex(columnVisibleIndex) {
1476
- var _this$grid5;
1477
- var {
1478
- metricCalculator,
1479
- movedColumns
1480
- } = this.state;
1481
- metricCalculator.setColumnWidth(GridUtils.getModelIndex(columnVisibleIndex, movedColumns), 0);
1482
- (_this$grid5 = this.grid) === null || _this$grid5 === void 0 ? void 0 : _this$grid5.forceUpdate();
1483
- }
1484
- freezeColumnByColumnName(columnName) {
1485
- var {
1486
- frozenColumns,
1487
- movedColumns
1488
- } = this.state;
1489
- var {
1490
- model
1491
- } = this.props;
1492
- log.debug2('freezing column', columnName);
1493
- var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);
1494
- allFrozenColumns.add(columnName);
1495
- var modelIndex = model.getColumnIndexByName(columnName);
1496
- assertNotNull(modelIndex);
1497
- var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);
1498
- var newMovedColumns = GridUtils.moveItem(visibleIndex, allFrozenColumns.size - 1, movedColumns);
1499
- this.setState({
1500
- frozenColumns: [...allFrozenColumns],
1501
- movedColumns: newMovedColumns
1502
- });
1503
- }
1504
- unFreezeColumnByColumnName(columnName) {
1505
- var {
1506
- frozenColumns,
1507
- movedColumns
1508
- } = this.state;
1509
- var {
1510
- model
1511
- } = this.props;
1512
- log.debug2('unfreezing column', columnName);
1513
- var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);
1514
- allFrozenColumns.delete(columnName);
1515
- var modelIndex = model.getColumnIndexByName(columnName);
1516
- assertNotNull(modelIndex);
1517
- var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);
1518
-
1519
- // Move to after remaining frozen columns and front columns
1520
- var newMovedColumns = GridUtils.moveItem(visibleIndex, allFrozenColumns.size + model.frontColumns.length, movedColumns);
1521
- this.setState({
1522
- frozenColumns: [...allFrozenColumns],
1523
- movedColumns: newMovedColumns
1524
- });
1525
- }
1526
- handleColumnVisibilityChanged(modelIndexes, isVisible) {
1527
- var _this$grid6;
1528
- var {
1529
- metricCalculator,
1530
- metrics
1531
- } = this.state;
1532
- assertNotNull(metrics);
1533
- if (isVisible) {
1534
- modelIndexes.forEach(modelIndex => {
1535
- var defaultWidth = metricCalculator.initialColumnWidths.get(modelIndex);
1536
- var calculatedWidth = getOrThrow(metrics.calculatedColumnWidths, modelIndex);
1537
- if (defaultWidth !== calculatedWidth) {
1538
- metricCalculator.setColumnWidth(modelIndex, calculatedWidth);
1539
- } else {
1540
- metricCalculator.resetColumnWidth(modelIndex);
1541
- }
1542
- });
1543
- } else {
1544
- modelIndexes.forEach(modelIndex => {
1545
- metricCalculator.setColumnWidth(modelIndex, 0);
1546
- });
1547
- }
1548
- (_this$grid6 = this.grid) === null || _this$grid6 === void 0 ? void 0 : _this$grid6.forceUpdate();
1549
- }
1550
- handleColumnVisibilityReset() {
1551
- var _model$layoutHints$fr, _model$layoutHints2;
1552
- var {
1553
- metricCalculator,
1554
- metrics
1555
- } = this.state;
1556
- var {
1557
- model
1558
- } = this.props;
1559
- assertNotNull(metrics);
1560
- for (var i = 0; i < metrics.columnCount; i += 1) {
1561
- metricCalculator.resetColumnWidth(i);
1562
- }
1563
- this.handleMovedColumnsChanged(model.initialMovedColumns);
1564
- this.handleHeaderGroupsChanged(model.initialColumnHeaderGroups);
1565
- this.setState({
1566
- frozenColumns: (_model$layoutHints$fr = (_model$layoutHints2 = model.layoutHints) === null || _model$layoutHints2 === void 0 ? void 0 : _model$layoutHints2.frozenColumns) !== null && _model$layoutHints$fr !== void 0 ? _model$layoutHints$fr : []
1567
- });
1568
- }
1569
- handleCrossColumnSearch(searchValue, selectedSearchColumns, invertSearchColumns) {
1570
- var {
1571
- model
1572
- } = this.props;
1573
- this.startLoading('Searching...');
1574
- this.updateSearchFilter(searchValue, selectedSearchColumns, model.columns, invertSearchColumns);
1575
- this.setState({
1576
- searchValue,
1577
- selectedSearchColumns,
1578
- invertSearchColumns
1579
- });
1580
- }
1581
- handleAnimationLoop() {
1582
- var _this$grid7;
1583
- (_this$grid7 = this.grid) === null || _this$grid7 === void 0 ? void 0 : _this$grid7.updateCanvas();
1584
- if (this.isAnimating) {
1585
- this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);
1586
- }
1587
- }
1588
- handleAnimationStart() {
1589
- log.debug2('handleAnimationStart');
1590
- this.isAnimating = true;
1591
- this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);
1592
- }
1593
- handleAnimationEnd() {
1594
- log.debug2('handleAnimationEnd');
1595
- this.isAnimating = false;
1596
- }
1597
- handlePartitionAppend(value) {
1598
- var {
1599
- onPartitionAppend
1600
- } = this.props;
1601
- var {
1602
- partitionColumn
1603
- } = this.state;
1604
- if (partitionColumn == null) {
1605
- return;
1606
- }
1607
- onPartitionAppend(partitionColumn, value);
1608
- }
1609
- handlePartitionChange(partition) {
1610
- var {
1611
- partitionColumn
1612
- } = this.state;
1613
- if (partitionColumn == null) {
1614
- return;
1615
- }
1616
- this.updatePartition(partition, partitionColumn);
1617
- }
1618
- handlePartitionFetchAll() {
1619
- this.setState({
1620
- partitionFilters: [],
1621
- isSelectingPartition: false
1622
- });
1623
- }
1624
- handlePartitionDone() {
1625
- this.setState({
1626
- isSelectingPartition: false
1627
- });
1628
- }
1629
- handleTableLoadError(error) {
1630
- if (PromiseUtils.isCanceled(error)) {
1631
- return;
1632
- }
1633
- log.error(error);
1634
- var {
1635
- onError
1636
- } = this.props;
1637
- onError(error);
1638
- }
1639
- showAllColumns() {
1640
- var _this$grid8;
1641
- var {
1642
- metricCalculator
1643
- } = this.state;
1644
- var userColumnWidths = metricCalculator.getUserColumnWidths();
1645
- var entries = [...userColumnWidths.entries()];
1646
- for (var i = 0; i < entries.length; i += 1) {
1647
- var [modelIndex, columnWidth] = entries[i];
1648
- if (columnWidth === 0) {
1649
- metricCalculator.resetColumnWidth(modelIndex);
1650
- }
1651
- }
1652
- (_this$grid8 = this.grid) === null || _this$grid8 === void 0 ? void 0 : _this$grid8.forceUpdate();
1653
- }
1654
- toggleSort(columnIndex, addToExisting) {
1655
- log.info('Toggling sort for column', columnIndex);
1656
- var {
1657
- model
1658
- } = this.props;
1659
- var {
1660
- sorts: currentSorts
1661
- } = this.state;
1662
- var modelColumn = this.getModelColumn(columnIndex);
1663
- assertNotNull(modelColumn);
1664
- var sorts = TableUtils.toggleSortForColumn(currentSorts, model.columns, modelColumn, addToExisting);
1665
- this.updateSorts(sorts);
1666
- }
1667
- updateSorts(sorts) {
1668
- var _this$grid9;
1669
- this.startLoading('Sorting...');
1670
- this.setState({
1671
- sorts
1672
- });
1673
- (_this$grid9 = this.grid) === null || _this$grid9 === void 0 ? void 0 : _this$grid9.forceUpdate();
1674
- }
1675
- sortColumn(modelColumn) {
1676
- var _this$grid10;
1677
- var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : TableUtils.sortDirection.none;
1678
- var isAbs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1679
- var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
1680
- assertNotNull(modelColumn);
1681
- var {
1682
- model
1683
- } = this.props;
1684
- var sorts = TableUtils.sortColumn(model.sort, model.columns, modelColumn, direction, isAbs, addToExisting);
1685
- this.startLoading('Sorting...');
1686
- this.setState({
1687
- sorts
1688
- });
1689
- (_this$grid10 = this.grid) === null || _this$grid10 === void 0 ? void 0 : _this$grid10.forceUpdate();
1690
- }
1691
- reverse(reverseType) {
1692
- var _this$grid11;
1693
- this.startLoading('Reversing...');
1694
- this.setState({
1695
- reverseType
1696
- });
1697
- (_this$grid11 = this.grid) === null || _this$grid11 === void 0 ? void 0 : _this$grid11.forceUpdate();
1698
- }
1699
- isReversible() {
1700
- var {
1701
- model
1702
- } = this.props;
1703
- return model.isReversible;
1704
- }
1705
- toggleFilterBar() {
1706
- var focusIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.lastFocusedFilterBarColumn;
1707
- var {
1708
- isFilterBarShown
1709
- } = this.state;
1710
- isFilterBarShown = !isFilterBarShown;
1711
- this.setState({
1712
- isFilterBarShown
1713
- });
1714
- if (isFilterBarShown) {
1715
- if (focusIndex != null) {
1716
- this.focusFilterBar(focusIndex);
1717
- } else {
1718
- var columnIndex = 0;
1719
- var {
1720
- model: _model2
1721
- } = this.props;
1722
- var {
1723
- columnCount
1724
- } = _model2;
1725
- for (var i = 0; i < columnCount; i += 1) {
1726
- var modelColumn = this.getModelColumn(i);
1727
- if (modelColumn != null) {
1728
- var _column2 = _model2.columns[modelColumn];
1729
- if (_column2 != null && TableUtils.isTextType(_column2.type)) {
1730
- columnIndex = i;
1731
- break;
1732
- }
1733
- }
1734
- }
1735
- this.focusFilterBar(columnIndex);
1736
- }
1737
- } else {
1738
- var _this$grid12;
1739
- (_this$grid12 = this.grid) === null || _this$grid12 === void 0 ? void 0 : _this$grid12.focus();
1740
- }
1741
- }
1742
- isTableSearchAvailable() {
1743
- var _model$layoutHints3, _dh$SearchDisplayMode, _dh$SearchDisplayMode2;
1744
- var {
1745
- model,
1746
- canToggleSearch
1747
- } = this.props;
1748
- var {
1749
- dh
1750
- } = model;
1751
- var searchDisplayMode = model === null || model === void 0 ? void 0 : (_model$layoutHints3 = model.layoutHints) === null || _model$layoutHints3 === void 0 ? void 0 : _model$layoutHints3.searchDisplayMode;
1752
- if (searchDisplayMode === ((_dh$SearchDisplayMode = dh.SearchDisplayMode) === null || _dh$SearchDisplayMode === void 0 ? void 0 : _dh$SearchDisplayMode.SEARCH_DISPLAY_HIDE)) {
1753
- return false;
1754
- }
1755
- if (searchDisplayMode === ((_dh$SearchDisplayMode2 = dh.SearchDisplayMode) === null || _dh$SearchDisplayMode2 === void 0 ? void 0 : _dh$SearchDisplayMode2.SEARCH_DISPLAY_SHOW)) {
1756
- return true;
1757
- }
1758
- return canToggleSearch;
1759
- }
1760
- toggleSearchBar() {
1761
- var {
1762
- showSearchBar
1763
- } = this.state;
1764
- if (!this.isTableSearchAvailable()) {
1765
- return;
1766
- }
1767
- var update = !showSearchBar;
1768
- this.setState({
1769
- showSearchBar: update
1770
- }, () => {
1771
- var _this$crossColumnRef;
1772
- if (update && (_this$crossColumnRef = this.crossColumnRef) !== null && _this$crossColumnRef !== void 0 && _this$crossColumnRef.current) {
1773
- var _this$crossColumnRef2;
1774
- (_this$crossColumnRef2 = this.crossColumnRef) === null || _this$crossColumnRef2 === void 0 ? void 0 : _this$crossColumnRef2.current.focus();
1775
- } else {
1776
- var _this$grid13;
1777
- (_this$grid13 = this.grid) === null || _this$grid13 === void 0 ? void 0 : _this$grid13.focus();
1778
- }
1779
- });
1780
- }
1781
- toggleGotoRow() {
1782
- var _this$grid14, _this$grid15;
1783
- var row = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
1784
- var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
1785
- var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
1786
- var {
1787
- isGotoShown
1788
- } = this.state;
1789
- if (row || value) {
1790
- // if invoked with a row, keep open instead of toggle
1791
- this.setState({
1792
- isGotoShown: true,
1793
- gotoRow: row,
1794
- gotoValue: value,
1795
- gotoValueSelectedColumnName: columnName,
1796
- gotoRowError: '',
1797
- gotoValueError: ''
1798
- });
1799
- this.focusRowInGrid(row);
1800
- return;
1801
- }
1802
- var cursorRow = (_this$grid14 = this.grid) === null || _this$grid14 === void 0 ? void 0 : _this$grid14.state.cursorRow;
1803
- var cursorColumn = (_this$grid15 = this.grid) === null || _this$grid15 === void 0 ? void 0 : _this$grid15.state.cursorColumn;
1804
- if (cursorRow == null || cursorColumn == null) {
1805
- // if a cell is not selected / grid is not rendered
1806
- this.setState({
1807
- isGotoShown: !isGotoShown,
1808
- gotoRow: '',
1809
- gotoValue: '',
1810
- gotoRowError: '',
1811
- gotoValueError: ''
1812
- });
1813
- return;
1814
- }
1815
- // if a row is selected
1816
- var {
1817
- model
1818
- } = this.props;
1819
- var {
1820
- name,
1821
- type
1822
- } = model.columns[cursorColumn];
1823
- var cellValue = model.valueForCell(cursorColumn, cursorRow);
1824
- var text = IrisGridUtils.convertValueToText(cellValue, type);
1825
- this.setState({
1826
- isGotoShown: !isGotoShown,
1827
- gotoRow: "".concat(cursorRow),
1828
- gotoValue: text,
1829
- gotoValueSelectedColumnName: name,
1830
- gotoRowError: '',
1831
- gotoValueError: ''
1832
- });
1833
- }
1834
- commitPending() {
1835
- var _this2 = this;
1836
- return _asyncToGenerator(function* () {
1837
- var _document, _document$activeEleme;
1838
- var {
1839
- model
1840
- } = _this2.props;
1841
- if (!isEditableGridModel(model) || !model.isEditable) {
1842
- throw new Error('Cannot save, table is not editable');
1843
- }
1844
- var {
1845
- pendingSavePromise
1846
- } = _this2.state;
1847
- if (pendingSavePromise != null) {
1848
- throw new Error('Save already in progress');
1849
- }
1850
- var containsGridCellInputField = (_document = document) === null || _document === void 0 ? void 0 : (_document$activeEleme = _document.activeElement) === null || _document$activeEleme === void 0 ? void 0 : _document$activeEleme.classList.contains('grid-cell-input-field');
1851
- if (containsGridCellInputField != null && containsGridCellInputField) {
1852
- var _this2$grid;
1853
- if (document.activeElement != null && document.activeElement.classList.contains('error')) {
1854
- throw new ValidationError('Current input is invalid');
1855
- }
1856
-
1857
- // Focus the grid again to commit any pending input changes
1858
- (_this2$grid = _this2.grid) === null || _this2$grid === void 0 ? void 0 : _this2$grid.focus();
1859
- }
1860
- var newPendingSavePromise = _this2.pending.add(model.commitPending()).then(() => {
1861
- _this2.setState({
1862
- pendingSaveError: null,
1863
- pendingSavePromise: null
1864
- });
1865
- }).catch(err => {
1866
- if (!PromiseUtils.isCanceled(err)) {
1867
- _this2.setState({
1868
- pendingSaveError: err,
1869
- pendingSavePromise: null
1870
- });
1871
- }
1872
- });
1873
- _this2.setState({
1874
- pendingSavePromise: newPendingSavePromise
1875
- });
1876
- return newPendingSavePromise;
1877
- })();
1878
- }
1879
- discardPending() {
1880
- var _this3 = this;
1881
- return _asyncToGenerator(function* () {
1882
- var {
1883
- pendingSavePromise
1884
- } = _this3.state;
1885
- if (pendingSavePromise != null) {
1886
- throw new Error('Cannot cancel a save in progress');
1887
- }
1888
- _this3.setState({
1889
- pendingSavePromise: null,
1890
- pendingSaveError: null,
1891
- pendingDataMap: new Map(),
1892
- pendingDataErrors: new Map()
1893
- });
1894
- })();
1895
- }
1896
-
1897
- /**
1898
- * Select the passed in column and notify listener
1899
- * @param column The column in this table to link
1900
- */
1901
- selectColumn(column) {
1902
- var {
1903
- onColumnSelected
1904
- } = this.props;
1905
- onColumnSelected(column);
1906
- }
1907
-
1908
- /**
1909
- * Select all the data for a given row and notify listener
1910
- */
1911
- selectData(columnIndex, rowIndex) {
1912
- var _this4 = this;
1913
- var {
1914
- model
1915
- } = this.props;
1916
- var {
1917
- columns,
1918
- groupedColumns
1919
- } = model;
1920
- var dataMap = {};
1921
- var _loop = function _loop() {
1922
- var column = columns[i];
1923
- var {
1924
- name,
1925
- type
1926
- } = column;
1927
- var value = model.valueForCell(i, rowIndex);
1928
- var text = model.textForCell(i, rowIndex);
1929
- var visibleIndex = _this4.getVisibleColumn(i);
1930
- var isExpandable = isExpandableGridModel(model) && model.isRowExpandable(rowIndex);
1931
- var isGrouped = groupedColumns.find(c => c.name === name) != null;
1932
- dataMap[name] = {
1933
- value,
1934
- text,
1935
- type,
1936
- isGrouped,
1937
- isExpandable,
1938
- visibleIndex
1939
- };
1940
- };
1941
- for (var i = 0; i < columns.length; i += 1) {
1942
- _loop();
1943
- }
1944
- var {
1945
- onDataSelected
1946
- } = this.props;
1947
- onDataSelected(rowIndex, dataMap);
1948
- }
1949
- handleAdvancedFilterChange(column, filter, options) {
1950
- var {
1951
- model
1952
- } = this.props;
1953
- var index = model.getColumnIndexByName(column.name);
1954
- assertNotNull(index);
1955
- this.setAdvancedFilter(index, filter, options);
1956
- }
1957
- handleAdvancedFilterSortChange(column, direction) {
1958
- var _this$grid16;
1959
- var addToExisting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1960
- var {
1961
- model
1962
- } = this.props;
1963
- var columnIndex = model.getColumnIndexByName(column.name);
1964
- assertNotNull(columnIndex);
1965
- var columnName = model.columns[columnIndex].name;
1966
- var oldSort = TableUtils.getSortForColumn(model.sort, columnName);
1967
- var newSort = null;
1968
- if (oldSort == null || oldSort.direction !== direction) {
1969
- if (direction === TableUtils.sortDirection.descending) {
1970
- newSort = column.sort().desc();
1971
- } else {
1972
- newSort = column.sort().asc();
1973
- }
1974
- }
1975
- var sorts = TableUtils.setSortForColumn(model.sort, columnName, newSort, addToExisting);
1976
- log.info('Setting table sorts', sorts);
1977
- this.startLoading('Sorting...');
1978
- this.setState({
1979
- sorts
1980
- });
1981
- (_this$grid16 = this.grid) === null || _this$grid16 === void 0 ? void 0 : _this$grid16.forceUpdate();
1982
- }
1983
- handleAdvancedFilterDone() {
1984
- var _this$grid17;
1985
- (_this$grid17 = this.grid) === null || _this$grid17 === void 0 ? void 0 : _this$grid17.focus();
1986
- }
1987
- handleAdvancedMenuOpened(column) {
1988
- this.setState({
1989
- shownAdvancedFilter: column
1990
- });
1991
- }
1992
- handleGotoRowOpened() {
1993
- this.setState({
1994
- isGotoShown: true
1995
- });
1996
- }
1997
- handleGotoRowClosed() {
1998
- this.setState({
1999
- isGotoShown: false
2000
- });
2001
- }
2002
- handleAdvancedMenuClosed(columnIndex) {
2003
- var _this$filterInputRef;
2004
- var {
2005
- focusedFilterBarColumn,
2006
- isFilterBarShown
2007
- } = this.state;
2008
- if (isFilterBarShown && focusedFilterBarColumn === columnIndex && ((_this$filterInputRef = this.filterInputRef) === null || _this$filterInputRef === void 0 ? void 0 : _this$filterInputRef.current) !== null) {
2009
- var _this$filterInputRef2;
2010
- (_this$filterInputRef2 = this.filterInputRef) === null || _this$filterInputRef2 === void 0 ? void 0 : _this$filterInputRef2.current.focus();
2011
- this.setState({
2012
- shownAdvancedFilter: null
2013
- });
2014
- } else {
2015
- this.setState({
2016
- focusedFilterBarColumn: null,
2017
- shownAdvancedFilter: null
2018
- });
2019
- }
2020
- }
2021
- handleCancel() {
2022
- this.rollback();
2023
- }
2024
-
2025
- // eslint-disable-next-line class-methods-use-this
2026
- handleChartChange() {
2027
- // TODO: IDS-4242 Update Chart Preview
2028
- }
2029
- handleChartCreate(settings) {
2030
- var {
2031
- model,
2032
- onCreateChart
2033
- } = this.props;
2034
- onCreateChart(settings, model);
2035
- }
2036
- handleGridError(error) {
2037
- log.warn('Grid Error', error);
2038
- this.setState({
2039
- toastMessage: /*#__PURE__*/React.createElement("div", {
2040
- className: "error-message"
2041
- }, "".concat(error))
2042
- });
2043
- }
2044
- handleFilterBarChange(value) {
2045
- this.startLoading('Filtering...', true);
2046
- this.setState(_ref13 => {
2047
- var {
2048
- focusedFilterBarColumn,
2049
- quickFilters
2050
- } = _ref13;
2051
- var newQuickFilters = new Map(quickFilters);
2052
- if (focusedFilterBarColumn != null) {
2053
- var modelIndex = this.getModelColumn(focusedFilterBarColumn);
2054
- assertNotNull(modelIndex);
2055
- this.applyQuickFilter(modelIndex, value, newQuickFilters);
2056
- }
2057
- return {
2058
- quickFilters: newQuickFilters
2059
- };
2060
- });
2061
- }
2062
- handleFilterBarDone() {
2063
- var setGridFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
2064
- var defocusInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
2065
- if (setGridFocus) {
2066
- var _this$grid18;
2067
- (_this$grid18 = this.grid) === null || _this$grid18 === void 0 ? void 0 : _this$grid18.focus();
2068
- }
2069
- if (defocusInput) {
2070
- this.setState({
2071
- focusedFilterBarColumn: null
2072
- });
2073
- }
2074
- }
2075
- handleFilterBarTab(backward) {
2076
- var {
2077
- focusedFilterBarColumn
2078
- } = this.state;
2079
- assertNotNull(focusedFilterBarColumn);
2080
- if (backward) {
2081
- this.focusFilterBar(focusedFilterBarColumn - 1);
2082
- } else {
2083
- this.focusFilterBar(focusedFilterBarColumn + 1);
2084
- }
2085
- }
2086
- handleFormatSelection(modelIndex, selectedFormat) {
2087
- var {
2088
- model
2089
- } = this.props;
2090
- var column = model.columns[modelIndex];
2091
- var {
2092
- customColumnFormatMap: prevCustomColumnFormatMap
2093
- } = this.state;
2094
- var customColumnFormatMap = new Map(prevCustomColumnFormatMap);
2095
- if (selectedFormat != null) {
2096
- var normalizedType = TableUtils.getNormalizedType(column.type);
2097
- assertNotNull(normalizedType);
2098
- var columnFormattingRule = Formatter.makeColumnFormattingRule(normalizedType, column.name, selectedFormat);
2099
- customColumnFormatMap.set(column.name, columnFormattingRule);
2100
- } else {
2101
- customColumnFormatMap.delete(column.name);
2102
- }
2103
- this.updateFormatter({
2104
- customColumnFormatMap
2105
- });
2106
- }
2107
- handleMenu(e) {
2108
- e.stopPropagation();
2109
- this.setState({
2110
- isMenuShown: true
2111
- });
2112
- }
2113
- handleMenuClose() {
2114
- this.setState({
2115
- isMenuShown: false,
2116
- openOptions: []
2117
- });
2118
- }
2119
- handleMenuBack() {
2120
- this.setState(_ref14 => {
2121
- var {
2122
- openOptions
2123
- } = _ref14;
2124
- var newOptions = [...openOptions];
2125
- newOptions.pop();
2126
- return {
2127
- openOptions: newOptions
2128
- };
2129
- });
2130
- }
2131
- handleMenuSelect(option) {
2132
- this.setState(_ref15 => {
2133
- var {
2134
- openOptions
2135
- } = _ref15;
2136
- return {
2137
- openOptions: [...openOptions, option]
2138
- };
2139
- });
2140
- }
2141
- handleRequestFailed(event) {
2142
- var customEvent = event;
2143
- log.error('request failed:', customEvent.detail);
2144
- this.stopLoading();
2145
- if (this.canRollback()) {
2146
- this.startLoading('Rolling back changes...', true);
2147
- this.rollback();
2148
- } else {
2149
- log.error('Table failed and unable to rollback');
2150
- var {
2151
- onError
2152
- } = this.props;
2153
- onError(new Error("Error displaying table: ".concat(customEvent.detail)));
2154
- }
2155
- }
2156
- handleUpdate() {
2157
- var _this$grid19;
2158
- this.stopLoading();
2159
- log.debug2('Received model update');
2160
- var {
2161
- advancedFilters,
2162
- aggregationSettings,
2163
- customColumns,
2164
- quickFilters,
2165
- reverseType,
2166
- rollupConfig,
2167
- searchFilter,
2168
- selectDistinctColumns,
2169
- sorts
2170
- } = this.state;
2171
- var config = {
2172
- advancedFilters,
2173
- aggregationSettings,
2174
- customColumns,
2175
- quickFilters,
2176
- reverseType,
2177
- rollupConfig,
2178
- searchFilter,
2179
- selectDistinctColumns,
2180
- sorts
2181
- };
2182
- if (!isEmptyConfig(config)) {
2183
- this.lastLoadedConfig = config;
2184
- } else {
2185
- this.lastLoadedConfig = null;
2186
- }
2187
- (_this$grid19 = this.grid) === null || _this$grid19 === void 0 ? void 0 : _this$grid19.forceUpdate();
2188
- }
2189
- handleViewChanged(metrics) {
2190
- var _this$grid$state, _this$grid20;
2191
- var {
2192
- model
2193
- } = this.props;
2194
- var {
2195
- selectionEndRow = 0
2196
- } = (_this$grid$state = (_this$grid20 = this.grid) === null || _this$grid20 === void 0 ? void 0 : _this$grid20.state) !== null && _this$grid$state !== void 0 ? _this$grid$state : {};
2197
- var pendingRowCount = 0;
2198
- if (isEditableGridModel(model) && model.isEditable) {
2199
- assertNotNull(metrics);
2200
- var {
2201
- bottomViewport
2202
- } = metrics;
2203
-
2204
- // We have an editable table that we can add new rows to
2205
- // Display empty rows beneath the table rows that user can fill in
2206
- var bottomNonFloating = model.rowCount - model.floatingBottomRowCount;
2207
- if (selectionEndRow === bottomNonFloating - 1) {
2208
- // Selection is in the last row, add another blank row
2209
- pendingRowCount = model.pendingRowCount + 1;
2210
- } else if (selectionEndRow === bottomNonFloating - 2) {
2211
- // We may have just added a row based on selection moving, so just leave it as is
2212
- pendingRowCount = model.pendingRowCount;
2213
- } else {
2214
- // Otherwise fill up the viewport with empty cells
2215
- pendingRowCount = Math.max(0, bottomViewport - (model.rowCount - model.pendingRowCount) - model.floatingTopRowCount - model.floatingBottomRowCount - 1);
2216
- }
2217
- }
2218
- this.setState({
2219
- metrics,
2220
- pendingRowCount
2221
- });
2222
- }
2223
- handleSelectionChanged(selectedRanges) {
2224
- assertNotNull(selectedRanges);
2225
- var {
2226
- onSelectionChanged
2227
- } = this.props;
2228
- var {
2229
- copyOperation
2230
- } = this.state;
2231
- this.setState({
2232
- selectedRanges
2233
- });
2234
- if (copyOperation != null) {
2235
- this.setState({
2236
- copyOperation: null
2237
- });
2238
- }
2239
- onSelectionChanged(selectedRanges);
2240
- }
2241
- handleMovedColumnsChanged(movedColumns, onChangeApplied) {
2242
- this.setState({
2243
- movedColumns
2244
- }, onChangeApplied);
2245
- }
2246
- handleHeaderGroupsChanged(columnHeaderGroups) {
2247
- var {
2248
- model
2249
- } = this.props;
2250
- this.setState({
2251
- columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(model, columnHeaderGroups).groups
2252
- }, () => {
2253
- var _this$grid21;
2254
- return (_this$grid21 = this.grid) === null || _this$grid21 === void 0 ? void 0 : _this$grid21.forceUpdate();
2255
- });
2256
- }
2257
- handleTooltipRef(tooltip) {
2258
- // Need to start the timer right away, since we're creating the tooltip when we want the timer to start
2259
- if (tooltip != null) {
2260
- tooltip.startTimer();
2261
- }
2262
- this.tooltip = tooltip;
2263
- }
2264
- handleConditionalFormatsChange(conditionalFormats) {
2265
- log.debug('Updated conditional formats', conditionalFormats);
2266
- this.setState({
2267
- conditionalFormats
2268
- });
2269
- }
2270
- handleConditionalFormatCreate() {
2271
- log.debug('Create new conditional format');
2272
- var {
2273
- openOptions,
2274
- conditionalFormats
2275
- } = this.state;
2276
- this.setState({
2277
- openOptions: [...openOptions, {
2278
- type: OptionType.CONDITIONAL_FORMATTING_EDIT,
2279
- title: "Create Formatting Rule"
2280
- }],
2281
- conditionalFormatEditIndex: conditionalFormats.length,
2282
- // Start with a blank rule
2283
- conditionalFormatPreview: undefined
2284
- });
2285
- }
2286
- handleConditionalFormatEdit(index) {
2287
- log.debug('Edit conditional format', index);
2288
- var {
2289
- openOptions,
2290
- conditionalFormats
2291
- } = this.state;
2292
- this.setState({
2293
- openOptions: [...openOptions, {
2294
- type: OptionType.CONDITIONAL_FORMATTING_EDIT,
2295
- title: "Edit Formatting Rule"
2296
- }],
2297
- conditionalFormatEditIndex: index,
2298
- // Clone rule to preview temporary changes
2299
- conditionalFormatPreview: _objectSpread({}, conditionalFormats[index])
2300
- });
2301
- }
2302
-
2303
- // Apply live changes
2304
-
2305
- handleConditionalFormatEditorSave(config) {
2306
- log.debug('Save conditional format changes', config);
2307
- this.setState(state => {
2308
- if (state.conditionalFormatEditIndex === null) {
2309
- log.debug('Invalid format index');
2310
- return null;
2311
- }
2312
- var conditionalFormats = [...state.conditionalFormats];
2313
- conditionalFormats[state.conditionalFormatEditIndex] = config;
2314
- return {
2315
- conditionalFormats
2316
- };
2317
- }, () => {
2318
- this.handleMenuBack();
2319
- });
2320
- }
2321
- handleConditionalFormatEditorCancel() {
2322
- this.handleMenuBack();
2323
- // Not resetting conditionalFormatPreview here
2324
- // to prevent editor fields change during the menu transition
2325
- this.setState({
2326
- conditionalFormatEditIndex: null
2327
- });
2328
- }
2329
- handleUpdateCustomColumns(customColumns) {
2330
- log.info("handleUpdateCustomColumns:", customColumns);
2331
- var {
2332
- model
2333
- } = this.props;
2334
- var {
2335
- movedColumns,
2336
- sorts,
2337
- quickFilters,
2338
- advancedFilters,
2339
- selectDistinctColumns
2340
- } = this.state;
2341
- var {
2342
- columns
2343
- } = model;
2344
- var oldCustomColumns = model.customColumns.map(customColumn => "".concat(customColumn));
2345
- var removedColumnNames = IrisGridUtils.getRemovedCustomColumnNames(oldCustomColumns, customColumns);
2346
- if (removedColumnNames.length > 0) {
2347
- var newSorts = IrisGridUtils.removeSortsInColumns(sorts, removedColumnNames);
2348
- var newQuickFilters = IrisGridUtils.removeFiltersInColumns(columns, quickFilters, removedColumnNames);
2349
- var newAdvancedFilters = IrisGridUtils.removeFiltersInColumns(columns, advancedFilters, removedColumnNames);
2350
- var newMovedColumns = IrisGridUtils.removeColumnFromMovedColumns(columns, movedColumns, removedColumnNames);
2351
- var newSelectDistinctColumns = IrisGridUtils.removeColumnsFromSelectDistinctColumns(selectDistinctColumns, removedColumnNames);
2352
- if (newSorts.length !== sorts.length) {
2353
- log.debug('removing sorts from removed custom columns...');
2354
- this.setState({
2355
- sorts: newSorts
2356
- });
2357
- }
2358
- if (newQuickFilters.size !== quickFilters.size || newAdvancedFilters.size !== advancedFilters.size) {
2359
- log.debug("removing filters from removed custom columns...");
2360
- this.setState({
2361
- quickFilters: newQuickFilters,
2362
- advancedFilters: newAdvancedFilters
2363
- });
2364
- }
2365
- if (!deepEqual(movedColumns, newMovedColumns)) {
2366
- log.debug("change moved columns for removed custom columns", newMovedColumns);
2367
- this.setState({
2368
- movedColumns: newMovedColumns
2369
- });
2370
- }
2371
- if (!deepEqual(selectDistinctColumns, newSelectDistinctColumns)) {
2372
- log.debug("change selectDistinct columns for removed custom columns", newMovedColumns);
2373
- this.setState({
2374
- selectDistinctColumns: newSelectDistinctColumns
2375
- });
2376
- }
2377
- }
2378
- this.setState({
2379
- customColumns
2380
- });
2381
- if (customColumns.length > 0) {
2382
- // If there are no custom columns, the change handler never fires
2383
- // This causes the loader to stay until canceled by the user
2384
- this.startLoading('Applying custom columns...');
2385
- }
2386
- }
2387
- handleCustomColumnsChanged() {
2388
- log.debug('custom columns changed');
2389
- var {
2390
- isReady
2391
- } = this.state;
2392
- if (isReady) {
2393
- var _this$grid22;
2394
- this.stopLoading();
2395
- (_this$grid22 = this.grid) === null || _this$grid22 === void 0 ? void 0 : _this$grid22.forceUpdate();
2396
- } else {
2397
- this.initState();
2398
- }
2399
- }
2400
- handlePendingCommitClicked() {
2401
- return this.commitPending();
2402
- }
2403
- handlePendingDiscardClicked() {
2404
- return this.discardPending();
2405
- }
2406
- handlePendingDataUpdated() {
2407
- var _this$grid23;
2408
- log.debug('pending data updated');
2409
- var {
2410
- model
2411
- } = this.props;
2412
- var {
2413
- pendingDataMap,
2414
- pendingDataErrors
2415
- } = model;
2416
- this.setState({
2417
- pendingDataMap,
2418
- pendingDataErrors,
2419
- pendingSaveError: null
2420
- });
2421
- (_this$grid23 = this.grid) === null || _this$grid23 === void 0 ? void 0 : _this$grid23.forceUpdate();
2422
- }
2423
-
2424
- /**
2425
- * User added, removed, or changed the order of aggregations, or position
2426
- * @param aggregationSettings The new aggregation settings
2427
- */
2428
- handleAggregationsChange(aggregationSettings) {
2429
- log.debug('handleAggregationsChange', aggregationSettings);
2430
- this.startLoading("Aggregating ".concat(aggregationSettings.aggregations.map(a => a.operation).join(', '), "..."));
2431
- this.setState({
2432
- aggregationSettings
2433
- });
2434
- }
2435
-
2436
- /**
2437
- * A specific aggregation has been modified
2438
- * @param aggregation The new aggregation
2439
- */
2440
- handleAggregationChange(aggregation) {
2441
- log.debug('handleAggregationChange', aggregation);
2442
- this.startLoading("Aggregating ".concat(aggregation.operation, "..."));
2443
- this.setState(_ref16 => {
2444
- var {
2445
- aggregationSettings
2446
- } = _ref16;
2447
- return {
2448
- selectedAggregation: aggregation,
2449
- aggregationSettings: _objectSpread(_objectSpread({}, aggregationSettings), {}, {
2450
- aggregations: aggregationSettings.aggregations.map(a => a.operation === aggregation.operation ? aggregation : a)
2451
- })
2452
- };
2453
- });
2454
- }
2455
-
2456
- /**
2457
- * An aggregations has been selected for editing
2458
- * @param aggregation The aggregation to edit
2459
- */
2460
- handleAggregationEdit(aggregation) {
2461
- log.debug('handleAggregationEdit', aggregation);
2462
- var {
2463
- openOptions
2464
- } = this.state;
2465
- this.setState({
2466
- openOptions: [...openOptions, {
2467
- type: OptionType.AGGREGATION_EDIT,
2468
- title: "Edit Columns to ".concat(aggregation.operation)
2469
- }],
2470
- selectedAggregation: aggregation
2471
- });
2472
- }
2473
- handleRollupChange(rollupConfig) {
2474
- var _rollupConfig$columns, _rollupConfig$columns2;
2475
- log.info('Rollup change', rollupConfig);
2476
- this.resetGridViewState();
2477
- this.showAllColumns();
2478
- this.clearAllFilters();
2479
- this.startLoading("Grouping by columns ".concat((_rollupConfig$columns = rollupConfig === null || rollupConfig === void 0 ? void 0 : (_rollupConfig$columns2 = rollupConfig.columns) === null || _rollupConfig$columns2 === void 0 ? void 0 : _rollupConfig$columns2.join(', ')) !== null && _rollupConfig$columns !== void 0 ? _rollupConfig$columns : '', "..."));
2480
-
2481
- // Have to clear select distinct since rollup uses the original columns, not the current ones.
2482
- // IrisGridProxyModel has a check to prevent model update
2483
- // when selectDistinctModel is cleared and the rollupConfig is set on the model.
2484
- this.setState({
2485
- rollupConfig,
2486
- movedColumns: [],
2487
- frozenColumns: [],
2488
- sorts: [],
2489
- reverseType: TableUtils.REVERSE_TYPE.NONE,
2490
- selectDistinctColumns: []
2491
- });
2492
- }
2493
- handleSelectDistinctChanged(columnNames) {
2494
- log.debug('SelectDistinct change', columnNames);
2495
- this.resetGridViewState();
2496
- this.showAllColumns();
2497
- this.clearAllFilters();
2498
- this.startLoading("Selecting distinct values in ".concat(columnNames.length > 0 ? columnNames.join(', ') : '', "..."));
2499
- this.setState({
2500
- selectDistinctColumns: columnNames,
2501
- movedColumns: [],
2502
- sorts: [],
2503
- reverseType: TableUtils.REVERSE_TYPE.NONE
2504
- });
2505
- }
2506
- handleDownloadTableStart() {
2507
- var {
2508
- canDownloadCsv
2509
- } = this.props;
2510
- if (canDownloadCsv) {
2511
- this.setState({
2512
- isTableDownloading: true,
2513
- tableDownloadProgress: 0,
2514
- tableDownloadEstimatedTime: null,
2515
- tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.INITIATING
2516
- });
2517
- } else {
2518
- log.error('Attempted to handleDownloadTableStart for user without download CSV permission.');
2519
- }
2520
- }
2521
- handleDownloadTable(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues) {
2522
- var {
2523
- canDownloadCsv
2524
- } = this.props;
2525
- if (canDownloadCsv) {
2526
- log.info('start table downloading', fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);
2527
- this.setState(() => {
2528
- if (this.tableSaver) {
2529
- this.tableSaver.startDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);
2530
- }
2531
- return {
2532
- tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING
2533
- };
2534
- });
2535
- } else {
2536
- log.error('Attempted to handleDownloadTable for user without download CSV permission.');
2537
- }
2538
- }
2539
- seekRow(inputString) {
2540
- var _arguments = arguments,
2541
- _this5 = this;
2542
- return _asyncToGenerator(function* () {
2543
- var _this5$grid;
2544
- var isBackwards = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;
2545
- var {
2546
- gotoValueSelectedColumnName: selectedColumnName,
2547
- gotoValueSelectedFilter
2548
- } = _this5.state;
2549
- var {
2550
- model
2551
- } = _this5.props;
2552
- var {
2553
- dh
2554
- } = model;
2555
- if (!model.isSeekRowAvailable) {
2556
- return;
2557
- }
2558
- if (inputString === '') {
2559
- return;
2560
- }
2561
- var selectedColumn = IrisGridUtils.getColumnByName(model.columns, selectedColumnName);
2562
- if (selectedColumn === undefined) {
2563
- return;
2564
- }
2565
- var searchFromRow = (_this5$grid = _this5.grid) === null || _this5$grid === void 0 ? void 0 : _this5$grid.state.cursorRow;
2566
- if (searchFromRow == null) {
2567
- searchFromRow = 0;
2568
- }
2569
- var isContains = gotoValueSelectedFilter === FilterType.contains || gotoValueSelectedFilter === FilterType.containsIgnoreCase;
2570
- var isIgnoreCase = gotoValueSelectedFilter === FilterType.eqIgnoreCase || gotoValueSelectedFilter === FilterType.containsIgnoreCase;
2571
- try {
2572
- var _this5$grid2;
2573
- var {
2574
- formatter
2575
- } = model;
2576
- var columnDataType = TableUtils.getNormalizedType(selectedColumn.type);
2577
- var rowIndex;
2578
- switch (columnDataType) {
2579
- case TableUtils.dataType.CHAR:
2580
- case TableUtils.dataType.STRING:
2581
- {
2582
- rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, inputString, isIgnoreCase, isContains, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);
2583
- break;
2584
- }
2585
- case TableUtils.dataType.DATETIME:
2586
- {
2587
- var [startDate] = DateUtils.parseDateRange(dh, inputString, formatter.timeZone);
2588
- rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.DATETIME, startDate, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);
2589
- break;
2590
- }
2591
- case TableUtils.dataType.DECIMAL:
2592
- case TableUtils.dataType.INT:
2593
- {
2594
- if (!TableUtils.isBigDecimalType(selectedColumn.type) && !TableUtils.isBigIntegerType(selectedColumn.type)) {
2595
- var inputValue = parseInt(inputString, 10);
2596
- if (inputString === '-Infinity') {
2597
- inputValue = Number.NEGATIVE_INFINITY;
2598
- } else if (inputString === 'Infinity') {
2599
- inputValue = Number.POSITIVE_INFINITY;
2600
- }
2601
- rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.NUMBER, inputValue, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);
2602
- } else {
2603
- rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, inputString, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);
2604
- }
2605
- break;
2606
- }
2607
- default:
2608
- {
2609
- rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, _this5.tableUtils.makeValue(selectedColumn.type, inputString, formatter.timeZone), undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);
2610
- }
2611
- }
2612
- (_this5$grid2 = _this5.grid) === null || _this5$grid2 === void 0 ? void 0 : _this5$grid2.setFocusRow(rowIndex);
2613
- _this5.setState({
2614
- gotoValueError: ''
2615
- });
2616
- } catch (e) {
2617
- _this5.setState({
2618
- gotoValueError: 'invalid input'
2619
- });
2620
- }
2621
- })();
2622
- }
2623
- handleCancelDownloadTable() {
2624
- var _this$tableSaver;
2625
- (_this$tableSaver = this.tableSaver) === null || _this$tableSaver === void 0 ? void 0 : _this$tableSaver.cancelDownload();
2626
- this.setState({
2627
- isTableDownloading: false
2628
- });
2629
- }
2630
- handleDownloadCompleted() {
2631
- this.setState({
2632
- isTableDownloading: false,
2633
- tableDownloadProgress: 100,
2634
- tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.FINISHED
2635
- });
2636
- }
2637
- handleDownloadCanceled() {
2638
- this.setState({
2639
- isTableDownloading: false,
2640
- tableDownloadProgress: 0,
2641
- tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.CANCELED
2642
- });
2643
- }
2644
-
2645
- /**
2646
- * Delete the specified ranges from the table.
2647
- * @param ranges The ranges to delete
2648
- */
2649
- deleteRanges(ranges) {
2650
- var {
2651
- model
2652
- } = this.props;
2653
- this.pending.add(model.delete(ranges)).catch(e => {
2654
- if (!PromiseUtils.isCanceled(e)) {
2655
- log.error('Unable to delete ranges', ranges, e);
2656
- }
2657
- });
2658
- }
2659
- resetColumnSelection() {
2660
- if (this.grid == null) {
2661
- return;
2662
- }
2663
- var {
2664
- isSelectingColumn
2665
- } = this.props;
2666
- if (isSelectingColumn) {
2667
- var {
2668
- columnAllowedCursor
2669
- } = this.props;
2670
- this.grid.setState({
2671
- cursor: columnAllowedCursor
2672
- });
2673
- } else {
2674
- this.grid.setState({
2675
- cursor: null
2676
- });
2677
- this.setState({
2678
- hoverSelectColumn: null
2679
- });
2680
- }
2681
- }
2682
- resetGridViewState() {
2683
- var forceUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
2684
- if (!this.grid) {
2685
- return;
2686
- }
2687
- this.grid.clearSelectedRanges();
2688
- this.grid.setViewState({
2689
- left: 0,
2690
- top: 0,
2691
- topOffset: 0,
2692
- leftOffset: 0
2693
- }, forceUpdate);
2694
- }
2695
- sendStateChange() {
2696
- if (!this.grid) {
2697
- return;
2698
- }
2699
- var {
2700
- state: irisGridState
2701
- } = this;
2702
- var {
2703
- state: gridState
2704
- } = this.grid;
2705
- var {
2706
- onStateChange
2707
- } = this.props;
2708
- onStateChange(irisGridState, gridState);
2709
- }
2710
- handleOverflowClose() {
2711
- this.setState({
2712
- showOverflowModal: false
2713
- });
2714
- }
2715
- getColumnBoundingRect() {
2716
- var _this$gridWrapper2;
2717
- var {
2718
- metrics,
2719
- shownColumnTooltip
2720
- } = this.state;
2721
- assertNotNull(metrics);
2722
- assertNotNull(shownColumnTooltip);
2723
- var gridRect = (_this$gridWrapper2 = this.gridWrapper) === null || _this$gridWrapper2 === void 0 ? void 0 : _this$gridWrapper2.getBoundingClientRect();
2724
- var popperMargin = 20;
2725
- assertNotNull(gridRect);
2726
- var {
2727
- columnHeaderHeight,
2728
- allColumnXs,
2729
- allColumnWidths,
2730
- width,
2731
- columnHeaderMaxDepth
2732
- } = metrics;
2733
- var columnX = allColumnXs.get(shownColumnTooltip);
2734
- var columnWidth = allColumnWidths.get(shownColumnTooltip);
2735
- assertNotNull(columnX);
2736
- assertNotNull(columnWidth);
2737
- var left = gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin);
2738
- return {
2739
- top: gridRect.top + (columnHeaderMaxDepth - 1) * columnHeaderHeight,
2740
- left: gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin),
2741
- bottom: gridRect.top + columnHeaderMaxDepth * columnHeaderHeight,
2742
- right: gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin) + 1,
2743
- width: 1,
2744
- height: columnHeaderHeight,
2745
- x: left,
2746
- y: gridRect.top,
2747
- toJSON: () => {
2748
- throw new Error('not implemented');
2749
- }
2750
- };
2751
- }
2752
- handleGotoRowSelectedRowNumberSubmit() {
2753
- var {
2754
- gotoRow: rowNumber
2755
- } = this.state;
2756
- this.focusRowInGrid(rowNumber);
2757
- }
2758
- focusRowInGrid(rowNumber) {
2759
- var {
2760
- model
2761
- } = this.props;
2762
- var {
2763
- rowCount
2764
- } = model;
2765
- this.setState({
2766
- gotoRow: rowNumber
2767
- });
2768
- if (rowNumber === '') {
2769
- this.setState({
2770
- gotoRowError: '',
2771
- gotoValueError: ''
2772
- });
2773
- return;
2774
- }
2775
- var rowInt = parseInt(rowNumber, 10);
2776
- if (rowInt > rowCount || rowInt < -rowCount) {
2777
- this.setState({
2778
- gotoRowError: 'Invalid row index'
2779
- });
2780
- } else if (rowInt === 0) {
2781
- var _this$grid24;
2782
- this.setState({
2783
- gotoRowError: '',
2784
- gotoValueError: ''
2785
- });
2786
- (_this$grid24 = this.grid) === null || _this$grid24 === void 0 ? void 0 : _this$grid24.setFocusRow(0);
2787
- } else if (rowInt < 0) {
2788
- var _this$grid25;
2789
- this.setState({
2790
- gotoRowError: '',
2791
- gotoValueError: ''
2792
- });
2793
- (_this$grid25 = this.grid) === null || _this$grid25 === void 0 ? void 0 : _this$grid25.setFocusRow(rowInt + rowCount);
2794
- } else {
2795
- var _this$grid26;
2796
- (_this$grid26 = this.grid) === null || _this$grid26 === void 0 ? void 0 : _this$grid26.setFocusRow(rowInt - 1);
2797
- this.setState({
2798
- gotoRowError: '',
2799
- gotoValueError: ''
2800
- });
2801
- }
2802
- }
2803
- handleGotoRowSelectedRowNumberChanged(event) {
2804
- var rowNumber = event.target.value;
2805
- this.focusRowInGrid(rowNumber);
2806
- }
2807
- getColumnTooltip(visibleIndex, metrics, model) {
2808
- var {
2809
- columnHeaderHeight,
2810
- columnHeaderMaxDepth,
2811
- allColumnXs,
2812
- allColumnWidths,
2813
- width
2814
- } = metrics;
2815
- var columnX = allColumnXs.get(visibleIndex);
2816
- var columnWidth = allColumnWidths.get(visibleIndex);
2817
- if (columnX == null || columnWidth == null) {
2818
- return null;
2819
- }
2820
-
2821
- /**
2822
- * Create a wrapper dom element, the size of the column header.
2823
- * The wrapper acts as tooltip parent, the tooltip component
2824
- * will trigger hide on mouseleave of wrapper or tooltip.
2825
- * The wrapper should be bound to within the grid dimensions,
2826
- * so popper only remains triggered while mouse is inside the panel.
2827
- */
2828
- var boundedLeft = Math.max(0, columnX);
2829
- var boundedWidth = columnWidth;
2830
- if (columnX + columnWidth > width) {
2831
- // column is extending past right edge
2832
- boundedWidth = width - columnX;
2833
- } else if (columnX < 0) {
2834
- // column is extending past left edge
2835
- boundedWidth = columnWidth - Math.abs(columnX);
2836
- }
2837
- var wrapperStyle = {
2838
- position: 'absolute',
2839
- top: (columnHeaderMaxDepth - 1) * columnHeaderHeight,
2840
- left: boundedLeft,
2841
- width: boundedWidth,
2842
- height: columnHeaderHeight,
2843
- pointerEvents: 'none'
2844
- };
2845
-
2846
- /**
2847
- * Because the popper parent wrapper center is no longer the same as
2848
- * the column label center, we create a popper virtual ref, to handle
2849
- * positioning and keep the popper centered on the label. Creates a
2850
- * 1px x headerHeight virtual object, placed centered on the column
2851
- * label, clamped to 0 + margin to width - margin. We add a margin,
2852
- * otherwise the arrow wants to escape the boundary.
2853
- */
2854
- var virtualReference = {
2855
- clientWidth: 1,
2856
- clientHeight: columnHeaderHeight,
2857
- getBoundingClientRect: this.getColumnBoundingRect
2858
- };
2859
- var popperOptions = {
2860
- placement: 'bottom',
2861
- modifiers: {
2862
- flip: {
2863
- behavior: ['bottom', 'top']
2864
- }
2865
- }
2866
- };
2867
- var modelColumn = this.getModelColumn(visibleIndex);
2868
- if (modelColumn == null) return null;
2869
- var column = model.columns[modelColumn];
2870
- if (column == null) return null;
2871
- return /*#__PURE__*/React.createElement("div", {
2872
- style: wrapperStyle
2873
- }, /*#__PURE__*/React.createElement(Tooltip, {
2874
- key: column.name,
2875
- timeout: 400,
2876
- interactive: true,
2877
- options: popperOptions,
2878
- ref: this.handleTooltipRef,
2879
- referenceObject: virtualReference,
2880
- onExited: () => {
2881
- this.setState({
2882
- shownColumnTooltip: null
2883
- });
2884
- }
2885
- }, /*#__PURE__*/React.createElement(ColumnStatistics, {
2886
- model: model,
2887
- column: column,
2888
- onStatistics: () => {
2889
- var _this$tooltip;
2890
- (_this$tooltip = this.tooltip) === null || _this$tooltip === void 0 ? void 0 : _this$tooltip.update();
2891
- }
2892
- })));
2893
- }
2894
- handleGotoValueSelectedColumnNameChanged(columnName) {
2895
- var _this$grid27;
2896
- var {
2897
- model
2898
- } = this.props;
2899
- var cursorRow = (_this$grid27 = this.grid) === null || _this$grid27 === void 0 ? void 0 : _this$grid27.state.cursorRow;
2900
- if (cursorRow != null) {
2901
- var _index = model.getColumnIndexByName(columnName);
2902
- var _column3 = IrisGridUtils.getColumnByName(model.columns, columnName);
2903
- if (_index == null || _column3 == null) {
2904
- return;
2905
- }
2906
- var _value4 = model.valueForCell(_index, cursorRow);
2907
- var text = IrisGridUtils.convertValueToText(_value4, _column3.type);
2908
- this.setState({
2909
- gotoValueSelectedColumnName: columnName,
2910
- gotoValue: text,
2911
- gotoValueError: ''
2912
- });
2913
- }
2914
- this.setState({
2915
- gotoValueSelectedColumnName: columnName,
2916
- gotoValueError: ''
2917
- });
2918
- }
2919
- handleGotoValueSelectedFilterChanged(value) {
2920
- this.setState({
2921
- gotoValueSelectedFilter: value,
2922
- gotoValueError: ''
2923
- });
2924
- }
2925
- handleGotoValueSubmitted(isBackwards) {
2926
- var {
2927
- gotoValue
2928
- } = this.state;
2929
- this.seekRow(gotoValue, isBackwards);
2930
- }
2931
- render() {
2932
- var _rollupConfig$columns3,
2933
- _rollupConfig$columns4,
2934
- _this6 = this,
2935
- _this$grid29,
2936
- _this$grid29$state$dr,
2937
- _openOptions;
2938
- var {
2939
- children,
2940
- customFilters,
2941
- getDownloadWorker,
2942
- isSelectingColumn,
2943
- isStuckToBottom,
2944
- isStuckToRight,
2945
- model,
2946
- name,
2947
- onlyFetchVisibleColumns,
2948
- alwaysFetchColumns,
2949
- advancedSettings,
2950
- onAdvancedSettingsChange,
2951
- canDownloadCsv,
2952
- onCreateChart
2953
- } = this.props;
2954
- var {
2955
- metricCalculator,
2956
- metrics,
2957
- isFilterBarShown,
2958
- isSelectingPartition,
2959
- isMenuShown,
2960
- isReady,
2961
- copyOperation,
2962
- focusedFilterBarColumn,
2963
- loadingText,
2964
- loadingScrimProgress,
2965
- loadingSpinnerShown,
2966
- keyHandlers,
2967
- mouseHandlers,
2968
- shownColumnTooltip,
2969
- hoverAdvancedFilter,
2970
- shownAdvancedFilter,
2971
- hoverSelectColumn,
2972
- quickFilters,
2973
- advancedFilters,
2974
- partition,
2975
- partitionFilters,
2976
- partitionTable,
2977
- partitionColumn,
2978
- searchFilter,
2979
- selectDistinctColumns,
2980
- movedColumns,
2981
- movedRows,
2982
- formatter,
2983
- conditionalFormats,
2984
- conditionalFormatPreview,
2985
- conditionalFormatEditIndex,
2986
- sorts,
2987
- reverseType,
2988
- customColumns,
2989
- selectedRanges,
2990
- isTableDownloading,
2991
- tableDownloadStatus,
2992
- tableDownloadProgress,
2993
- tableDownloadEstimatedTime,
2994
- showSearchBar,
2995
- searchValue,
2996
- selectedSearchColumns,
2997
- invertSearchColumns,
2998
- aggregationSettings,
2999
- selectedAggregation,
3000
- rollupConfig,
3001
- openOptions,
3002
- pendingSavePromise,
3003
- pendingSaveError,
3004
- pendingRowCount,
3005
- pendingDataErrors,
3006
- pendingDataMap,
3007
- toastMessage,
3008
- frozenColumns,
3009
- columnHeaderGroups,
3010
- showOverflowModal,
3011
- overflowText,
3012
- overflowButtonTooltipProps,
3013
- expandCellTooltipProps,
3014
- linkHoverTooltipProps,
3015
- isGotoShown,
3016
- gotoRow,
3017
- gotoRowError,
3018
- gotoValueError,
3019
- gotoValueSelectedColumnName,
3020
- gotoValue,
3021
- gotoValueSelectedFilter
3022
- } = this.state;
3023
- if (!isReady) {
3024
- return null;
3025
- }
3026
- var theme = this.getTheme();
3027
- var filter = this.getCachedFilter(customFilters, quickFilters, advancedFilters, partitionFilters, searchFilter);
3028
- var userColumnWidths = metricCalculator.getUserColumnWidths();
3029
- var stateOverride = this.getCachedStateOverride(hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverseType, rollupConfig, isMenuShown);
3030
- var top = metrics ? metrics.top : 0;
3031
- var bottom = metrics ? metrics.bottomViewport : 0;
3032
- var left = null;
3033
- var right = null;
3034
- if (onlyFetchVisibleColumns) {
3035
- left = metrics ? metrics.left : 0;
3036
- right = metrics ? metrics.right : 0;
3037
- }
3038
- var isVisible = metrics != null && metrics.width > 0 && metrics.height > 0;
3039
- var isRollup = ((_rollupConfig$columns3 = rollupConfig === null || rollupConfig === void 0 ? void 0 : (_rollupConfig$columns4 = rollupConfig.columns) === null || _rollupConfig$columns4 === void 0 ? void 0 : _rollupConfig$columns4.length) !== null && _rollupConfig$columns3 !== void 0 ? _rollupConfig$columns3 : 0) > 0;
3040
- var focusField = null;
3041
- var debounceMs = metrics ? Math.min(Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)), IrisGrid.maxDebounce) : IrisGrid.maxDebounce;
3042
- if (isFilterBarShown && focusedFilterBarColumn != null && metrics != null) {
3043
- var {
3044
- gridX,
3045
- gridY,
3046
- allColumnXs,
3047
- allColumnWidths,
3048
- width
3049
- } = metrics;
3050
- var columnX = allColumnXs.get(focusedFilterBarColumn);
3051
- var columnWidth = allColumnWidths.get(focusedFilterBarColumn);
3052
- if (columnX != null && columnWidth != null) {
3053
- var _theme$filterBarHeigh, _theme$filterBarHeigh2, _this$grid28;
3054
- var x = gridX + columnX;
3055
- var y = gridY - ((_theme$filterBarHeigh = theme.filterBarHeight) !== null && _theme$filterBarHeigh !== void 0 ? _theme$filterBarHeigh : 0);
3056
- var fieldWidth = columnWidth + 1; // cover right border
3057
- var fieldHeight = ((_theme$filterBarHeigh2 = theme.filterBarHeight) !== null && _theme$filterBarHeigh2 !== void 0 ? _theme$filterBarHeigh2 : 0) - 1; // remove bottom border
3058
- var style = {
3059
- top: y,
3060
- left: x,
3061
- minWidth: Math.min(fieldWidth, width - x),
3062
- // Don't cause overflow
3063
- height: fieldHeight
3064
- };
3065
- var _value5 = '';
3066
- var isValid = true;
3067
- var modelColumn = this.getModelColumn(focusedFilterBarColumn);
3068
- assertNotNull(modelColumn);
3069
- var quickFilter = quickFilters.get(modelColumn);
3070
- var advancedFilter = advancedFilters.get(modelColumn);
3071
- if (quickFilter != null) {
3072
- _value5 = quickFilter.text;
3073
- isValid = quickFilter.filter != null;
3074
- }
3075
- var isBarFiltered = quickFilters.size !== 0 || advancedFilters.size !== 0;
3076
- focusField = /*#__PURE__*/React.createElement(FilterInputField, {
3077
- ref: this.filterInputRef,
3078
- style: style,
3079
- className: classNames({
3080
- error: !isValid,
3081
- active: _value5 !== '' || advancedFilter != null,
3082
- 'iris-grid-has-filter': isBarFiltered
3083
- }),
3084
- isAdvancedFilterSet: advancedFilter != null,
3085
- onAdvancedFiltersTriggered: () => {
3086
- this.setState({
3087
- shownAdvancedFilter: focusedFilterBarColumn
3088
- });
3089
- },
3090
- key: focusedFilterBarColumn,
3091
- onChange: this.handleFilterBarChange,
3092
- onDone: this.handleFilterBarDone,
3093
- onTab: this.handleFilterBarTab,
3094
- onContextMenu: (_this$grid28 = this.grid) === null || _this$grid28 === void 0 ? void 0 : _this$grid28.handleContextMenu,
3095
- debounceMs: debounceMs,
3096
- value: _value5
3097
- });
3098
- }
3099
- }
3100
- var loadingElement = null;
3101
- if (loadingText != null) {
3102
- var loadingStatus = /*#__PURE__*/React.createElement("div", {
3103
- className: "iris-grid-loading-status"
3104
- }, /*#__PURE__*/React.createElement("div", {
3105
- className: classNames('iris-grid-loading-status-bar', {
3106
- show: loadingSpinnerShown
3107
- })
3108
- }, loadingText), /*#__PURE__*/React.createElement("button", {
3109
- type: "button",
3110
- onClick: this.handleCancel,
3111
- className: classNames('iris-grid-btn-cancel', {
3112
- show: loadingSpinnerShown
3113
- })
3114
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
3115
- icon: vsClose,
3116
- transform: "down-1"
3117
- }), "Cancel"));
3118
- var _gridY = metrics ? metrics.gridY : 0;
3119
- loadingElement = /*#__PURE__*/React.createElement("div", {
3120
- className: "iris-grid-loading",
3121
- style: {
3122
- top: _gridY
3123
- }
3124
- }, loadingStatus);
3125
- }
3126
- var columnTooltip = null;
3127
- if (shownColumnTooltip != null && metrics) {
3128
- var _this$tooltip2;
3129
- columnTooltip = this.getColumnTooltip(shownColumnTooltip, metrics, model);
3130
- // #510 We may need to update the position of the tooltip if it's already opened and columns are resized
3131
- (_this$tooltip2 = this.tooltip) === null || _this$tooltip2 === void 0 ? void 0 : _this$tooltip2.update();
3132
- }
3133
- var filterBar = [];
3134
- if (metrics && isFilterBarShown) {
3135
- var {
3136
- gridX: _gridX,
3137
- gridY: _gridY2,
3138
- visibleColumns,
3139
- allColumnXs: _allColumnXs,
3140
- allColumnWidths: _allColumnWidths
3141
- } = metrics;
3142
- var {
3143
- filterBarHeight
3144
- } = theme;
3145
- var _loop2 = function _loop2() {
3146
- var columnIndex = visibleColumns[i];
3147
- var columnX = _allColumnXs.get(columnIndex);
3148
- var columnWidth = _allColumnWidths.get(columnIndex);
3149
- var modelColumn = _this6.getModelColumn(columnIndex);
3150
- if (modelColumn != null) {
3151
- var isFilterable = model.isFilterable(modelColumn);
3152
- if (isFilterable && columnX != null && columnWidth != null && columnWidth > 0) {
3153
- var _x = _gridX + columnX + columnWidth - 24;
3154
- var _y = _gridY2 - (filterBarHeight !== null && filterBarHeight !== void 0 ? filterBarHeight : 0) + 2; // 2 acts as top margin for the button
3155
- var _style = {
3156
- position: 'absolute',
3157
- top: _y,
3158
- left: _x
3159
- };
3160
- var _advancedFilter = advancedFilters.get(modelColumn);
3161
- var isFilterSet = _advancedFilter != null;
3162
- var isFilterVisible = columnIndex === hoverAdvancedFilter || columnIndex === focusedFilterBarColumn || isFilterSet;
3163
- var element = /*#__PURE__*/React.createElement("div", {
3164
- className: classNames('advanced-filter-button-container', {
3165
- hidden: !isFilterVisible
3166
- }),
3167
- key: columnIndex,
3168
- style: _style
3169
- }, isFilterVisible && /*#__PURE__*/React.createElement(Button, {
3170
- kind: "ghost",
3171
- className: classNames('btn-link-icon advanced-filter-button', {
3172
- 'filter-set': isFilterSet
3173
- }),
3174
- onClick: () => {
3175
- _this6.setState({
3176
- shownAdvancedFilter: columnIndex
3177
- });
3178
- },
3179
- onContextMenu: event => {
3180
- var _this6$grid;
3181
- (_this6$grid = _this6.grid) === null || _this6$grid === void 0 ? void 0 : _this6$grid.handleContextMenu(event);
3182
- },
3183
- onMouseEnter: () => {
3184
- _this6.setState({
3185
- hoverAdvancedFilter: columnIndex
3186
- });
3187
- },
3188
- onMouseLeave: () => {
3189
- _this6.setState({
3190
- hoverAdvancedFilter: null
3191
- });
3192
- }
3193
- }, /*#__PURE__*/React.createElement("div", {
3194
- className: "fa-layers"
3195
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
3196
- icon: dhFilterFilled,
3197
- className: "filter-solid"
3198
- }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
3199
- icon: vsFilter,
3200
- className: "filter-light"
3201
- }))));
3202
- filterBar.push(element);
3203
- }
3204
- }
3205
- };
3206
- for (var i = 0; i < visibleColumns.length; i += 1) {
3207
- _loop2();
3208
- }
3209
- }
3210
- var advancedFilterMenus = [];
3211
- if (metrics) {
3212
- var {
3213
- gridX: _gridX2,
3214
- visibleColumns: _visibleColumns,
3215
- allColumnXs: _allColumnXs2,
3216
- allColumnWidths: _allColumnWidths2,
3217
- columnHeaderHeight
3218
- } = metrics;
3219
- var _loop3 = function _loop3() {
3220
- var columnIndex = _visibleColumns[_i3];
3221
- var columnX = _allColumnXs2.get(columnIndex);
3222
- var columnWidth = _allColumnWidths2.get(columnIndex);
3223
- if (columnX != null && columnWidth != null && columnWidth > 0) {
3224
- var xColumnHeader = _gridX2 + columnX;
3225
- var xFilterBar = _gridX2 + columnX + columnWidth - 20;
3226
- var _style2 = isFilterBarShown ? {
3227
- position: 'absolute',
3228
- top: columnHeaderHeight,
3229
- left: xFilterBar,
3230
- width: 20,
3231
- height: theme.filterBarHeight
3232
- } : {
3233
- position: 'absolute',
3234
- top: 0,
3235
- left: xColumnHeader,
3236
- width: columnWidth,
3237
- height: columnHeaderHeight
3238
- };
3239
- var _modelColumn = _this6.getModelColumn(columnIndex);
3240
- if (_modelColumn != null) {
3241
- var _column4 = model.columns[_modelColumn];
3242
- if (_column4 == null) {
3243
- // Grid metrics is likely out of sync with model
3244
- log.warn("Column does not exist at index ".concat(_modelColumn, " for column array of length ").concat(model.columns.length));
3245
- // eslint-disable-next-line no-continue
3246
- return "continue";
3247
- }
3248
- var _advancedFilter2 = advancedFilters.get(_modelColumn);
3249
- var {
3250
- options: advancedFilterOptions
3251
- } = _advancedFilter2 || {};
3252
- var sort = TableUtils.getSortForColumn(model.sort, _column4.name);
3253
- var sortDirection = sort ? sort.direction : null;
3254
- var element = /*#__PURE__*/React.createElement("div", {
3255
- key: columnIndex,
3256
- className: "advanced-filter-menu-container",
3257
- style: _style2
3258
- }, /*#__PURE__*/React.createElement(Popper, {
3259
- className: "advanced-filter-menu-popper",
3260
- onEntered: _this6.getAdvancedMenuOpenedHandler(columnIndex),
3261
- onExited: () => {
3262
- _this6.handleAdvancedMenuClosed(columnIndex);
3263
- },
3264
- isShown: shownAdvancedFilter === columnIndex,
3265
- interactive: true,
3266
- closeOnBlur: true,
3267
- options: {
3268
- positionFixed: true
3269
- }
3270
- }, _this6.getCachedAdvancedFilterMenuActions(model, _column4, advancedFilterOptions, sortDirection, formatter)));
3271
- advancedFilterMenus.push(element);
3272
- }
3273
- }
3274
- };
3275
- for (var _i3 = 0; _i3 < _visibleColumns.length; _i3 += 1) {
3276
- var _ret = _loop3();
3277
- if (_ret === "continue") continue;
3278
- }
3279
- }
3280
- var optionItems = this.getCachedOptionItems(onCreateChart !== undefined && model.isChartBuilderAvailable, model.isCustomColumnsAvailable, model.isFormatColumnsAvailable, model.isRollupAvailable, model.isTotalsAvailable || isRollup, model.isSelectDistinctAvailable, model.isExportAvailable, this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, this.isTableSearchAvailable(), isGotoShown, advancedSettings.size > 0);
3281
- var hiddenColumns = this.getCachedHiddenColumns(metricCalculator, userColumnWidths);
3282
- var openOptionsStack = openOptions.map(option => {
3283
- switch (option.type) {
3284
- case OptionType.CHART_BUILDER:
3285
- return /*#__PURE__*/React.createElement(ChartBuilder, {
3286
- model: model,
3287
- onChange: this.handleChartChange,
3288
- onSubmit: this.handleChartCreate,
3289
- key: OptionType.CHART_BUILDER
3290
- });
3291
- case OptionType.VISIBILITY_ORDERING_BUILDER:
3292
- return /*#__PURE__*/React.createElement(VisibilityOrderingBuilder, {
3293
- model: model,
3294
- movedColumns: movedColumns,
3295
- hiddenColumns: hiddenColumns,
3296
- columnHeaderGroups: columnHeaderGroups,
3297
- onColumnVisibilityChanged: this.handleColumnVisibilityChanged,
3298
- onReset: this.handleColumnVisibilityReset,
3299
- onMovedColumnsChanged: this.handleMovedColumnsChanged,
3300
- onColumnHeaderGroupChanged: this.handleHeaderGroupsChanged,
3301
- key: OptionType.VISIBILITY_ORDERING_BUILDER
3302
- });
3303
- case OptionType.CONDITIONAL_FORMATTING:
3304
- return /*#__PURE__*/React.createElement(ConditionalFormattingMenu, {
3305
- rules: conditionalFormats,
3306
- onChange: this.handleConditionalFormatsChange,
3307
- onCreate: this.handleConditionalFormatCreate,
3308
- onSelect: this.handleConditionalFormatEdit
3309
- });
3310
- case OptionType.CONDITIONAL_FORMATTING_EDIT:
3311
- assertNotNull(model.columns);
3312
- assertNotNull(this.handleConditionalFormatEditorUpdate);
3313
- return /*#__PURE__*/React.createElement(ConditionalFormatEditor, {
3314
- dh: model.dh,
3315
- columns: model.columns,
3316
- rule: conditionalFormatPreview,
3317
- onUpdate: this.handleConditionalFormatEditorUpdate,
3318
- onSave: this.handleConditionalFormatEditorSave,
3319
- onCancel: this.handleConditionalFormatEditorCancel
3320
- });
3321
- case OptionType.CUSTOM_COLUMN_BUILDER:
3322
- return /*#__PURE__*/React.createElement(CustomColumnBuilder, {
3323
- model: model,
3324
- customColumns: customColumns,
3325
- onSave: this.handleUpdateCustomColumns,
3326
- onCancel: this.handleMenuBack,
3327
- key: OptionType.CUSTOM_COLUMN_BUILDER
3328
- });
3329
- case OptionType.ROLLUP_ROWS:
3330
- return /*#__PURE__*/React.createElement(RollupRows, {
3331
- model: model,
3332
- onChange: this.handleRollupChange,
3333
- config: rollupConfig,
3334
- key: OptionType.ROLLUP_ROWS
3335
- });
3336
- case OptionType.AGGREGATIONS:
3337
- return /*#__PURE__*/React.createElement(Aggregations, {
3338
- settings: aggregationSettings,
3339
- isRollup: isRollup,
3340
- onChange: this.handleAggregationsChange,
3341
- onEdit: this.handleAggregationEdit
3342
- });
3343
- case OptionType.AGGREGATION_EDIT:
3344
- return selectedAggregation && /*#__PURE__*/React.createElement(AggregationEdit, {
3345
- aggregation: selectedAggregation,
3346
- columns: model.originalColumns,
3347
- onChange: this.handleAggregationChange
3348
- });
3349
- case OptionType.TABLE_EXPORTER:
3350
- return /*#__PURE__*/React.createElement(TableCsvExporter, {
3351
- model: model,
3352
- name: name,
3353
- userColumnWidths: userColumnWidths,
3354
- movedColumns: movedColumns,
3355
- isDownloading: isTableDownloading,
3356
- tableDownloadStatus: tableDownloadStatus,
3357
- tableDownloadProgress: tableDownloadProgress,
3358
- tableDownloadEstimatedTime: tableDownloadEstimatedTime !== null && tableDownloadEstimatedTime !== void 0 ? tableDownloadEstimatedTime : undefined,
3359
- onDownload: this.handleDownloadTable,
3360
- onDownloadStart: this.handleDownloadTableStart,
3361
- onCancel: this.handleCancelDownloadTable,
3362
- selectedRanges: selectedRanges,
3363
- key: OptionType.TABLE_EXPORTER
3364
- });
3365
- case OptionType.SELECT_DISTINCT:
3366
- return /*#__PURE__*/React.createElement(SelectDistinctBuilder, {
3367
- model: model,
3368
- selectDistinctColumns: selectDistinctColumns,
3369
- onChange: this.handleSelectDistinctChanged
3370
- });
3371
- case OptionType.ADVANCED_SETTINGS:
3372
- return /*#__PURE__*/React.createElement(AdvancedSettingsMenu, {
3373
- items: advancedSettings,
3374
- onChange: onAdvancedSettingsChange
3375
- });
3376
- default:
3377
- throw Error("Unexpected option type ".concat(option.type));
3378
- }
3379
- });
3380
- return /*#__PURE__*/React.createElement("div", {
3381
- className: "iris-grid",
3382
- role: "presentation"
3383
- }, /*#__PURE__*/React.createElement("div", {
3384
- className: "iris-grid-column"
3385
- }, children != null && /*#__PURE__*/React.createElement("div", {
3386
- className: "iris-grid-bar"
3387
- }, children), /*#__PURE__*/React.createElement(CSSTransition, {
3388
- in: isSelectingPartition,
3389
- timeout: ThemeExport.transitionSlowMs,
3390
- classNames: "iris-grid-bar-horizontal",
3391
- onEnter: this.handleAnimationStart,
3392
- onEntered: this.handleAnimationEnd,
3393
- onExit: this.handleAnimationStart,
3394
- onExited: this.handleAnimationEnd,
3395
- mountOnEnter: true,
3396
- unmountOnExit: true
3397
- }, /*#__PURE__*/React.createElement("div", {
3398
- className: "iris-grid-partition-selector-wrapper iris-grid-bar iris-grid-bar-primary"
3399
- }, partitionTable && partitionColumn && partition != null && /*#__PURE__*/React.createElement(IrisGridPartitionSelector, {
3400
- dh: model.dh,
3401
- table: partitionTable,
3402
- getFormattedString: (value, type, stringName) => model.displayString(value, type, stringName),
3403
- columnName: partitionColumn.name,
3404
- partition: partition,
3405
- onChange: this.handlePartitionChange,
3406
- onFetchAll: this.handlePartitionFetchAll,
3407
- onAppend: this.handlePartitionAppend,
3408
- onDone: this.handlePartitionDone
3409
- }))), /*#__PURE__*/React.createElement(CSSTransition, {
3410
- in: showSearchBar,
3411
- timeout: ThemeExport.transitionSlowMs,
3412
- classNames: "iris-grid-bar-horizontal",
3413
- onEnter: this.handleAnimationStart,
3414
- onEntered: this.handleAnimationEnd,
3415
- onExit: this.handleAnimationStart,
3416
- onExited: this.handleAnimationEnd,
3417
- mountOnEnter: true,
3418
- unmountOnExit: true
3419
- }, /*#__PURE__*/React.createElement("div", {
3420
- className: "iris-grid-bar"
3421
- }, /*#__PURE__*/React.createElement(CrossColumnSearch, {
3422
- value: searchValue,
3423
- selectedColumns: selectedSearchColumns,
3424
- invertSelection: invertSearchColumns,
3425
- onChange: this.handleCrossColumnSearch,
3426
- columns: model.columns,
3427
- ref: this.crossColumnRef
3428
- }))), /*#__PURE__*/React.createElement("div", {
3429
- className: "grid-wrapper",
3430
- ref: gridWrapper => {
3431
- this.gridWrapper = gridWrapper;
3432
- }
3433
- }, /*#__PURE__*/React.createElement(Grid, {
3434
- ref: grid => {
3435
- this.grid = grid;
3436
- },
3437
- isStickyBottom: !isEditableGridModel(model) || !model.isEditable,
3438
- isStuckToBottom: isStuckToBottom,
3439
- isStuckToRight: isStuckToRight,
3440
- metricCalculator: metricCalculator,
3441
- model: model,
3442
- keyHandlers: keyHandlers,
3443
- mouseHandlers: mouseHandlers,
3444
- movedColumns: movedColumns,
3445
- movedRows: movedRows,
3446
- onError: this.handleGridError,
3447
- onViewChanged: this.handleViewChanged,
3448
- onSelectionChanged: this.handleSelectionChanged,
3449
- onMovedColumnsChanged: this.handleMovedColumnsChanged,
3450
- renderer: this.renderer,
3451
- stateOverride: stateOverride,
3452
- theme: theme
3453
- }), /*#__PURE__*/React.createElement(IrisGridCellOverflowModal, {
3454
- isOpen: showOverflowModal,
3455
- text: overflowText,
3456
- onClose: this.handleOverflowClose
3457
- }), isVisible && /*#__PURE__*/React.createElement(IrisGridModelUpdater, {
3458
- model: model,
3459
- modelColumns: model.columns,
3460
- top: top,
3461
- bottom: bottom,
3462
- left: left,
3463
- right: right,
3464
- filter: filter,
3465
- formatter: formatter,
3466
- sorts: sorts,
3467
- reverseType: reverseType,
3468
- movedColumns: movedColumns,
3469
- customColumns: customColumns,
3470
- hiddenColumns: hiddenColumns,
3471
- alwaysFetchColumns: this.getAlwaysFetchColumns(alwaysFetchColumns, model.columns, movedColumns, model.floatingLeftColumnCount, model.floatingRightColumnCount, (_this$grid29 = this.grid) === null || _this$grid29 === void 0 ? void 0 : (_this$grid29$state$dr = _this$grid29.state.draggingColumn) === null || _this$grid29$state$dr === void 0 ? void 0 : _this$grid29$state$dr.range),
3472
- formatColumns: this.getCachedPreviewFormatColumns(model.dh, model.columns, conditionalFormats, conditionalFormatPreview,
3473
- // Disable the preview format when we press Back on the format edit page
3474
- ((_openOptions = openOptions[openOptions.length - 1]) === null || _openOptions === void 0 ? void 0 : _openOptions.type) === OptionType.CONDITIONAL_FORMATTING_EDIT ? conditionalFormatEditIndex !== null && conditionalFormatEditIndex !== void 0 ? conditionalFormatEditIndex : undefined : undefined),
3475
- rollupConfig: this.getModelRollupConfig(model.originalColumns, rollupConfig, aggregationSettings),
3476
- totalsConfig: this.getModelTotalsConfig(model.columns, rollupConfig, aggregationSettings),
3477
- selectDistinctColumns: selectDistinctColumns,
3478
- pendingRowCount: pendingRowCount,
3479
- pendingDataMap: pendingDataMap,
3480
- frozenColumns: frozenColumns,
3481
- columnHeaderGroups: columnHeaderGroups
3482
- }), !isMenuShown && /*#__PURE__*/React.createElement("div", {
3483
- className: "grid-settings-button"
3484
- }, /*#__PURE__*/React.createElement(Button, {
3485
- kind: "ghost",
3486
- "data-testid": "btn-iris-grid-settings-button-".concat(name),
3487
- onClick: this.handleMenu,
3488
- icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
3489
- icon: vsMenu,
3490
- transform: "up-1"
3491
- }),
3492
- tooltip: "Table Options"
3493
- })), focusField, loadingElement, filterBar, columnTooltip, advancedFilterMenus, overflowButtonTooltipProps && this.getOverflowButtonTooltip(overflowButtonTooltipProps), expandCellTooltipProps && this.getExpandCellTooltip(expandCellTooltipProps), linkHoverTooltipProps && this.getLinkHoverTooltip(linkHoverTooltipProps)), /*#__PURE__*/React.createElement(GotoRow, {
3494
- model: model,
3495
- isShown: isGotoShown,
3496
- gotoRow: gotoRow,
3497
- gotoRowError: gotoRowError,
3498
- gotoValueError: gotoValueError,
3499
- onGotoRowSubmit: this.handleGotoRowSelectedRowNumberSubmit,
3500
- onGotoRowNumberChanged: this.handleGotoRowSelectedRowNumberChanged,
3501
- onClose: this.handleGotoRowClosed,
3502
- onEntering: this.handleAnimationStart,
3503
- onEntered: this.handleAnimationEnd,
3504
- onExiting: () => {
3505
- this.handleAnimationStart();
3506
- this.focus();
3507
- },
3508
- onExited: this.handleAnimationEnd,
3509
- gotoValueSelectedColumnName: gotoValueSelectedColumnName,
3510
- gotoValue: gotoValue,
3511
- gotoValueFilter: gotoValueSelectedFilter,
3512
- onGotoValueSelectedColumnNameChanged: this.handleGotoValueSelectedColumnNameChanged,
3513
- onGotoValueSelectedFilterChanged: this.handleGotoValueSelectedFilterChanged,
3514
- onGotoValueChanged: this.handleGotoValueChanged,
3515
- onGotoValueSubmit: this.handleGotoValueSubmitted
3516
- }), /*#__PURE__*/React.createElement(PendingDataBottomBar, {
3517
- error: pendingSaveError,
3518
- isSaving: pendingSavePromise != null,
3519
- saveTooltip: "Commit (".concat(this.commitAction.shortcut.getDisplayText(), ")"),
3520
- discardTooltip: "Discard (".concat(this.discardAction.shortcut.getDisplayText(), ")"),
3521
- pendingDataErrors: pendingDataErrors,
3522
- pendingDataMap: pendingDataMap,
3523
- onEntering: this.handleAnimationStart,
3524
- onEntered: this.handleAnimationEnd,
3525
- onExiting: this.handleAnimationStart,
3526
- onExited: this.handleAnimationEnd,
3527
- onSave: this.handlePendingCommitClicked,
3528
- onDiscard: this.handlePendingDiscardClicked
3529
- }), /*#__PURE__*/React.createElement(ToastBottomBar, null, toastMessage), /*#__PURE__*/React.createElement(IrisGridCopyHandler, {
3530
- model: model,
3531
- copyOperation: copyOperation !== null && copyOperation !== void 0 ? copyOperation : undefined,
3532
- onEntering: this.handleAnimationStart,
3533
- onEntered: this.handleAnimationEnd,
3534
- onExiting: this.handleAnimationStart,
3535
- onExited: this.handleAnimationEnd
3536
- }), /*#__PURE__*/React.createElement(TableSaver, {
3537
- dh: model.dh,
3538
- ref: tableSaver => {
3539
- this.tableSaver = tableSaver;
3540
- },
3541
- getDownloadWorker: getDownloadWorker,
3542
- onDownloadCompleted: this.handleDownloadCompleted,
3543
- onDownloadCanceled: this.handleDownloadCanceled,
3544
- onDownloadProgressUpdate: this.handleDownloadProgressUpdate,
3545
- isDownloading: tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING,
3546
- formatter: formatter
3547
- })), /*#__PURE__*/React.createElement(CSSTransition, {
3548
- in: isMenuShown,
3549
- timeout: ThemeExport.transitionMidMs,
3550
- classNames: "slide-left",
3551
- onEntering: this.handleAnimationStart,
3552
- onEntered: this.handleAnimationEnd,
3553
- onExiting: this.handleAnimationStart,
3554
- onExited: this.handleAnimationEnd,
3555
- mountOnEnter: true,
3556
- unmountOnExit: true
3557
- }, /*#__PURE__*/React.createElement("div", {
3558
- className: "table-sidebar"
3559
- }, /*#__PURE__*/React.createElement(Stack, null, /*#__PURE__*/React.createElement(Page, {
3560
- title: "Table Options",
3561
- onClose: this.handleMenuClose
3562
- }, /*#__PURE__*/React.createElement(Menu, {
3563
- onSelect: i => this.handleMenuSelect(optionItems[i]),
3564
- items: optionItems
3565
- })), openOptionsStack.map((option, i) => /*#__PURE__*/React.createElement(Page, {
3566
- title: openOptions[i].title,
3567
- onBack: this.handleMenuBack,
3568
- onClose: this.handleMenuClose,
3569
- key: openOptions[i].type
3570
- }, option))))), /*#__PURE__*/React.createElement(ContextActions, {
3571
- actions: this.contextActions
3572
- }));
3573
- }
3574
- }
3575
- _defineProperty(IrisGrid, "minDebounce", 150);
3576
- _defineProperty(IrisGrid, "maxDebounce", 500);
3577
- _defineProperty(IrisGrid, "loadingSpinnerDelay", 800);
3578
- _defineProperty(IrisGrid, "defaultProps", {
3579
- children: null,
3580
- advancedFilters: EMPTY_MAP,
3581
- advancedSettings: EMPTY_MAP,
3582
- alwaysFetchColumns: EMPTY_ARRAY,
3583
- conditionalFormats: EMPTY_ARRAY,
3584
- customColumnFormatMap: EMPTY_MAP,
3585
- isFilterBarShown: false,
3586
- applyInputFiltersOnInit: false,
3587
- movedColumns: EMPTY_ARRAY,
3588
- movedRows: EMPTY_ARRAY,
3589
- inputFilters: EMPTY_ARRAY,
3590
- customFilters: EMPTY_ARRAY,
3591
- onCreateChart: undefined,
3592
- onColumnSelected: () => undefined,
3593
- onDataSelected: () => undefined,
3594
- onError: () => undefined,
3595
- onStateChange: () => undefined,
3596
- onPartitionAppend: () => undefined,
3597
- onAdvancedSettingsChange: () => undefined,
3598
- partition: null,
3599
- partitionColumn: null,
3600
- quickFilters: EMPTY_MAP,
3601
- selectDistinctColumns: EMPTY_ARRAY,
3602
- sorts: EMPTY_ARRAY,
3603
- reverseType: TableUtils.REVERSE_TYPE.NONE,
3604
- customColumns: EMPTY_ARRAY,
3605
- aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,
3606
- rollupConfig: undefined,
3607
- userColumnWidths: EMPTY_MAP,
3608
- userRowHeights: EMPTY_MAP,
3609
- onSelectionChanged: () => undefined,
3610
- isSelectingColumn: false,
3611
- isSelectingPartition: false,
3612
- isStuckToBottom: false,
3613
- isStuckToRight: false,
3614
- columnSelectionValidator: null,
3615
- columnAllowedCursor: null,
3616
- columnNotAllowedCursor: null,
3617
- name: 'table',
3618
- onlyFetchVisibleColumns: true,
3619
- showSearchBar: false,
3620
- searchValue: '',
3621
- selectedSearchColumns: null,
3622
- invertSearchColumns: true,
3623
- onContextMenu: () => undefined,
3624
- pendingDataMap: EMPTY_MAP,
3625
- getDownloadWorker: undefined,
3626
- settings: {
3627
- timeZone: 'America/New_York',
3628
- defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,
3629
- showTimeZone: false,
3630
- showTSeparator: true,
3631
- truncateNumbersWithPound: false,
3632
- formatter: EMPTY_ARRAY,
3633
- decimalFormatOptions: PropTypes.shape({
3634
- defaultFormatString: PropTypes.string
3635
- }),
3636
- integerFormatOptions: PropTypes.shape({
3637
- defaultFormatString: PropTypes.string
3638
- })
3639
- },
3640
- canCopy: true,
3641
- canDownloadCsv: true,
3642
- frozenColumns: null,
3643
- theme: IrisGridTheme,
3644
- canToggleSearch: true
3645
- });
3646
- export default IrisGrid;
3647
- //# sourceMappingURL=IrisGrid.js.map