@deephaven/iris-grid 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.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 (160) hide show
  1. package/dist/AdvancedFilterCreator.js +65 -102
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +22 -37
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +37 -63
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +29 -59
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnHeaderGroup.js +6 -8
  10. package/dist/ColumnHeaderGroup.js.map +1 -1
  11. package/dist/ColumnStatistics.js +22 -28
  12. package/dist/ColumnStatistics.js.map +1 -1
  13. package/dist/CrossColumnSearch.js +20 -29
  14. package/dist/CrossColumnSearch.js.map +1 -1
  15. package/dist/FilterInputField.js +19 -46
  16. package/dist/FilterInputField.js.map +1 -1
  17. package/dist/GotoRow.js +32 -29
  18. package/dist/GotoRow.js.map +1 -1
  19. package/dist/IrisGrid.js +490 -822
  20. package/dist/IrisGrid.js.map +1 -1
  21. package/dist/IrisGridBottomBar.js +10 -11
  22. package/dist/IrisGridBottomBar.js.map +1 -1
  23. package/dist/IrisGridCacheUtils.js +28 -8
  24. package/dist/IrisGridCacheUtils.js.map +1 -1
  25. package/dist/IrisGridCellOverflowModal.js +30 -13
  26. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  27. package/dist/IrisGridCellRendererUtils.js +6 -12
  28. package/dist/IrisGridCellRendererUtils.js.map +1 -1
  29. package/dist/IrisGridCopyHandler.js +28 -47
  30. package/dist/IrisGridCopyHandler.js.map +1 -1
  31. package/dist/IrisGridMetricCalculator.js +28 -51
  32. package/dist/IrisGridMetricCalculator.js.map +1 -1
  33. package/dist/IrisGridModelUpdater.js +32 -30
  34. package/dist/IrisGridModelUpdater.js.map +1 -1
  35. package/dist/IrisGridPartitionSelector.js +28 -62
  36. package/dist/IrisGridPartitionSelector.js.map +1 -1
  37. package/dist/IrisGridProxyModel.js +7 -12
  38. package/dist/IrisGridProxyModel.js.map +1 -1
  39. package/dist/IrisGridRenderer.js +162 -264
  40. package/dist/IrisGridRenderer.js.map +1 -1
  41. package/dist/IrisGridTableModel.js +23 -16
  42. package/dist/IrisGridTableModel.js.map +1 -1
  43. package/dist/IrisGridTableModelTemplate.js +49 -73
  44. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  45. package/dist/IrisGridTestUtils.js +19 -19
  46. package/dist/IrisGridTestUtils.js.map +1 -1
  47. package/dist/IrisGridTextCellRenderer.js +35 -52
  48. package/dist/IrisGridTextCellRenderer.js.map +1 -1
  49. package/dist/IrisGridTheme.js +9 -1
  50. package/dist/IrisGridTheme.js.map +1 -1
  51. package/dist/IrisGridThemeProvider.js +5 -7
  52. package/dist/IrisGridThemeProvider.js.map +1 -1
  53. package/dist/IrisGridTreeTableModel.js +5 -9
  54. package/dist/IrisGridTreeTableModel.js.map +1 -1
  55. package/dist/IrisGridUtils.js +246 -300
  56. package/dist/IrisGridUtils.js.map +1 -1
  57. package/dist/NoPastePermissionModal.js +3 -5
  58. package/dist/NoPastePermissionModal.js.map +1 -1
  59. package/dist/PendingDataBottomBar.js +27 -16
  60. package/dist/PendingDataBottomBar.js.map +1 -1
  61. package/dist/ToastBottomBar.js +16 -8
  62. package/dist/ToastBottomBar.js.map +1 -1
  63. package/dist/format-context-menus/CustomFormatAction.js +11 -24
  64. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  65. package/dist/key-handlers/CopyCellKeyHandler.js +3 -4
  66. package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
  67. package/dist/key-handlers/CopyKeyHandler.js +1 -3
  68. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  69. package/dist/key-handlers/ReverseKeyHandler.js +1 -3
  70. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  71. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +35 -59
  72. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  73. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +13 -29
  74. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  75. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +8 -17
  76. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  77. package/dist/mousehandlers/IrisGridContextMenuHandler.js +96 -199
  78. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  79. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -4
  80. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  81. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +16 -30
  82. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  83. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js +5 -13
  84. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
  85. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +20 -36
  86. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
  87. package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -5
  88. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  89. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +9 -18
  90. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
  91. package/dist/mousehandlers/PendingMouseHandler.js +10 -18
  92. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  93. package/dist/sidebar/AdvancedSettingsMenu.js +12 -5
  94. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  95. package/dist/sidebar/ChartBuilder.js +45 -102
  96. package/dist/sidebar/ChartBuilder.js.map +1 -1
  97. package/dist/sidebar/CustomColumnBuilder.js +35 -77
  98. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  99. package/dist/sidebar/CustomColumnInput.js +9 -11
  100. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  101. package/dist/sidebar/InputEditor.js +17 -24
  102. package/dist/sidebar/InputEditor.js.map +1 -1
  103. package/dist/sidebar/PluginTableOptionsErrorBoundary.js +6 -11
  104. package/dist/sidebar/PluginTableOptionsErrorBoundary.js.map +1 -1
  105. package/dist/sidebar/RollupRows.js +72 -113
  106. package/dist/sidebar/RollupRows.js.map +1 -1
  107. package/dist/sidebar/SelectDistinctBuilder.js +16 -33
  108. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  109. package/dist/sidebar/TableCsvExporter.js +50 -74
  110. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  111. package/dist/sidebar/TableSaver.js +18 -42
  112. package/dist/sidebar/TableSaver.js.map +1 -1
  113. package/dist/sidebar/aggregations/AggregationEdit.js +25 -18
  114. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  115. package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
  116. package/dist/sidebar/aggregations/AggregationUtils.js +3 -4
  117. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  118. package/dist/sidebar/aggregations/Aggregations.js +45 -34
  119. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  120. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +35 -24
  121. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  122. package/dist/sidebar/conditional-formatting/ConditionEditor.js +38 -21
  123. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  124. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +27 -11
  125. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  126. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +9 -11
  127. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  128. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +48 -57
  129. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  130. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +35 -24
  131. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  132. package/dist/sidebar/conditional-formatting/StyleEditor.js +26 -11
  133. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  134. package/dist/sidebar/visibility-ordering-builder/SearchItem.js +5 -7
  135. package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
  136. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +24 -18
  137. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
  138. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +166 -256
  139. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  140. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +4 -11
  141. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
  142. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +28 -14
  143. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
  144. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +16 -19
  145. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  146. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +1 -3
  147. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
  148. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +19 -29
  149. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  150. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +39 -52
  151. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
  152. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +18 -23
  153. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  154. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +19 -15
  155. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  156. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +16 -30
  157. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
  158. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +30 -39
  159. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  160. package/package.json +16 -16
@@ -43,10 +43,9 @@ class ColumnStatistics extends Component {
43
43
  }
44
44
  }
45
45
  maybeGenerateStatistics() {
46
- var {
47
- column,
48
- model
49
- } = this.props;
46
+ var _this$props = this.props,
47
+ column = _this$props.column,
48
+ model = _this$props.model;
50
49
  var numRows = model.rowCount - model.pendingRowCount - model.floatingBottomRowCount - model.floatingTopRowCount;
51
50
  this.setState({
52
51
  numRows
@@ -63,19 +62,17 @@ class ColumnStatistics extends Component {
63
62
  this.setState({
64
63
  loading: true
65
64
  });
66
- var {
67
- column,
68
- model
69
- } = this.props;
65
+ var _this$props2 = this.props,
66
+ column = _this$props2.column,
67
+ model = _this$props2.model;
70
68
  this.cancelablePromise = PromiseUtils.makeCancelable(model.columnStatistics(column));
71
69
  this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);
72
70
  }
73
71
  handleStatistics(stats) {
74
72
  log.debug('Received statistics', stats);
75
- var {
76
- model,
77
- onStatistics
78
- } = this.props;
73
+ var _this$props3 = this.props,
74
+ model = _this$props3.model,
75
+ onStatistics = _this$props3.onStatistics;
79
76
  var statistics = [];
80
77
  stats.statisticsMap.forEach((value, operation) => {
81
78
  statistics.push({
@@ -113,28 +110,25 @@ class ColumnStatistics extends Component {
113
110
  }
114
111
  render() {
115
112
  var _column$displayName;
116
- var {
117
- column,
118
- model
119
- } = this.props;
120
- var {
121
- error,
122
- loading,
123
- statistics,
124
- numRows
125
- } = this.state;
113
+ var _this$props4 = this.props,
114
+ column = _this$props4.column,
115
+ model = _this$props4.model;
116
+ var _this$state = this.state,
117
+ error = _this$state.error,
118
+ loading = _this$state.loading,
119
+ statistics = _this$state.statistics,
120
+ numRows = _this$state.numRows;
126
121
  var showGenerateStatistics = !loading && error == null && statistics == null && model.isColumnStatisticsAvailable;
127
122
  var statisticElements = [];
128
123
  var columnType = column.type.substring(column.type.lastIndexOf('.') + 1);
129
124
  var description = column.description === null ? null : column.description;
130
125
  if (statistics != null) {
131
126
  for (var i = 0; i < statistics.length; i += 1) {
132
- var {
133
- operation,
134
- className,
135
- value,
136
- type
137
- } = statistics[i];
127
+ var _statistics$i = statistics[i],
128
+ operation = _statistics$i.operation,
129
+ className = _statistics$i.className,
130
+ value = _statistics$i.value,
131
+ type = _statistics$i.type;
138
132
  var formattedValue = !type ? model.displayString(value, column.type, column.name) : model.displayString(value, type);
139
133
  var statisticElement = /*#__PURE__*/_jsxs(React.Fragment, {
140
134
  children: [/*#__PURE__*/_jsx("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnStatistics.js","names":["React","Component","classNames","FontAwesomeIcon","Button","CopyButton","LoadingSpinner","dhFreeze","dhRefresh","dhSortSlash","vsLock","Log","PromiseUtils","isEditableGridModel","isExpandableGridModel","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","STATS_LABEL_OVERRIDES","SIZE","ColumnStatistics","getStatsLabel","operation","_STATS_LABEL_OVERRIDE","split","map","w","toUpperCase","substr","toLowerCase","join","constructor","props","_defineProperty","handleError","bind","handleGenerateStatistics","handleStatistics","cancelablePromise","state","error","loading","statistics","numRows","componentDidMount","maybeGenerateStatistics","componentWillUnmount","cancel","column","model","rowCount","pendingRowCount","floatingBottomRowCount","floatingTopRowCount","setState","isColumnStatisticsAvailable","isProxy","AUTO_GENERATE_LIMIT","makeCancelable","columnStatistics","then","catch","stats","debug","onStatistics","statisticsMap","forEach","value","push","type","getType","uniqueValues","className","isCanceled","render","_column$displayName","showGenerateStatistics","statisticElements","columnType","substring","lastIndexOf","description","i","length","formattedValue","displayString","name","statisticElement","children","rowCountLabel","hasExpandableRows","formattedRowCount","columnIndex","getColumnIndexByName","displayName","tooltip","copy","isQuiet","isColumnSortable","icon","isColumnMovable","isColumnFrozen","isEditable","keyColumnSet","has","valueColumnSet","kind","onClick","concat"],"sources":["../src/ColumnStatistics.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CopyButton, LoadingSpinner } from '@deephaven/components';\nimport { dhFreeze, dhRefresh, dhSortSlash, vsLock } from '@deephaven/icons';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { type CancelablePromise, PromiseUtils } from '@deephaven/utils';\nimport { isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport './ColumnStatistics.scss';\nimport { type DisplayColumn } from './IrisGridModel';\nimport type IrisGridModel from './IrisGridModel';\n\nconst log = Log.module('ColumnStatistics');\nconst STATS_LABEL_OVERRIDES: Record<string, string> = {\n SIZE: 'Number of Rows',\n};\n\ninterface Statistic {\n operation: string;\n className?: string;\n value: unknown;\n type: string;\n}\n\ninterface ColumnStatisticsProps {\n column: DisplayColumn;\n model: IrisGridModel;\n onStatistics: () => void;\n}\ninterface ColumnStatisticsState {\n error: unknown;\n loading: boolean;\n statistics: readonly Statistic[] | null;\n numRows: number;\n}\n\nclass ColumnStatistics extends Component<\n ColumnStatisticsProps,\n ColumnStatisticsState\n> {\n /** Automatically generate the statistics when the row count is below this threshold */\n static AUTO_GENERATE_LIMIT = 100000;\n\n static getStatsLabel(operation: string): string {\n return (\n STATS_LABEL_OVERRIDES[operation] ??\n operation\n .split(' ')\n .map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())\n .join(' ')\n );\n }\n\n constructor(props: ColumnStatisticsProps) {\n super(props);\n\n this.handleError = this.handleError.bind(this);\n this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);\n this.handleStatistics = this.handleStatistics.bind(this);\n\n this.cancelablePromise = null;\n\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0,\n };\n }\n\n componentDidMount(): void {\n this.maybeGenerateStatistics();\n }\n\n componentWillUnmount(): void {\n if (this.cancelablePromise) {\n this.cancelablePromise.cancel();\n }\n }\n\n cancelablePromise: CancelablePromise<dh.ColumnStatistics> | null;\n\n maybeGenerateStatistics(): void {\n const { column, model } = this.props;\n\n const numRows =\n model.rowCount -\n model.pendingRowCount -\n model.floatingBottomRowCount -\n model.floatingTopRowCount;\n this.setState({ numRows });\n if (!model.isColumnStatisticsAvailable || column.isProxy === true) {\n this.setState({ loading: false });\n } else if (numRows < ColumnStatistics.AUTO_GENERATE_LIMIT) {\n this.handleGenerateStatistics();\n }\n }\n\n handleGenerateStatistics(): void {\n this.setState({ loading: true });\n\n const { column, model } = this.props;\n\n this.cancelablePromise = PromiseUtils.makeCancelable(\n model.columnStatistics(column)\n );\n\n this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);\n }\n\n handleStatistics(stats: dh.ColumnStatistics): void {\n log.debug('Received statistics', stats);\n\n const { model, onStatistics } = this.props;\n const statistics: Statistic[] = [];\n\n stats.statisticsMap.forEach((value, operation) => {\n statistics.push({\n operation: ColumnStatistics.getStatsLabel(operation),\n value,\n type: stats.getType(operation),\n });\n });\n\n stats.uniqueValues.forEach((value, operation) => {\n statistics.push({\n operation,\n className: 'column-statistics-unique-value',\n value,\n type: 'long',\n });\n });\n\n this.setState({\n loading: false,\n statistics,\n numRows:\n model.rowCount -\n model.pendingRowCount -\n model.floatingBottomRowCount -\n model.floatingTopRowCount,\n });\n\n onStatistics();\n }\n\n handleError(error: Error): void {\n if (error != null && PromiseUtils.isCanceled(error)) {\n log.debug('Called handleError on a cancelled promise result');\n return;\n }\n\n log.error('Error generating statistics', error);\n this.setState({\n error,\n loading: false,\n statistics: null,\n });\n }\n\n render(): React.ReactElement {\n const { column, model } = this.props;\n const { error, loading, statistics, numRows } = this.state;\n const showGenerateStatistics =\n !loading &&\n error == null &&\n statistics == null &&\n model.isColumnStatisticsAvailable;\n const statisticElements = [];\n const columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n const description = column.description === null ? null : column.description;\n if (statistics != null) {\n for (let i = 0; i < statistics.length; i += 1) {\n const { operation, className, value, type } = statistics[i];\n const formattedValue = !type\n ? model.displayString(value, column.type, column.name)\n : model.displayString(value, type);\n const statisticElement = (\n <React.Fragment key={operation}>\n <div\n className={classNames('column-statistic-operation', className)}\n >\n {operation}\n </div>\n <div className=\"column-statistic-value\">{formattedValue}</div>\n </React.Fragment>\n );\n statisticElements.push(statisticElement);\n }\n }\n const rowCountLabel =\n isExpandableGridModel(model) && model.hasExpandableRows\n ? 'Expanded Rows'\n : 'Number of Rows';\n const formattedRowCount = model.displayString(numRows, 'long');\n const columnIndex = model.getColumnIndexByName(column.name);\n return (\n <div className=\"column-statistics\">\n <div className=\"column-statistics-title\">\n {column.displayName ?? column.name}\n <span className=\"column-statistics-type\">&nbsp;({columnType})</span>\n <CopyButton tooltip=\"Copy column name\" copy={column.name} isQuiet />\n </div>\n {description != null && (\n <div className=\"column-statistics-description\">{description}</div>\n )}\n {columnIndex != null && !model.isColumnSortable(columnIndex) && (\n <div className=\"column-statistics-status\">\n <FontAwesomeIcon icon={dhSortSlash} className=\"mr-1\" />\n Not sortable\n </div>\n )}\n {columnIndex != null && !model.isColumnMovable(columnIndex) && (\n <div className=\"column-statistics-status\">\n <FontAwesomeIcon\n icon={model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock}\n className=\"mr-1\"\n />\n {model.isColumnFrozen(columnIndex) ? 'Frozen' : 'Not movable'}\n </div>\n )}\n {columnIndex != null &&\n isEditableGridModel(model) &&\n model.isEditable &&\n !model.keyColumnSet.has(column.name) &&\n !model.valueColumnSet.has(column.name) && (\n <div className=\"column-statistics-status\">\n <FontAwesomeIcon icon={vsLock} className=\"mr-1\" />\n Not editable\n </div>\n )}\n <div className=\"column-statistics-grid\">\n {statistics == null && (\n <>\n <div className=\"column-statistic-operation\">{rowCountLabel}</div>\n <div className=\"column-statistic-value\">{formattedRowCount}</div>\n </>\n )}\n\n {statisticElements}\n </div>\n {showGenerateStatistics && (\n <Button\n kind=\"ghost\"\n className=\"px-0\"\n onClick={this.handleGenerateStatistics}\n >\n Generate Stats\n </Button>\n )}\n {error != null && <div className=\"error-message\">{`${error}`}</div>}\n {statistics && !loading && (\n <Button\n kind=\"ghost\"\n className=\"px-0\"\n onClick={this.handleGenerateStatistics}\n icon={dhRefresh}\n >\n Refresh\n </Button>\n )}\n {loading && (\n <div className=\"column-statistics-loading\">\n <LoadingSpinner className=\"loading-spinner-vertical-align\" />\n Calculating Stats...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ColumnStatistics;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ColumnStatistics.js","names":["React","Component","classNames","FontAwesomeIcon","Button","CopyButton","LoadingSpinner","dhFreeze","dhRefresh","dhSortSlash","vsLock","Log","PromiseUtils","isEditableGridModel","isExpandableGridModel","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","STATS_LABEL_OVERRIDES","SIZE","ColumnStatistics","getStatsLabel","operation","_STATS_LABEL_OVERRIDE","split","map","w","toUpperCase","substr","toLowerCase","join","constructor","props","_defineProperty","handleError","bind","handleGenerateStatistics","handleStatistics","cancelablePromise","state","error","loading","statistics","numRows","componentDidMount","maybeGenerateStatistics","componentWillUnmount","cancel","_this$props","column","model","rowCount","pendingRowCount","floatingBottomRowCount","floatingTopRowCount","setState","isColumnStatisticsAvailable","isProxy","AUTO_GENERATE_LIMIT","_this$props2","makeCancelable","columnStatistics","then","catch","stats","debug","_this$props3","onStatistics","statisticsMap","forEach","value","push","type","getType","uniqueValues","className","isCanceled","render","_column$displayName","_this$props4","_this$state","showGenerateStatistics","statisticElements","columnType","substring","lastIndexOf","description","i","length","_statistics$i","formattedValue","displayString","name","statisticElement","children","rowCountLabel","hasExpandableRows","formattedRowCount","columnIndex","getColumnIndexByName","displayName","tooltip","copy","isQuiet","isColumnSortable","icon","isColumnMovable","isColumnFrozen","isEditable","keyColumnSet","has","valueColumnSet","kind","onClick","concat"],"sources":["../src/ColumnStatistics.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CopyButton, LoadingSpinner } from '@deephaven/components';\nimport { dhFreeze, dhRefresh, dhSortSlash, vsLock } from '@deephaven/icons';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { type CancelablePromise, PromiseUtils } from '@deephaven/utils';\nimport { isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport './ColumnStatistics.scss';\nimport { type DisplayColumn } from './IrisGridModel';\nimport type IrisGridModel from './IrisGridModel';\n\nconst log = Log.module('ColumnStatistics');\nconst STATS_LABEL_OVERRIDES: Record<string, string> = {\n SIZE: 'Number of Rows',\n};\n\ninterface Statistic {\n operation: string;\n className?: string;\n value: unknown;\n type: string;\n}\n\ninterface ColumnStatisticsProps {\n column: DisplayColumn;\n model: IrisGridModel;\n onStatistics: () => void;\n}\ninterface ColumnStatisticsState {\n error: unknown;\n loading: boolean;\n statistics: readonly Statistic[] | null;\n numRows: number;\n}\n\nclass ColumnStatistics extends Component<\n ColumnStatisticsProps,\n ColumnStatisticsState\n> {\n /** Automatically generate the statistics when the row count is below this threshold */\n static AUTO_GENERATE_LIMIT = 100000;\n\n static getStatsLabel(operation: string): string {\n return (\n STATS_LABEL_OVERRIDES[operation] ??\n operation\n .split(' ')\n .map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())\n .join(' ')\n );\n }\n\n constructor(props: ColumnStatisticsProps) {\n super(props);\n\n this.handleError = this.handleError.bind(this);\n this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);\n this.handleStatistics = this.handleStatistics.bind(this);\n\n this.cancelablePromise = null;\n\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0,\n };\n }\n\n componentDidMount(): void {\n this.maybeGenerateStatistics();\n }\n\n componentWillUnmount(): void {\n if (this.cancelablePromise) {\n this.cancelablePromise.cancel();\n }\n }\n\n cancelablePromise: CancelablePromise<dh.ColumnStatistics> | null;\n\n maybeGenerateStatistics(): void {\n const { column, model } = this.props;\n\n const numRows =\n model.rowCount -\n model.pendingRowCount -\n model.floatingBottomRowCount -\n model.floatingTopRowCount;\n this.setState({ numRows });\n if (!model.isColumnStatisticsAvailable || column.isProxy === true) {\n this.setState({ loading: false });\n } else if (numRows < ColumnStatistics.AUTO_GENERATE_LIMIT) {\n this.handleGenerateStatistics();\n }\n }\n\n handleGenerateStatistics(): void {\n this.setState({ loading: true });\n\n const { column, model } = this.props;\n\n this.cancelablePromise = PromiseUtils.makeCancelable(\n model.columnStatistics(column)\n );\n\n this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);\n }\n\n handleStatistics(stats: dh.ColumnStatistics): void {\n log.debug('Received statistics', stats);\n\n const { model, onStatistics } = this.props;\n const statistics: Statistic[] = [];\n\n stats.statisticsMap.forEach((value, operation) => {\n statistics.push({\n operation: ColumnStatistics.getStatsLabel(operation),\n value,\n type: stats.getType(operation),\n });\n });\n\n stats.uniqueValues.forEach((value, operation) => {\n statistics.push({\n operation,\n className: 'column-statistics-unique-value',\n value,\n type: 'long',\n });\n });\n\n this.setState({\n loading: false,\n statistics,\n numRows:\n model.rowCount -\n model.pendingRowCount -\n model.floatingBottomRowCount -\n model.floatingTopRowCount,\n });\n\n onStatistics();\n }\n\n handleError(error: Error): void {\n if (error != null && PromiseUtils.isCanceled(error)) {\n log.debug('Called handleError on a cancelled promise result');\n return;\n }\n\n log.error('Error generating statistics', error);\n this.setState({\n error,\n loading: false,\n statistics: null,\n });\n }\n\n render(): React.ReactElement {\n const { column, model } = this.props;\n const { error, loading, statistics, numRows } = this.state;\n const showGenerateStatistics =\n !loading &&\n error == null &&\n statistics == null &&\n model.isColumnStatisticsAvailable;\n const statisticElements = [];\n const columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n const description = column.description === null ? null : column.description;\n if (statistics != null) {\n for (let i = 0; i < statistics.length; i += 1) {\n const { operation, className, value, type } = statistics[i];\n const formattedValue = !type\n ? model.displayString(value, column.type, column.name)\n : model.displayString(value, type);\n const statisticElement = (\n <React.Fragment key={operation}>\n <div\n className={classNames('column-statistic-operation', className)}\n >\n {operation}\n </div>\n <div className=\"column-statistic-value\">{formattedValue}</div>\n </React.Fragment>\n );\n statisticElements.push(statisticElement);\n }\n }\n const rowCountLabel =\n isExpandableGridModel(model) && model.hasExpandableRows\n ? 'Expanded Rows'\n : 'Number of Rows';\n const formattedRowCount = model.displayString(numRows, 'long');\n const columnIndex = model.getColumnIndexByName(column.name);\n return (\n <div className=\"column-statistics\">\n <div className=\"column-statistics-title\">\n {column.displayName ?? column.name}\n <span className=\"column-statistics-type\">&nbsp;({columnType})</span>\n <CopyButton tooltip=\"Copy column name\" copy={column.name} isQuiet />\n </div>\n {description != null && (\n <div className=\"column-statistics-description\">{description}</div>\n )}\n {columnIndex != null && !model.isColumnSortable(columnIndex) && (\n <div className=\"column-statistics-status\">\n <FontAwesomeIcon icon={dhSortSlash} className=\"mr-1\" />\n Not sortable\n </div>\n )}\n {columnIndex != null && !model.isColumnMovable(columnIndex) && (\n <div className=\"column-statistics-status\">\n <FontAwesomeIcon\n icon={model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock}\n className=\"mr-1\"\n />\n {model.isColumnFrozen(columnIndex) ? 'Frozen' : 'Not movable'}\n </div>\n )}\n {columnIndex != null &&\n isEditableGridModel(model) &&\n model.isEditable &&\n !model.keyColumnSet.has(column.name) &&\n !model.valueColumnSet.has(column.name) && (\n <div className=\"column-statistics-status\">\n <FontAwesomeIcon icon={vsLock} className=\"mr-1\" />\n Not editable\n </div>\n )}\n <div className=\"column-statistics-grid\">\n {statistics == null && (\n <>\n <div className=\"column-statistic-operation\">{rowCountLabel}</div>\n <div className=\"column-statistic-value\">{formattedRowCount}</div>\n </>\n )}\n\n {statisticElements}\n </div>\n {showGenerateStatistics && (\n <Button\n kind=\"ghost\"\n className=\"px-0\"\n onClick={this.handleGenerateStatistics}\n >\n Generate Stats\n </Button>\n )}\n {error != null && <div className=\"error-message\">{`${error}`}</div>}\n {statistics && !loading && (\n <Button\n kind=\"ghost\"\n className=\"px-0\"\n onClick={this.handleGenerateStatistics}\n icon={dhRefresh}\n >\n Refresh\n </Button>\n )}\n {loading && (\n <div className=\"column-statistics-loading\">\n <LoadingSpinner className=\"loading-spinner-vertical-align\" />\n Calculating Stats...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ColumnStatistics;\n"],"mappings":"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","ignoreList":[]}
@@ -36,32 +36,28 @@ class CrossColumnSearch extends PureComponent {
36
36
  (_this$searchField$cur = this.searchField.current) === null || _this$searchField$cur === void 0 || _this$searchField$cur.focus();
37
37
  }
38
38
  handleSearchValueChange(event) {
39
- var {
40
- onChange,
41
- selectedColumns,
42
- invertSelection
43
- } = this.props;
39
+ var _this$props = this.props,
40
+ onChange = _this$props.onChange,
41
+ selectedColumns = _this$props.selectedColumns,
42
+ invertSelection = _this$props.invertSelection;
44
43
  onChange(event.target.value, selectedColumns, invertSelection);
45
44
  }
46
45
  sendColumnChange(selectedColumns, invertSelection) {
47
- var {
48
- onChange,
49
- value
50
- } = this.props;
46
+ var _this$props2 = this.props,
47
+ onChange = _this$props2.onChange,
48
+ value = _this$props2.value;
51
49
  onChange(value, selectedColumns, invertSelection);
52
50
  }
53
51
  setInvertSelection(invertSelection) {
54
- var {
55
- onChange,
56
- value
57
- } = this.props;
52
+ var _this$props3 = this.props,
53
+ onChange = _this$props3.onChange,
54
+ value = _this$props3.value;
58
55
  onChange(value, [], invertSelection);
59
56
  }
60
57
  toggleColumn(name) {
61
- var {
62
- selectedColumns,
63
- invertSelection
64
- } = this.props;
58
+ var _this$props4 = this.props,
59
+ selectedColumns = _this$props4.selectedColumns,
60
+ invertSelection = _this$props4.invertSelection;
65
61
  if (selectedColumns.includes(name)) {
66
62
  this.sendColumnChange(selectedColumns.filter(c => c !== name), invertSelection);
67
63
  } else {
@@ -77,21 +73,16 @@ class CrossColumnSearch extends PureComponent {
77
73
  this.setInvertSelection(false);
78
74
  }
79
75
  selectNumbers() {
80
- var {
81
- columns
82
- } = this.props;
76
+ var columns = this.props.columns;
83
77
  this.sendColumnChange(columns.filter(c => TableUtils.isNumberType(c.type)).map(column => column.name), false);
84
78
  }
85
79
  render() {
86
- var {
87
- value,
88
- selectedColumns,
89
- invertSelection,
90
- columns
91
- } = this.props;
92
- var {
93
- isConfigureColumnsShown
94
- } = this.state;
80
+ var _this$props5 = this.props,
81
+ value = _this$props5.value,
82
+ selectedColumns = _this$props5.selectedColumns,
83
+ invertSelection = _this$props5.invertSelection,
84
+ columns = _this$props5.columns;
85
+ var isConfigureColumnsShown = this.state.isConfigureColumnsShown;
95
86
  var hasAllColumnsSelected = selectedColumns.length === 0 && invertSelection === true || selectedColumns.length === columns.length && invertSelection === false;
96
87
  var hasNoColumnsSelected = selectedColumns.length === 0 && invertSelection === false || selectedColumns.length === columns.length && invertSelection === true;
97
88
 
@@ -1 +1 @@
1
- {"version":3,"file":"CrossColumnSearch.js","names":["React","PureComponent","FontAwesomeIcon","Checkbox","Popper","SearchInput","Tooltip","dhGearFilled","dhCheckSquare","dhSquareFilled","dhRemoveSquareFilled","dhWarningCircleFilled","vsCircleLargeFilled","TableUtils","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","CrossColumnSearch","createSearchFilter","dh","searchValue","selectedColumns","columns","invertSelection","filterColumns","filter","column","includes","name","map","length","filterValue","FilterValue","ofString","searchFilter","FilterCondition","search","undefined","constructor","props","_defineProperty","handleSearchValueChange","bind","toggleColumn","selectAll","clear","selectNumbers","searchField","createRef","state","isConfigureColumnsShown","focus","_this$searchField$cur","current","event","onChange","target","value","sendColumnChange","setInvertSelection","c","update","slice","push","isNumberType","type","render","hasAllColumnsSelected","hasNoColumnsSelected","icon","children","mask","transform","className","placeholder","ref","onClick","setState","isShown","onExited","closeOnBlur","interactive","isProxy","checked","substring","lastIndexOf"],"sources":["../src/CrossColumnSearch.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport {\n dhGearFilled,\n dhCheckSquare,\n dhSquareFilled,\n dhRemoveSquareFilled,\n dhWarningCircleFilled,\n vsCircleLargeFilled,\n} from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './CrossColumnSearch.scss';\nimport { type ColumnName } from './CommonTypes';\nimport { type DisplayColumn } from './IrisGridModel';\n\ninterface CrossColumnSearchProps {\n value: string;\n selectedColumns: readonly ColumnName[];\n invertSelection: boolean;\n onChange: (\n value: string,\n selectedColumns: readonly ColumnName[],\n invertSelection: boolean\n ) => void;\n columns: readonly DisplayColumn[];\n}\n\ninterface CrossColumnSearchState {\n isConfigureColumnsShown: boolean;\n}\nclass CrossColumnSearch extends PureComponent<\n CrossColumnSearchProps,\n CrossColumnSearchState\n> {\n static createSearchFilter(\n dh: typeof DhType,\n searchValue: string,\n selectedColumns: readonly ColumnName[],\n columns: readonly DhType.Column[],\n invertSelection: boolean\n ): DhType.FilterCondition | undefined {\n const filterColumns = invertSelection\n ? columns\n .filter(column => !selectedColumns.includes(column.name))\n .map(column => column.name)\n : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n const filterValue = dh.FilterValue.ofString(searchValue);\n const searchFilter =\n filterColumns.length === columns.length\n ? dh.FilterCondition.search(filterValue)\n : dh.FilterCondition.search(\n filterValue,\n columns\n .filter(column => filterColumns.includes(column.name))\n .map(column => column.filter())\n );\n return searchFilter;\n }\n return undefined;\n }\n\n constructor(props: CrossColumnSearchProps) {\n super(props);\n this.handleSearchValueChange = this.handleSearchValueChange.bind(this);\n this.toggleColumn = this.toggleColumn.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n this.selectNumbers = this.selectNumbers.bind(this);\n\n this.searchField = React.createRef();\n\n this.state = {\n isConfigureColumnsShown: false,\n };\n }\n\n searchField: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchField.current?.focus();\n }\n\n handleSearchValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { onChange, selectedColumns, invertSelection } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n\n sendColumnChange(\n selectedColumns: readonly ColumnName[],\n invertSelection: boolean\n ): void {\n const { onChange, value } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n\n setInvertSelection(invertSelection: boolean): void {\n const { onChange, value } = this.props;\n onChange(value, [], invertSelection);\n }\n\n toggleColumn(name: string): void {\n const { selectedColumns, invertSelection } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(\n selectedColumns.filter(c => c !== name),\n invertSelection\n );\n } else {\n const update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n\n selectAll(): void {\n this.setInvertSelection(true);\n }\n\n clear(): void {\n this.setInvertSelection(false);\n }\n\n selectNumbers(): void {\n const { columns } = this.props;\n this.sendColumnChange(\n columns\n .filter(c => TableUtils.isNumberType(c.type))\n .map(column => column.name),\n false\n );\n }\n\n render(): React.ReactElement {\n const { value, selectedColumns, invertSelection, columns } = this.props;\n const { isConfigureColumnsShown } = this.state;\n const hasAllColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === true) ||\n (selectedColumns.length === columns.length && invertSelection === false);\n const hasNoColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === false) ||\n (selectedColumns.length === columns.length && invertSelection === true);\n\n // set icon layers\n let icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhCheckSquare}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = (\n <>\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={dhGearFilled}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhWarningCircleFilled}\n className=\"text-danger\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else {\n // icon if some columns selected, but not all\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhRemoveSquareFilled}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n }\n\n return (\n <div className=\"cross-column-container\">\n <SearchInput\n className=\"cross-column-search\"\n placeholder=\"Search Data...\"\n data-testid=\"cross-column-search\"\n value={value}\n onChange={this.handleSearchValueChange}\n ref={this.searchField}\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2\"\n onClick={() => {\n if (isConfigureColumnsShown) {\n this.setState({ isConfigureColumnsShown: false });\n } else {\n this.setState({ isConfigureColumnsShown: true });\n }\n }}\n >\n <div className=\"fa-layers\">{icon}</div>\n <Tooltip>Configure Columns</Tooltip>\n <Popper\n isShown={isConfigureColumnsShown}\n className=\"cross-column-popper\"\n onExited={() => {\n this.setState({ isConfigureColumnsShown: false });\n }}\n closeOnBlur\n interactive\n >\n <div className=\"cross-column-popup\">\n Searched Columns\n <div className=\"cross-column-scroll\">\n {columns.map(column => {\n if (column.isProxy === true) return null;\n\n return (\n <React.Fragment key={column.name}>\n <Checkbox\n className=\"cross-column-checkbox\"\n checked={\n invertSelection\n ? !selectedColumns.includes(column.name)\n : selectedColumns.includes(column.name)\n }\n onChange={() => this.toggleColumn(column.name)}\n >\n {column.name}\n </Checkbox>\n\n {column.type.substring(column.type.lastIndexOf('.') + 1)}\n </React.Fragment>\n );\n })}\n </div>\n <div className=\"cross-column-button-bar\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.clear}\n >\n Clear\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectNumbers}\n >\n Numbers Only\n </button>\n </div>\n {hasNoColumnsSelected && (\n <p className=\"text-danger\">\n <FontAwesomeIcon icon={dhWarningCircleFilled} /> Select at\n least one column to search.\n </p>\n )}\n </div>\n </Popper>\n </button>\n </div>\n );\n }\n}\n\nexport default CrossColumnSearch;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"CrossColumnSearch.js","names":["React","PureComponent","FontAwesomeIcon","Checkbox","Popper","SearchInput","Tooltip","dhGearFilled","dhCheckSquare","dhSquareFilled","dhRemoveSquareFilled","dhWarningCircleFilled","vsCircleLargeFilled","TableUtils","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","CrossColumnSearch","createSearchFilter","dh","searchValue","selectedColumns","columns","invertSelection","filterColumns","filter","column","includes","name","map","length","filterValue","FilterValue","ofString","searchFilter","FilterCondition","search","undefined","constructor","props","_defineProperty","handleSearchValueChange","bind","toggleColumn","selectAll","clear","selectNumbers","searchField","createRef","state","isConfigureColumnsShown","focus","_this$searchField$cur","current","event","_this$props","onChange","target","value","sendColumnChange","_this$props2","setInvertSelection","_this$props3","_this$props4","c","update","slice","push","isNumberType","type","render","_this$props5","hasAllColumnsSelected","hasNoColumnsSelected","icon","children","mask","transform","className","placeholder","ref","onClick","setState","isShown","onExited","closeOnBlur","interactive","isProxy","checked","substring","lastIndexOf"],"sources":["../src/CrossColumnSearch.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport {\n dhGearFilled,\n dhCheckSquare,\n dhSquareFilled,\n dhRemoveSquareFilled,\n dhWarningCircleFilled,\n vsCircleLargeFilled,\n} from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './CrossColumnSearch.scss';\nimport { type ColumnName } from './CommonTypes';\nimport { type DisplayColumn } from './IrisGridModel';\n\ninterface CrossColumnSearchProps {\n value: string;\n selectedColumns: readonly ColumnName[];\n invertSelection: boolean;\n onChange: (\n value: string,\n selectedColumns: readonly ColumnName[],\n invertSelection: boolean\n ) => void;\n columns: readonly DisplayColumn[];\n}\n\ninterface CrossColumnSearchState {\n isConfigureColumnsShown: boolean;\n}\nclass CrossColumnSearch extends PureComponent<\n CrossColumnSearchProps,\n CrossColumnSearchState\n> {\n static createSearchFilter(\n dh: typeof DhType,\n searchValue: string,\n selectedColumns: readonly ColumnName[],\n columns: readonly DhType.Column[],\n invertSelection: boolean\n ): DhType.FilterCondition | undefined {\n const filterColumns = invertSelection\n ? columns\n .filter(column => !selectedColumns.includes(column.name))\n .map(column => column.name)\n : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n const filterValue = dh.FilterValue.ofString(searchValue);\n const searchFilter =\n filterColumns.length === columns.length\n ? dh.FilterCondition.search(filterValue)\n : dh.FilterCondition.search(\n filterValue,\n columns\n .filter(column => filterColumns.includes(column.name))\n .map(column => column.filter())\n );\n return searchFilter;\n }\n return undefined;\n }\n\n constructor(props: CrossColumnSearchProps) {\n super(props);\n this.handleSearchValueChange = this.handleSearchValueChange.bind(this);\n this.toggleColumn = this.toggleColumn.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n this.selectNumbers = this.selectNumbers.bind(this);\n\n this.searchField = React.createRef();\n\n this.state = {\n isConfigureColumnsShown: false,\n };\n }\n\n searchField: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchField.current?.focus();\n }\n\n handleSearchValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { onChange, selectedColumns, invertSelection } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n\n sendColumnChange(\n selectedColumns: readonly ColumnName[],\n invertSelection: boolean\n ): void {\n const { onChange, value } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n\n setInvertSelection(invertSelection: boolean): void {\n const { onChange, value } = this.props;\n onChange(value, [], invertSelection);\n }\n\n toggleColumn(name: string): void {\n const { selectedColumns, invertSelection } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(\n selectedColumns.filter(c => c !== name),\n invertSelection\n );\n } else {\n const update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n\n selectAll(): void {\n this.setInvertSelection(true);\n }\n\n clear(): void {\n this.setInvertSelection(false);\n }\n\n selectNumbers(): void {\n const { columns } = this.props;\n this.sendColumnChange(\n columns\n .filter(c => TableUtils.isNumberType(c.type))\n .map(column => column.name),\n false\n );\n }\n\n render(): React.ReactElement {\n const { value, selectedColumns, invertSelection, columns } = this.props;\n const { isConfigureColumnsShown } = this.state;\n const hasAllColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === true) ||\n (selectedColumns.length === columns.length && invertSelection === false);\n const hasNoColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === false) ||\n (selectedColumns.length === columns.length && invertSelection === true);\n\n // set icon layers\n let icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhCheckSquare}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = (\n <>\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={dhGearFilled}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhWarningCircleFilled}\n className=\"text-danger\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else {\n // icon if some columns selected, but not all\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhRemoveSquareFilled}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n }\n\n return (\n <div className=\"cross-column-container\">\n <SearchInput\n className=\"cross-column-search\"\n placeholder=\"Search Data...\"\n data-testid=\"cross-column-search\"\n value={value}\n onChange={this.handleSearchValueChange}\n ref={this.searchField}\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2\"\n onClick={() => {\n if (isConfigureColumnsShown) {\n this.setState({ isConfigureColumnsShown: false });\n } else {\n this.setState({ isConfigureColumnsShown: true });\n }\n }}\n >\n <div className=\"fa-layers\">{icon}</div>\n <Tooltip>Configure Columns</Tooltip>\n <Popper\n isShown={isConfigureColumnsShown}\n className=\"cross-column-popper\"\n onExited={() => {\n this.setState({ isConfigureColumnsShown: false });\n }}\n closeOnBlur\n interactive\n >\n <div className=\"cross-column-popup\">\n Searched Columns\n <div className=\"cross-column-scroll\">\n {columns.map(column => {\n if (column.isProxy === true) return null;\n\n return (\n <React.Fragment key={column.name}>\n <Checkbox\n className=\"cross-column-checkbox\"\n checked={\n invertSelection\n ? !selectedColumns.includes(column.name)\n : selectedColumns.includes(column.name)\n }\n onChange={() => this.toggleColumn(column.name)}\n >\n {column.name}\n </Checkbox>\n\n {column.type.substring(column.type.lastIndexOf('.') + 1)}\n </React.Fragment>\n );\n })}\n </div>\n <div className=\"cross-column-button-bar\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.clear}\n >\n Clear\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectNumbers}\n >\n Numbers Only\n </button>\n </div>\n {hasNoColumnsSelected && (\n <p className=\"text-danger\">\n <FontAwesomeIcon icon={dhWarningCircleFilled} /> Select at\n least one column to search.\n </p>\n )}\n </div>\n </Popper>\n </button>\n </div>\n );\n }\n}\n\nexport default CrossColumnSearch;\n"],"mappings":"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","ignoreList":[]}
@@ -19,9 +19,7 @@ class FilterInputField extends PureComponent {
19
19
  _defineProperty(this, "inputField", void 0);
20
20
  _defineProperty(this, "initialValue", void 0);
21
21
  _defineProperty(this, "debouncedSendUpdate", void 0);
22
- var {
23
- debounceMs
24
- } = props;
22
+ var debounceMs = props.debounceMs;
25
23
  this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);
26
24
  this.handleCancel = this.handleCancel.bind(this);
27
25
  this.handleChange = this.handleChange.bind(this);
@@ -31,9 +29,7 @@ class FilterInputField extends PureComponent {
31
29
  this.handleKeyDown = this.handleKeyDown.bind(this);
32
30
  this.handleContextMenu = this.handleContextMenu.bind(this);
33
31
  this.inputField = null;
34
- var {
35
- value
36
- } = props;
32
+ var value = props.value;
37
33
  this.initialValue = value;
38
34
  this.state = {
39
35
  isChanged: false,
@@ -45,9 +41,7 @@ class FilterInputField extends PureComponent {
45
41
  (_this$inputField = this.inputField) === null || _this$inputField === void 0 || _this$inputField.focus();
46
42
  }
47
43
  componentDidUpdate(prevProps) {
48
- var {
49
- debounceMs
50
- } = this.props;
44
+ var debounceMs = this.props.debounceMs;
51
45
  if (prevProps.debounceMs !== debounceMs) {
52
46
  this.debouncedSendUpdate.flush();
53
47
  this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);
@@ -70,9 +64,7 @@ class FilterInputField extends PureComponent {
70
64
  (_this$inputField2 = this.inputField) === null || _this$inputField2 === void 0 || _this$inputField2.focus();
71
65
  }
72
66
  handleChange(event) {
73
- var {
74
- value
75
- } = event.target;
67
+ var value = event.target.value;
76
68
  this.setState({
77
69
  value,
78
70
  isChanged: true
@@ -81,27 +73,19 @@ class FilterInputField extends PureComponent {
81
73
  }
82
74
  handleCancel() {
83
75
  this.debouncedSendUpdate.cancel();
84
- var {
85
- initialValue
86
- } = this;
87
- var {
88
- isChanged
89
- } = this.state;
76
+ var initialValue = this.initialValue;
77
+ var isChanged = this.state.isChanged;
90
78
  if (isChanged) {
91
79
  this.sendUpdate(initialValue);
92
80
  }
93
- var {
94
- onDone
95
- } = this.props;
81
+ var onDone = this.props.onDone;
96
82
  onDone();
97
83
  }
98
84
  handleCommit() {
99
85
  var setGridFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
100
86
  var defocusInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
101
87
  this.debouncedSendUpdate.flush();
102
- var {
103
- onDone
104
- } = this.props;
88
+ var onDone = this.props.onDone;
105
89
  onDone(setGridFocus, defocusInput);
106
90
  }
107
91
  handleFocus() {
@@ -109,9 +93,7 @@ class FilterInputField extends PureComponent {
109
93
  (_this$inputField3 = this.inputField) === null || _this$inputField3 === void 0 || _this$inputField3.select();
110
94
  }
111
95
  handleBlur(event) {
112
- var {
113
- relatedTarget
114
- } = event;
96
+ var relatedTarget = event.relatedTarget;
115
97
  // handleCommit results in a call that steals focus
116
98
  if (relatedTarget != null && relatedTarget.classList.contains('context-menu-container')) {
117
99
  // input blurred by calling context-menu
@@ -129,9 +111,7 @@ class FilterInputField extends PureComponent {
129
111
  handleTab() {
130
112
  var backward = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
131
113
  this.debouncedSendUpdate.flush();
132
- var {
133
- onTab
134
- } = this.props;
114
+ var onTab = this.props.onTab;
135
115
  onTab(backward);
136
116
  }
137
117
  handleKeyDown(event) {
@@ -156,28 +136,21 @@ class FilterInputField extends PureComponent {
156
136
  }
157
137
  }
158
138
  handleContextMenu(event) {
159
- var {
160
- onContextMenu
161
- } = this.props;
139
+ var onContextMenu = this.props.onContextMenu;
162
140
  onContextMenu(event);
163
141
  }
164
142
  sendUpdate(value) {
165
- var {
166
- onChange
167
- } = this.props;
143
+ var onChange = this.props.onChange;
168
144
  onChange(value);
169
145
  }
170
146
  render() {
171
- var {
172
- className,
173
- style,
174
- showAdvancedFilterButton,
175
- isAdvancedFilterSet,
176
- onAdvancedFiltersTriggered
177
- } = this.props;
178
- var {
179
- value
180
- } = this.state;
147
+ var _this$props = this.props,
148
+ className = _this$props.className,
149
+ style = _this$props.style,
150
+ showAdvancedFilterButton = _this$props.showAdvancedFilterButton,
151
+ isAdvancedFilterSet = _this$props.isAdvancedFilterSet,
152
+ onAdvancedFiltersTriggered = _this$props.onAdvancedFiltersTriggered;
153
+ var value = this.state.value;
181
154
  return /*#__PURE__*/_jsxs("div", {
182
155
  style: style,
183
156
  className: "iris-grid-input-autosized-wrapper",
@@ -1 +1 @@
1
- {"version":3,"file":"FilterInputField.js","names":["React","PureComponent","classNames","debounce","vsFilter","dhFilterFilled","FontAwesomeIcon","Button","jsx","_jsx","jsxs","_jsxs","FilterInputField","constructor","props","_defineProperty","debounceMs","debouncedSendUpdate","sendUpdate","bind","handleCancel","handleChange","handleCommit","handleFocus","handleBlur","handleKeyDown","handleContextMenu","inputField","value","initialValue","state","isChanged","componentDidMount","_this$inputField","focus","componentDidUpdate","prevProps","flush","componentWillUnmount","cancel","setValue","setState","_this$inputField2","event","target","onDone","setGridFocus","arguments","length","undefined","defocusInput","_this$inputField3","select","relatedTarget","classList","contains","handleTab","backward","onTab","key","stopPropagation","preventDefault","shiftKey","onContextMenu","onChange","render","className","style","showAdvancedFilterButton","isAdvancedFilterSet","onAdvancedFiltersTriggered","children","ref","type","onBlur","onFocus","onKeyDown","autoComplete","autoCorrect","autoCapitalize","spellCheck","kind","onClick","icon"],"sources":["../src/FilterInputField.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n PureComponent,\n type ReactElement,\n} from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport './FilterInputField.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { DebouncedFunc } from 'lodash';\nimport { Button } from '@deephaven/components';\n\ninterface FilterInputFieldProps {\n className: string;\n style: React.CSSProperties;\n value: string;\n showAdvancedFilterButton: boolean;\n isAdvancedFilterSet: boolean;\n onAdvancedFiltersTriggered: React.MouseEventHandler<HTMLButtonElement>;\n onChange: (value: string) => void;\n onDone: (setGridFocus?: boolean, defocusInput?: boolean) => void;\n onTab: (backward: boolean) => void;\n onContextMenu: React.MouseEventHandler<HTMLInputElement | HTMLButtonElement>;\n debounceMs: number;\n}\ninterface FilterInputFieldState {\n isChanged: boolean;\n value: string;\n}\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent<\n FilterInputFieldProps,\n FilterInputFieldState\n> {\n static defaultProps = {\n style: {},\n className: '',\n value: '',\n showAdvancedFilterButton: false,\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: (): void => undefined,\n onChange: (): void => undefined,\n onDone: (): void => undefined,\n onTab: (): void => undefined,\n onContextMenu: (): void => undefined,\n debounceMs: 150,\n };\n\n constructor(props: FilterInputFieldProps) {\n super(props);\n\n const { debounceMs } = props;\n\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleCommit = this.handleCommit.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n\n this.inputField = null;\n\n const { value } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value,\n };\n }\n\n componentDidMount(): void {\n this.inputField?.focus();\n }\n\n componentDidUpdate(prevProps: FilterInputFieldProps): void {\n const { debounceMs } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(\n this.sendUpdate.bind(this),\n debounceMs\n );\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSendUpdate.cancel();\n }\n\n inputField: HTMLInputElement | null;\n\n initialValue: string;\n\n debouncedSendUpdate: DebouncedFunc<(value: string) => void>;\n\n // clear filters needs to be able to reset the value externally\n // and due to the way this component handles its own debouncing\n // this was easier than moving state up.\n setValue(value: string): void {\n this.initialValue = value;\n this.setState({ value });\n }\n\n focus(): void {\n this.inputField?.focus();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value, isChanged: true });\n\n this.debouncedSendUpdate(value);\n }\n\n handleCancel(): void {\n this.debouncedSendUpdate.cancel();\n const { initialValue } = this;\n const { isChanged } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n\n const { onDone } = this.props;\n onDone();\n }\n\n handleCommit(setGridFocus = true, defocusInput = true): void {\n this.debouncedSendUpdate.flush();\n\n const { onDone } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n\n handleFocus(): void {\n this.inputField?.select();\n }\n\n handleBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { relatedTarget } = event;\n // handleCommit results in a call that steals focus\n if (\n relatedTarget != null &&\n relatedTarget.classList.contains('context-menu-container')\n ) {\n // input blurred by calling context-menu\n // don't set grid focus, but do null column focus\n this.handleCommit(false, true);\n } else if (\n relatedTarget != null &&\n relatedTarget.classList.contains('advanced-filter-button')\n ) {\n // blurred by clicking an advanced filter button\n // don't set grid focus, maintain focusedFilterBarColumn state\n this.handleCommit(false, false);\n } else {\n // clear both, blurred elsewhere\n this.handleCommit(true, true);\n }\n }\n\n handleTab(backward = false): void {\n this.debouncedSendUpdate.flush();\n\n const { onTab } = this.props;\n onTab(backward);\n }\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n switch (event.key) {\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.handleCancel();\n break;\n case 'Enter':\n event.stopPropagation();\n event.preventDefault();\n this.handleCommit();\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n this.handleTab(event.shiftKey);\n break;\n default:\n break;\n }\n }\n\n handleContextMenu(\n event: React.MouseEvent<HTMLInputElement | HTMLButtonElement>\n ): void {\n const { onContextMenu } = this.props;\n onContextMenu(event);\n }\n\n sendUpdate(value: string): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n render(): ReactElement {\n const {\n className,\n style,\n showAdvancedFilterButton,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered,\n } = this.props;\n const { value } = this.state;\n return (\n <div\n style={style}\n className=\"iris-grid-input-autosized-wrapper\"\n data-value={value} // used by css based autosizer\n >\n <input\n ref={inputField => {\n this.inputField = inputField;\n }}\n className={classNames('iris-grid-input-field', className)}\n type=\"text\"\n value={value}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onContextMenu={this.handleContextMenu}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n />\n {showAdvancedFilterButton && (\n <div className=\"advanced-filter-button-container\">\n <Button\n kind=\"ghost\"\n className={classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isAdvancedFilterSet,\n })}\n onClick={onAdvancedFiltersTriggered}\n onContextMenu={this.handleContextMenu}\n >\n <div className=\"fa-layers \">\n <FontAwesomeIcon\n icon={dhFilterFilled}\n className=\"filter-solid\"\n />\n <FontAwesomeIcon icon={vsFilter} className=\"filter-light\" />\n </div>\n </Button>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default FilterInputField;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FilterInputField.js","names":["React","PureComponent","classNames","debounce","vsFilter","dhFilterFilled","FontAwesomeIcon","Button","jsx","_jsx","jsxs","_jsxs","FilterInputField","constructor","props","_defineProperty","debounceMs","debouncedSendUpdate","sendUpdate","bind","handleCancel","handleChange","handleCommit","handleFocus","handleBlur","handleKeyDown","handleContextMenu","inputField","value","initialValue","state","isChanged","componentDidMount","_this$inputField","focus","componentDidUpdate","prevProps","flush","componentWillUnmount","cancel","setValue","setState","_this$inputField2","event","target","onDone","setGridFocus","arguments","length","undefined","defocusInput","_this$inputField3","select","relatedTarget","classList","contains","handleTab","backward","onTab","key","stopPropagation","preventDefault","shiftKey","onContextMenu","onChange","render","_this$props","className","style","showAdvancedFilterButton","isAdvancedFilterSet","onAdvancedFiltersTriggered","children","ref","type","onBlur","onFocus","onKeyDown","autoComplete","autoCorrect","autoCapitalize","spellCheck","kind","onClick","icon"],"sources":["../src/FilterInputField.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n PureComponent,\n type ReactElement,\n} from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport './FilterInputField.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { DebouncedFunc } from 'lodash';\nimport { Button } from '@deephaven/components';\n\ninterface FilterInputFieldProps {\n className: string;\n style: React.CSSProperties;\n value: string;\n showAdvancedFilterButton: boolean;\n isAdvancedFilterSet: boolean;\n onAdvancedFiltersTriggered: React.MouseEventHandler<HTMLButtonElement>;\n onChange: (value: string) => void;\n onDone: (setGridFocus?: boolean, defocusInput?: boolean) => void;\n onTab: (backward: boolean) => void;\n onContextMenu: React.MouseEventHandler<HTMLInputElement | HTMLButtonElement>;\n debounceMs: number;\n}\ninterface FilterInputFieldState {\n isChanged: boolean;\n value: string;\n}\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent<\n FilterInputFieldProps,\n FilterInputFieldState\n> {\n static defaultProps = {\n style: {},\n className: '',\n value: '',\n showAdvancedFilterButton: false,\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: (): void => undefined,\n onChange: (): void => undefined,\n onDone: (): void => undefined,\n onTab: (): void => undefined,\n onContextMenu: (): void => undefined,\n debounceMs: 150,\n };\n\n constructor(props: FilterInputFieldProps) {\n super(props);\n\n const { debounceMs } = props;\n\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleCommit = this.handleCommit.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n\n this.inputField = null;\n\n const { value } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value,\n };\n }\n\n componentDidMount(): void {\n this.inputField?.focus();\n }\n\n componentDidUpdate(prevProps: FilterInputFieldProps): void {\n const { debounceMs } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(\n this.sendUpdate.bind(this),\n debounceMs\n );\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSendUpdate.cancel();\n }\n\n inputField: HTMLInputElement | null;\n\n initialValue: string;\n\n debouncedSendUpdate: DebouncedFunc<(value: string) => void>;\n\n // clear filters needs to be able to reset the value externally\n // and due to the way this component handles its own debouncing\n // this was easier than moving state up.\n setValue(value: string): void {\n this.initialValue = value;\n this.setState({ value });\n }\n\n focus(): void {\n this.inputField?.focus();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value, isChanged: true });\n\n this.debouncedSendUpdate(value);\n }\n\n handleCancel(): void {\n this.debouncedSendUpdate.cancel();\n const { initialValue } = this;\n const { isChanged } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n\n const { onDone } = this.props;\n onDone();\n }\n\n handleCommit(setGridFocus = true, defocusInput = true): void {\n this.debouncedSendUpdate.flush();\n\n const { onDone } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n\n handleFocus(): void {\n this.inputField?.select();\n }\n\n handleBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { relatedTarget } = event;\n // handleCommit results in a call that steals focus\n if (\n relatedTarget != null &&\n relatedTarget.classList.contains('context-menu-container')\n ) {\n // input blurred by calling context-menu\n // don't set grid focus, but do null column focus\n this.handleCommit(false, true);\n } else if (\n relatedTarget != null &&\n relatedTarget.classList.contains('advanced-filter-button')\n ) {\n // blurred by clicking an advanced filter button\n // don't set grid focus, maintain focusedFilterBarColumn state\n this.handleCommit(false, false);\n } else {\n // clear both, blurred elsewhere\n this.handleCommit(true, true);\n }\n }\n\n handleTab(backward = false): void {\n this.debouncedSendUpdate.flush();\n\n const { onTab } = this.props;\n onTab(backward);\n }\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n switch (event.key) {\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.handleCancel();\n break;\n case 'Enter':\n event.stopPropagation();\n event.preventDefault();\n this.handleCommit();\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n this.handleTab(event.shiftKey);\n break;\n default:\n break;\n }\n }\n\n handleContextMenu(\n event: React.MouseEvent<HTMLInputElement | HTMLButtonElement>\n ): void {\n const { onContextMenu } = this.props;\n onContextMenu(event);\n }\n\n sendUpdate(value: string): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n render(): ReactElement {\n const {\n className,\n style,\n showAdvancedFilterButton,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered,\n } = this.props;\n const { value } = this.state;\n return (\n <div\n style={style}\n className=\"iris-grid-input-autosized-wrapper\"\n data-value={value} // used by css based autosizer\n >\n <input\n ref={inputField => {\n this.inputField = inputField;\n }}\n className={classNames('iris-grid-input-field', className)}\n type=\"text\"\n value={value}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onContextMenu={this.handleContextMenu}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n />\n {showAdvancedFilterButton && (\n <div className=\"advanced-filter-button-container\">\n <Button\n kind=\"ghost\"\n className={classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isAdvancedFilterSet,\n })}\n onClick={onAdvancedFiltersTriggered}\n onContextMenu={this.handleContextMenu}\n >\n <div className=\"fa-layers \">\n <FontAwesomeIcon\n icon={dhFilterFilled}\n className=\"filter-solid\"\n />\n <FontAwesomeIcon icon={vsFilter} className=\"filter-light\" />\n </div>\n </Button>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default FilterInputField;\n"],"mappings":"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","ignoreList":[]}
package/dist/GotoRow.js CHANGED
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
2
8
  import { vsClose, vsArrowUp, vsArrowDown } from '@deephaven/icons';
3
9
  import React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
@@ -12,40 +18,37 @@ import { isIrisGridTableModelTemplate } from "./IrisGridTableModelTemplate.js";
12
18
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
19
  var DEFAULT_FORMAT_STRING = '###,##0';
14
20
  var GotoRow = /*#__PURE__*/forwardRef((_ref, ref) => {
15
- var {
16
- gotoRow,
17
- gotoRowError,
18
- gotoValueError,
19
- onGotoRowSubmit,
20
- isShown,
21
- onEntering,
22
- onEntered: _onEntered,
23
- onExiting,
24
- onExited,
25
- model,
26
- onGotoRowNumberChanged,
27
- onClose,
28
- gotoValueSelectedColumnName,
29
- gotoValue,
30
- gotoValueFilter,
31
- onGotoValueSelectedColumnNameChanged,
32
- onGotoValueSelectedFilterChanged,
33
- onGotoValueChanged,
34
- onGotoValueSubmit
35
- } = _ref;
21
+ var gotoRow = _ref.gotoRow,
22
+ gotoRowError = _ref.gotoRowError,
23
+ gotoValueError = _ref.gotoValueError,
24
+ onGotoRowSubmit = _ref.onGotoRowSubmit,
25
+ isShown = _ref.isShown,
26
+ onEntering = _ref.onEntering,
27
+ _onEntered = _ref.onEntered,
28
+ onExiting = _ref.onExiting,
29
+ onExited = _ref.onExited,
30
+ model = _ref.model,
31
+ onGotoRowNumberChanged = _ref.onGotoRowNumberChanged,
32
+ onClose = _ref.onClose,
33
+ gotoValueSelectedColumnName = _ref.gotoValueSelectedColumnName,
34
+ gotoValue = _ref.gotoValue,
35
+ gotoValueFilter = _ref.gotoValueFilter,
36
+ onGotoValueSelectedColumnNameChanged = _ref.onGotoValueSelectedColumnNameChanged,
37
+ onGotoValueSelectedFilterChanged = _ref.onGotoValueSelectedFilterChanged,
38
+ onGotoValueChanged = _ref.onGotoValueChanged,
39
+ onGotoValueSubmit = _ref.onGotoValueSubmit;
36
40
  var gotoRowInputRef = useRef(null);
37
41
  var gotoValueInputRef = useRef(null);
38
- var [isGotoRowActive, setIsGotoRowActive] = useState(false);
42
+ var _useState = useState(false),
43
+ _useState2 = _slicedToArray(_useState, 2),
44
+ isGotoRowActive = _useState2[0],
45
+ setIsGotoRowActive = _useState2[1];
39
46
  var columns = [];
40
47
  if (isIrisGridTableModelTemplate(model)) {
41
- ({
42
- columns
43
- } = model.table);
48
+ columns = model.table.columns;
44
49
  }
45
- var {
46
- dh,
47
- rowCount
48
- } = model;
50
+ var dh = model.dh,
51
+ rowCount = model.rowCount;
49
52
  var gotoRowInputId = useMemo(() => "goto-row-input-".concat(nanoid()), []);
50
53
  var handleGotoValueNumberKeyDown = e => {
51
54
  if (e.key === 'Enter') {