@deephaven/iris-grid 0.22.3-beta.15 → 0.22.3-beta.21

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 (209) hide show
  1. package/dist/AdvancedFilterCreator.js +7 -65
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +0 -23
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +0 -52
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +2 -42
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnHeaderGroup.js +0 -11
  10. package/dist/ColumnHeaderGroup.js.map +1 -1
  11. package/dist/ColumnStatistics.js +1 -20
  12. package/dist/ColumnStatistics.js.map +1 -1
  13. package/dist/CrossColumnSearch.js +2 -23
  14. package/dist/CrossColumnSearch.js.map +1 -1
  15. package/dist/FilterInputField.js +2 -36
  16. package/dist/FilterInputField.js.map +1 -1
  17. package/dist/GotoRow.d.ts +1 -1
  18. package/dist/GotoRow.d.ts.map +1 -1
  19. package/dist/GotoRow.js +2 -7
  20. package/dist/GotoRow.js.map +1 -1
  21. package/dist/IrisGrid.d.ts +41 -35
  22. package/dist/IrisGrid.d.ts.map +1 -1
  23. package/dist/IrisGrid.js +77 -519
  24. package/dist/IrisGrid.js.map +1 -1
  25. package/dist/IrisGridBottomBar.d.ts +1 -1
  26. package/dist/IrisGridBottomBar.d.ts.map +1 -1
  27. package/dist/IrisGridBottomBar.js +2 -2
  28. package/dist/IrisGridBottomBar.js.map +1 -1
  29. package/dist/IrisGridCellOverflowModal.js +6 -21
  30. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  31. package/dist/IrisGridCopyHandler.js +3 -50
  32. package/dist/IrisGridCopyHandler.js.map +1 -1
  33. package/dist/IrisGridMetricCalculator.js +2 -12
  34. package/dist/IrisGridMetricCalculator.js.map +1 -1
  35. package/dist/IrisGridModel.js +32 -58
  36. package/dist/IrisGridModel.js.map +1 -1
  37. package/dist/IrisGridModelFactory.js +0 -7
  38. package/dist/IrisGridModelFactory.js.map +1 -1
  39. package/dist/IrisGridModelUpdater.js +0 -4
  40. package/dist/IrisGridModelUpdater.js.map +1 -1
  41. package/dist/IrisGridPartitionSelector.js +0 -23
  42. package/dist/IrisGridPartitionSelector.js.map +1 -1
  43. package/dist/IrisGridProxyModel.js +9 -153
  44. package/dist/IrisGridProxyModel.js.map +1 -1
  45. package/dist/IrisGridRenderer.js +41 -183
  46. package/dist/IrisGridRenderer.js.map +1 -1
  47. package/dist/IrisGridShortcuts.js.map +1 -1
  48. package/dist/IrisGridTableModel.d.ts +2 -2
  49. package/dist/IrisGridTableModel.d.ts.map +1 -1
  50. package/dist/IrisGridTableModel.js +10 -90
  51. package/dist/IrisGridTableModel.js.map +1 -1
  52. package/dist/IrisGridTableModelTemplate.d.ts +2 -2
  53. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  54. package/dist/IrisGridTableModelTemplate.js +70 -461
  55. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  56. package/dist/IrisGridTestUtils.js +0 -23
  57. package/dist/IrisGridTestUtils.js.map +1 -1
  58. package/dist/IrisGridTheme.js.map +1 -1
  59. package/dist/IrisGridTreeTableModel.js +3 -42
  60. package/dist/IrisGridTreeTableModel.js.map +1 -1
  61. package/dist/IrisGridUtils.d.ts +11 -5
  62. package/dist/IrisGridUtils.d.ts.map +1 -1
  63. package/dist/IrisGridUtils.js +98 -196
  64. package/dist/IrisGridUtils.js.map +1 -1
  65. package/dist/MissingKeyError.js +0 -7
  66. package/dist/MissingKeyError.js.map +1 -1
  67. package/dist/PartitionSelectorSearch.js +2 -48
  68. package/dist/PartitionSelectorSearch.js.map +1 -1
  69. package/dist/PendingDataBottomBar.d.ts +1 -1
  70. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  71. package/dist/PendingDataBottomBar.js +2 -7
  72. package/dist/PendingDataBottomBar.js.map +1 -1
  73. package/dist/TableViewportUpdater.d.ts +2 -2
  74. package/dist/TableViewportUpdater.d.ts.map +1 -1
  75. package/dist/TableViewportUpdater.js +3 -29
  76. package/dist/TableViewportUpdater.js.map +1 -1
  77. package/dist/ToastBottomBar.d.ts +1 -1
  78. package/dist/ToastBottomBar.d.ts.map +1 -1
  79. package/dist/ToastBottomBar.js +2 -4
  80. package/dist/ToastBottomBar.js.map +1 -1
  81. package/dist/TreeTableViewportUpdater.js +0 -21
  82. package/dist/TreeTableViewportUpdater.js.map +1 -1
  83. package/dist/format-context-menus/CustomFormatAction.js +4 -25
  84. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  85. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -7
  86. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  87. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -9
  88. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  89. package/dist/format-context-menus/FormatContextMenuUtils.js +3 -9
  90. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  91. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -8
  92. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  93. package/dist/format-context-menus/index.js.map +1 -1
  94. package/dist/index.d.ts +3 -3
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +3 -3
  97. package/dist/index.js.map +1 -1
  98. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -8
  99. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  100. package/dist/key-handlers/CopyKeyHandler.js +1 -10
  101. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  102. package/dist/key-handlers/ReverseKeyHandler.js +0 -11
  103. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  104. package/dist/key-handlers/index.js.map +1 -1
  105. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -32
  106. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  107. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +4 -34
  108. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  109. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -20
  110. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  111. package/dist/mousehandlers/IrisGridContextMenuHandler.js +15 -105
  112. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  113. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -9
  114. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  115. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -17
  116. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  117. package/dist/mousehandlers/IrisGridSortMouseHandler.js +2 -15
  118. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  119. package/dist/mousehandlers/PendingMouseHandler.js +0 -6
  120. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  121. package/dist/mousehandlers/index.js.map +1 -1
  122. package/dist/sidebar/AdvancedSettings.js.map +1 -1
  123. package/dist/sidebar/AdvancedSettingsMenu.d.ts +4 -4
  124. package/dist/sidebar/AdvancedSettingsMenu.d.ts.map +1 -1
  125. package/dist/sidebar/AdvancedSettingsMenu.js +2 -6
  126. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  127. package/dist/sidebar/AdvancedSettingsType.js +0 -2
  128. package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
  129. package/dist/sidebar/ChartBuilder.js +2 -46
  130. package/dist/sidebar/ChartBuilder.js.map +1 -1
  131. package/dist/sidebar/CustomColumnBuilder.js +6 -58
  132. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  133. package/dist/sidebar/CustomColumnInput.js +4 -15
  134. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  135. package/dist/sidebar/InputEditor.js +5 -36
  136. package/dist/sidebar/InputEditor.js.map +1 -1
  137. package/dist/sidebar/OptionType.js +0 -2
  138. package/dist/sidebar/OptionType.js.map +1 -1
  139. package/dist/sidebar/RollupRows.js +9 -65
  140. package/dist/sidebar/RollupRows.js.map +1 -1
  141. package/dist/sidebar/SelectDistinctBuilder.js +0 -13
  142. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  143. package/dist/sidebar/TableCsvExporter.js +0 -52
  144. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  145. package/dist/sidebar/TableSaver.d.ts +1 -1
  146. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  147. package/dist/sidebar/TableSaver.js +10 -123
  148. package/dist/sidebar/TableSaver.js.map +1 -1
  149. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +3 -2
  150. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  151. package/dist/sidebar/VisibilityOrderingBuilder.js +37 -116
  152. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  153. package/dist/sidebar/aggregations/AggregationEdit.d.ts +1 -1
  154. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  155. package/dist/sidebar/aggregations/AggregationEdit.js +2 -14
  156. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  157. package/dist/sidebar/aggregations/AggregationOperation.js +0 -2
  158. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
  159. package/dist/sidebar/aggregations/AggregationUtils.js +2 -5
  160. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  161. package/dist/sidebar/aggregations/Aggregations.d.ts +1 -1
  162. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  163. package/dist/sidebar/aggregations/Aggregations.js +2 -12
  164. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  165. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +1 -1
  166. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  167. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +2 -16
  168. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  169. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -1
  170. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  171. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -35
  172. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  173. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +1 -1
  174. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  175. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -12
  176. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  177. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -3
  178. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  179. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +1 -1
  180. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  181. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +16 -26
  182. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  183. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +9 -172
  184. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  185. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +1 -1
  186. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  187. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +2 -16
  188. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  189. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts +1 -1
  190. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  191. package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -12
  192. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  193. package/dist/sidebar/icons/BarIcon.js +0 -3
  194. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  195. package/dist/sidebar/icons/FormatColumnWhereIcon.js +2 -5
  196. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  197. package/dist/sidebar/icons/FormatRowWhereIcon.js +2 -5
  198. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  199. package/dist/sidebar/icons/HistogramIcon.js +0 -3
  200. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  201. package/dist/sidebar/icons/LineIcon.js +0 -3
  202. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  203. package/dist/sidebar/icons/PieIcon.js +0 -3
  204. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  205. package/dist/sidebar/icons/ScatterIcon.js +0 -3
  206. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  207. package/dist/sidebar/icons/index.js.map +1 -1
  208. package/dist/sidebar/index.js.map +1 -1
  209. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedFilterCreatorFilterItem.js","names":["React","PureComponent","Button","getLabelForBooleanFilter","getLabelForDateFilter","getLabelForNumberFilter","getLabelForTextFilter","vsTrash","TableUtils","Log","classNames","memoizeOne","log","module","AdvancedFilterCreatorFilterItem","getLabelForFilter","columnType","filterType","isNumberType","isCharType","isTextType","isDateType","isBooleanType","Error","e","warn","constructor","props","column","operation","value","timeZone","makeAdvancedValueFilter","handleDelete","bind","handleTypeChange","handleValueChange","typeDropdown","filterTypes","selectedType","state","componentDidMount","focus","componentDidUpdate","prevProps","undefined","setState","event","target","debug2","onChange","length","debug","onDelete","render","formatter","showValueInput","type","typeOptionElements","isValid","getCachedIsValid","i","label","element","push","error"],"sources":["../src/AdvancedFilterCreatorFilterItem.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { Button } from '@deephaven/components';\nimport {\n getLabelForBooleanFilter,\n getLabelForDateFilter,\n getLabelForNumberFilter,\n getLabelForTextFilter,\n TypeValue as FilterTypeValue,\n} from '@deephaven/filters';\nimport { vsTrash } from '@deephaven/icons';\nimport { Column } from '@deephaven/jsapi-shim';\nimport {\n AdvancedFilterItemType,\n Formatter,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport classNames from 'classnames';\nimport memoizeOne from 'memoize-one';\nimport './AdvancedFilterCreatorFilterItem.scss';\n\nconst log = Log.module('AdvancedFilterCreatorFilterItem');\n\nexport interface AdvancedFilterCreatorFilterItemProps {\n column: Column;\n filterTypes: FilterTypeValue[];\n onChange(type: FilterTypeValue, value: string): void;\n onDelete(): void;\n selectedType?: FilterTypeValue;\n value?: string;\n formatter: Formatter;\n}\n\nexport type AdvancedFilterCreatorFilterItemState = AdvancedFilterItemType;\n\nexport class AdvancedFilterCreatorFilterItem extends PureComponent<\n AdvancedFilterCreatorFilterItemProps,\n AdvancedFilterCreatorFilterItemState\n> {\n static getLabelForFilter(\n columnType: string,\n filterType: FilterTypeValue\n ): string {\n try {\n if (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isCharType(columnType)\n ) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getLabelForBooleanFilter(filterType);\n }\n throw new Error(`Unrecognized column type: ${columnType}`);\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n\n constructor(props: AdvancedFilterCreatorFilterItemProps) {\n super(props);\n\n this.handleDelete = this.handleDelete.bind(this);\n this.handleTypeChange = this.handleTypeChange.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.typeDropdown = null;\n\n const { value = '', filterTypes, selectedType = filterTypes[0] } = props;\n\n this.state = {\n selectedType,\n value,\n };\n }\n\n componentDidMount(): void {\n this.typeDropdown?.focus();\n }\n\n componentDidUpdate(prevProps: AdvancedFilterCreatorFilterItemProps): void {\n const { value, selectedType } = this.props;\n if (selectedType !== undefined && prevProps.selectedType !== selectedType) {\n this.setState({ selectedType });\n }\n if (value !== undefined && prevProps.value !== value) {\n this.setState({ value });\n }\n }\n\n typeDropdown: HTMLSelectElement | null;\n\n handleTypeChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const selectedType = event.target.value as FilterTypeValue;\n log.debug2('typeChange', selectedType);\n this.setState({ selectedType });\n\n const { onChange } = this.props;\n const { value } = this.state;\n if (value != null && value.length > 0) {\n // Don't send an update unless there's already a value entered\n onChange(selectedType, value);\n }\n }\n\n handleValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('valueChange');\n const { value } = event.target;\n this.setState({ value });\n\n const { onChange } = this.props;\n const { selectedType } = this.state;\n if (selectedType != null) {\n // Don't send an update unless they've already selected a type\n onChange(selectedType, value);\n }\n }\n\n handleDelete(): void {\n log.debug('delete');\n\n const { onDelete } = this.props;\n onDelete();\n }\n\n getCachedIsValid = memoizeOne(\n (\n column: Column,\n operation: FilterTypeValue,\n value: string,\n timeZone: string\n ): boolean => {\n try {\n // We don't want to show an error for an empty value\n return (\n !value ||\n TableUtils.makeAdvancedValueFilter(\n column,\n operation,\n value,\n timeZone\n ) != null\n );\n } catch (e) {\n return false;\n }\n }\n );\n\n render(): JSX.Element {\n const { column, filterTypes, formatter } = this.props;\n const { selectedType, value } = this.state;\n const showValueInput = !TableUtils.isBooleanType(column.type);\n const typeOptionElements = [];\n const isValid = this.getCachedIsValid(\n column,\n selectedType,\n value,\n formatter.timeZone\n );\n for (let i = 0; i < filterTypes.length; i += 1) {\n const type = filterTypes[i];\n const label = AdvancedFilterCreatorFilterItem.getLabelForFilter(\n column.type,\n type\n );\n const element = (\n <option key={type} value={type}>\n {label}\n </option>\n );\n typeOptionElements.push(element);\n }\n\n return (\n <div className=\"advanced-filter-creator-filter-item\">\n <div className=\"form-row\">\n <div className=\"form-group col\">\n <select\n className=\"form-control custom-select\"\n value={selectedType}\n onChange={this.handleTypeChange}\n ref={typeDropdown => {\n this.typeDropdown = typeDropdown;\n }}\n >\n {typeOptionElements}\n </select>\n </div>\n {showValueInput && (\n <div className=\"form-group col\">\n <div className=\"input-group\">\n <input\n type=\"text\"\n className={classNames('form-control', { error: !isValid })}\n placeholder=\"Enter value\"\n value={value}\n onChange={this.handleValueChange}\n />\n </div>\n </div>\n )}\n <div className=\"form-group col-1 px-0\">\n <Button\n kind=\"ghost\"\n className=\"w-100 h-100 p-0 m-0\"\n onClick={this.handleDelete}\n icon={vsTrash}\n tooltip=\"Remove Filter\"\n />\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorFilterItem;\n"],"mappings":"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"}
1
+ {"version":3,"file":"AdvancedFilterCreatorFilterItem.js","names":["React","PureComponent","Button","getLabelForBooleanFilter","getLabelForDateFilter","getLabelForNumberFilter","getLabelForTextFilter","vsTrash","TableUtils","Log","classNames","memoizeOne","log","module","AdvancedFilterCreatorFilterItem","getLabelForFilter","columnType","filterType","isNumberType","isCharType","isTextType","isDateType","isBooleanType","Error","e","warn","constructor","props","column","operation","value","timeZone","makeAdvancedValueFilter","handleDelete","bind","handleTypeChange","handleValueChange","typeDropdown","filterTypes","selectedType","state","componentDidMount","focus","componentDidUpdate","prevProps","undefined","setState","event","target","debug2","onChange","length","debug","onDelete","render","formatter","showValueInput","type","typeOptionElements","isValid","getCachedIsValid","i","label","element","push","error"],"sources":["../src/AdvancedFilterCreatorFilterItem.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { Button } from '@deephaven/components';\nimport {\n getLabelForBooleanFilter,\n getLabelForDateFilter,\n getLabelForNumberFilter,\n getLabelForTextFilter,\n TypeValue as FilterTypeValue,\n} from '@deephaven/filters';\nimport { vsTrash } from '@deephaven/icons';\nimport { Column } from '@deephaven/jsapi-shim';\nimport {\n AdvancedFilterItemType,\n Formatter,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport classNames from 'classnames';\nimport memoizeOne from 'memoize-one';\nimport './AdvancedFilterCreatorFilterItem.scss';\n\nconst log = Log.module('AdvancedFilterCreatorFilterItem');\n\nexport interface AdvancedFilterCreatorFilterItemProps {\n column: Column;\n filterTypes: FilterTypeValue[];\n onChange(type: FilterTypeValue, value: string): void;\n onDelete(): void;\n selectedType?: FilterTypeValue;\n value?: string;\n formatter: Formatter;\n}\n\nexport type AdvancedFilterCreatorFilterItemState = AdvancedFilterItemType;\n\nexport class AdvancedFilterCreatorFilterItem extends PureComponent<\n AdvancedFilterCreatorFilterItemProps,\n AdvancedFilterCreatorFilterItemState\n> {\n static getLabelForFilter(\n columnType: string,\n filterType: FilterTypeValue\n ): string {\n try {\n if (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isCharType(columnType)\n ) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getLabelForBooleanFilter(filterType);\n }\n throw new Error(`Unrecognized column type: ${columnType}`);\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n\n constructor(props: AdvancedFilterCreatorFilterItemProps) {\n super(props);\n\n this.handleDelete = this.handleDelete.bind(this);\n this.handleTypeChange = this.handleTypeChange.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.typeDropdown = null;\n\n const { value = '', filterTypes, selectedType = filterTypes[0] } = props;\n\n this.state = {\n selectedType,\n value,\n };\n }\n\n componentDidMount(): void {\n this.typeDropdown?.focus();\n }\n\n componentDidUpdate(prevProps: AdvancedFilterCreatorFilterItemProps): void {\n const { value, selectedType } = this.props;\n if (selectedType !== undefined && prevProps.selectedType !== selectedType) {\n this.setState({ selectedType });\n }\n if (value !== undefined && prevProps.value !== value) {\n this.setState({ value });\n }\n }\n\n typeDropdown: HTMLSelectElement | null;\n\n handleTypeChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const selectedType = event.target.value as FilterTypeValue;\n log.debug2('typeChange', selectedType);\n this.setState({ selectedType });\n\n const { onChange } = this.props;\n const { value } = this.state;\n if (value != null && value.length > 0) {\n // Don't send an update unless there's already a value entered\n onChange(selectedType, value);\n }\n }\n\n handleValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('valueChange');\n const { value } = event.target;\n this.setState({ value });\n\n const { onChange } = this.props;\n const { selectedType } = this.state;\n if (selectedType != null) {\n // Don't send an update unless they've already selected a type\n onChange(selectedType, value);\n }\n }\n\n handleDelete(): void {\n log.debug('delete');\n\n const { onDelete } = this.props;\n onDelete();\n }\n\n getCachedIsValid = memoizeOne(\n (\n column: Column,\n operation: FilterTypeValue,\n value: string,\n timeZone: string\n ): boolean => {\n try {\n // We don't want to show an error for an empty value\n return (\n !value ||\n TableUtils.makeAdvancedValueFilter(\n column,\n operation,\n value,\n timeZone\n ) != null\n );\n } catch (e) {\n return false;\n }\n }\n );\n\n render(): JSX.Element {\n const { column, filterTypes, formatter } = this.props;\n const { selectedType, value } = this.state;\n const showValueInput = !TableUtils.isBooleanType(column.type);\n const typeOptionElements = [];\n const isValid = this.getCachedIsValid(\n column,\n selectedType,\n value,\n formatter.timeZone\n );\n for (let i = 0; i < filterTypes.length; i += 1) {\n const type = filterTypes[i];\n const label = AdvancedFilterCreatorFilterItem.getLabelForFilter(\n column.type,\n type\n );\n const element = (\n <option key={type} value={type}>\n {label}\n </option>\n );\n typeOptionElements.push(element);\n }\n\n return (\n <div className=\"advanced-filter-creator-filter-item\">\n <div className=\"form-row\">\n <div className=\"form-group col\">\n <select\n className=\"form-control custom-select\"\n value={selectedType}\n onChange={this.handleTypeChange}\n ref={typeDropdown => {\n this.typeDropdown = typeDropdown;\n }}\n >\n {typeOptionElements}\n </select>\n </div>\n {showValueInput && (\n <div className=\"form-group col\">\n <div className=\"input-group\">\n <input\n type=\"text\"\n className={classNames('form-control', { error: !isValid })}\n placeholder=\"Enter value\"\n value={value}\n onChange={this.handleValueChange}\n />\n </div>\n </div>\n )}\n <div className=\"form-group col-1 px-0\">\n <Button\n kind=\"ghost\"\n className=\"w-100 h-100 p-0 m-0\"\n onClick={this.handleDelete}\n icon={vsTrash}\n tooltip=\"Remove Filter\"\n />\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorFilterItem;\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  /* eslint react/no-did-update-set-state: "off" */
4
3
  import React, { PureComponent } from 'react';
5
4
  import { CSSTransition } from 'react-transition-group';
@@ -8,15 +7,11 @@ import { TableUtils } from '@deephaven/jsapi-utils';
8
7
  import { Button } from '@deephaven/components';
9
8
  import AdvancedFilterCreatorSelectValueList from "./AdvancedFilterCreatorSelectValueList.js";
10
9
  import "./AdvancedFilterCreatorSelectValue.css";
11
-
12
10
  class AdvancedFilterCreatorSelectValue extends PureComponent {
13
11
  constructor(props) {
14
12
  super(props);
15
-
16
13
  _defineProperty(this, "searchTablePromise", void 0);
17
-
18
14
  _defineProperty(this, "updateFilterTimer", void 0);
19
-
20
15
  this.handleSelectAllClick = this.handleSelectAllClick.bind(this);
21
16
  this.handleClearAllClick = this.handleClearAllClick.bind(this);
22
17
  this.handleListChange = this.handleListChange.bind(this);
@@ -33,97 +28,77 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
33
28
  searchText: ''
34
29
  };
35
30
  }
36
-
37
31
  componentDidMount() {
38
32
  this.initSearchTable();
39
33
  }
40
-
41
34
  componentDidUpdate(prevProps, prevState) {
42
35
  var {
43
36
  invertSelection,
44
37
  selectedValues,
45
38
  table
46
39
  } = this.props;
47
-
48
40
  if (prevProps.table !== table) {
49
41
  this.initSearchTable();
50
42
  }
51
-
52
43
  if (prevProps.invertSelection !== invertSelection) {
53
44
  this.setState({
54
45
  invertSelection
55
46
  });
56
47
  }
57
-
58
48
  if (prevProps.selectedValues !== selectedValues) {
59
49
  this.setState({
60
50
  selectedValues
61
51
  });
62
52
  }
63
-
64
53
  var {
65
54
  table: searchTable,
66
55
  searchText
67
56
  } = this.state;
68
-
69
57
  if (searchTable !== prevState.table) {
70
58
  if (prevState.table != null) {
71
59
  prevState.table.close();
72
60
  }
73
-
74
61
  if (searchTable != null) {
75
62
  this.startUpdateFilterTimer();
76
63
  }
77
64
  }
78
-
79
65
  if (searchText !== prevState.searchText) {
80
66
  this.startUpdateFilterTimer();
81
67
  }
82
68
  }
83
-
84
69
  componentWillUnmount() {
85
70
  var {
86
71
  table
87
72
  } = this.state;
88
-
89
73
  if (table != null) {
90
74
  table.close();
91
75
  }
92
-
93
76
  this.searchTablePromise = undefined;
94
77
  this.stopUpdateFilterTimer();
95
78
  }
96
-
97
79
  getColumnName() {
98
80
  var {
99
81
  table
100
82
  } = this.props;
101
-
102
83
  if (table != null) {
103
84
  return table.columns[0].name;
104
85
  }
105
-
106
86
  return '';
107
87
  }
108
-
109
88
  getDisplayedValuesCount() {
110
89
  var {
111
90
  invertSelection,
112
91
  selectedValues,
113
92
  table
114
93
  } = this.state;
115
-
116
94
  if (table == null) {
117
95
  return null;
118
96
  }
119
-
120
97
  if (invertSelection) {
121
98
  return table.totalSize - selectedValues.length;
122
99
  }
123
-
124
100
  return selectedValues.length;
125
101
  }
126
-
127
102
  getDisplayedValueText() {
128
103
  var count = this.getDisplayedValuesCount();
129
104
  var {
@@ -132,31 +107,24 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
132
107
  var {
133
108
  formatter
134
109
  } = this.props;
135
-
136
110
  if (count != null && table != null) {
137
111
  var formattedCount = formatter.getFormattedString(count, 'long');
138
112
  var formattedTableSize = formatter.getFormattedString(table.totalSize, 'long');
139
113
  var prefix = '';
140
-
141
114
  if (count < 1000000) {
142
115
  prefix = 'Displaying ';
143
116
  }
144
-
145
117
  return "".concat(prefix).concat(formattedCount, " of ").concat(formattedTableSize);
146
118
  }
147
-
148
119
  return null;
149
120
  }
150
-
151
121
  initSearchTable() {
152
122
  var {
153
123
  table
154
124
  } = this.props;
155
-
156
125
  if (table == null) {
157
126
  return;
158
127
  }
159
-
160
128
  var searchTablePromise = table.copy();
161
129
  this.searchTablePromise = searchTablePromise;
162
130
  this.searchTablePromise.then(searchTable => {
@@ -170,7 +138,6 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
170
138
  }
171
139
  });
172
140
  }
173
-
174
141
  handleListChange(selectedValues, invertSelection) {
175
142
  this.setState({
176
143
  selectedValues,
@@ -181,27 +148,22 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
181
148
  } = this.props;
182
149
  onChange(selectedValues, invertSelection);
183
150
  }
184
-
185
151
  handleSearchChange(event) {
186
152
  var searchText = event.target.value;
187
153
  this.setState({
188
154
  searchText
189
155
  });
190
156
  }
191
-
192
157
  handleSelectAllClick() {
193
158
  this.resetSelection(true);
194
159
  }
195
-
196
160
  handleClearAllClick() {
197
161
  this.resetSelection(false);
198
162
  }
199
-
200
163
  handleUpdateFilterTimeout() {
201
164
  this.updateFilterTimer = undefined;
202
165
  this.updateTableFilter();
203
166
  }
204
-
205
167
  resetSelection(invertSelection) {
206
168
  var selectedValues = [];
207
169
  this.setState({
@@ -213,19 +175,16 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
213
175
  } = this.props;
214
176
  onChange(selectedValues, invertSelection);
215
177
  }
216
-
217
178
  startUpdateFilterTimer() {
218
179
  this.stopUpdateFilterTimer();
219
180
  this.updateFilterTimer = setTimeout(this.handleUpdateFilterTimeout, AdvancedFilterCreatorSelectValue.searchDebounceTime);
220
181
  }
221
-
222
182
  stopUpdateFilterTimer() {
223
183
  if (this.updateFilterTimer != null) {
224
184
  clearTimeout(this.updateFilterTimer);
225
185
  this.updateFilterTimer = undefined;
226
186
  }
227
187
  }
228
-
229
188
  updateTableFilter() {
230
189
  var {
231
190
  table,
@@ -236,16 +195,12 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
236
195
  } = this.props;
237
196
  var column = table === null || table === void 0 ? void 0 : table.columns[0];
238
197
  var filters = [];
239
-
240
198
  if (column == null) {
241
199
  return;
242
200
  }
243
-
244
201
  var error;
245
-
246
202
  if (searchText.length > 0) {
247
203
  var filter = null;
248
-
249
204
  if (TableUtils.isCharType(column.type)) {
250
205
  // Just exact match for char
251
206
  filter = TableUtils.makeQuickFilter(column, searchText);
@@ -257,20 +212,17 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
257
212
  // we may want to be smarter with some other types (like dates)
258
213
  filter = TableUtils.makeQuickFilter(column, ">=".concat(searchText), timeZone);
259
214
  }
260
-
261
215
  if (filter != null) {
262
216
  filters.push(filter);
263
217
  } else {
264
218
  error = 'Invalid search text';
265
219
  }
266
220
  }
267
-
268
221
  this.setState({
269
222
  filters,
270
223
  error
271
224
  });
272
225
  }
273
-
274
226
  render() {
275
227
  var {
276
228
  error,
@@ -327,17 +279,13 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
327
279
  className: "row-count-info"
328
280
  }, displayedValuesText))));
329
281
  }
330
-
331
282
  }
332
-
333
283
  _defineProperty(AdvancedFilterCreatorSelectValue, "searchDebounceTime", 250);
334
-
335
284
  _defineProperty(AdvancedFilterCreatorSelectValue, "defaultProps", {
336
285
  invertSelection: true,
337
286
  selectedValues: [],
338
287
  onChange: () => undefined,
339
288
  showSearch: true
340
289
  });
341
-
342
290
  export default AdvancedFilterCreatorSelectValue;
343
291
  //# sourceMappingURL=AdvancedFilterCreatorSelectValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedFilterCreatorSelectValue.js","names":["React","PureComponent","CSSTransition","classNames","TableUtils","Button","AdvancedFilterCreatorSelectValueList","AdvancedFilterCreatorSelectValue","constructor","props","handleSelectAllClick","bind","handleClearAllClick","handleListChange","handleSearchChange","handleUpdateFilterTimeout","invertSelection","selectedValues","state","filters","searchText","componentDidMount","initSearchTable","componentDidUpdate","prevProps","prevState","table","setState","searchTable","close","startUpdateFilterTimer","componentWillUnmount","searchTablePromise","undefined","stopUpdateFilterTimer","getColumnName","columns","name","getDisplayedValuesCount","totalSize","length","getDisplayedValueText","count","formatter","formattedCount","getFormattedString","formattedTableSize","prefix","copy","then","onChange","event","target","value","resetSelection","updateFilterTimer","updateTableFilter","setTimeout","searchDebounceTime","clearTimeout","timeZone","column","error","filter","isCharType","type","makeQuickFilter","isTextType","push","render","showSearch","columnName","displayedValuesText","placeholderText"],"sources":["../src/AdvancedFilterCreatorSelectValue.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport classNames from 'classnames';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport { FilterCondition, Table } from '@deephaven/jsapi-shim';\nimport { Button } from '@deephaven/components';\nimport AdvancedFilterCreatorSelectValueList from './AdvancedFilterCreatorSelectValueList';\nimport './AdvancedFilterCreatorSelectValue.scss';\nimport { ColumnName } from './CommonTypes';\n\ninterface AdvancedFilterCreatorSelectValueProps<T> {\n invertSelection: boolean;\n selectedValues: T[];\n table?: Table;\n formatter: Formatter;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n showSearch: boolean;\n timeZone: string;\n}\n\ninterface AdvancedFilterCreatorSelectValueState<T> {\n error?: string;\n filters: FilterCondition[];\n invertSelection: boolean;\n selectedValues: T[];\n searchText: string;\n table?: Table;\n}\n\nclass AdvancedFilterCreatorSelectValue<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueProps<T>,\n AdvancedFilterCreatorSelectValueState<T>\n> {\n static searchDebounceTime = 250;\n\n static defaultProps = {\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n showSearch: true,\n };\n\n constructor(props: AdvancedFilterCreatorSelectValueProps<T>) {\n super(props);\n\n this.handleSelectAllClick = this.handleSelectAllClick.bind(this);\n this.handleClearAllClick = this.handleClearAllClick.bind(this);\n this.handleListChange = this.handleListChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUpdateFilterTimeout = this.handleUpdateFilterTimeout.bind(this);\n\n const { invertSelection, selectedValues } = props;\n\n this.state = {\n filters: [],\n invertSelection,\n selectedValues,\n searchText: '',\n };\n }\n\n componentDidMount(): void {\n this.initSearchTable();\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueProps<T>,\n prevState: AdvancedFilterCreatorSelectValueState<T>\n ): void {\n const { invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n this.initSearchTable();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ invertSelection });\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues });\n }\n\n const { table: searchTable, searchText } = this.state;\n\n if (searchTable !== prevState.table) {\n if (prevState.table != null) {\n prevState.table.close();\n }\n if (searchTable != null) {\n this.startUpdateFilterTimer();\n }\n }\n\n if (searchText !== prevState.searchText) {\n this.startUpdateFilterTimer();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.state;\n if (table != null) {\n table.close();\n }\n this.searchTablePromise = undefined;\n\n this.stopUpdateFilterTimer();\n }\n\n searchTablePromise?: Promise<Table>;\n\n updateFilterTimer?: ReturnType<typeof setTimeout>;\n\n getColumnName(): ColumnName {\n const { table } = this.props;\n if (table != null) {\n return table.columns[0].name;\n }\n return '';\n }\n\n getDisplayedValuesCount(): number | null {\n const { invertSelection, selectedValues, table } = this.state;\n if (table == null) {\n return null;\n }\n\n if (invertSelection) {\n return table.totalSize - selectedValues.length;\n }\n return selectedValues.length;\n }\n\n getDisplayedValueText(): string | null {\n const count = this.getDisplayedValuesCount();\n const { table } = this.state;\n\n const { formatter } = this.props;\n\n if (count != null && table != null) {\n const formattedCount = formatter.getFormattedString(count, 'long');\n const formattedTableSize = formatter.getFormattedString(\n table.totalSize,\n 'long'\n );\n let prefix = '';\n if (count < 1000000) {\n prefix = 'Displaying ';\n }\n return `${prefix}${formattedCount} of ${formattedTableSize}`;\n }\n return null;\n }\n\n initSearchTable(): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n const searchTablePromise = table.copy();\n this.searchTablePromise = searchTablePromise;\n this.searchTablePromise.then(searchTable => {\n if (this.searchTablePromise === searchTablePromise) {\n this.setState({ table: searchTable });\n this.searchTablePromise = undefined;\n } else {\n searchTable.close();\n }\n });\n }\n\n handleListChange(selectedValues: T[], invertSelection: boolean): void {\n this.setState({ selectedValues, invertSelection });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleSearchChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const searchText = event.target.value;\n this.setState({ searchText });\n }\n\n handleSelectAllClick(): void {\n this.resetSelection(true);\n }\n\n handleClearAllClick(): void {\n this.resetSelection(false);\n }\n\n handleUpdateFilterTimeout(): void {\n this.updateFilterTimer = undefined;\n this.updateTableFilter();\n }\n\n resetSelection(invertSelection: boolean): void {\n const selectedValues: T[] = [];\n\n this.setState({ invertSelection, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n startUpdateFilterTimer(): void {\n this.stopUpdateFilterTimer();\n\n this.updateFilterTimer = setTimeout(\n this.handleUpdateFilterTimeout,\n AdvancedFilterCreatorSelectValue.searchDebounceTime\n );\n }\n\n stopUpdateFilterTimer(): void {\n if (this.updateFilterTimer != null) {\n clearTimeout(this.updateFilterTimer);\n this.updateFilterTimer = undefined;\n }\n }\n\n updateTableFilter(): void {\n const { table, searchText } = this.state;\n const { timeZone } = this.props;\n const column = table?.columns[0];\n const filters = [];\n if (column == null) {\n return;\n }\n let error;\n if (searchText.length > 0) {\n let filter = null;\n if (TableUtils.isCharType(column.type)) {\n // Just exact match for char\n filter = TableUtils.makeQuickFilter(column, searchText);\n } else if (TableUtils.isTextType(column.type)) {\n // case insensitive & contains search text\n filter = TableUtils.makeQuickFilter(column, `~${searchText}`, timeZone);\n } else {\n // greater than or equal search for everything else\n // we may want to be smarter with some other types (like dates)\n filter = TableUtils.makeQuickFilter(\n column,\n `>=${searchText}`,\n timeZone\n );\n }\n\n if (filter != null) {\n filters.push(filter);\n } else {\n error = 'Invalid search text';\n }\n }\n\n this.setState({ filters, error });\n }\n\n render(): React.ReactElement {\n const {\n error,\n filters,\n invertSelection,\n selectedValues,\n searchText,\n table,\n } = this.state;\n const { formatter, showSearch } = this.props;\n const columnName = this.getColumnName();\n const displayedValuesText = this.getDisplayedValueText();\n const placeholderText = columnName ? `Find ${columnName}...` : '';\n\n return (\n <div className=\"advanced-filter-creator-select-value\">\n <div className={showSearch ? 'form-group' : ''}>\n <label htmlFor=\"advanced-filter-creator-select-value-input\">\n Select Values\n </label>\n {showSearch && (\n <input\n type=\"text\"\n className={classNames('form-control', {\n 'is-invalid': error != null,\n })}\n id=\"advanced-filter-creator-select-value-input\"\n placeholder={placeholderText}\n value={searchText}\n onChange={this.handleSearchChange}\n />\n )}\n </div>\n <AdvancedFilterCreatorSelectValueList\n table={table}\n filters={filters}\n invertSelection={invertSelection}\n selectedValues={selectedValues}\n formatter={formatter}\n onChange={this.handleListChange}\n />\n <div className=\"advanced-filter-creator-select-meta-row\">\n <div>\n <Button kind=\"ghost\" onClick={this.handleSelectAllClick}>\n Select All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleClearAllClick}>\n Clear\n </Button>\n </div>\n <CSSTransition\n in={displayedValuesText != null}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"row-count-info\">{displayedValuesText}</div>\n </CSSTransition>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValue;\n"],"mappings":"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"}
1
+ {"version":3,"file":"AdvancedFilterCreatorSelectValue.js","names":["React","PureComponent","CSSTransition","classNames","TableUtils","Button","AdvancedFilterCreatorSelectValueList","AdvancedFilterCreatorSelectValue","constructor","props","handleSelectAllClick","bind","handleClearAllClick","handleListChange","handleSearchChange","handleUpdateFilterTimeout","invertSelection","selectedValues","state","filters","searchText","componentDidMount","initSearchTable","componentDidUpdate","prevProps","prevState","table","setState","searchTable","close","startUpdateFilterTimer","componentWillUnmount","searchTablePromise","undefined","stopUpdateFilterTimer","getColumnName","columns","name","getDisplayedValuesCount","totalSize","length","getDisplayedValueText","count","formatter","formattedCount","getFormattedString","formattedTableSize","prefix","copy","then","onChange","event","target","value","resetSelection","updateFilterTimer","updateTableFilter","setTimeout","searchDebounceTime","clearTimeout","timeZone","column","error","filter","isCharType","type","makeQuickFilter","isTextType","push","render","showSearch","columnName","displayedValuesText","placeholderText"],"sources":["../src/AdvancedFilterCreatorSelectValue.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport classNames from 'classnames';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport { FilterCondition, Table } from '@deephaven/jsapi-shim';\nimport { Button } from '@deephaven/components';\nimport AdvancedFilterCreatorSelectValueList from './AdvancedFilterCreatorSelectValueList';\nimport './AdvancedFilterCreatorSelectValue.scss';\nimport { ColumnName } from './CommonTypes';\n\ninterface AdvancedFilterCreatorSelectValueProps<T> {\n invertSelection: boolean;\n selectedValues: T[];\n table?: Table;\n formatter: Formatter;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n showSearch: boolean;\n timeZone: string;\n}\n\ninterface AdvancedFilterCreatorSelectValueState<T> {\n error?: string;\n filters: FilterCondition[];\n invertSelection: boolean;\n selectedValues: T[];\n searchText: string;\n table?: Table;\n}\n\nclass AdvancedFilterCreatorSelectValue<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueProps<T>,\n AdvancedFilterCreatorSelectValueState<T>\n> {\n static searchDebounceTime = 250;\n\n static defaultProps = {\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n showSearch: true,\n };\n\n constructor(props: AdvancedFilterCreatorSelectValueProps<T>) {\n super(props);\n\n this.handleSelectAllClick = this.handleSelectAllClick.bind(this);\n this.handleClearAllClick = this.handleClearAllClick.bind(this);\n this.handleListChange = this.handleListChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUpdateFilterTimeout = this.handleUpdateFilterTimeout.bind(this);\n\n const { invertSelection, selectedValues } = props;\n\n this.state = {\n filters: [],\n invertSelection,\n selectedValues,\n searchText: '',\n };\n }\n\n componentDidMount(): void {\n this.initSearchTable();\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueProps<T>,\n prevState: AdvancedFilterCreatorSelectValueState<T>\n ): void {\n const { invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n this.initSearchTable();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ invertSelection });\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues });\n }\n\n const { table: searchTable, searchText } = this.state;\n\n if (searchTable !== prevState.table) {\n if (prevState.table != null) {\n prevState.table.close();\n }\n if (searchTable != null) {\n this.startUpdateFilterTimer();\n }\n }\n\n if (searchText !== prevState.searchText) {\n this.startUpdateFilterTimer();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.state;\n if (table != null) {\n table.close();\n }\n this.searchTablePromise = undefined;\n\n this.stopUpdateFilterTimer();\n }\n\n searchTablePromise?: Promise<Table>;\n\n updateFilterTimer?: ReturnType<typeof setTimeout>;\n\n getColumnName(): ColumnName {\n const { table } = this.props;\n if (table != null) {\n return table.columns[0].name;\n }\n return '';\n }\n\n getDisplayedValuesCount(): number | null {\n const { invertSelection, selectedValues, table } = this.state;\n if (table == null) {\n return null;\n }\n\n if (invertSelection) {\n return table.totalSize - selectedValues.length;\n }\n return selectedValues.length;\n }\n\n getDisplayedValueText(): string | null {\n const count = this.getDisplayedValuesCount();\n const { table } = this.state;\n\n const { formatter } = this.props;\n\n if (count != null && table != null) {\n const formattedCount = formatter.getFormattedString(count, 'long');\n const formattedTableSize = formatter.getFormattedString(\n table.totalSize,\n 'long'\n );\n let prefix = '';\n if (count < 1000000) {\n prefix = 'Displaying ';\n }\n return `${prefix}${formattedCount} of ${formattedTableSize}`;\n }\n return null;\n }\n\n initSearchTable(): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n const searchTablePromise = table.copy();\n this.searchTablePromise = searchTablePromise;\n this.searchTablePromise.then(searchTable => {\n if (this.searchTablePromise === searchTablePromise) {\n this.setState({ table: searchTable });\n this.searchTablePromise = undefined;\n } else {\n searchTable.close();\n }\n });\n }\n\n handleListChange(selectedValues: T[], invertSelection: boolean): void {\n this.setState({ selectedValues, invertSelection });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleSearchChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const searchText = event.target.value;\n this.setState({ searchText });\n }\n\n handleSelectAllClick(): void {\n this.resetSelection(true);\n }\n\n handleClearAllClick(): void {\n this.resetSelection(false);\n }\n\n handleUpdateFilterTimeout(): void {\n this.updateFilterTimer = undefined;\n this.updateTableFilter();\n }\n\n resetSelection(invertSelection: boolean): void {\n const selectedValues: T[] = [];\n\n this.setState({ invertSelection, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n startUpdateFilterTimer(): void {\n this.stopUpdateFilterTimer();\n\n this.updateFilterTimer = setTimeout(\n this.handleUpdateFilterTimeout,\n AdvancedFilterCreatorSelectValue.searchDebounceTime\n );\n }\n\n stopUpdateFilterTimer(): void {\n if (this.updateFilterTimer != null) {\n clearTimeout(this.updateFilterTimer);\n this.updateFilterTimer = undefined;\n }\n }\n\n updateTableFilter(): void {\n const { table, searchText } = this.state;\n const { timeZone } = this.props;\n const column = table?.columns[0];\n const filters = [];\n if (column == null) {\n return;\n }\n let error;\n if (searchText.length > 0) {\n let filter = null;\n if (TableUtils.isCharType(column.type)) {\n // Just exact match for char\n filter = TableUtils.makeQuickFilter(column, searchText);\n } else if (TableUtils.isTextType(column.type)) {\n // case insensitive & contains search text\n filter = TableUtils.makeQuickFilter(column, `~${searchText}`, timeZone);\n } else {\n // greater than or equal search for everything else\n // we may want to be smarter with some other types (like dates)\n filter = TableUtils.makeQuickFilter(\n column,\n `>=${searchText}`,\n timeZone\n );\n }\n\n if (filter != null) {\n filters.push(filter);\n } else {\n error = 'Invalid search text';\n }\n }\n\n this.setState({ filters, error });\n }\n\n render(): React.ReactElement {\n const {\n error,\n filters,\n invertSelection,\n selectedValues,\n searchText,\n table,\n } = this.state;\n const { formatter, showSearch } = this.props;\n const columnName = this.getColumnName();\n const displayedValuesText = this.getDisplayedValueText();\n const placeholderText = columnName ? `Find ${columnName}...` : '';\n\n return (\n <div className=\"advanced-filter-creator-select-value\">\n <div className={showSearch ? 'form-group' : ''}>\n <label htmlFor=\"advanced-filter-creator-select-value-input\">\n Select Values\n </label>\n {showSearch && (\n <input\n type=\"text\"\n className={classNames('form-control', {\n 'is-invalid': error != null,\n })}\n id=\"advanced-filter-creator-select-value-input\"\n placeholder={placeholderText}\n value={searchText}\n onChange={this.handleSearchChange}\n />\n )}\n </div>\n <AdvancedFilterCreatorSelectValueList\n table={table}\n filters={filters}\n invertSelection={invertSelection}\n selectedValues={selectedValues}\n formatter={formatter}\n onChange={this.handleListChange}\n />\n <div className=\"advanced-filter-creator-select-meta-row\">\n <div>\n <Button kind=\"ghost\" onClick={this.handleSelectAllClick}>\n Select All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleClearAllClick}>\n Clear\n </Button>\n </div>\n <CSSTransition\n in={displayedValuesText != null}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"row-count-info\">{displayedValuesText}</div>\n </CSSTransition>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValue;\n"],"mappings":";AAAA;AACA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,SAASC,aAAa,QAAQ,wBAAwB;AACtD,OAAOC,UAAU,MAAM,YAAY;AACnC,SAAoBC,UAAU,QAAQ,wBAAwB;AAE9D,SAASC,MAAM,QAAQ,uBAAuB;AAAC,OACxCC,oCAAoC;AAAA;AAuB3C,MAAMC,gCAAgC,SAAsBN,aAAa,CAGvE;EAUAO,WAAW,CAACC,KAA+C,EAAE;IAC3D,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAEb,IAAI,CAACC,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACC,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACC,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACD,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACE,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACF,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACG,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACH,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACI,yBAAyB,GAAG,IAAI,CAACA,yBAAyB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAE1E,IAAM;MAAEK,eAAe;MAAEC;IAAe,CAAC,GAAGR,KAAK;IAEjD,IAAI,CAACS,KAAK,GAAG;MACXC,OAAO,EAAE,EAAE;MACXH,eAAe;MACfC,cAAc;MACdG,UAAU,EAAE;IACd,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxB,IAAI,CAACC,eAAe,EAAE;EACxB;EAEAC,kBAAkB,CAChBC,SAAmD,EACnDC,SAAmD,EAC7C;IACN,IAAM;MAAET,eAAe;MAAEC,cAAc;MAAES;IAAM,CAAC,GAAG,IAAI,CAACjB,KAAK;IAC7D,IAAIe,SAAS,CAACE,KAAK,KAAKA,KAAK,EAAE;MAC7B,IAAI,CAACJ,eAAe,EAAE;IACxB;IAEA,IAAIE,SAAS,CAACR,eAAe,KAAKA,eAAe,EAAE;MACjD,IAAI,CAACW,QAAQ,CAAC;QAAEX;MAAgB,CAAC,CAAC;IACpC;IAEA,IAAIQ,SAAS,CAACP,cAAc,KAAKA,cAAc,EAAE;MAC/C,IAAI,CAACU,QAAQ,CAAC;QAAEV;MAAe,CAAC,CAAC;IACnC;IAEA,IAAM;MAAES,KAAK,EAAEE,WAAW;MAAER;IAAW,CAAC,GAAG,IAAI,CAACF,KAAK;IAErD,IAAIU,WAAW,KAAKH,SAAS,CAACC,KAAK,EAAE;MACnC,IAAID,SAAS,CAACC,KAAK,IAAI,IAAI,EAAE;QAC3BD,SAAS,CAACC,KAAK,CAACG,KAAK,EAAE;MACzB;MACA,IAAID,WAAW,IAAI,IAAI,EAAE;QACvB,IAAI,CAACE,sBAAsB,EAAE;MAC/B;IACF;IAEA,IAAIV,UAAU,KAAKK,SAAS,CAACL,UAAU,EAAE;MACvC,IAAI,CAACU,sBAAsB,EAAE;IAC/B;EACF;EAEAC,oBAAoB,GAAS;IAC3B,IAAM;MAAEL;IAAM,CAAC,GAAG,IAAI,CAACR,KAAK;IAC5B,IAAIQ,KAAK,IAAI,IAAI,EAAE;MACjBA,KAAK,CAACG,KAAK,EAAE;IACf;IACA,IAAI,CAACG,kBAAkB,GAAGC,SAAS;IAEnC,IAAI,CAACC,qBAAqB,EAAE;EAC9B;EAMAC,aAAa,GAAe;IAC1B,IAAM;MAAET;IAAM,CAAC,GAAG,IAAI,CAACjB,KAAK;IAC5B,IAAIiB,KAAK,IAAI,IAAI,EAAE;MACjB,OAAOA,KAAK,CAACU,OAAO,CAAC,CAAC,CAAC,CAACC,IAAI;IAC9B;IACA,OAAO,EAAE;EACX;EAEAC,uBAAuB,GAAkB;IACvC,IAAM;MAAEtB,eAAe;MAAEC,cAAc;MAAES;IAAM,CAAC,GAAG,IAAI,CAACR,KAAK;IAC7D,IAAIQ,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO,IAAI;IACb;IAEA,IAAIV,eAAe,EAAE;MACnB,OAAOU,KAAK,CAACa,SAAS,GAAGtB,cAAc,CAACuB,MAAM;IAChD;IACA,OAAOvB,cAAc,CAACuB,MAAM;EAC9B;EAEAC,qBAAqB,GAAkB;IACrC,IAAMC,KAAK,GAAG,IAAI,CAACJ,uBAAuB,EAAE;IAC5C,IAAM;MAAEZ;IAAM,CAAC,GAAG,IAAI,CAACR,KAAK;IAE5B,IAAM;MAAEyB;IAAU,CAAC,GAAG,IAAI,CAAClC,KAAK;IAEhC,IAAIiC,KAAK,IAAI,IAAI,IAAIhB,KAAK,IAAI,IAAI,EAAE;MAClC,IAAMkB,cAAc,GAAGD,SAAS,CAACE,kBAAkB,CAACH,KAAK,EAAE,MAAM,CAAC;MAClE,IAAMI,kBAAkB,GAAGH,SAAS,CAACE,kBAAkB,CACrDnB,KAAK,CAACa,SAAS,EACf,MAAM,CACP;MACD,IAAIQ,MAAM,GAAG,EAAE;MACf,IAAIL,KAAK,GAAG,OAAO,EAAE;QACnBK,MAAM,GAAG,aAAa;MACxB;MACA,iBAAUA,MAAM,SAAGH,cAAc,iBAAOE,kBAAkB;IAC5D;IACA,OAAO,IAAI;EACb;EAEAxB,eAAe,GAAS;IACtB,IAAM;MAAEI;IAAM,CAAC,GAAG,IAAI,CAACjB,KAAK;IAC5B,IAAIiB,KAAK,IAAI,IAAI,EAAE;MACjB;IACF;IAEA,IAAMM,kBAAkB,GAAGN,KAAK,CAACsB,IAAI,EAAE;IACvC,IAAI,CAAChB,kBAAkB,GAAGA,kBAAkB;IAC5C,IAAI,CAACA,kBAAkB,CAACiB,IAAI,CAACrB,WAAW,IAAI;MAC1C,IAAI,IAAI,CAACI,kBAAkB,KAAKA,kBAAkB,EAAE;QAClD,IAAI,CAACL,QAAQ,CAAC;UAAED,KAAK,EAAEE;QAAY,CAAC,CAAC;QACrC,IAAI,CAACI,kBAAkB,GAAGC,SAAS;MACrC,CAAC,MAAM;QACLL,WAAW,CAACC,KAAK,EAAE;MACrB;IACF,CAAC,CAAC;EACJ;EAEAhB,gBAAgB,CAACI,cAAmB,EAAED,eAAwB,EAAQ;IACpE,IAAI,CAACW,QAAQ,CAAC;MAAEV,cAAc;MAAED;IAAgB,CAAC,CAAC;IAElD,IAAM;MAAEkC;IAAS,CAAC,GAAG,IAAI,CAACzC,KAAK;IAC/ByC,QAAQ,CAACjC,cAAc,EAAED,eAAe,CAAC;EAC3C;EAEAF,kBAAkB,CAACqC,KAA0C,EAAQ;IACnE,IAAM/B,UAAU,GAAG+B,KAAK,CAACC,MAAM,CAACC,KAAK;IACrC,IAAI,CAAC1B,QAAQ,CAAC;MAAEP;IAAW,CAAC,CAAC;EAC/B;EAEAV,oBAAoB,GAAS;IAC3B,IAAI,CAAC4C,cAAc,CAAC,IAAI,CAAC;EAC3B;EAEA1C,mBAAmB,GAAS;IAC1B,IAAI,CAAC0C,cAAc,CAAC,KAAK,CAAC;EAC5B;EAEAvC,yBAAyB,GAAS;IAChC,IAAI,CAACwC,iBAAiB,GAAGtB,SAAS;IAClC,IAAI,CAACuB,iBAAiB,EAAE;EAC1B;EAEAF,cAAc,CAACtC,eAAwB,EAAQ;IAC7C,IAAMC,cAAmB,GAAG,EAAE;IAE9B,IAAI,CAACU,QAAQ,CAAC;MAAEX,eAAe;MAAEC;IAAe,CAAC,CAAC;IAElD,IAAM;MAAEiC;IAAS,CAAC,GAAG,IAAI,CAACzC,KAAK;IAC/ByC,QAAQ,CAACjC,cAAc,EAAED,eAAe,CAAC;EAC3C;EAEAc,sBAAsB,GAAS;IAC7B,IAAI,CAACI,qBAAqB,EAAE;IAE5B,IAAI,CAACqB,iBAAiB,GAAGE,UAAU,CACjC,IAAI,CAAC1C,yBAAyB,EAC9BR,gCAAgC,CAACmD,kBAAkB,CACpD;EACH;EAEAxB,qBAAqB,GAAS;IAC5B,IAAI,IAAI,CAACqB,iBAAiB,IAAI,IAAI,EAAE;MAClCI,YAAY,CAAC,IAAI,CAACJ,iBAAiB,CAAC;MACpC,IAAI,CAACA,iBAAiB,GAAGtB,SAAS;IACpC;EACF;EAEAuB,iBAAiB,GAAS;IACxB,IAAM;MAAE9B,KAAK;MAAEN;IAAW,CAAC,GAAG,IAAI,CAACF,KAAK;IACxC,IAAM;MAAE0C;IAAS,CAAC,GAAG,IAAI,CAACnD,KAAK;IAC/B,IAAMoD,MAAM,GAAGnC,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEU,OAAO,CAAC,CAAC,CAAC;IAChC,IAAMjB,OAAO,GAAG,EAAE;IAClB,IAAI0C,MAAM,IAAI,IAAI,EAAE;MAClB;IACF;IACA,IAAIC,KAAK;IACT,IAAI1C,UAAU,CAACoB,MAAM,GAAG,CAAC,EAAE;MACzB,IAAIuB,MAAM,GAAG,IAAI;MACjB,IAAI3D,UAAU,CAAC4D,UAAU,CAACH,MAAM,CAACI,IAAI,CAAC,EAAE;QACtC;QACAF,MAAM,GAAG3D,UAAU,CAAC8D,eAAe,CAACL,MAAM,EAAEzC,UAAU,CAAC;MACzD,CAAC,MAAM,IAAIhB,UAAU,CAAC+D,UAAU,CAACN,MAAM,CAACI,IAAI,CAAC,EAAE;QAC7C;QACAF,MAAM,GAAG3D,UAAU,CAAC8D,eAAe,CAACL,MAAM,aAAMzC,UAAU,GAAIwC,QAAQ,CAAC;MACzE,CAAC,MAAM;QACL;QACA;QACAG,MAAM,GAAG3D,UAAU,CAAC8D,eAAe,CACjCL,MAAM,cACDzC,UAAU,GACfwC,QAAQ,CACT;MACH;MAEA,IAAIG,MAAM,IAAI,IAAI,EAAE;QAClB5C,OAAO,CAACiD,IAAI,CAACL,MAAM,CAAC;MACtB,CAAC,MAAM;QACLD,KAAK,GAAG,qBAAqB;MAC/B;IACF;IAEA,IAAI,CAACnC,QAAQ,CAAC;MAAER,OAAO;MAAE2C;IAAM,CAAC,CAAC;EACnC;EAEAO,MAAM,GAAuB;IAC3B,IAAM;MACJP,KAAK;MACL3C,OAAO;MACPH,eAAe;MACfC,cAAc;MACdG,UAAU;MACVM;IACF,CAAC,GAAG,IAAI,CAACR,KAAK;IACd,IAAM;MAAEyB,SAAS;MAAE2B;IAAW,CAAC,GAAG,IAAI,CAAC7D,KAAK;IAC5C,IAAM8D,UAAU,GAAG,IAAI,CAACpC,aAAa,EAAE;IACvC,IAAMqC,mBAAmB,GAAG,IAAI,CAAC/B,qBAAqB,EAAE;IACxD,IAAMgC,eAAe,GAAGF,UAAU,kBAAWA,UAAU,WAAQ,EAAE;IAEjE,oBACE;MAAK,SAAS,EAAC;IAAsC,gBACnD;MAAK,SAAS,EAAED,UAAU,GAAG,YAAY,GAAG;IAAG,gBAC7C;MAAO,OAAO,EAAC;IAA4C,mBAEnD,EACPA,UAAU,iBACT;MACE,IAAI,EAAC,MAAM;MACX,SAAS,EAAEnE,UAAU,CAAC,cAAc,EAAE;QACpC,YAAY,EAAE2D,KAAK,IAAI;MACzB,CAAC,CAAE;MACH,EAAE,EAAC,4CAA4C;MAC/C,WAAW,EAAEW,eAAgB;MAC7B,KAAK,EAAErD,UAAW;MAClB,QAAQ,EAAE,IAAI,CAACN;IAAmB,EAErC,CACG,eACN,oBAAC,oCAAoC;MACnC,KAAK,EAAEY,KAAM;MACb,OAAO,EAAEP,OAAQ;MACjB,eAAe,EAAEH,eAAgB;MACjC,cAAc,EAAEC,cAAe;MAC/B,SAAS,EAAE0B,SAAU;MACrB,QAAQ,EAAE,IAAI,CAAC9B;IAAiB,EAChC,eACF;MAAK,SAAS,EAAC;IAAyC,gBACtD,8CACE,oBAAC,MAAM;MAAC,IAAI,EAAC,OAAO;MAAC,OAAO,EAAE,IAAI,CAACH;IAAqB,gBAE/C,eACT,oBAAC,MAAM;MAAC,IAAI,EAAC,OAAO;MAAC,OAAO,EAAE,IAAI,CAACE;IAAoB,WAE9C,CACL,eACN,oBAAC,aAAa;MACZ,EAAE,EAAE4D,mBAAmB,IAAI,IAAK;MAChC,OAAO,EAAE,GAAI;MACb,UAAU,EAAC,MAAM;MACjB,YAAY;MACZ,aAAa;IAAA,gBAEb;MAAK,SAAS,EAAC;IAAgB,GAAEA,mBAAmB,CAAO,CAC7C,CACZ,CACF;EAEV;AACF;AAAC,gBApSKjE,gCAAgC,wBAIR,GAAG;AAAA,gBAJ3BA,gCAAgC,kBAMd;EACpBS,eAAe,EAAE,IAAI;EACrBC,cAAc,EAAE,EAAE;EAClBiC,QAAQ,EAAE,MAAYjB,SAAS;EAC/BqC,UAAU,EAAE;AACd,CAAC;AA2RH,eAAe/D,gCAAgC"}
@@ -1,5 +1,4 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  /* eslint react/no-did-update-set-state: "off" */
4
3
  import React, { PureComponent } from 'react';
5
4
  import { CSSTransition } from 'react-transition-group';
@@ -7,7 +6,6 @@ import dh from '@deephaven/jsapi-shim';
7
6
  import { LoadingSpinner, SelectValueList } from '@deephaven/components';
8
7
  import Log from '@deephaven/log';
9
8
  var log = Log.module('AdvancedFilterCreatorSelectValueList');
10
-
11
9
  /**
12
10
  * Select values from a long scrollable list.
13
11
  * Swaps items in and out for infinite scrolling
@@ -21,20 +19,15 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
21
19
  static indexOf(value, values) {
22
20
  for (var i = 0; i < values.length; i += 1) {
23
21
  var v = values[i];
24
-
25
22
  if (v === value || v != null && v.valueOf != null && value != null && value.valueOf != null && v.valueOf() === value.valueOf()) {
26
23
  return i;
27
24
  }
28
25
  }
29
-
30
26
  return -1;
31
27
  }
32
-
33
28
  constructor(props) {
34
29
  super(props);
35
-
36
30
  _defineProperty(this, "list", void 0);
37
-
38
31
  this.handleSelect = this.handleSelect.bind(this);
39
32
  this.handleViewportChange = this.handleViewportChange.bind(this);
40
33
  this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);
@@ -51,14 +44,12 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
51
44
  isLoading: true
52
45
  };
53
46
  }
54
-
55
47
  componentDidMount() {
56
48
  var {
57
49
  table
58
50
  } = this.props;
59
51
  if (table) this.startListening(table);
60
52
  }
61
-
62
53
  componentDidUpdate(prevProps) {
63
54
  var {
64
55
  filters,
@@ -66,38 +57,32 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
66
57
  selectedValues,
67
58
  table
68
59
  } = this.props;
69
-
70
60
  if (prevProps.table !== table) {
71
61
  if (prevProps.table) this.stopListening(prevProps.table);
72
62
  if (table) this.startListening(table);
73
63
  this.resetViewport();
74
64
  }
75
-
76
65
  if (prevProps.invertSelection !== invertSelection) {
77
66
  this.setState({
78
67
  selectedValues: []
79
68
  }, this.handleSelectionUpdate);
80
69
  }
81
-
82
70
  if (prevProps.selectedValues !== selectedValues) {
83
71
  this.setState({
84
72
  selectedValues
85
73
  }, this.handleSelectionUpdate);
86
74
  }
87
-
88
75
  if (prevProps.filters !== filters) {
89
76
  table === null || table === void 0 ? void 0 : table.applyFilter(filters);
90
77
  this.resetViewport();
91
78
  }
92
79
  }
93
-
94
80
  componentWillUnmount() {
95
81
  var {
96
82
  table
97
83
  } = this.props;
98
84
  if (table) this.stopListening(table);
99
85
  }
100
-
101
86
  handleSelect(itemIndex, value) {
102
87
  var {
103
88
  invertSelection
@@ -107,19 +92,15 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
107
92
  } = this.state;
108
93
  selectedValues = [...selectedValues];
109
94
  var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);
110
-
111
95
  if (selectedIndex >= 0) {
112
96
  selectedValues.splice(selectedIndex, 1);
113
97
  } else {
114
98
  selectedValues.push(value);
115
99
  }
116
-
117
100
  var isSelected = selectedIndex < 0;
118
-
119
101
  if (invertSelection) {
120
102
  isSelected = !isSelected;
121
103
  }
122
-
123
104
  var {
124
105
  offset
125
106
  } = this.state;
@@ -128,11 +109,9 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
128
109
  } = this.state;
129
110
  items = [...items];
130
111
  var visibleItemIndex = itemIndex - offset;
131
-
132
112
  if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {
133
113
  items[visibleItemIndex].isSelected = isSelected;
134
114
  }
135
-
136
115
  this.setState({
137
116
  items,
138
117
  selectedValues
@@ -142,15 +121,12 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
142
121
  } = this.props;
143
122
  onChange(selectedValues, invertSelection);
144
123
  }
145
-
146
124
  handleViewportChange(top, bottom) {
147
125
  this.updateViewport(top, bottom);
148
126
  }
149
-
150
127
  handleSelectionUpdate() {
151
128
  this.updateItemSelection();
152
129
  }
153
-
154
130
  handleTableUpdate(event) {
155
131
  var {
156
132
  table,
@@ -163,7 +139,6 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
163
139
  } = data;
164
140
  var items = [];
165
141
  var column = table.columns[0];
166
-
167
142
  for (var r = 0; r < data.rows.length; r += 1) {
168
143
  var row = data.rows[r];
169
144
  var value = row.get(column);
@@ -175,7 +150,6 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
175
150
  isSelected
176
151
  });
177
152
  }
178
-
179
153
  log.debug2('Received table update:', offset, items.length);
180
154
  var itemCount = table.size;
181
155
  this.setState({
@@ -185,39 +159,34 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
185
159
  isLoading: false
186
160
  });
187
161
  }
188
-
189
162
  isValueSelected(value) {
190
163
  var {
191
164
  invertSelection
192
165
  } = this.props;
193
166
  var {
194
167
  selectedValues
195
- } = this.state; // Need to check if any of the valueOf matches, timestamp value that is equal
168
+ } = this.state;
196
169
 
170
+ // Need to check if any of the valueOf matches, timestamp value that is equal
197
171
  var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);
198
172
  return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;
199
173
  }
200
-
201
174
  startListening(table) {
202
175
  table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
203
176
  }
204
-
205
177
  stopListening(table) {
206
178
  table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
207
179
  }
208
-
209
180
  resetViewport() {
210
181
  if (this.list && this.list.topRow != null && this.list.bottomRow != null) {
211
182
  this.updateViewport(this.list.topRow, this.list.bottomRow, true);
212
183
  }
213
184
  }
214
-
215
185
  updateItemSelection() {
216
186
  var {
217
187
  items
218
188
  } = this.state;
219
189
  items = [...items];
220
-
221
190
  for (var i = 0; i < items.length; i += 1) {
222
191
  var item = items[i];
223
192
  var {
@@ -225,35 +194,29 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
225
194
  } = item;
226
195
  item.isSelected = this.isValueSelected(value);
227
196
  }
228
-
229
197
  this.setState({
230
198
  items
231
199
  });
232
200
  }
233
-
234
201
  updateViewport(top, bottom) {
235
202
  var isLoading = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
236
203
  var {
237
204
  table
238
205
  } = this.props;
239
-
240
206
  if (table == null) {
241
207
  return;
242
208
  }
243
-
244
209
  if (isLoading) {
245
210
  this.setState({
246
211
  isLoading: true
247
212
  });
248
213
  }
249
-
250
214
  var viewportSize = bottom - top + 1;
251
215
  var topRow = Math.max(0, top - viewportSize * 3);
252
216
  var bottomRow = Math.max(topRow, bottom + viewportSize * 3);
253
217
  log.debug2('Setting viewport', topRow, ',', bottomRow);
254
218
  table.setViewport(topRow, bottomRow);
255
219
  }
256
-
257
220
  render() {
258
221
  var {
259
222
  offset,
@@ -284,14 +247,11 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
284
247
  className: "loading-spinner-large"
285
248
  }))));
286
249
  }
287
-
288
250
  }
289
-
290
251
  _defineProperty(AdvancedFilterCreatorSelectValueList, "defaultProps", {
291
252
  invertSelection: true,
292
253
  selectedValues: [],
293
254
  onChange: () => undefined
294
255
  });
295
-
296
256
  export default AdvancedFilterCreatorSelectValueList;
297
257
  //# sourceMappingURL=AdvancedFilterCreatorSelectValueList.js.map