@deephaven/iris-grid 0.37.4-logout.0 → 0.37.4-logout.17
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/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js +1 -2
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.css +1 -3
- package/dist/IrisGrid.css.map +1 -1
- package/dist/IrisGrid.js +10 -3
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.js +3 -4
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.js +138 -0
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.js +5 -6
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +6 -0
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTheme.module.css +1 -2
- package/dist/IrisGridTheme.module.css.map +1 -1
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js +3 -0
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.js +3 -0
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
- package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js +1 -2
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +5 -0
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettings.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsType.js +3 -3
- package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/OptionType.js +3 -3
- package/dist/sidebar/OptionType.js.map +1 -1
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js +4 -0
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +3 -3
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationOperation.js +3 -3
- package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +21 -21
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/icons/BarIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
- package/dist/sidebar/icons/LineIcon.js.map +1 -1
- package/dist/sidebar/icons/PieIcon.js.map +1 -1
- package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreator.js","names":["React","PureComponent","classNames","FontAwesomeIcon","memoize","Operator","FilterOperator","assertOperatorValue","assertFilterOperatorValue","dhSortAmountDown","dhNewCircleLargeFilled","TableUtils","Button","ContextActionUtils","Log","PromiseUtils","shortid","AdvancedFilterCreatorFilterItem","AdvancedFilterCreatorSelectValue","log","module","AdvancedFilterCreator","makeFilterItem","key","constructor","props","columnType","getFilterTypes","handleAddAnd","bind","handleAddOr","handleChangeFilterOperator","handleDone","handleFilterChange","handleFilterDelete","handleSelectValueChange","handleReset","handleSortDown","handleSortUp","handleSubmit","handleFocusTrapStart","handleFocusTrapEnd","handleUpdateTimeout","focusTrapContainer","createRef","options","filterOperators","invertSelection","selectedValues","filterItems","map","selectedType","value","length","push","state","valuesTableError","valuesTable","undefined","componentDidMount","initValuesTable","componentWillUnmount","debounceTimeout","clearTimeout","sendUpdate","valuesTablePromise","cancel","getFilterChangeHandler","index","getFilterDeleteHandler","model","column","isValuesTableAvailable","debug","makeCancelableTablePromise","then","sort","columns","asc","applySort","setState","catch","error","isCanceled","current","querySelector","focus","inputs","querySelectorAll","element","concat","and","or","operator","startUpdateTimer","filterIndex","splice","event","addToExisting","isModifierKeyDown","sortTable","sortDirection","descending","ascending","stopUpdateTimer","preventDefault","onDone","shouldShowAddFilter","filterItem","direction","onSortChange","setTimeout","debounceFilterUpdate","onFilterChange","formatter","items","filter","operators","i","slice","makeAdvancedFilter","timeZone","render","isBoolean","isBooleanType","type","isDateType","filterTypes","substring","lastIndexOf","filterItemElements","filterOperator","isAndFilter","operatorElement","active","showAddFilterItem","addFilterItem","hidden","name"],"sources":["../src/AdvancedFilterCreator.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n// disabled for tab-index on focus traps, which are intentionally non-interactive\n\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport memoize from 'memoize-one';\nimport {\n Operator as FilterOperator,\n OperatorValue as FilterOperatorValue,\n TypeValue as FilterTypeValue,\n assertOperatorValue as assertFilterOperatorValue,\n} from '@deephaven/filters';\nimport { dhSortAmountDown, dhNewCircleLargeFilled } from '@deephaven/icons';\nimport {\n Formatter,\n TableUtils,\n SortDirection,\n FilterItem,\n} from '@deephaven/jsapi-utils';\nimport { Button, ContextActionUtils } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { CancelablePromise, PromiseUtils } from '@deephaven/utils';\nimport { Column, FilterCondition, Table } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport AdvancedFilterCreatorFilterItem from './AdvancedFilterCreatorFilterItem';\nimport AdvancedFilterCreatorSelectValue from './AdvancedFilterCreatorSelectValue';\nimport './AdvancedFilterCreator.scss';\nimport IrisGridModel from './IrisGridModel';\nimport { AdvancedFilterOptions } from './CommonTypes';\n\nconst log = Log.module('AdvancedFilterCreator');\n\ntype FilterChangeHandler = (\n selectedType: FilterTypeValue,\n value: string\n) => void;\n\ninterface AdvancedFilterCreatorProps {\n model: IrisGridModel;\n column: Column;\n onFilterChange: (\n column: Column,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ) => void;\n onSortChange: (\n column: Column,\n direction: SortDirection,\n addToExisting?: boolean\n ) => void;\n onDone: () => void;\n options: AdvancedFilterOptions;\n sortDirection: SortDirection;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterItem {\n selectedType?: FilterTypeValue;\n value?: string;\n key: string;\n}\n\ninterface AdvancedFilterCreatorState {\n // Filter items\n filterItems: AdvancedFilterItem[];\n\n // And/Or between the filter items\n filterOperators: FilterOperatorValue[];\n\n invertSelection: boolean;\n\n selectedValues: unknown[];\n\n valuesTableError: null;\n valuesTable?: Table;\n}\n\nclass AdvancedFilterCreator extends PureComponent<\n AdvancedFilterCreatorProps,\n AdvancedFilterCreatorState\n> {\n static debounceFilterUpdate = 250;\n\n static defaultProps = {\n options: {\n filterItems: null,\n filterOperators: null,\n invertSelection: true,\n selectedValues: [],\n },\n sortDirection: null,\n };\n\n static makeFilterItem(): AdvancedFilterItem {\n return { key: shortid() };\n }\n\n constructor(props: AdvancedFilterCreatorProps) {\n super(props);\n\n this.handleAddAnd = this.handleAddAnd.bind(this);\n this.handleAddOr = this.handleAddOr.bind(this);\n this.handleChangeFilterOperator = this.handleChangeFilterOperator.bind(\n this\n );\n this.handleDone = this.handleDone.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterDelete = this.handleFilterDelete.bind(this);\n this.handleSelectValueChange = this.handleSelectValueChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSortDown = this.handleSortDown.bind(this);\n this.handleSortUp = this.handleSortUp.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleFocusTrapStart = this.handleFocusTrapStart.bind(this);\n this.handleFocusTrapEnd = this.handleFocusTrapEnd.bind(this);\n this.handleUpdateTimeout = this.handleUpdateTimeout.bind(this);\n\n this.focusTrapContainer = React.createRef();\n\n const { options } = props;\n let { filterOperators, invertSelection, selectedValues } = options;\n\n // can be null or an empty array\n const filterItems: AdvancedFilterItem[] =\n options.filterItems?.map(({ selectedType, value }) => ({\n selectedType,\n value,\n key: shortid(),\n })) ?? [];\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n if (filterOperators == null) {\n filterOperators = [];\n }\n if (invertSelection == null) {\n invertSelection = true;\n }\n if (selectedValues == null) {\n selectedValues = [];\n }\n\n this.state = {\n // Filter items\n filterItems,\n\n // And/Or between the filter items\n filterOperators,\n\n invertSelection,\n\n selectedValues,\n\n valuesTableError: null,\n valuesTable: undefined,\n };\n }\n\n componentDidMount(): void {\n this.initValuesTable();\n }\n\n componentWillUnmount(): void {\n if (this.debounceTimeout != null) {\n clearTimeout(this.debounceTimeout);\n this.sendUpdate();\n }\n if (this.valuesTablePromise != null) {\n this.valuesTablePromise.cancel();\n }\n }\n\n focusTrapContainer: React.RefObject<HTMLFormElement>;\n\n debounceTimeout?: ReturnType<typeof setTimeout>;\n\n valuesTablePromise?: CancelablePromise<Table>;\n\n getFilterChangeHandler(index: number): FilterChangeHandler {\n return this.handleFilterChange.bind(this, index);\n }\n\n getFilterDeleteHandler(index: number): () => void {\n return this.handleFilterDelete.bind(this, index);\n }\n\n getFilterTypes = memoize((columnType: string): FilterTypeValue[] =>\n TableUtils.getFilterTypes(columnType)\n );\n\n initValuesTable(): void {\n const { model, column } = this.props;\n if (!model.isValuesTableAvailable) {\n log.debug('No values table for this model, just ignore');\n return;\n }\n\n this.valuesTablePromise = TableUtils.makeCancelableTablePromise(\n model.valuesTable(column)\n );\n this.valuesTablePromise\n .then(valuesTable => {\n const sort = valuesTable.columns[0].sort().asc();\n valuesTable.applySort([sort]);\n\n this.setState({ valuesTable });\n })\n .catch(error => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error('Unable to open values table', error);\n this.setState({ valuesTableError: error });\n });\n }\n\n handleFocusTrapEnd(): void {\n (this.focusTrapContainer?.current?.querySelector(\n 'button,select,input,textarea'\n ) as HTMLElement).focus();\n }\n\n handleFocusTrapStart(): void {\n const inputs = this.focusTrapContainer?.current?.querySelectorAll(\n 'button,select,input,textarea'\n );\n if (inputs && inputs.length > 0) {\n const element = inputs[inputs.length - 1] as HTMLElement;\n element.focus();\n }\n }\n\n handleAddAnd(): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.and);\n this.setState({ filterItems, filterOperators });\n }\n\n handleAddOr(): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.or);\n this.setState({ filterItems, filterOperators });\n }\n\n handleChangeFilterOperator(index: number, operator: string): void {\n let { filterOperators } = this.state;\n filterOperators = [...filterOperators];\n\n assertFilterOperatorValue(operator);\n\n filterOperators[index] = operator;\n\n this.setState({ filterOperators });\n\n this.startUpdateTimer();\n }\n\n handleFilterChange(\n filterIndex: number,\n selectedType: FilterTypeValue,\n value: string\n ): void {\n let { filterItems } = this.state;\n filterItems = [...filterItems];\n const { key } = filterItems[filterIndex];\n filterItems[filterIndex] = { key, selectedType, value };\n\n this.setState({ filterItems });\n\n this.startUpdateTimer();\n }\n\n handleFilterDelete(filterIndex: number): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = [...filterItems];\n filterOperators = [...filterOperators];\n if (filterIndex < filterItems.length) {\n filterItems.splice(filterIndex, 1);\n }\n\n if (filterIndex < filterOperators.length) {\n filterOperators.splice(filterIndex, 1);\n } else if (filterIndex === filterOperators.length) {\n // When deleting the last filter item, we also need to remove the last filter operator\n filterOperators.splice(filterOperators.length - 1, 1);\n }\n\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n\n this.setState({ filterItems, filterOperators });\n\n this.startUpdateTimer();\n }\n\n handleSelectValueChange(\n selectedValues: unknown[],\n invertSelection: boolean\n ): void {\n this.setState({ selectedValues, invertSelection });\n\n this.startUpdateTimer();\n }\n\n handleReset(): void {\n log.debug('Resetting Advanced Filter');\n\n this.setState({\n filterItems: [AdvancedFilterCreator.makeFilterItem()],\n filterOperators: [],\n selectedValues: [],\n invertSelection: true,\n });\n\n this.startUpdateTimer();\n }\n\n handleSortDown(event: React.MouseEvent<HTMLButtonElement>): void {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.descending, addToExisting);\n }\n\n handleSortUp(event: React.MouseEvent<HTMLButtonElement>): void {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.ascending, addToExisting);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n log.debug('Submitting Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n\n event.preventDefault();\n }\n\n handleDone(event: React.MouseEvent<HTMLButtonElement>): void {\n log.debug('Submitting and Closing Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n\n const { onDone } = this.props;\n onDone();\n\n event.preventDefault();\n }\n\n handleUpdateTimeout(): void {\n this.debounceTimeout = undefined;\n this.sendUpdate();\n }\n\n /**\n * Convenience function to check if the previous filter has been inputted, and\n * we should show the add filter buttons (+ AND OR)\n * @returns true If the add filter buttons should be shown, false otherwise\n */\n shouldShowAddFilter(): boolean {\n const { filterItems } = this.state;\n if (filterItems.length === 0) {\n return false;\n }\n\n const filterItem = filterItems[filterItems.length - 1];\n const { selectedType, value } = filterItem;\n\n return (\n selectedType != null &&\n selectedType.length > 0 &&\n value != null &&\n value.length > 0\n );\n }\n\n /**\n * Sorts the table in the specified direction. If already sorted in that direction, remove it.\n * @param direction The sort direction, ASC or DESC\n * @param addToExisting Add to the existing sort, or replace the existing table sort\n */\n sortTable(direction: SortDirection, addToExisting = false): void {\n const { column, onSortChange } = this.props;\n onSortChange(column, direction, addToExisting);\n }\n\n startUpdateTimer(): void {\n this.stopUpdateTimer();\n\n this.debounceTimeout = setTimeout(\n this.handleUpdateTimeout,\n AdvancedFilterCreator.debounceFilterUpdate\n );\n }\n\n stopUpdateTimer(): void {\n if (this.debounceTimeout !== undefined) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n\n sendUpdate(): void {\n const {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n } = this.state;\n const { column, onFilterChange, model } = this.props;\n const { formatter } = model;\n\n const items = filterItems.filter(\n ({ selectedType, value }) =>\n selectedType != null && value != null && value !== ''\n ) as FilterItem[];\n\n const operators = filterOperators\n .filter(\n (operator, i) =>\n operator != null &&\n filterItems[i].selectedType != null &&\n filterItems[i].value != null &&\n filterItems[i].value !== ''\n )\n .slice(0, items.length - 1);\n // slice last operator, user may have set an operator but not a value\n\n const options = {\n filterItems: items,\n filterOperators: operators,\n invertSelection,\n selectedValues,\n };\n\n const filter = TableUtils.makeAdvancedFilter(\n column,\n options,\n formatter.timeZone\n );\n\n onFilterChange(column, filter, options);\n }\n\n render(): JSX.Element {\n const { column, model, sortDirection, formatter } = this.props;\n const {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTable,\n valuesTableError,\n } = this.state;\n const { isValuesTableAvailable } = model;\n const isBoolean = TableUtils.isBooleanType(column.type);\n const isDateType = TableUtils.isDateType(column.type);\n const filterTypes = this.getFilterTypes(column.type);\n const columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n const filterItemElements = [];\n if (!isBoolean && filterTypes.length) {\n for (let i = 0; i < filterItems.length; i += 1) {\n const filterItem = filterItems[i];\n const { key, selectedType, value } = filterItem;\n\n const element = (\n <AdvancedFilterCreatorFilterItem\n key={key}\n column={column}\n filterTypes={filterTypes}\n onChange={this.getFilterChangeHandler(i)}\n onDelete={this.getFilterDeleteHandler(i)}\n selectedType={selectedType}\n value={value}\n formatter={formatter}\n />\n );\n filterItemElements.push(element);\n\n if (i < filterOperators.length) {\n const filterOperator = filterOperators[i];\n const isAndFilter = filterOperator === FilterOperator.and;\n const operatorElement = (\n <div\n key={`filterOperator${key}`}\n className=\"form-row justify-content-end advanced-filter-creator-filter-operator\"\n >\n <Button\n kind=\"ghost\"\n className={classNames('filter-operator', {\n active: isAndFilter,\n })}\n onClick={() =>\n this.handleChangeFilterOperator(i, FilterOperator.and)\n }\n >\n AND\n </Button>\n <Button\n kind=\"ghost\"\n className={classNames('filter-operator', {\n active: !isAndFilter,\n })}\n onClick={() =>\n this.handleChangeFilterOperator(i, FilterOperator.or)\n }\n >\n OR\n </Button>\n </div>\n );\n filterItemElements.push(operatorElement);\n }\n }\n }\n const showAddFilterItem = this.shouldShowAddFilter();\n const addFilterItem = (\n <div\n key=\"addFilterItem\"\n className={classNames('form-row justify-content-end add-filter-item', {\n hidden: !showAddFilterItem,\n })}\n >\n <span className=\"text-muted\">\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n </span>\n <Button\n kind=\"ghost\"\n className=\"btn-filter-item\"\n onClick={this.handleAddAnd}\n disabled={!showAddFilterItem}\n tooltip=\"Add filter with AND\"\n >\n AND\n </Button>\n <Button\n kind=\"ghost\"\n className=\"btn-filter-item\"\n onClick={this.handleAddOr}\n disabled={!showAddFilterItem}\n tooltip=\"Add filter with OR\"\n >\n OR\n </Button>\n </div>\n );\n filterItemElements.push(addFilterItem);\n\n return (\n <div className=\"advanced-filter-creator\" role=\"presentation\">\n <div tabIndex={0} onFocus={this.handleFocusTrapStart} />\n <form onSubmit={this.handleSubmit} ref={this.focusTrapContainer}>\n <div className=\"title-bar\">\n <h6 className=\"advanced-filter-title\">Advanced Filters</h6>\n <div className=\"advanced-filter-menu-buttons\">\n <Button\n kind=\"ghost\"\n className={classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.descending,\n })}\n onClick={this.handleSortDown}\n icon={dhSortAmountDown}\n tooltip={`Sort ${column.name} Descending`}\n />\n <Button\n kind=\"ghost\"\n className={classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.ascending,\n })}\n onClick={this.handleSortUp}\n icon={\n <FontAwesomeIcon icon={dhSortAmountDown} rotation={180} />\n }\n tooltip={`Sort ${column.name} Ascending`}\n />\n </div>\n </div>\n <hr />\n <div className=\"advanced-filter-column-name\">\n {column.name} \n <span className=\"column-type\">({columnType})</span>\n </div>\n {filterItemElements}\n {isValuesTableAvailable && valuesTableError == null && (\n <>\n {!isBoolean && <hr />}\n <div className=\"form-group\">\n <AdvancedFilterCreatorSelectValue<unknown>\n table={valuesTable}\n onChange={this.handleSelectValueChange}\n invertSelection={invertSelection}\n selectedValues={selectedValues}\n formatter={formatter}\n showSearch={!isDateType}\n timeZone={formatter.timeZone}\n />\n </div>\n </>\n )}\n <div className=\"form-row justify-content-end\">\n <Button\n kind=\"secondary\"\n className=\"mr-2\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" onClick={this.handleDone}>\n Done\n </Button>\n </div>\n </form>\n <div tabIndex={0} onFocus={this.handleFocusTrapEnd} />\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreator;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreator.js","names":["React","PureComponent","classNames","FontAwesomeIcon","memoize","Operator","FilterOperator","assertOperatorValue","assertFilterOperatorValue","dhSortAmountDown","dhNewCircleLargeFilled","TableUtils","Button","ContextActionUtils","Log","PromiseUtils","shortid","AdvancedFilterCreatorFilterItem","AdvancedFilterCreatorSelectValue","log","module","AdvancedFilterCreator","makeFilterItem","key","constructor","props","_options$filterItems$","_options$filterItems","_defineProperty","columnType","getFilterTypes","handleAddAnd","bind","handleAddOr","handleChangeFilterOperator","handleDone","handleFilterChange","handleFilterDelete","handleSelectValueChange","handleReset","handleSortDown","handleSortUp","handleSubmit","handleFocusTrapStart","handleFocusTrapEnd","handleUpdateTimeout","focusTrapContainer","createRef","options","filterOperators","invertSelection","selectedValues","filterItems","map","_ref","selectedType","value","length","push","state","valuesTableError","valuesTable","undefined","componentDidMount","initValuesTable","componentWillUnmount","debounceTimeout","clearTimeout","sendUpdate","valuesTablePromise","cancel","getFilterChangeHandler","index","getFilterDeleteHandler","model","column","isValuesTableAvailable","debug","makeCancelableTablePromise","then","sort","columns","asc","applySort","setState","catch","error","isCanceled","_this$focusTrapContai","_this$focusTrapContai2","current","querySelector","focus","_this$focusTrapContai3","_this$focusTrapContai4","inputs","querySelectorAll","element","concat","and","or","operator","startUpdateTimer","filterIndex","splice","event","addToExisting","isModifierKeyDown","sortTable","sortDirection","descending","ascending","stopUpdateTimer","preventDefault","onDone","shouldShowAddFilter","filterItem","direction","arguments","onSortChange","setTimeout","debounceFilterUpdate","onFilterChange","formatter","items","filter","_ref2","operators","i","slice","makeAdvancedFilter","timeZone","render","_this","isBoolean","isBooleanType","type","isDateType","filterTypes","substring","lastIndexOf","filterItemElements","_loop","createElement","onChange","onDelete","filterOperator","isAndFilter","operatorElement","className","kind","active","onClick","showAddFilterItem","addFilterItem","hidden","icon","disabled","tooltip","role","tabIndex","onFocus","onSubmit","ref","name","rotation","Fragment","table","showSearch"],"sources":["../src/AdvancedFilterCreator.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n// disabled for tab-index on focus traps, which are intentionally non-interactive\n\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport memoize from 'memoize-one';\nimport {\n Operator as FilterOperator,\n OperatorValue as FilterOperatorValue,\n TypeValue as FilterTypeValue,\n assertOperatorValue as assertFilterOperatorValue,\n} from '@deephaven/filters';\nimport { dhSortAmountDown, dhNewCircleLargeFilled } from '@deephaven/icons';\nimport {\n Formatter,\n TableUtils,\n SortDirection,\n FilterItem,\n} from '@deephaven/jsapi-utils';\nimport { Button, ContextActionUtils } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { CancelablePromise, PromiseUtils } from '@deephaven/utils';\nimport { Column, FilterCondition, Table } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport AdvancedFilterCreatorFilterItem from './AdvancedFilterCreatorFilterItem';\nimport AdvancedFilterCreatorSelectValue from './AdvancedFilterCreatorSelectValue';\nimport './AdvancedFilterCreator.scss';\nimport IrisGridModel from './IrisGridModel';\nimport { AdvancedFilterOptions } from './CommonTypes';\n\nconst log = Log.module('AdvancedFilterCreator');\n\ntype FilterChangeHandler = (\n selectedType: FilterTypeValue,\n value: string\n) => void;\n\ninterface AdvancedFilterCreatorProps {\n model: IrisGridModel;\n column: Column;\n onFilterChange: (\n column: Column,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ) => void;\n onSortChange: (\n column: Column,\n direction: SortDirection,\n addToExisting?: boolean\n ) => void;\n onDone: () => void;\n options: AdvancedFilterOptions;\n sortDirection: SortDirection;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterItem {\n selectedType?: FilterTypeValue;\n value?: string;\n key: string;\n}\n\ninterface AdvancedFilterCreatorState {\n // Filter items\n filterItems: AdvancedFilterItem[];\n\n // And/Or between the filter items\n filterOperators: FilterOperatorValue[];\n\n invertSelection: boolean;\n\n selectedValues: unknown[];\n\n valuesTableError: null;\n valuesTable?: Table;\n}\n\nclass AdvancedFilterCreator extends PureComponent<\n AdvancedFilterCreatorProps,\n AdvancedFilterCreatorState\n> {\n static debounceFilterUpdate = 250;\n\n static defaultProps = {\n options: {\n filterItems: null,\n filterOperators: null,\n invertSelection: true,\n selectedValues: [],\n },\n sortDirection: null,\n };\n\n static makeFilterItem(): AdvancedFilterItem {\n return { key: shortid() };\n }\n\n constructor(props: AdvancedFilterCreatorProps) {\n super(props);\n\n this.handleAddAnd = this.handleAddAnd.bind(this);\n this.handleAddOr = this.handleAddOr.bind(this);\n this.handleChangeFilterOperator = this.handleChangeFilterOperator.bind(\n this\n );\n this.handleDone = this.handleDone.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterDelete = this.handleFilterDelete.bind(this);\n this.handleSelectValueChange = this.handleSelectValueChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSortDown = this.handleSortDown.bind(this);\n this.handleSortUp = this.handleSortUp.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleFocusTrapStart = this.handleFocusTrapStart.bind(this);\n this.handleFocusTrapEnd = this.handleFocusTrapEnd.bind(this);\n this.handleUpdateTimeout = this.handleUpdateTimeout.bind(this);\n\n this.focusTrapContainer = React.createRef();\n\n const { options } = props;\n let { filterOperators, invertSelection, selectedValues } = options;\n\n // can be null or an empty array\n const filterItems: AdvancedFilterItem[] =\n options.filterItems?.map(({ selectedType, value }) => ({\n selectedType,\n value,\n key: shortid(),\n })) ?? [];\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n if (filterOperators == null) {\n filterOperators = [];\n }\n if (invertSelection == null) {\n invertSelection = true;\n }\n if (selectedValues == null) {\n selectedValues = [];\n }\n\n this.state = {\n // Filter items\n filterItems,\n\n // And/Or between the filter items\n filterOperators,\n\n invertSelection,\n\n selectedValues,\n\n valuesTableError: null,\n valuesTable: undefined,\n };\n }\n\n componentDidMount(): void {\n this.initValuesTable();\n }\n\n componentWillUnmount(): void {\n if (this.debounceTimeout != null) {\n clearTimeout(this.debounceTimeout);\n this.sendUpdate();\n }\n if (this.valuesTablePromise != null) {\n this.valuesTablePromise.cancel();\n }\n }\n\n focusTrapContainer: React.RefObject<HTMLFormElement>;\n\n debounceTimeout?: ReturnType<typeof setTimeout>;\n\n valuesTablePromise?: CancelablePromise<Table>;\n\n getFilterChangeHandler(index: number): FilterChangeHandler {\n return this.handleFilterChange.bind(this, index);\n }\n\n getFilterDeleteHandler(index: number): () => void {\n return this.handleFilterDelete.bind(this, index);\n }\n\n getFilterTypes = memoize((columnType: string): FilterTypeValue[] =>\n TableUtils.getFilterTypes(columnType)\n );\n\n initValuesTable(): void {\n const { model, column } = this.props;\n if (!model.isValuesTableAvailable) {\n log.debug('No values table for this model, just ignore');\n return;\n }\n\n this.valuesTablePromise = TableUtils.makeCancelableTablePromise(\n model.valuesTable(column)\n );\n this.valuesTablePromise\n .then(valuesTable => {\n const sort = valuesTable.columns[0].sort().asc();\n valuesTable.applySort([sort]);\n\n this.setState({ valuesTable });\n })\n .catch(error => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error('Unable to open values table', error);\n this.setState({ valuesTableError: error });\n });\n }\n\n handleFocusTrapEnd(): void {\n (this.focusTrapContainer?.current?.querySelector(\n 'button,select,input,textarea'\n ) as HTMLElement).focus();\n }\n\n handleFocusTrapStart(): void {\n const inputs = this.focusTrapContainer?.current?.querySelectorAll(\n 'button,select,input,textarea'\n );\n if (inputs && inputs.length > 0) {\n const element = inputs[inputs.length - 1] as HTMLElement;\n element.focus();\n }\n }\n\n handleAddAnd(): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.and);\n this.setState({ filterItems, filterOperators });\n }\n\n handleAddOr(): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.or);\n this.setState({ filterItems, filterOperators });\n }\n\n handleChangeFilterOperator(index: number, operator: string): void {\n let { filterOperators } = this.state;\n filterOperators = [...filterOperators];\n\n assertFilterOperatorValue(operator);\n\n filterOperators[index] = operator;\n\n this.setState({ filterOperators });\n\n this.startUpdateTimer();\n }\n\n handleFilterChange(\n filterIndex: number,\n selectedType: FilterTypeValue,\n value: string\n ): void {\n let { filterItems } = this.state;\n filterItems = [...filterItems];\n const { key } = filterItems[filterIndex];\n filterItems[filterIndex] = { key, selectedType, value };\n\n this.setState({ filterItems });\n\n this.startUpdateTimer();\n }\n\n handleFilterDelete(filterIndex: number): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = [...filterItems];\n filterOperators = [...filterOperators];\n if (filterIndex < filterItems.length) {\n filterItems.splice(filterIndex, 1);\n }\n\n if (filterIndex < filterOperators.length) {\n filterOperators.splice(filterIndex, 1);\n } else if (filterIndex === filterOperators.length) {\n // When deleting the last filter item, we also need to remove the last filter operator\n filterOperators.splice(filterOperators.length - 1, 1);\n }\n\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n\n this.setState({ filterItems, filterOperators });\n\n this.startUpdateTimer();\n }\n\n handleSelectValueChange(\n selectedValues: unknown[],\n invertSelection: boolean\n ): void {\n this.setState({ selectedValues, invertSelection });\n\n this.startUpdateTimer();\n }\n\n handleReset(): void {\n log.debug('Resetting Advanced Filter');\n\n this.setState({\n filterItems: [AdvancedFilterCreator.makeFilterItem()],\n filterOperators: [],\n selectedValues: [],\n invertSelection: true,\n });\n\n this.startUpdateTimer();\n }\n\n handleSortDown(event: React.MouseEvent<HTMLButtonElement>): void {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.descending, addToExisting);\n }\n\n handleSortUp(event: React.MouseEvent<HTMLButtonElement>): void {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.ascending, addToExisting);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n log.debug('Submitting Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n\n event.preventDefault();\n }\n\n handleDone(event: React.MouseEvent<HTMLButtonElement>): void {\n log.debug('Submitting and Closing Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n\n const { onDone } = this.props;\n onDone();\n\n event.preventDefault();\n }\n\n handleUpdateTimeout(): void {\n this.debounceTimeout = undefined;\n this.sendUpdate();\n }\n\n /**\n * Convenience function to check if the previous filter has been inputted, and\n * we should show the add filter buttons (+ AND OR)\n * @returns true If the add filter buttons should be shown, false otherwise\n */\n shouldShowAddFilter(): boolean {\n const { filterItems } = this.state;\n if (filterItems.length === 0) {\n return false;\n }\n\n const filterItem = filterItems[filterItems.length - 1];\n const { selectedType, value } = filterItem;\n\n return (\n selectedType != null &&\n selectedType.length > 0 &&\n value != null &&\n value.length > 0\n );\n }\n\n /**\n * Sorts the table in the specified direction. If already sorted in that direction, remove it.\n * @param direction The sort direction, ASC or DESC\n * @param addToExisting Add to the existing sort, or replace the existing table sort\n */\n sortTable(direction: SortDirection, addToExisting = false): void {\n const { column, onSortChange } = this.props;\n onSortChange(column, direction, addToExisting);\n }\n\n startUpdateTimer(): void {\n this.stopUpdateTimer();\n\n this.debounceTimeout = setTimeout(\n this.handleUpdateTimeout,\n AdvancedFilterCreator.debounceFilterUpdate\n );\n }\n\n stopUpdateTimer(): void {\n if (this.debounceTimeout !== undefined) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n\n sendUpdate(): void {\n const {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n } = this.state;\n const { column, onFilterChange, model } = this.props;\n const { formatter } = model;\n\n const items = filterItems.filter(\n ({ selectedType, value }) =>\n selectedType != null && value != null && value !== ''\n ) as FilterItem[];\n\n const operators = filterOperators\n .filter(\n (operator, i) =>\n operator != null &&\n filterItems[i].selectedType != null &&\n filterItems[i].value != null &&\n filterItems[i].value !== ''\n )\n .slice(0, items.length - 1);\n // slice last operator, user may have set an operator but not a value\n\n const options = {\n filterItems: items,\n filterOperators: operators,\n invertSelection,\n selectedValues,\n };\n\n const filter = TableUtils.makeAdvancedFilter(\n column,\n options,\n formatter.timeZone\n );\n\n onFilterChange(column, filter, options);\n }\n\n render(): JSX.Element {\n const { column, model, sortDirection, formatter } = this.props;\n const {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTable,\n valuesTableError,\n } = this.state;\n const { isValuesTableAvailable } = model;\n const isBoolean = TableUtils.isBooleanType(column.type);\n const isDateType = TableUtils.isDateType(column.type);\n const filterTypes = this.getFilterTypes(column.type);\n const columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n const filterItemElements = [];\n if (!isBoolean && filterTypes.length) {\n for (let i = 0; i < filterItems.length; i += 1) {\n const filterItem = filterItems[i];\n const { key, selectedType, value } = filterItem;\n\n const element = (\n <AdvancedFilterCreatorFilterItem\n key={key}\n column={column}\n filterTypes={filterTypes}\n onChange={this.getFilterChangeHandler(i)}\n onDelete={this.getFilterDeleteHandler(i)}\n selectedType={selectedType}\n value={value}\n formatter={formatter}\n />\n );\n filterItemElements.push(element);\n\n if (i < filterOperators.length) {\n const filterOperator = filterOperators[i];\n const isAndFilter = filterOperator === FilterOperator.and;\n const operatorElement = (\n <div\n key={`filterOperator${key}`}\n className=\"form-row justify-content-end advanced-filter-creator-filter-operator\"\n >\n <Button\n kind=\"ghost\"\n className={classNames('filter-operator', {\n active: isAndFilter,\n })}\n onClick={() =>\n this.handleChangeFilterOperator(i, FilterOperator.and)\n }\n >\n AND\n </Button>\n <Button\n kind=\"ghost\"\n className={classNames('filter-operator', {\n active: !isAndFilter,\n })}\n onClick={() =>\n this.handleChangeFilterOperator(i, FilterOperator.or)\n }\n >\n OR\n </Button>\n </div>\n );\n filterItemElements.push(operatorElement);\n }\n }\n }\n const showAddFilterItem = this.shouldShowAddFilter();\n const addFilterItem = (\n <div\n key=\"addFilterItem\"\n className={classNames('form-row justify-content-end add-filter-item', {\n hidden: !showAddFilterItem,\n })}\n >\n <span className=\"text-muted\">\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n </span>\n <Button\n kind=\"ghost\"\n className=\"btn-filter-item\"\n onClick={this.handleAddAnd}\n disabled={!showAddFilterItem}\n tooltip=\"Add filter with AND\"\n >\n AND\n </Button>\n <Button\n kind=\"ghost\"\n className=\"btn-filter-item\"\n onClick={this.handleAddOr}\n disabled={!showAddFilterItem}\n tooltip=\"Add filter with OR\"\n >\n OR\n </Button>\n </div>\n );\n filterItemElements.push(addFilterItem);\n\n return (\n <div className=\"advanced-filter-creator\" role=\"presentation\">\n <div tabIndex={0} onFocus={this.handleFocusTrapStart} />\n <form onSubmit={this.handleSubmit} ref={this.focusTrapContainer}>\n <div className=\"title-bar\">\n <h6 className=\"advanced-filter-title\">Advanced Filters</h6>\n <div className=\"advanced-filter-menu-buttons\">\n <Button\n kind=\"ghost\"\n className={classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.descending,\n })}\n onClick={this.handleSortDown}\n icon={dhSortAmountDown}\n tooltip={`Sort ${column.name} Descending`}\n />\n <Button\n kind=\"ghost\"\n className={classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.ascending,\n })}\n onClick={this.handleSortUp}\n icon={\n <FontAwesomeIcon icon={dhSortAmountDown} rotation={180} />\n }\n tooltip={`Sort ${column.name} Ascending`}\n />\n </div>\n </div>\n <hr />\n <div className=\"advanced-filter-column-name\">\n {column.name} \n <span className=\"column-type\">({columnType})</span>\n </div>\n {filterItemElements}\n {isValuesTableAvailable && valuesTableError == null && (\n <>\n {!isBoolean && <hr />}\n <div className=\"form-group\">\n <AdvancedFilterCreatorSelectValue<unknown>\n table={valuesTable}\n onChange={this.handleSelectValueChange}\n invertSelection={invertSelection}\n selectedValues={selectedValues}\n formatter={formatter}\n showSearch={!isDateType}\n timeZone={formatter.timeZone}\n />\n </div>\n </>\n )}\n <div className=\"form-row justify-content-end\">\n <Button\n kind=\"secondary\"\n className=\"mr-2\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" onClick={this.handleDone}>\n Done\n </Button>\n </div>\n </form>\n <div tabIndex={0} onFocus={this.handleFocusTrapEnd} />\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreator;\n"],"mappings":"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"}
|
|
@@ -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","concat","e","warn","constructor","props","_defineProperty","column","operation","value","timeZone","makeAdvancedValueFilter","handleDelete","bind","handleTypeChange","handleValueChange","typeDropdown","filterTypes","selectedType","state","componentDidMount","_this$typeDropdown","focus","componentDidUpdate","prevProps","undefined","setState","event","target","debug2","onChange","length","debug","onDelete","render","formatter","showValueInput","type","typeOptionElements","isValid","getCachedIsValid","i","label","element","createElement","key","push","className","ref","error","placeholder","kind","onClick","icon","tooltip"],"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 +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","_defineProperty","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","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","createElement","className","htmlFor","id","placeholder","kind","onClick","in","timeout","mountOnEnter","unmountOnExit"],"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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreatorSelectValueList.js","names":["React","PureComponent","CSSTransition","dh","LoadingSpinner","SelectValueList","Log","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","list","selectedValues","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","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","viewportSize","Math","max","setViewport","render","undefined"],"sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport dh, { FilterCondition, Table } from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport {\n LoadingSpinner,\n SelectValueList,\n SelectItem,\n} from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\ninterface AdvancedFilterCreatorSelectValueListProps<T> {\n selectedValues: T[];\n table?: Table;\n filters: FilterCondition[];\n invertSelection: boolean;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterCreatorSelectValueListState<T> {\n itemCount: number;\n items: SelectItem<T>[];\n offset: number;\n selectedValues: T[];\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 this.list = null;\n\n const { selectedValues } = this.props;\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 list: SelectValueList<T> | null;\n\n handleSelect(itemIndex: number, value: T): 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: CustomEvent): 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 const displayValue = formatter.getFormattedString(\n value,\n column.type,\n column.name\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: Table): void {\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n stopListening(table: Table): void {\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\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(): React.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 <CSSTransition\n in={isLoading}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </CSSTransition>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreatorSelectValueList.js","names":["React","PureComponent","CSSTransition","dh","LoadingSpinner","SelectValueList","Log","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","_defineProperty","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","list","selectedValues","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","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","arguments","undefined","viewportSize","Math","max","setViewport","render","createElement","className","onSelect","onViewportChange","ref","in","timeout","classNames","mountOnEnter","unmountOnExit"],"sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport dh, { FilterCondition, Table } from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport {\n LoadingSpinner,\n SelectValueList,\n SelectItem,\n} from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\ninterface AdvancedFilterCreatorSelectValueListProps<T> {\n selectedValues: T[];\n table?: Table;\n filters: FilterCondition[];\n invertSelection: boolean;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterCreatorSelectValueListState<T> {\n itemCount: number;\n items: SelectItem<T>[];\n offset: number;\n selectedValues: T[];\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 this.list = null;\n\n const { selectedValues } = this.props;\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 list: SelectValueList<T> | null;\n\n handleSelect(itemIndex: number, value: T): 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: CustomEvent): 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 const displayValue = formatter.getFormattedString(\n value,\n column.type,\n column.name\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: Table): void {\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n stopListening(table: Table): void {\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\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(): React.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 <CSSTransition\n in={isLoading}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </CSSTransition>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnHeaderGroup.js","names":["GridUtils","memoizeOne","Log","log","module","isColumnHeaderGroup","x","ColumnHeaderGroup","constructor","name","children","color","depth","childIndexes","parent","movedItems","flattenedIndexes","flat","visibleIndexes","getVisibleIndexes","start","Math","min","end","max","length","warn","setParent","addChildren","newChildren","Set","
|
|
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","setParent","addChildren","newChildren","Set","removeChildren","forEach","delete","isNew","startsWith","NEW_GROUP_PREFIX"],"sources":["../src/ColumnHeaderGroup.ts"],"sourcesContent":["import {\n MoveOperation,\n GridUtils,\n ModelIndex,\n BoundedAxisRange,\n 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 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 }: {\n name: string;\n children: string[];\n color?: string;\n depth: number;\n childIndexes: ModelIndex[];\n parent?: string;\n }) {\n this.name = name;\n this.children = children;\n this.color = color;\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"],"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;AAEA,eAAe,MAAMA,iBAAiB,CAA+B;EAenEC,WAAWA,CAAAC,IAAA,EAcR;IAAA,IAdS;MACVC,IAAI;MACJC,QAAQ;MACRC,KAAK;MACLC,KAAK;MACLC,YAAY;MACZC;IAQF,CAAC,GAAAN,IAAA;IAAAO,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,0BASiBf,UAAU,CACzBgB,UAAoC,IAAuB;MAC1D,IAAMC,gBAAgB,GAAG,IAAI,CAACJ,YAAY,CAACK,IAAI,CAAC,CAAC;MACjD,IAAMC,cAAc,GAAGpB,SAAS,CAACqB,iBAAiB,CAChDH,gBAAgB,EAChBD,UACF,CAAC;MAED,IAAMK,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,GAAGJ,cAAc,CAAC;MACzC,IAAMK,GAAG,GAAGF,IAAI,CAACG,GAAG,CAAC,GAAGN,cAAc,CAAC;MAEvC,IAAIK,GAAG,GAAGH,KAAK,KAAKJ,gBAAgB,CAACS,MAAM,GAAG,CAAC,EAAE;QAC/CxB,GAAG,CAACyB,IAAI,wBAAAC,MAAA,CAAwB,IAAI,CAACnB,IAAI,uBAAoB,CAAC;MAChE;MAEA,OAAO,CAACY,KAAK,EAAEG,GAAG,CAAC;IACrB,CACF,CAAC;IAzBC,IAAI,CAACf,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,MAAM,GAAGA,MAAM;EACtB;EAqBAe,SAASA,CAACf,MAA0B,EAAQ;IAC1C,IAAI,CAACA,MAAM,GAAGA,MAAM;EACtB;EAEAgB,WAAWA,CAACpB,QAAkB,EAAQ;IACpC,IAAMqB,WAAW,GAAG,IAAIC,GAAG,CAAC,IAAI,CAACtB,QAAQ,CAACkB,MAAM,CAAClB,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAACA,QAAQ,GAAG,CAAC,GAAGqB,WAAW,CAAC;EAClC;EAEAE,cAAcA,CAACvB,QAAkB,EAAQ;IACvC,IAAMqB,WAAW,GAAG,IAAIC,GAAG,CAAC,IAAI,CAACtB,QAAQ,CAAC;IAC1CA,QAAQ,CAACwB,OAAO,CAACzB,IAAI,IAAIsB,WAAW,CAACI,MAAM,CAAC1B,IAAI,CAAC,CAAC;IAClD,IAAI,CAACC,QAAQ,GAAG,CAAC,GAAGqB,WAAW,CAAC;EAClC;EAEA,IAAIK,KAAKA,CAAA,EAAY;IACnB,OAAO,IAAI,CAAC3B,IAAI,CAAC4B,UAAU,CAAC/B,iBAAiB,CAACgC,gBAAgB,CAAC;EACjE;AACF;AAACvB,eAAA,CA3EoBT,iBAAiB,sBACV,WAAW"}
|
package/dist/ColumnStatistics.js
CHANGED
|
@@ -15,8 +15,6 @@ var STATS_LABEL_OVERRIDES = {
|
|
|
15
15
|
SIZE: 'Number of Rows'
|
|
16
16
|
};
|
|
17
17
|
class ColumnStatistics extends Component {
|
|
18
|
-
/** Automatically generate the statistics when the row count is below this threshold */
|
|
19
|
-
|
|
20
18
|
static getStatsLabel(operation) {
|
|
21
19
|
var _STATS_LABEL_OVERRIDE;
|
|
22
20
|
return (_STATS_LABEL_OVERRIDE = STATS_LABEL_OVERRIDES[operation]) !== null && _STATS_LABEL_OVERRIDE !== void 0 ? _STATS_LABEL_OVERRIDE : operation.split(' ').map(w => w[0].toUpperCase() + w.substr(1).toLowerCase()).join(' ');
|
|
@@ -192,6 +190,7 @@ class ColumnStatistics extends Component {
|
|
|
192
190
|
}), "Calculating Stats..."));
|
|
193
191
|
}
|
|
194
192
|
}
|
|
193
|
+
/** Automatically generate the statistics when the row count is below this threshold */
|
|
195
194
|
_defineProperty(ColumnStatistics, "AUTO_GENERATE_LIMIT", 100000);
|
|
196
195
|
export default ColumnStatistics;
|
|
197
196
|
//# sourceMappingURL=ColumnStatistics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnStatistics.js","names":["React","Component","classNames","FontAwesomeIcon","Button","CopyButton","LoadingSpinner","dhFreeze","dhRefresh","vsLock","Log","PromiseUtils","isExpandableGridModel","log","module","STATS_LABEL_OVERRIDES","SIZE","ColumnStatistics","getStatsLabel","operation","split","map","w","toUpperCase","substr","toLowerCase","join","constructor","props","handleError","bind","handleGenerateStatistics","handleStatistics","cancelablePromise","state","error","loading","statistics","numRows","componentDidMount","maybeGenerateStatistics","componentWillUnmount","cancel","model","rowCount","pendingRowCount","setState","isColumnStatisticsAvailable","AUTO_GENERATE_LIMIT","column","makeCancelable","columnStatistics","then","catch","stats","debug","onStatistics","statisticsMap","forEach","value","push","type","getType","uniqueValues","className","isCanceled","render","showGenerateStatistics","statisticElements","columnType","substring","lastIndexOf","description","i","length","formattedValue","displayString","name","statisticElement","rowCountLabel","hasExpandableRows","formattedRowCount","columnIndex","getColumnIndexByName","isColumnMovable","isColumnFrozen"],"sources":["../src/ColumnStatistics.tsx"],"sourcesContent":["import React, { Component, Key } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CopyButton, LoadingSpinner } from '@deephaven/components';\nimport { dhFreeze, dhRefresh, vsLock } from '@deephaven/icons';\nimport {\n Column,\n ColumnStatistics as APIColumnStatistics,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { CancelablePromise, PromiseUtils } from '@deephaven/utils';\nimport { isExpandableGridModel } from '@deephaven/grid';\nimport './ColumnStatistics.scss';\nimport 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: Key;\n className?: string;\n value: unknown;\n type: string;\n}\n\ninterface ColumnStatisticsProps {\n column: Column;\n model: IrisGridModel;\n onStatistics: () => void;\n}\ninterface ColumnStatisticsState {\n error: unknown;\n loading: boolean;\n statistics: 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<APIColumnStatistics> | null;\n\n maybeGenerateStatistics(): void {\n const { model } = this.props;\n\n const numRows = model.rowCount - model.pendingRowCount;\n this.setState({ numRows });\n if (!model.isColumnStatisticsAvailable) {\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: APIColumnStatistics): 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: model.rowCount - model.pendingRowCount,\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.name}\n <span className=\"column-statistics-type\"> ({columnType})</span>\n <CopyButton\n className=\"column-statistics-copy\"\n tooltip=\"Copy column name\"\n copy={column.name}\n />\n </div>\n {description != null && (\n <div className=\"column-statistics-description\">{description}</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 <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={<FontAwesomeIcon icon={dhRefresh} className=\"mr-1\" />}\n >\n Refresh\n </Button>\n )}\n {loading && (\n <div className=\"column-statistics-loading\">\n <LoadingSpinner className=\"mr-2\" />\n Calculating Stats...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ColumnStatistics;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColumnStatistics.js","names":["React","Component","classNames","FontAwesomeIcon","Button","CopyButton","LoadingSpinner","dhFreeze","dhRefresh","vsLock","Log","PromiseUtils","isExpandableGridModel","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","model","rowCount","pendingRowCount","setState","isColumnStatisticsAvailable","AUTO_GENERATE_LIMIT","column","makeCancelable","columnStatistics","then","catch","stats","debug","onStatistics","statisticsMap","forEach","value","push","type","getType","uniqueValues","className","isCanceled","render","showGenerateStatistics","statisticElements","columnType","substring","lastIndexOf","description","i","length","formattedValue","displayString","name","statisticElement","createElement","Fragment","key","rowCountLabel","hasExpandableRows","formattedRowCount","columnIndex","getColumnIndexByName","tooltip","copy","isColumnMovable","icon","isColumnFrozen","kind","onClick","concat"],"sources":["../src/ColumnStatistics.tsx"],"sourcesContent":["import React, { Component, Key } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CopyButton, LoadingSpinner } from '@deephaven/components';\nimport { dhFreeze, dhRefresh, vsLock } from '@deephaven/icons';\nimport {\n Column,\n ColumnStatistics as APIColumnStatistics,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { CancelablePromise, PromiseUtils } from '@deephaven/utils';\nimport { isExpandableGridModel } from '@deephaven/grid';\nimport './ColumnStatistics.scss';\nimport 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: Key;\n className?: string;\n value: unknown;\n type: string;\n}\n\ninterface ColumnStatisticsProps {\n column: Column;\n model: IrisGridModel;\n onStatistics: () => void;\n}\ninterface ColumnStatisticsState {\n error: unknown;\n loading: boolean;\n statistics: 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<APIColumnStatistics> | null;\n\n maybeGenerateStatistics(): void {\n const { model } = this.props;\n\n const numRows = model.rowCount - model.pendingRowCount;\n this.setState({ numRows });\n if (!model.isColumnStatisticsAvailable) {\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: APIColumnStatistics): 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: model.rowCount - model.pendingRowCount,\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.name}\n <span className=\"column-statistics-type\"> ({columnType})</span>\n <CopyButton\n className=\"column-statistics-copy\"\n tooltip=\"Copy column name\"\n copy={column.name}\n />\n </div>\n {description != null && (\n <div className=\"column-statistics-description\">{description}</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 <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={<FontAwesomeIcon icon={dhRefresh} className=\"mr-1\" />}\n >\n Refresh\n </Button>\n )}\n {loading && (\n <div className=\"column-statistics-loading\">\n <LoadingSpinner className=\"mr-2\" />\n Calculating Stats...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ColumnStatistics;\n"],"mappings":"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"}
|