@deephaven/iris-grid 1.22.1 → 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.
- package/README.md +284 -1
- package/dist/AdvancedFilterCreator.js +65 -102
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js +22 -37
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +37 -63
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +29 -59
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js +6 -8
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js +22 -28
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CommonTypes.d.ts +62 -2
- package/dist/CommonTypes.d.ts.map +1 -1
- package/dist/CommonTypes.js.map +1 -1
- package/dist/CrossColumnSearch.js +20 -29
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js +19 -46
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js +32 -29
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.d.ts +85 -2
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +709 -861
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js +10 -11
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCacheUtils.js +28 -8
- package/dist/IrisGridCacheUtils.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js +30 -13
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCellRendererUtils.js +6 -12
- package/dist/IrisGridCellRendererUtils.js.map +1 -1
- package/dist/IrisGridCopyHandler.js +28 -47
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js +28 -51
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +30 -1
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +36 -1
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelUpdater.js +32 -30
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridModelWidgetProps.d.ts +26 -0
- package/dist/IrisGridModelWidgetProps.d.ts.map +1 -0
- package/dist/IrisGridModelWidgetProps.js +2 -0
- package/dist/IrisGridModelWidgetProps.js.map +1 -0
- package/dist/IrisGridPartitionSelector.js +28 -62
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.d.ts.map +1 -1
- package/dist/IrisGridProxyModel.js +41 -14
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js +162 -264
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.js +23 -16
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +49 -73
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js +19 -19
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTextCellRenderer.d.ts.map +1 -1
- package/dist/IrisGridTextCellRenderer.js +36 -53
- package/dist/IrisGridTextCellRenderer.js.map +1 -1
- package/dist/IrisGridTheme.js +9 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridThemeProvider.js +5 -7
- package/dist/IrisGridThemeProvider.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js +5 -9
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.d.ts +25 -2
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +297 -294
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/LazyIrisGrid.d.ts +1 -1
- package/dist/NoPastePermissionModal.js +3 -5
- package/dist/NoPastePermissionModal.js.map +1 -1
- package/dist/PendingDataBottomBar.js +27 -16
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/ToastBottomBar.js +16 -8
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js +11 -24
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/CopyCellKeyHandler.js +3 -4
- package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js +1 -3
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js +1 -3
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +35 -59
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +13 -29
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +8 -17
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +96 -199
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -4
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js +16 -30
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js +5 -13
- package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +20 -36
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -5
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js +9 -18
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +10 -18
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js +12 -5
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js +45 -102
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +35 -77
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +9 -11
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js +17 -24
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/IrisGridTableOptionsWidgetProps.d.ts +22 -0
- package/dist/sidebar/IrisGridTableOptionsWidgetProps.d.ts.map +1 -0
- package/dist/sidebar/IrisGridTableOptionsWidgetProps.js +2 -0
- package/dist/sidebar/IrisGridTableOptionsWidgetProps.js.map +1 -0
- package/dist/sidebar/OptionType.d.ts +8 -0
- package/dist/sidebar/OptionType.d.ts.map +1 -1
- package/dist/sidebar/OptionType.js +7 -0
- package/dist/sidebar/OptionType.js.map +1 -1
- package/dist/sidebar/PluginTableOptionsErrorBoundary.d.ts +30 -0
- package/dist/sidebar/PluginTableOptionsErrorBoundary.d.ts.map +1 -0
- package/dist/sidebar/PluginTableOptionsErrorBoundary.js +55 -0
- package/dist/sidebar/PluginTableOptionsErrorBoundary.js.map +1 -0
- package/dist/sidebar/RollupRows.js +72 -113
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +16 -33
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +50 -74
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js +18 -42
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +25 -18
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js +1 -3
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js +45 -34
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +35 -24
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +38 -21
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +27 -11
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +9 -11
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +48 -57
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +35 -24
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js +26 -11
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/index.d.ts +3 -2
- package/dist/sidebar/index.d.ts.map +1 -1
- package/dist/sidebar/index.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js +5 -7
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +24 -18
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +166 -256
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +4 -11
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +28 -14
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +16 -19
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +1 -3
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +19 -29
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +39 -52
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +18 -23
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +19 -15
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +16 -30
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +30 -39
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreatorSelectValue.js","names":["React","PureComponent","classNames","TableUtils","Button","FadeTransition","AdvancedFilterCreatorSelectValueList","jsx","_jsx","jsxs","_jsxs","AdvancedFilterCreatorSelectValue","constructor","props","_defineProperty","handleSelectAllClick","bind","handleClearAllClick","handleListChange","handleSearchChange","handleUpdateFilterTimeout","dh","invertSelection","selectedValues","tableUtils","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","concat","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","className","children","htmlFor","id","placeholder","kind","onClick","in","mountOnEnter","unmountOnExit"],"sources":["../src/AdvancedFilterCreatorSelectValue.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { type Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { Button, FadeTransition } from '@deephaven/components';\nimport AdvancedFilterCreatorSelectValueList from './AdvancedFilterCreatorSelectValueList';\nimport './AdvancedFilterCreatorSelectValue.scss';\nimport { type ColumnName } from './CommonTypes';\n\ninterface AdvancedFilterCreatorSelectValueProps<T> {\n dh: typeof DhType;\n invertSelection: boolean;\n selectedValues: (T | null)[];\n table?: DhType.Table;\n formatter: Formatter;\n onChange: (selectedValues: (T | null)[], invertSelection: boolean) => void;\n showSearch: boolean;\n timeZone: string;\n}\n\ninterface AdvancedFilterCreatorSelectValueState<T> {\n error?: string;\n filters: DhType.FilterCondition[];\n invertSelection: boolean;\n selectedValues: (T | null)[];\n searchText: string;\n table?: DhType.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 { dh, invertSelection, selectedValues } = props;\n\n this.tableUtils = new TableUtils(dh);\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<DhType.Table>;\n\n tableUtils: TableUtils;\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(\n selectedValues: (T | null)[],\n invertSelection: boolean\n ): 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 { tableUtils } = this;\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 { dh, 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 dh={dh}\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 <FadeTransition\n in={displayedValuesText != null}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"row-count-info\">{displayedValuesText}</div>\n </FadeTransition>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValue;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreatorSelectValue.js","names":["React","PureComponent","classNames","TableUtils","Button","FadeTransition","AdvancedFilterCreatorSelectValueList","jsx","_jsx","jsxs","_jsxs","AdvancedFilterCreatorSelectValue","constructor","props","_defineProperty","handleSelectAllClick","bind","handleClearAllClick","handleListChange","handleSearchChange","handleUpdateFilterTimeout","dh","invertSelection","selectedValues","tableUtils","state","filters","searchText","componentDidMount","initSearchTable","componentDidUpdate","prevProps","prevState","_this$props","table","setState","_this$state","searchTable","close","startUpdateFilterTimer","componentWillUnmount","searchTablePromise","undefined","stopUpdateFilterTimer","getColumnName","columns","name","getDisplayedValuesCount","_this$state2","totalSize","length","getDisplayedValueText","count","formatter","formattedCount","getFormattedString","formattedTableSize","prefix","concat","copy","then","onChange","event","target","value","resetSelection","updateFilterTimer","updateTableFilter","setTimeout","searchDebounceTime","clearTimeout","_this$state3","timeZone","column","error","filter","isCharType","type","makeQuickFilter","isTextType","push","render","_this$state4","_this$props2","showSearch","columnName","displayedValuesText","placeholderText","className","children","htmlFor","id","placeholder","kind","onClick","in","mountOnEnter","unmountOnExit"],"sources":["../src/AdvancedFilterCreatorSelectValue.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { type Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { Button, FadeTransition } from '@deephaven/components';\nimport AdvancedFilterCreatorSelectValueList from './AdvancedFilterCreatorSelectValueList';\nimport './AdvancedFilterCreatorSelectValue.scss';\nimport { type ColumnName } from './CommonTypes';\n\ninterface AdvancedFilterCreatorSelectValueProps<T> {\n dh: typeof DhType;\n invertSelection: boolean;\n selectedValues: (T | null)[];\n table?: DhType.Table;\n formatter: Formatter;\n onChange: (selectedValues: (T | null)[], invertSelection: boolean) => void;\n showSearch: boolean;\n timeZone: string;\n}\n\ninterface AdvancedFilterCreatorSelectValueState<T> {\n error?: string;\n filters: DhType.FilterCondition[];\n invertSelection: boolean;\n selectedValues: (T | null)[];\n searchText: string;\n table?: DhType.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 { dh, invertSelection, selectedValues } = props;\n\n this.tableUtils = new TableUtils(dh);\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<DhType.Table>;\n\n tableUtils: TableUtils;\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(\n selectedValues: (T | null)[],\n invertSelection: boolean\n ): 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 { tableUtils } = this;\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 { dh, 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 dh={dh}\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 <FadeTransition\n in={displayedValuesText != null}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"row-count-info\">{displayedValuesText}</div>\n </FadeTransition>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValue;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -34,10 +34,9 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
|
|
|
34
34
|
this.handleViewportChange = this.handleViewportChange.bind(this);
|
|
35
35
|
this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);
|
|
36
36
|
this.handleTableUpdate = this.handleTableUpdate.bind(this);
|
|
37
|
-
var
|
|
38
|
-
selectedValues,
|
|
39
|
-
dh
|
|
40
|
-
} = this.props;
|
|
37
|
+
var _this$props = this.props,
|
|
38
|
+
selectedValues = _this$props.selectedValues,
|
|
39
|
+
dh = _this$props.dh;
|
|
41
40
|
this.dh = dh;
|
|
42
41
|
this.list = null;
|
|
43
42
|
this.state = {
|
|
@@ -49,18 +48,15 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
|
|
|
49
48
|
};
|
|
50
49
|
}
|
|
51
50
|
componentDidMount() {
|
|
52
|
-
var
|
|
53
|
-
table
|
|
54
|
-
} = this.props;
|
|
51
|
+
var table = this.props.table;
|
|
55
52
|
if (table) this.startListening(table);
|
|
56
53
|
}
|
|
57
54
|
componentDidUpdate(prevProps) {
|
|
58
|
-
var
|
|
59
|
-
filters,
|
|
60
|
-
invertSelection,
|
|
61
|
-
selectedValues,
|
|
62
|
-
table
|
|
63
|
-
} = this.props;
|
|
55
|
+
var _this$props2 = this.props,
|
|
56
|
+
filters = _this$props2.filters,
|
|
57
|
+
invertSelection = _this$props2.invertSelection,
|
|
58
|
+
selectedValues = _this$props2.selectedValues,
|
|
59
|
+
table = _this$props2.table;
|
|
64
60
|
if (prevProps.table !== table) {
|
|
65
61
|
if (prevProps.table) this.stopListening(prevProps.table);
|
|
66
62
|
if (table) this.startListening(table);
|
|
@@ -82,18 +78,12 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
|
|
|
82
78
|
}
|
|
83
79
|
}
|
|
84
80
|
componentWillUnmount() {
|
|
85
|
-
var
|
|
86
|
-
table
|
|
87
|
-
} = this.props;
|
|
81
|
+
var table = this.props.table;
|
|
88
82
|
if (table) this.stopListening(table);
|
|
89
83
|
}
|
|
90
84
|
handleSelect(itemIndex, value) {
|
|
91
|
-
var
|
|
92
|
-
|
|
93
|
-
} = this.props;
|
|
94
|
-
var {
|
|
95
|
-
selectedValues
|
|
96
|
-
} = this.state;
|
|
85
|
+
var invertSelection = this.props.invertSelection;
|
|
86
|
+
var selectedValues = this.state.selectedValues;
|
|
97
87
|
selectedValues = [...selectedValues];
|
|
98
88
|
var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);
|
|
99
89
|
if (selectedIndex >= 0) {
|
|
@@ -105,12 +95,8 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
|
|
|
105
95
|
if (invertSelection) {
|
|
106
96
|
isSelected = !isSelected;
|
|
107
97
|
}
|
|
108
|
-
var
|
|
109
|
-
|
|
110
|
-
} = this.state;
|
|
111
|
-
var {
|
|
112
|
-
items
|
|
113
|
-
} = this.state;
|
|
98
|
+
var offset = this.state.offset;
|
|
99
|
+
var items = this.state.items;
|
|
114
100
|
items = [...items];
|
|
115
101
|
var visibleItemIndex = itemIndex - offset;
|
|
116
102
|
if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {
|
|
@@ -120,9 +106,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
|
|
|
120
106
|
items,
|
|
121
107
|
selectedValues
|
|
122
108
|
});
|
|
123
|
-
var
|
|
124
|
-
onChange
|
|
125
|
-
} = this.props;
|
|
109
|
+
var onChange = this.props.onChange;
|
|
126
110
|
onChange(selectedValues, invertSelection);
|
|
127
111
|
}
|
|
128
112
|
handleViewportChange(top, bottom) {
|
|
@@ -132,15 +116,12 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
|
|
|
132
116
|
this.updateItemSelection();
|
|
133
117
|
}
|
|
134
118
|
handleTableUpdate(event) {
|
|
135
|
-
var
|
|
136
|
-
table,
|
|
137
|
-
formatter
|
|
138
|
-
} = this.props;
|
|
119
|
+
var _this$props3 = this.props,
|
|
120
|
+
table = _this$props3.table,
|
|
121
|
+
formatter = _this$props3.formatter;
|
|
139
122
|
if (!table) return;
|
|
140
123
|
var data = event.detail;
|
|
141
|
-
var
|
|
142
|
-
offset
|
|
143
|
-
} = data;
|
|
124
|
+
var offset = data.offset;
|
|
144
125
|
var items = [];
|
|
145
126
|
var column = table.columns[0];
|
|
146
127
|
for (var r = 0; r < data.rows.length; r += 1) {
|
|
@@ -177,12 +158,8 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
|
|
|
177
158
|
});
|
|
178
159
|
}
|
|
179
160
|
isValueSelected(value) {
|
|
180
|
-
var
|
|
181
|
-
|
|
182
|
-
} = this.props;
|
|
183
|
-
var {
|
|
184
|
-
selectedValues
|
|
185
|
-
} = this.state;
|
|
161
|
+
var invertSelection = this.props.invertSelection;
|
|
162
|
+
var selectedValues = this.state.selectedValues;
|
|
186
163
|
|
|
187
164
|
// Need to check if any of the valueOf matches, timestamp value that is equal
|
|
188
165
|
var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);
|
|
@@ -200,15 +177,11 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
|
|
|
200
177
|
}
|
|
201
178
|
}
|
|
202
179
|
updateItemSelection() {
|
|
203
|
-
var
|
|
204
|
-
items
|
|
205
|
-
} = this.state;
|
|
180
|
+
var items = this.state.items;
|
|
206
181
|
items = [...items];
|
|
207
182
|
for (var i = 0; i < items.length; i += 1) {
|
|
208
183
|
var item = items[i];
|
|
209
|
-
var
|
|
210
|
-
value
|
|
211
|
-
} = item;
|
|
184
|
+
var value = item.value;
|
|
212
185
|
item.isSelected = this.isValueSelected(value);
|
|
213
186
|
}
|
|
214
187
|
this.setState({
|
|
@@ -217,9 +190,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
|
|
|
217
190
|
}
|
|
218
191
|
updateViewport(top, bottom) {
|
|
219
192
|
var isLoading = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
220
|
-
var
|
|
221
|
-
table
|
|
222
|
-
} = this.props;
|
|
193
|
+
var table = this.props.table;
|
|
223
194
|
if (table == null) {
|
|
224
195
|
return;
|
|
225
196
|
}
|
|
@@ -235,12 +206,11 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
|
|
|
235
206
|
table.setViewport(topRow, bottomRow);
|
|
236
207
|
}
|
|
237
208
|
render() {
|
|
238
|
-
var
|
|
239
|
-
offset,
|
|
240
|
-
isLoading,
|
|
241
|
-
items,
|
|
242
|
-
itemCount
|
|
243
|
-
} = this.state;
|
|
209
|
+
var _this$state = this.state,
|
|
210
|
+
offset = _this$state.offset,
|
|
211
|
+
isLoading = _this$state.isLoading,
|
|
212
|
+
items = _this$state.items,
|
|
213
|
+
itemCount = _this$state.itemCount;
|
|
244
214
|
return /*#__PURE__*/_jsxs("div", {
|
|
245
215
|
className: "select-value-list-wrapper",
|
|
246
216
|
children: [/*#__PURE__*/_jsx(SelectValueList, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreatorSelectValueList.js","names":["React","PureComponent","LoadingSpinner","SelectValueList","FadeTransition","Log","jsx","_jsx","jsxs","_jsxs","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","_defineProperty","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","selectedValues","dh","list","state","itemCount","items","offset","isLoading","componentDidMount","table","startListening","componentDidUpdate","prevProps","filters","invertSelection","stopListening","resetViewport","setState","applyFilter","componentWillUnmount","itemIndex","selectedIndex","splice","push","isSelected","visibleItemIndex","onChange","top","bottom","updateViewport","updateItemSelection","event","formatter","data","detail","column","columns","r","rows","row","get","displayValue","className","children","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","arguments","undefined","viewportSize","Math","max","setViewport","render","onSelect","onViewportChange","ref","in","mountOnEnter","unmountOnExit"],"sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent, type ReactElement } from 'react';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { type Formatter } from '@deephaven/jsapi-utils';\nimport {\n LoadingSpinner,\n SelectValueList,\n type SelectItem,\n FadeTransition,\n} from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\ninterface AdvancedFilterCreatorSelectValueListProps<T> {\n dh: typeof DhType;\n selectedValues: (T | null)[];\n table?: DhType.Table;\n filters: DhType.FilterCondition[];\n invertSelection: boolean;\n onChange: (selectedValues: (T | null)[], invertSelection: boolean) => void;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterCreatorSelectValueListState<T> {\n itemCount: number;\n items: SelectItem<T>[];\n offset: number;\n selectedValues: (T | null)[];\n isLoading: boolean;\n}\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueListProps<T>,\n AdvancedFilterCreatorSelectValueListState<T>\n> {\n static defaultProps = {\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n };\n\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param value The value to search for\n * @param values The array of values to search within\n */\n static indexOf(value: unknown, values: unknown[]): number {\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n if (\n v === value ||\n (v != null &&\n v.valueOf != null &&\n value != null &&\n value.valueOf != null &&\n v.valueOf() === value.valueOf())\n ) {\n return i;\n }\n }\n\n return -1;\n }\n\n constructor(props: AdvancedFilterCreatorSelectValueListProps<T>) {\n super(props);\n\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n\n const { selectedValues, dh } = this.props;\n\n this.dh = dh;\n this.list = null;\n\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n const { table } = this.props;\n if (table) this.startListening(table);\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueListProps<T>\n ): void {\n const { filters, invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n if (prevProps.table) this.stopListening(prevProps.table);\n if (table) this.startListening(table);\n this.resetViewport();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ selectedValues: [] }, this.handleSelectionUpdate);\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues }, this.handleSelectionUpdate);\n }\n\n if (prevProps.filters !== filters) {\n table?.applyFilter(filters);\n this.resetViewport();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.props;\n if (table) this.stopListening(table);\n }\n\n dh: typeof DhType;\n\n list: SelectValueList<T> | null;\n\n handleSelect(itemIndex: number, value: T | null): void {\n const { invertSelection } = this.props;\n let { selectedValues } = this.state;\n selectedValues = [...selectedValues];\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n\n let isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n\n const { offset } = this.state;\n let { items } = this.state;\n items = [...items];\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n\n this.setState({ items, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleViewportChange(top: number, bottom: number): void {\n this.updateViewport(top, bottom);\n }\n\n handleSelectionUpdate(): void {\n this.updateItemSelection();\n }\n\n handleTableUpdate(event: DhType.Event<DhType.ViewportData>): void {\n const { table, formatter } = this.props;\n if (!table) return;\n\n const data = event.detail;\n const { offset } = data;\n const items = [];\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n let displayValue: string | JSX.Element;\n if (value == null) {\n displayValue = <i className=\"text-muted\">null</i>;\n } else if (value === '') {\n displayValue = <i className=\"text-muted\">empty</i>;\n } else {\n displayValue = formatter.getFormattedString(\n value,\n column.type,\n column.name\n );\n }\n const isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected,\n });\n }\n\n log.debug2('Received table update:', offset, items.length);\n\n const itemCount = table.size;\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n isValueSelected(value: T): boolean {\n const { invertSelection } = this.props;\n const { selectedValues } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n\n startListening(table: DhType.Table): void {\n table.addEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n stopListening(table: DhType.Table): void {\n table.removeEventListener(\n this.dh.Table.EVENT_UPDATED,\n this.handleTableUpdate\n );\n }\n\n resetViewport(): void {\n if (this.list && this.list.topRow != null && this.list.bottomRow != null) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n\n updateItemSelection(): void {\n let { items } = this.state;\n\n items = [...items];\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value } = item;\n item.isSelected = this.isValueSelected(value);\n }\n\n this.setState({ items });\n }\n\n updateViewport(top: number, bottom: number, isLoading = false): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n if (isLoading) {\n this.setState({ isLoading: true });\n }\n\n const viewportSize = bottom - top + 1;\n const topRow = Math.max(0, top - viewportSize * 3);\n const bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow);\n }\n\n render(): ReactElement {\n const { offset, isLoading, items, itemCount } = this.state;\n\n return (\n <div className=\"select-value-list-wrapper\">\n <SelectValueList\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n ref={list => {\n this.list = list;\n }}\n />\n <FadeTransition in={isLoading} mountOnEnter unmountOnExit>\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </FadeTransition>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreatorSelectValueList.js","names":["React","PureComponent","LoadingSpinner","SelectValueList","FadeTransition","Log","jsx","_jsx","jsxs","_jsxs","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","_defineProperty","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","_this$props","selectedValues","dh","list","state","itemCount","items","offset","isLoading","componentDidMount","table","startListening","componentDidUpdate","prevProps","_this$props2","filters","invertSelection","stopListening","resetViewport","setState","applyFilter","componentWillUnmount","itemIndex","selectedIndex","splice","push","isSelected","visibleItemIndex","onChange","top","bottom","updateViewport","updateItemSelection","event","_this$props3","formatter","data","detail","column","columns","r","rows","row","get","displayValue","className","children","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","arguments","undefined","viewportSize","Math","max","setViewport","render","_this$state","onSelect","onViewportChange","ref","in","mountOnEnter","unmountOnExit"],"sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent, type ReactElement } from 'react';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { type Formatter } from '@deephaven/jsapi-utils';\nimport {\n LoadingSpinner,\n SelectValueList,\n type SelectItem,\n FadeTransition,\n} from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\ninterface AdvancedFilterCreatorSelectValueListProps<T> {\n dh: typeof DhType;\n selectedValues: (T | null)[];\n table?: DhType.Table;\n filters: DhType.FilterCondition[];\n invertSelection: boolean;\n onChange: (selectedValues: (T | null)[], invertSelection: boolean) => void;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterCreatorSelectValueListState<T> {\n itemCount: number;\n items: SelectItem<T>[];\n offset: number;\n selectedValues: (T | null)[];\n isLoading: boolean;\n}\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueListProps<T>,\n AdvancedFilterCreatorSelectValueListState<T>\n> {\n static defaultProps = {\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n };\n\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param value The value to search for\n * @param values The array of values to search within\n */\n static indexOf(value: unknown, values: unknown[]): number {\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n if (\n v === value ||\n (v != null &&\n v.valueOf != null &&\n value != null &&\n value.valueOf != null &&\n v.valueOf() === value.valueOf())\n ) {\n return i;\n }\n }\n\n return -1;\n }\n\n constructor(props: AdvancedFilterCreatorSelectValueListProps<T>) {\n super(props);\n\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n\n const { selectedValues, dh } = this.props;\n\n this.dh = dh;\n this.list = null;\n\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n const { table } = this.props;\n if (table) this.startListening(table);\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueListProps<T>\n ): void {\n const { filters, invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n if (prevProps.table) this.stopListening(prevProps.table);\n if (table) this.startListening(table);\n this.resetViewport();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ selectedValues: [] }, this.handleSelectionUpdate);\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues }, this.handleSelectionUpdate);\n }\n\n if (prevProps.filters !== filters) {\n table?.applyFilter(filters);\n this.resetViewport();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.props;\n if (table) this.stopListening(table);\n }\n\n dh: typeof DhType;\n\n list: SelectValueList<T> | null;\n\n handleSelect(itemIndex: number, value: T | null): void {\n const { invertSelection } = this.props;\n let { selectedValues } = this.state;\n selectedValues = [...selectedValues];\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n\n let isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n\n const { offset } = this.state;\n let { items } = this.state;\n items = [...items];\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n\n this.setState({ items, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleViewportChange(top: number, bottom: number): void {\n this.updateViewport(top, bottom);\n }\n\n handleSelectionUpdate(): void {\n this.updateItemSelection();\n }\n\n handleTableUpdate(event: DhType.Event<DhType.ViewportData>): void {\n const { table, formatter } = this.props;\n if (!table) return;\n\n const data = event.detail;\n const { offset } = data;\n const items = [];\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n let displayValue: string | JSX.Element;\n if (value == null) {\n displayValue = <i className=\"text-muted\">null</i>;\n } else if (value === '') {\n displayValue = <i className=\"text-muted\">empty</i>;\n } else {\n displayValue = formatter.getFormattedString(\n value,\n column.type,\n column.name\n );\n }\n const isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected,\n });\n }\n\n log.debug2('Received table update:', offset, items.length);\n\n const itemCount = table.size;\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n isValueSelected(value: T): boolean {\n const { invertSelection } = this.props;\n const { selectedValues } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n\n startListening(table: DhType.Table): void {\n table.addEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n stopListening(table: DhType.Table): void {\n table.removeEventListener(\n this.dh.Table.EVENT_UPDATED,\n this.handleTableUpdate\n );\n }\n\n resetViewport(): void {\n if (this.list && this.list.topRow != null && this.list.bottomRow != null) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n\n updateItemSelection(): void {\n let { items } = this.state;\n\n items = [...items];\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value } = item;\n item.isSelected = this.isValueSelected(value);\n }\n\n this.setState({ items });\n }\n\n updateViewport(top: number, bottom: number, isLoading = false): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n if (isLoading) {\n this.setState({ isLoading: true });\n }\n\n const viewportSize = bottom - top + 1;\n const topRow = Math.max(0, top - viewportSize * 3);\n const bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow);\n }\n\n render(): ReactElement {\n const { offset, isLoading, items, itemCount } = this.state;\n\n return (\n <div className=\"select-value-list-wrapper\">\n <SelectValueList\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n ref={list => {\n this.list = list;\n }}\n />\n <FadeTransition in={isLoading} mountOnEnter unmountOnExit>\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </FadeTransition>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,14 +10,12 @@ export function isColumnHeaderGroup(x) {
|
|
|
10
10
|
}
|
|
11
11
|
export default class ColumnHeaderGroup {
|
|
12
12
|
constructor(_ref) {
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
parent
|
|
20
|
-
} = _ref;
|
|
13
|
+
var name = _ref.name,
|
|
14
|
+
children = _ref.children,
|
|
15
|
+
color = _ref.color,
|
|
16
|
+
depth = _ref.depth,
|
|
17
|
+
childIndexes = _ref.childIndexes,
|
|
18
|
+
parent = _ref.parent;
|
|
21
19
|
_defineProperty(this, "name", void 0);
|
|
22
20
|
_defineProperty(this, "children", void 0);
|
|
23
21
|
_defineProperty(this, "depth", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnHeaderGroup.js","names":["GridUtils","memoizeOne","Log","log","module","isColumnHeaderGroup","x","ColumnHeaderGroup","constructor","_ref","name","children","color","depth","childIndexes","parent","_defineProperty","movedItems","flattenedIndexes","flat","visibleIndexes","getVisibleIndexes","start","Math","min","end","max","length","warn","concat","undefined","setParent","addChildren","newChildren","Set","removeChildren","forEach","delete","isNew","startsWith","NEW_GROUP_PREFIX","isValid"],"sources":["../src/ColumnHeaderGroup.ts"],"sourcesContent":["import {\n type MoveOperation,\n GridUtils,\n type ModelIndex,\n type BoundedAxisRange,\n type IColumnHeaderGroup,\n} from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('ColumnHeaderGroup');\n\nexport function isColumnHeaderGroup(x: unknown): x is ColumnHeaderGroup {\n return x instanceof ColumnHeaderGroup;\n}\n\nexport type ColumnHeaderGroupConfig = {\n name: string;\n children: string[];\n color?: string | null;\n depth: number;\n childIndexes: ModelIndex[];\n parent?: string;\n};\n\nexport default class ColumnHeaderGroup implements IColumnHeaderGroup {\n static NEW_GROUP_PREFIX = ':newGroup';\n\n name: string;\n\n children: string[];\n\n depth: number;\n\n parent?: string;\n\n color?: string;\n\n childIndexes: ModelIndex[];\n\n constructor({\n name,\n children,\n color,\n depth,\n childIndexes,\n parent,\n }: ColumnHeaderGroupConfig) {\n this.name = name;\n this.children = children;\n this.color = color ?? undefined;\n this.depth = depth;\n this.childIndexes = childIndexes;\n this.parent = parent;\n }\n\n getVisibleRange = memoizeOne(\n (movedItems: readonly MoveOperation[]): BoundedAxisRange => {\n const flattenedIndexes = this.childIndexes.flat();\n const visibleIndexes = GridUtils.getVisibleIndexes(\n flattenedIndexes,\n movedItems\n );\n\n const start = Math.min(...visibleIndexes);\n const end = Math.max(...visibleIndexes);\n\n if (end - start !== flattenedIndexes.length - 1) {\n log.warn(`Column header group ${this.name} is not contiguous`);\n }\n\n return [start, end];\n }\n );\n\n setParent(parent: string | undefined): void {\n this.parent = parent;\n }\n\n addChildren(children: string[]): void {\n const newChildren = new Set(this.children.concat(children));\n this.children = [...newChildren];\n }\n\n removeChildren(children: string[]): void {\n const newChildren = new Set(this.children);\n children.forEach(name => newChildren.delete(name));\n this.children = [...newChildren];\n }\n\n get isNew(): boolean {\n return this.name.startsWith(ColumnHeaderGroup.NEW_GROUP_PREFIX);\n }\n\n /**\n * Checks if a group is valid.\n * An invalid group needs to be re-parsed with the corresponding model.\n * @returns true if the group is valid (all children have indexes)\n */\n isValid(): boolean {\n return this.children.length === this.childIndexes.length;\n }\n}\n"],"mappings":";;;AAAA,SAEEA,SAAS,QAIJ,iBAAiB;AACxB,OAAOC,UAAU,MAAM,aAAa;AACpC,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,mBAAmB,CAAC;AAE3C,OAAO,SAASC,mBAAmBA,CAACC,CAAU,EAA0B;EACtE,OAAOA,CAAC,YAAYC,iBAAiB;AACvC;AAWA,eAAe,MAAMA,iBAAiB,CAA+B;EAenEC,WAAWA,CAAAC,IAAA,EAOiB;IAAA,
|
|
1
|
+
{"version":3,"file":"ColumnHeaderGroup.js","names":["GridUtils","memoizeOne","Log","log","module","isColumnHeaderGroup","x","ColumnHeaderGroup","constructor","_ref","name","children","color","depth","childIndexes","parent","_defineProperty","movedItems","flattenedIndexes","flat","visibleIndexes","getVisibleIndexes","start","Math","min","end","max","length","warn","concat","undefined","setParent","addChildren","newChildren","Set","removeChildren","forEach","delete","isNew","startsWith","NEW_GROUP_PREFIX","isValid"],"sources":["../src/ColumnHeaderGroup.ts"],"sourcesContent":["import {\n type MoveOperation,\n GridUtils,\n type ModelIndex,\n type BoundedAxisRange,\n type IColumnHeaderGroup,\n} from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('ColumnHeaderGroup');\n\nexport function isColumnHeaderGroup(x: unknown): x is ColumnHeaderGroup {\n return x instanceof ColumnHeaderGroup;\n}\n\nexport type ColumnHeaderGroupConfig = {\n name: string;\n children: string[];\n color?: string | null;\n depth: number;\n childIndexes: ModelIndex[];\n parent?: string;\n};\n\nexport default class ColumnHeaderGroup implements IColumnHeaderGroup {\n static NEW_GROUP_PREFIX = ':newGroup';\n\n name: string;\n\n children: string[];\n\n depth: number;\n\n parent?: string;\n\n color?: string;\n\n childIndexes: ModelIndex[];\n\n constructor({\n name,\n children,\n color,\n depth,\n childIndexes,\n parent,\n }: ColumnHeaderGroupConfig) {\n this.name = name;\n this.children = children;\n this.color = color ?? undefined;\n this.depth = depth;\n this.childIndexes = childIndexes;\n this.parent = parent;\n }\n\n getVisibleRange = memoizeOne(\n (movedItems: readonly MoveOperation[]): BoundedAxisRange => {\n const flattenedIndexes = this.childIndexes.flat();\n const visibleIndexes = GridUtils.getVisibleIndexes(\n flattenedIndexes,\n movedItems\n );\n\n const start = Math.min(...visibleIndexes);\n const end = Math.max(...visibleIndexes);\n\n if (end - start !== flattenedIndexes.length - 1) {\n log.warn(`Column header group ${this.name} is not contiguous`);\n }\n\n return [start, end];\n }\n );\n\n setParent(parent: string | undefined): void {\n this.parent = parent;\n }\n\n addChildren(children: string[]): void {\n const newChildren = new Set(this.children.concat(children));\n this.children = [...newChildren];\n }\n\n removeChildren(children: string[]): void {\n const newChildren = new Set(this.children);\n children.forEach(name => newChildren.delete(name));\n this.children = [...newChildren];\n }\n\n get isNew(): boolean {\n return this.name.startsWith(ColumnHeaderGroup.NEW_GROUP_PREFIX);\n }\n\n /**\n * Checks if a group is valid.\n * An invalid group needs to be re-parsed with the corresponding model.\n * @returns true if the group is valid (all children have indexes)\n */\n isValid(): boolean {\n return this.children.length === this.childIndexes.length;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/ColumnStatistics.js
CHANGED
|
@@ -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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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\"> ({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":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,EAAEC,UAAU,EAAEC,cAAc,QAAQ,uBAAuB;AAC1E,SAASC,QAAQ,EAAEC,SAAS,EAAEC,WAAW,EAAEC,MAAM,QAAQ,kBAAkB;AAE3E,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAAiCC,YAAY,QAAQ,kBAAkB;AACvE,SAASC,mBAAmB,EAAEC,qBAAqB,QAAQ,iBAAiB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAK7E,IAAMC,GAAG,GAAGV,GAAG,CAACW,MAAM,CAAC,kBAAkB,CAAC;AAC1C,IAAMC,qBAA6C,GAAG;EACpDC,IAAI,EAAE;AACR,CAAC;AAqBD,MAAMC,gBAAgB,SAASxB,SAAS,CAGtC;EAIA,OAAOyB,aAAaA,CAACC,SAAiB,EAAU;IAAA,IAAAC,qBAAA;IAC9C,QAAAA,qBAAA,GACEL,qBAAqB,CAACI,SAAS,CAAC,cAAAC,qBAAA,cAAAA,qBAAA,GAChCD,SAAS,CACNE,KAAK,CAAC,GAAG,CAAC,CACVC,GAAG,CAACC,CAAC,IAAIA,CAAC,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGD,CAAC,CAACE,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,CAAC,CACxDC,IAAI,CAAC,GAAG,CAAC;EAEhB;EAEAC,WAAWA,CAACC,KAA4B,EAAE;IACxC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAEb,IAAI,CAACC,WAAW,GAAG,IAAI,CAACA,WAAW,CAACC,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACC,wBAAwB,GAAG,IAAI,CAACA,wBAAwB,CAACD,IAAI,CAAC,IAAI,CAAC;IACxE,IAAI,CAACE,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACF,IAAI,CAAC,IAAI,CAAC;IAExD,IAAI,CAACG,iBAAiB,GAAG,IAAI;IAE7B,IAAI,CAACC,KAAK,GAAG;MACXC,KAAK,EAAE,IAAI;MACXC,OAAO,EAAE,KAAK;MACdC,UAAU,EAAE,IAAI;MAChBC,OAAO,EAAE;IACX,CAAC;EACH;EAEAC,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAACC,uBAAuB,CAAC,CAAC;EAChC;EAEAC,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,IAAI,CAACR,iBAAiB,EAAE;MAC1B,IAAI,CAACA,iBAAiB,CAACS,MAAM,CAAC,CAAC;IACjC;EACF;EAIAF,uBAAuBA,CAAA,EAAS;IAC9B,IAAM;MAAEG,MAAM;MAAEC;IAAM,CAAC,GAAG,IAAI,CAACjB,KAAK;IAEpC,IAAMW,OAAO,GACXM,KAAK,CAACC,QAAQ,GACdD,KAAK,CAACE,eAAe,GACrBF,KAAK,CAACG,sBAAsB,GAC5BH,KAAK,CAACI,mBAAmB;IAC3B,IAAI,CAACC,QAAQ,CAAC;MAAEX;IAAQ,CAAC,CAAC;IAC1B,IAAI,CAACM,KAAK,CAACM,2BAA2B,IAAIP,MAAM,CAACQ,OAAO,KAAK,IAAI,EAAE;MACjE,IAAI,CAACF,QAAQ,CAAC;QAAEb,OAAO,EAAE;MAAM,CAAC,CAAC;IACnC,CAAC,MAAM,IAAIE,OAAO,GAAGvB,gBAAgB,CAACqC,mBAAmB,EAAE;MACzD,IAAI,CAACrB,wBAAwB,CAAC,CAAC;IACjC;EACF;EAEAA,wBAAwBA,CAAA,EAAS;IAC/B,IAAI,CAACkB,QAAQ,CAAC;MAAEb,OAAO,EAAE;IAAK,CAAC,CAAC;IAEhC,IAAM;MAAEO,MAAM;MAAEC;IAAM,CAAC,GAAG,IAAI,CAACjB,KAAK;IAEpC,IAAI,CAACM,iBAAiB,GAAG/B,YAAY,CAACmD,cAAc,CAClDT,KAAK,CAACU,gBAAgB,CAACX,MAAM,CAC/B,CAAC;IAED,IAAI,CAACV,iBAAiB,CAACsB,IAAI,CAAC,IAAI,CAACvB,gBAAgB,CAAC,CAACwB,KAAK,CAAC,IAAI,CAAC3B,WAAW,CAAC;EAC5E;EAEAG,gBAAgBA,CAACyB,KAA0B,EAAQ;IACjD9C,GAAG,CAAC+C,KAAK,CAAC,qBAAqB,EAAED,KAAK,CAAC;IAEvC,IAAM;MAAEb,KAAK;MAAEe;IAAa,CAAC,GAAG,IAAI,CAAChC,KAAK;IAC1C,IAAMU,UAAuB,GAAG,EAAE;IAElCoB,KAAK,CAACG,aAAa,CAACC,OAAO,CAAC,CAACC,KAAK,EAAE7C,SAAS,KAAK;MAChDoB,UAAU,CAAC0B,IAAI,CAAC;QACd9C,SAAS,EAAEF,gBAAgB,CAACC,aAAa,CAACC,SAAS,CAAC;QACpD6C,KAAK;QACLE,IAAI,EAAEP,KAAK,CAACQ,OAAO,CAAChD,SAAS;MAC/B,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFwC,KAAK,CAACS,YAAY,CAACL,OAAO,CAAC,CAACC,KAAK,EAAE7C,SAAS,KAAK;MAC/CoB,UAAU,CAAC0B,IAAI,CAAC;QACd9C,SAAS;QACTkD,SAAS,EAAE,gCAAgC;QAC3CL,KAAK;QACLE,IAAI,EAAE;MACR,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,CAACf,QAAQ,CAAC;MACZb,OAAO,EAAE,KAAK;MACdC,UAAU;MACVC,OAAO,EACLM,KAAK,CAACC,QAAQ,GACdD,KAAK,CAACE,eAAe,GACrBF,KAAK,CAACG,sBAAsB,GAC5BH,KAAK,CAACI;IACV,CAAC,CAAC;IAEFW,YAAY,CAAC,CAAC;EAChB;EAEA9B,WAAWA,CAACM,KAAY,EAAQ;IAC9B,IAAIA,KAAK,IAAI,IAAI,IAAIjC,YAAY,CAACkE,UAAU,CAACjC,KAAK,CAAC,EAAE;MACnDxB,GAAG,CAAC+C,KAAK,CAAC,kDAAkD,CAAC;MAC7D;IACF;IAEA/C,GAAG,CAACwB,KAAK,CAAC,6BAA6B,EAAEA,KAAK,CAAC;IAC/C,IAAI,CAACc,QAAQ,CAAC;MACZd,KAAK;MACLC,OAAO,EAAE,KAAK;MACdC,UAAU,EAAE;IACd,CAAC,CAAC;EACJ;EAEAgC,MAAMA,CAAA,EAAuB;IAAA,IAAAC,mBAAA;IAC3B,IAAM;MAAE3B,MAAM;MAAEC;IAAM,CAAC,GAAG,IAAI,CAACjB,KAAK;IACpC,IAAM;MAAEQ,KAAK;MAAEC,OAAO;MAAEC,UAAU;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IAC1D,IAAMqC,sBAAsB,GAC1B,CAACnC,OAAO,IACRD,KAAK,IAAI,IAAI,IACbE,UAAU,IAAI,IAAI,IAClBO,KAAK,CAACM,2BAA2B;IACnC,IAAMsB,iBAAiB,GAAG,EAAE;IAC5B,IAAMC,UAAU,GAAG9B,MAAM,CAACqB,IAAI,CAACU,SAAS,CAAC/B,MAAM,CAACqB,IAAI,CAACW,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1E,IAAMC,WAAW,GAAGjC,MAAM,CAACiC,WAAW,KAAK,IAAI,GAAG,IAAI,GAAGjC,MAAM,CAACiC,WAAW;IAC3E,IAAIvC,UAAU,IAAI,IAAI,EAAE;MACtB,KAAK,IAAIwC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxC,UAAU,CAACyC,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;QAC7C,IAAM;UAAE5D,SAAS;UAAEkD,SAAS;UAAEL,KAAK;UAAEE;QAAK,CAAC,GAAG3B,UAAU,CAACwC,CAAC,CAAC;QAC3D,IAAME,cAAc,GAAG,CAACf,IAAI,GACxBpB,KAAK,CAACoC,aAAa,CAAClB,KAAK,EAAEnB,MAAM,CAACqB,IAAI,EAAErB,MAAM,CAACsC,IAAI,CAAC,GACpDrC,KAAK,CAACoC,aAAa,CAAClB,KAAK,EAAEE,IAAI,CAAC;QACpC,IAAMkB,gBAAgB,gBACpB1E,KAAA,CAAClB,KAAK,CAACmB,QAAQ;UAAA0E,QAAA,gBACb7E,IAAA;YACE6D,SAAS,EAAE3E,UAAU,CAAC,4BAA4B,EAAE2E,SAAS,CAAE;YAAAgB,QAAA,EAE9DlE;UAAS,CACP,CAAC,eACNX,IAAA;YAAK6D,SAAS,EAAC,wBAAwB;YAAAgB,QAAA,EAAEJ;UAAc,CAAM,CAAC;QAAA,GAN3C9D,SAOL,CACjB;QACDuD,iBAAiB,CAACT,IAAI,CAACmB,gBAAgB,CAAC;MAC1C;IACF;IACA,IAAME,aAAa,GACjBhF,qBAAqB,CAACwC,KAAK,CAAC,IAAIA,KAAK,CAACyC,iBAAiB,GACnD,eAAe,GACf,gBAAgB;IACtB,IAAMC,iBAAiB,GAAG1C,KAAK,CAACoC,aAAa,CAAC1C,OAAO,EAAE,MAAM,CAAC;IAC9D,IAAMiD,WAAW,GAAG3C,KAAK,CAAC4C,oBAAoB,CAAC7C,MAAM,CAACsC,IAAI,CAAC;IAC3D,oBACEzE,KAAA;MAAK2D,SAAS,EAAC,mBAAmB;MAAAgB,QAAA,gBAChC3E,KAAA;QAAK2D,SAAS,EAAC,yBAAyB;QAAAgB,QAAA,IAAAb,mBAAA,GACrC3B,MAAM,CAAC8C,WAAW,cAAAnB,mBAAA,cAAAA,mBAAA,GAAI3B,MAAM,CAACsC,IAAI,eAClCzE,KAAA;UAAM2D,SAAS,EAAC,wBAAwB;UAAAgB,QAAA,GAAC,OAAO,EAACV,UAAU,EAAC,GAAC;QAAA,CAAM,CAAC,eACpEnE,IAAA,CAACX,UAAU;UAAC+F,OAAO,EAAC,kBAAkB;UAACC,IAAI,EAAEhD,MAAM,CAACsC,IAAK;UAACW,OAAO;QAAA,CAAE,CAAC;MAAA,CACjE,CAAC,EACLhB,WAAW,IAAI,IAAI,iBAClBtE,IAAA;QAAK6D,SAAS,EAAC,+BAA+B;QAAAgB,QAAA,EAAEP;MAAW,CAAM,CAClE,EACAW,WAAW,IAAI,IAAI,IAAI,CAAC3C,KAAK,CAACiD,gBAAgB,CAACN,WAAW,CAAC,iBAC1D/E,KAAA;QAAK2D,SAAS,EAAC,0BAA0B;QAAAgB,QAAA,gBACvC7E,IAAA,CAACb,eAAe;UAACqG,IAAI,EAAE/F,WAAY;UAACoE,SAAS,EAAC;QAAM,CAAE,CAAC,gBAEzD;MAAA,CAAK,CACN,EACAoB,WAAW,IAAI,IAAI,IAAI,CAAC3C,KAAK,CAACmD,eAAe,CAACR,WAAW,CAAC,iBACzD/E,KAAA;QAAK2D,SAAS,EAAC,0BAA0B;QAAAgB,QAAA,gBACvC7E,IAAA,CAACb,eAAe;UACdqG,IAAI,EAAElD,KAAK,CAACoD,cAAc,CAACT,WAAW,CAAC,GAAG1F,QAAQ,GAAGG,MAAO;UAC5DmE,SAAS,EAAC;QAAM,CACjB,CAAC,EACDvB,KAAK,CAACoD,cAAc,CAACT,WAAW,CAAC,GAAG,QAAQ,GAAG,aAAa;MAAA,CAC1D,CACN,EACAA,WAAW,IAAI,IAAI,IAClBpF,mBAAmB,CAACyC,KAAK,CAAC,IAC1BA,KAAK,CAACqD,UAAU,IAChB,CAACrD,KAAK,CAACsD,YAAY,CAACC,GAAG,CAACxD,MAAM,CAACsC,IAAI,CAAC,IACpC,CAACrC,KAAK,CAACwD,cAAc,CAACD,GAAG,CAACxD,MAAM,CAACsC,IAAI,CAAC,iBACpCzE,KAAA;QAAK2D,SAAS,EAAC,0BAA0B;QAAAgB,QAAA,gBACvC7E,IAAA,CAACb,eAAe;UAACqG,IAAI,EAAE9F,MAAO;UAACmE,SAAS,EAAC;QAAM,CAAE,CAAC,gBAEpD;MAAA,CAAK,CACN,eACH3D,KAAA;QAAK2D,SAAS,EAAC,wBAAwB;QAAAgB,QAAA,GACpC9C,UAAU,IAAI,IAAI,iBACjB7B,KAAA,CAAAE,SAAA;UAAAyE,QAAA,gBACE7E,IAAA;YAAK6D,SAAS,EAAC,4BAA4B;YAAAgB,QAAA,EAAEC;UAAa,CAAM,CAAC,eACjE9E,IAAA;YAAK6D,SAAS,EAAC,wBAAwB;YAAAgB,QAAA,EAAEG;UAAiB,CAAM,CAAC;QAAA,CACjE,CACH,EAEAd,iBAAiB;MAAA,CACf,CAAC,EACLD,sBAAsB,iBACrBjE,IAAA,CAACZ,MAAM;QACL2G,IAAI,EAAC,OAAO;QACZlC,SAAS,EAAC,MAAM;QAChBmC,OAAO,EAAE,IAAI,CAACvE,wBAAyB;QAAAoD,QAAA,EACxC;MAED,CAAQ,CACT,EACAhD,KAAK,IAAI,IAAI,iBAAI7B,IAAA;QAAK6D,SAAS,EAAC,eAAe;QAAAgB,QAAA,KAAAoB,MAAA,CAAKpE,KAAK;MAAA,CAAQ,CAAC,EAClEE,UAAU,IAAI,CAACD,OAAO,iBACrB9B,IAAA,CAACZ,MAAM;QACL2G,IAAI,EAAC,OAAO;QACZlC,SAAS,EAAC,MAAM;QAChBmC,OAAO,EAAE,IAAI,CAACvE,wBAAyB;QACvC+D,IAAI,EAAEhG,SAAU;QAAAqF,QAAA,EACjB;MAED,CAAQ,CACT,EACA/C,OAAO,iBACN5B,KAAA;QAAK2D,SAAS,EAAC,2BAA2B;QAAAgB,QAAA,gBACxC7E,IAAA,CAACV,cAAc;UAACuE,SAAS,EAAC;QAAgC,CAAE,CAAC,wBAE/D;MAAA,CAAK,CACN;IAAA,CACE,CAAC;EAEV;AACF;AAtOE;AAAAvC,eAAA,CAJIb,gBAAgB,yBAKS,MAAM;AAuOrC,eAAeA,gBAAgB","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\"> ({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":[]}
|