@deephaven/iris-grid 0.22.2-beta.6 → 0.22.3-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -61,7 +61,7 @@ class ColumnStatistics extends Component {
61
61
  var {
62
62
  model
63
63
  } = this.props;
64
- var numRows = model.rowCount;
64
+ var numRows = model.rowCount - model.pendingRowCount;
65
65
  this.setState({
66
66
  numRows
67
67
  });
@@ -112,7 +112,7 @@ class ColumnStatistics extends Component {
112
112
  this.setState({
113
113
  loading: false,
114
114
  statistics,
115
- numRows: model.rowCount
115
+ numRows: model.rowCount - model.pendingRowCount
116
116
  });
117
117
  onStatistics();
118
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnStatistics.js","names":["React","Component","classNames","FontAwesomeIcon","Button","ContextActionUtils","LoadingSpinner","dhFreeze","dhRefresh","vsCopy","vsLock","vsPassFilled","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","handleCopyHeader","cancelablePromise","state","error","loading","statistics","numRows","copied","componentDidMount","maybeGenerateStatistics","componentWillUnmount","cancel","setState","model","rowCount","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","copyToClipboard","e","isColumnMovable","isColumnFrozen"],"sources":["../src/ColumnStatistics.tsx"],"sourcesContent":["import React, { Component, Key } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n ContextActionUtils,\n LoadingSpinner,\n} from '@deephaven/components';\nimport {\n dhFreeze,\n dhRefresh,\n vsCopy,\n vsLock,\n vsPassFilled,\n} 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 copied: boolean;\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 this.handleCopyHeader = this.handleCopyHeader.bind(this);\n\n this.cancelablePromise = null;\n\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0,\n copied: false,\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 handleCopyHeader(): void {\n this.setState({ copied: true });\n }\n\n maybeGenerateStatistics(): void {\n const { model } = this.props;\n\n const numRows = model.rowCount;\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,\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, copied } = 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\">&nbsp;({columnType})</span>\n <Button\n kind=\"ghost\"\n className=\"column-statistics-copy\"\n icon={copied ? vsPassFilled : vsCopy}\n onClick={() => {\n ContextActionUtils.copyToClipboard(column.name)\n .then(this.handleCopyHeader)\n .catch(e => log.error('Unable to column name', e));\n }}\n tooltip={copied ? 'Copied text' : '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","ContextActionUtils","LoadingSpinner","dhFreeze","dhRefresh","vsCopy","vsLock","vsPassFilled","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","handleCopyHeader","cancelablePromise","state","error","loading","statistics","numRows","copied","componentDidMount","maybeGenerateStatistics","componentWillUnmount","cancel","setState","model","rowCount","pendingRowCount","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","copyToClipboard","e","isColumnMovable","isColumnFrozen"],"sources":["../src/ColumnStatistics.tsx"],"sourcesContent":["import React, { Component, Key } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n ContextActionUtils,\n LoadingSpinner,\n} from '@deephaven/components';\nimport {\n dhFreeze,\n dhRefresh,\n vsCopy,\n vsLock,\n vsPassFilled,\n} 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 copied: boolean;\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 this.handleCopyHeader = this.handleCopyHeader.bind(this);\n\n this.cancelablePromise = null;\n\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0,\n copied: false,\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 handleCopyHeader(): void {\n this.setState({ copied: true });\n }\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, copied } = 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\">&nbsp;({columnType})</span>\n <Button\n kind=\"ghost\"\n className=\"column-statistics-copy\"\n icon={copied ? vsPassFilled : vsCopy}\n onClick={() => {\n ContextActionUtils.copyToClipboard(column.name)\n .then(this.handleCopyHeader)\n .catch(e => log.error('Unable to column name', e));\n }}\n tooltip={copied ? 'Copied text' : '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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/iris-grid",
3
- "version": "0.22.2-beta.6+233d922",
3
+ "version": "0.22.3-beta.0+2d4fbd0",
4
4
  "description": "Deephaven Iris Grid",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -23,17 +23,17 @@
23
23
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
24
24
  },
25
25
  "dependencies": {
26
- "@deephaven/components": "^0.22.2-beta.6+233d922",
27
- "@deephaven/console": "^0.22.2-beta.6+233d922",
28
- "@deephaven/filters": "^0.22.2-beta.6+233d922",
29
- "@deephaven/grid": "^0.22.2-beta.6+233d922",
30
- "@deephaven/icons": "^0.22.2-beta.6+233d922",
31
- "@deephaven/jsapi-shim": "^0.22.2-beta.6+233d922",
32
- "@deephaven/jsapi-utils": "^0.22.2-beta.6+233d922",
33
- "@deephaven/log": "^0.22.2-beta.6+233d922",
34
- "@deephaven/react-hooks": "^0.22.2-beta.6+233d922",
35
- "@deephaven/storage": "^0.22.2-beta.6+233d922",
36
- "@deephaven/utils": "^0.22.2-beta.6+233d922",
26
+ "@deephaven/components": "^0.22.3-beta.0+2d4fbd0",
27
+ "@deephaven/console": "^0.22.3-beta.0+2d4fbd0",
28
+ "@deephaven/filters": "^0.22.3-beta.0+2d4fbd0",
29
+ "@deephaven/grid": "^0.22.3-beta.0+2d4fbd0",
30
+ "@deephaven/icons": "^0.22.3-beta.0+2d4fbd0",
31
+ "@deephaven/jsapi-shim": "^0.22.3-beta.0+2d4fbd0",
32
+ "@deephaven/jsapi-utils": "^0.22.3-beta.0+2d4fbd0",
33
+ "@deephaven/log": "^0.22.3-beta.0+2d4fbd0",
34
+ "@deephaven/react-hooks": "^0.22.3-beta.0+2d4fbd0",
35
+ "@deephaven/storage": "^0.22.3-beta.0+2d4fbd0",
36
+ "@deephaven/utils": "^0.22.3-beta.0+2d4fbd0",
37
37
  "@fortawesome/react-fontawesome": "^0.1.18",
38
38
  "classnames": "^2.3.1",
39
39
  "deep-equal": "^2.0.5",
@@ -53,8 +53,8 @@
53
53
  "react": "^17.x"
54
54
  },
55
55
  "devDependencies": {
56
- "@deephaven/mocks": "^0.22.2-beta.6+233d922",
57
- "@deephaven/tsconfig": "^0.22.2-beta.6+233d922"
56
+ "@deephaven/mocks": "^0.22.3-beta.0+2d4fbd0",
57
+ "@deephaven/tsconfig": "^0.22.3-beta.0+2d4fbd0"
58
58
  },
59
59
  "files": [
60
60
  "dist"
@@ -65,5 +65,5 @@
65
65
  "publishConfig": {
66
66
  "access": "public"
67
67
  },
68
- "gitHead": "233d9227f1a07837204d7ea2dfe5070c76eb5e8f"
68
+ "gitHead": "2d4fbd0de915bb72ea632c0bdf986b963f2f6071"
69
69
  }