diff --git a/docs/Cube.js-Frontend/@cubejs-client-core.md b/docs/Cube.js-Frontend/@cubejs-client-core.md index 6aec24803f774..eb33285bd1708 100644 --- a/docs/Cube.js-Frontend/@cubejs-client-core.md +++ b/docs/Cube.js-Frontend/@cubejs-client-core.md @@ -257,8 +257,8 @@ For example // ResultSet.tableColumns() will return [ - { key: "Stories.time", title: "Stories Time", shortTitle: "Time" }, - { key: "Stories.count", title: "Stories Count", shortTitle: "Count" }, + { key: "Stories.time", title: "Stories Time", shortTitle: "Time", type: "time", format: undefined }, + { key: "Stories.count", title: "Stories Count", shortTitle: "Count", type: "count", format: undefined }, //... ] ``` diff --git a/packages/cubejs-client-core/src/ResultSet.js b/packages/cubejs-client-core/src/ResultSet.js index b279a53d2d747..5cc3b52841688 100644 --- a/packages/cubejs-client-core/src/ResultSet.js +++ b/packages/cubejs-client-core/src/ResultSet.js @@ -361,8 +361,8 @@ class ResultSet { * * // ResultSet.tableColumns() will return * [ - * { key: "Stories.time", title: "Stories Time", shortTitle: "Time" }, - * { key: "Stories.count", title: "Stories Count", shortTitle: "Count" }, + * { key: "Stories.time", title: "Stories Time", shortTitle: "Time", type: "time", format: undefined }, + * { key: "Stories.count", title: "Stories Count", shortTitle: "Count", type: "count", format: undefined }, * //... * ] * ``` @@ -377,6 +377,8 @@ class ResultSet { key: m, title: this.loadResponse.annotation.measures[m].title, shortTitle: this.loadResponse.annotation.measures[m].shortTitle, + format: this.loadResponse.annotation.measures[m].format, + type: this.loadResponse.annotation.measures[m].type, })) : [{ key: field, @@ -387,7 +389,15 @@ class ResultSet { shortTitle: ( this.loadResponse.annotation.dimensions[field] || this.loadResponse.annotation.timeDimensions[field] - ).shortTitle + ).shortTitle, + format: ( + this.loadResponse.annotation.dimensions[field] || + this.loadResponse.annotation.timeDimensions[field] + ).format, + type: ( + this.loadResponse.annotation.dimensions[field] || + this.loadResponse.annotation.timeDimensions[field] + ).type }] ); return normalizedPivotConfig.x.map(column) diff --git a/packages/cubejs-client-core/src/ResultSet.test.js b/packages/cubejs-client-core/src/ResultSet.test.js index 67ffd5d36f815..990784d72561e 100644 --- a/packages/cubejs-client-core/src/ResultSet.test.js +++ b/packages/cubejs-client-core/src/ResultSet.test.js @@ -597,4 +597,84 @@ describe('ResultSet', () => { ]); }); }); + + describe('tableColumns', () => { + test('returns array of column definitions for tablePivot', () => { + const resultSet = new ResultSet({ + "query": { + "measures": ["Orders.count", "Orders.totalAmount"], + "timeDimensions": [{ + "dimension": "Orders.createdAt", + "granularity": "day", + "dateRange": ["2020-01-08T00:00:00.000", "2020-01-14T23:59:59.999"] + }], + "dimensions": ["Orders.createdAt"], + "filters": [], + "timezone": "UTC" + }, + "data": [], + "annotation": { + "measures": { + "Orders.count": { + "title": "Orders Count", + "shortTitle": "Count", + "type": "count", + }, + "Orders.totalAmount": { + "title": "Orders Total Amount", + "shortTitle": "Total Amount", + "type": "number", + "format": "currency" + } + }, + "dimensions": { + "Orders.createdAt": { + "title": "Orders Created at", + "shortTitle": "Created at", + "type": "time" + } + }, + "segments": {}, + "timeDimensions": { + "Orders.createdAt.day": { + "title": "Orders Created at", + "shortTitle": "Created at", + "type": "time" + } + } + } + }); + + expect(resultSet.tableColumns()).toEqual([ + { + "format": undefined, + "key": "Orders.createdAt.day", + "shortTitle": "Created at", + "title": "Orders Created at", + "type": "time", + }, + { + "format": undefined, + "key": "Orders.createdAt", + "shortTitle": "Created at", + "title": "Orders Created at", + "type": "time", + }, + { + "format": undefined, + "key": "Orders.count", + "shortTitle": "Count", + "title": "Orders Count", + "type": "count", + }, + { + "format": "currency", + "key": "Orders.totalAmount", + "shortTitle": "Total Amount", + "title": "Orders Total Amount", + "type": "number", + } + ]); + }); + }); });