diff --git a/docs/Cube.js-Frontend/@cubejs-client-core.md b/docs/Cube.js-Frontend/@cubejs-client-core.md
index e9890c547186c..6e17e369cf535 100644
--- a/docs/Cube.js-Frontend/@cubejs-client-core.md
+++ b/docs/Cube.js-Frontend/@cubejs-client-core.md
@@ -133,7 +133,7 @@ Contains information about available cubes and it's members.
### membersForQuery
-▸ **membersForQuery**(**query**: [Query](#types-query), **memberType**: [MemberType](#types-member-type)): *any*
+▸ **membersForQuery**(**query**: [Query](#types-query) | null, **memberType**: [MemberType](#types-member-type)): *[TCubeMeasure](#types-t-cube-measure)[] | [TCubeDimension](#types-t-cube-dimension)[] | [TCubeMember](#types-t-cube-member)[]*
Get all members of a specific type for a given query.
If empty query is provided no filtering is done based on query context and all available members are retrieved.
@@ -142,14 +142,14 @@ If empty query is provided no filtering is done based on query context and all a
Name | Type | Description |
------ | ------ | ------ |
-query | [Query](#types-query) | context query to provide filtering of members available to add to this query |
+query | [Query](#types-query) | null | context query to provide filtering of members available to add to this query |
memberType | [MemberType](#types-member-type) | - |
### resolveMember
▸ **resolveMember**(**memberName**: string, **memberType**: [MemberType](#types-member-type)): *Object*
-Get meta information for member of a cube
+Get meta information for a cube member
Member meta information contains:
```javascript
{
@@ -206,6 +206,10 @@ const resultSet = await cubejsApi.load({
const copy = new ResultSet(resultSet.loadResponse);
```
+### annotation
+
+▸ **annotation**(): *[QueryAnnotations](#types-query-annotations)*
+
### chartPivot
▸ **chartPivot**(**pivotConfig?**: [PivotConfig](#types-pivot-config)): *[ChartPivotRow](#types-chart-pivot-row)[]*
@@ -783,6 +787,27 @@ sql | [SqlQueryTuple](#types-sql-query-tuple) |
Ƭ **SqlQueryTuple**: *[string, boolean | string | number]*
+### TCubeDimension
+
+Ƭ **TCubeDimension**: *[TCubeMember](#types-t-cube-member) & object*
+
+### TCubeMeasure
+
+Ƭ **TCubeMeasure**: *[TCubeMember](#types-t-cube-member) & object*
+
+### TCubeMember
+
+Name | Type |
+------ | ------ |
+name | string |
+shortTitle | string |
+title | string |
+type | [TCubeMemberType](#types-t-cube-member-type) |
+
+### TCubeMemberType
+
+Ƭ **TCubeMemberType**: *"time" | "number" | "string" | "boolean"*
+
### TableColumn
Name | Type |
diff --git a/docs/Cube.js-Frontend/@cubejs-client-react.md b/docs/Cube.js-Frontend/@cubejs-client-react.md
index 317329f82dadc..1bc7bde840051 100644
--- a/docs/Cube.js-Frontend/@cubejs-client-react.md
+++ b/docs/Cube.js-Frontend/@cubejs-client-react.md
@@ -154,10 +154,10 @@ wrapWithQueryRenderer? | boolean | - |
Name | Type | Description |
------ | ------ | ------ |
-availableDimensions | [TAvailableDimension](#types-t-available-dimension)[] | An array of available dimensions to select. They are loaded via the API from Cube.js Backend. |
-availableMeasures | [TAvailableMeasure](#types-t-available-measure)[] | An array of available measures to select. They are loaded via the API from Cube.js Backend. |
-availableSegments | [TMember](#types-t-member)[] | An array of available segments to select. They are loaded via the API from Cube.js Backend. |
-availableTimeDimensions | [TAvailableDimension](#types-t-available-dimension)[] | An array of available time dimensions to select. They are loaded via the API from Cube.js Backend. |
+availableDimensions | TCubeDimension[] | An array of available dimensions to select. They are loaded via the API from Cube.js Backend. |
+availableMeasures | TCubeMeasure[] | An array of available measures to select. They are loaded via the API from Cube.js Backend. |
+availableSegments | TCubeMember[] | An array of available segments to select. They are loaded via the API from Cube.js Backend. |
+availableTimeDimensions | TCubeDimension[] | An array of available time dimensions to select. They are loaded via the API from Cube.js Backend. |
dimensions | string[] | - |
isQueryPresent | boolean | Indicates whether the query is ready to be displayed or not |
measures | string[] | - |
@@ -201,7 +201,7 @@ resultSet | ResultSet | null |
## CubeProvider
-• **CubeProvider**: *React.FC‹[CubeProviderVariables](#types-cube-provider-variables)›*
+• **CubeProvider**: *React.FC‹[CubeProviderProps](#types-cube-provider-props)›*
Cube.js context provider
```js
@@ -226,13 +226,52 @@ export default function App() {
}
```
+## CubeContext
+
+• **CubeContext**: *Context‹[CubeContextProps](#types-cube-context-props)›*
+
+In case when you need access to `cubejsApi` directly you can use `CubeContext` anywhere in your app
+
+```js
+import React from 'react';
+import { CubeContext } from '@cubejs-client/react';
+
+export default function DisplayComponent() {
+ const { cubejsApi } = React.useContext(CubeContext);
+ const [rawResults, setRawResults] = React.useState([]);
+ const query = {
+ ...
+ };
+
+ React.useEffect(() => {
+ cubejsApi.load(query).then((resultSet) => {
+ setRawResults(resultSet.rawData());
+ });
+ }, [query]);
+
+ return (
+ <>
+ {rawResults.map(row => (
+ ...
+ ))}
+ >
+ )
+}
+```
+
## Types
### ChartType
Ƭ **ChartType**: *"line" | "bar" | "table" | "area"*
-### CubeProviderVariables
+### CubeContextProps
+
+Name | Type |
+------ | ------ |
+cubejsApi | CubejsApi |
+
+### CubeProviderProps
Name | Type |
------ | ------ |
@@ -311,17 +350,9 @@ NOTE: if you need to add or remove more than one member at a time you should use
Name | Type |
------ | ------ |
-add | (**member**: [TMember](#types-t-member)) => *void* |
-remove | (**member**: [TMember](#types-t-member)) => *void* |
-update | (**member**: [TMember](#types-t-member), **updateWith**: [TMember](#types-t-member)) => *void* |
-
-### TAvailableDimension
-
-Ƭ **TAvailableDimension**: *[TMember](#types-t-member) & object*
-
-### TAvailableMeasure
-
-Ƭ **TAvailableMeasure**: *[TMember](#types-t-member) & object*
+add | (**member**: MemberType) => *void* |
+remove | (**member**: MemberType) => *void* |
+update | (**member**: MemberType, **updateWith**: MemberType) => *void* |
### TLoadingState
@@ -329,18 +360,6 @@ Name | Type |
------ | ------ |
isLoading | boolean |
-### TMember
-
-Name | Type |
------- | ------ |
-name | string |
-shortTitle | string |
-title | string |
-
-### TMemberType
-
-Ƭ **TMemberType**: *"time" | "number" | "string" | "boolean"*
-
### VizState
Name | Type |
diff --git a/packages/cubejs-client-core/index.d.ts b/packages/cubejs-client-core/index.d.ts
index 1aee4f505bb99..5b597aa697b20 100644
--- a/packages/cubejs-client-core/index.d.ts
+++ b/packages/cubejs-client-core/index.d.ts
@@ -221,12 +221,12 @@ declare module '@cubejs-client/core' {
/**
* ```js
* import { ResultSet } from '@cubejs-client/core';
- *
+ *
* const resultSet = await cubejsApi.load(query);
* // You can store the result somewhere
* const tmp = resultSet.serialize();
- *
- * // and restore it later
+ *
+ * // and restore it later
* const resultSet = ResultSet.deserialize(tmp);
* ```
* @param data the result of [serialize](#result-set-serialize)
@@ -259,7 +259,7 @@ declare module '@cubejs-client/core' {
* Can be used to stash the `ResultSet` in a storage and restored later with [deserialize](#result-set-deserialize)
*/
serialize(): Object;
-
+
/**
* @hidden
*/
@@ -627,6 +627,30 @@ declare module '@cubejs-client/core' {
export type MemberType = 'measures' | 'dimensions' | 'segments';
+ type TCubeMemberType = 'time' | 'number' | 'string' | 'boolean';
+
+ type TCubeMember = {
+ type: TCubeMemberType;
+ name: string;
+ title: string;
+ shortTitle: string;
+ };
+
+ type TCubeMeasure = TCubeMember & {
+ aggType: 'count' | 'number';
+ cumulative: boolean;
+ cumulativeTotal: boolean;
+ drillMembers: string[];
+ drillMembersGrouped: {
+ measures: string[];
+ dimensions: string[];
+ };
+ };
+
+ type TCubeDimension = TCubeMember & {
+ suggestFilterValues: boolean;
+ };
+
/**
* Contains information about available cubes and it's members.
* @order 4
@@ -637,10 +661,10 @@ declare module '@cubejs-client/core' {
* If empty query is provided no filtering is done based on query context and all available members are retrieved.
* @param query - context query to provide filtering of members available to add to this query
*/
- membersForQuery(query: Query, memberType: MemberType);
+ membersForQuery(query: Query | null, memberType: MemberType): TCubeMeasure[] | TCubeDimension[] | TCubeMember[];
/**
- * Get meta information for member of a cube
+ * Get meta information for a cube member
* Member meta information contains:
* ```javascript
* {
@@ -706,7 +730,7 @@ declare module '@cubejs-client/core' {
*/
meta(options?: LoadMethodOptions, callback?: LoadMethodCallback): void;
}
-
+
/**
* Creates an instance of the `CubejsApi`. The API entry point.
*
diff --git a/packages/cubejs-client-core/src/Meta.js b/packages/cubejs-client-core/src/Meta.js
index 5fce21f21b45c..ca9eea1d2c81d 100644
--- a/packages/cubejs-client-core/src/Meta.js
+++ b/packages/cubejs-client-core/src/Meta.js
@@ -41,33 +41,10 @@ class Meta {
]));
}
- /**
- * Get all members of specific type for a given query.
- * If empty query is provided no filtering is done based on query context and all available members are retrieved.
- * @param query - context query to provide filtering of members available to add to this query
- * @param memberType - `measures`, `dimensions` or `segments`
- */
membersForQuery(query, memberType) {
return unnest(this.cubes.map(c => c[memberType]));
}
-
- /**
- * Get meta information for member of a cube
- * Member meta information contains:
- * ```javascript
- * {
- * name,
- * title,
- * shortTitle,
- * type,
- * description,
- * format
- * }
- * ```
- * @param memberName - Fully qualified member name in a form `Cube.memberName`
- * @param memberType - `measures`, `dimensions` or `segments`
- * @return {Object} containing meta information about member
- */
+
resolveMember(memberName, memberType) {
const [cube] = memberName.split('.');
if (!this.cubesMap[cube]) {
diff --git a/packages/cubejs-client-core/src/index.js b/packages/cubejs-client-core/src/index.js
index c7acfb541b0cf..b6bb803d6e605 100644
--- a/packages/cubejs-client-core/src/index.js
+++ b/packages/cubejs-client-core/src/index.js
@@ -41,22 +41,6 @@ class CubejsApi {
return this.transport.request(method, { baseRequestId: uuid(), ...params });
}
- /**
- * Base method used to perform all API calls.
- * Shouldn't be used directly.
- * @param request - function that invoked to perform actual request using `transport.request()` method.
- * @param toResult - function that maps results of invocation to method return result
- * @param [options] - options object
- * @param options.mutexObj - object to use to store MUTEX
- * @param [options.mutexKey='default'] - key to use to store current request MUTEX inside `mutexObj`.
- * MUTEX object is used to reject orphaned queries results when new queries are sent.
- * For example if two queries are sent with same `mutexKey` only last one will return results.
- * @param options.subscribe - pass `true` to use continuous fetch behavior.
- * @param {Function} options.progressCallback - function that receives `ProgressResult` on each
- * `Continue wait` message.
- * @param [callback] - if passed `callback` function will be called instead of `Promise` returned
- * @return {{unsubscribe: function()}}
- */
loadMethod(request, toResult, options, callback) {
const mutexValue = ++mutexCounter;
if (typeof options === 'function' && !callback) {
diff --git a/packages/cubejs-client-react/index.d.ts b/packages/cubejs-client-react/index.d.ts
index e61af6625f8f1..64f807a4e5cac 100644
--- a/packages/cubejs-client-react/index.d.ts
+++ b/packages/cubejs-client-react/index.d.ts
@@ -1,5 +1,15 @@
import * as React from 'react';
-import { CubejsApi, Query, ResultSet, Filter, PivotConfig } from '@cubejs-client/core';
+import {
+ CubejsApi,
+ Query,
+ ResultSet,
+ Filter,
+ PivotConfig,
+ MemberType,
+ TCubeMeasure,
+ TCubeDimension,
+ TCubeMember,
+} from '@cubejs-client/core';
/**
* @title @cubejs-client/react
@@ -11,7 +21,7 @@ import { CubejsApi, Query, ResultSet, Filter, PivotConfig } from '@cubejs-client
*/
declare module '@cubejs-client/react' {
- type CubeProviderVariables = {
+ type CubeProviderProps = {
cubejsApi: CubejsApi;
children: React.ReactNode;
};
@@ -42,21 +52,19 @@ declare module '@cubejs-client/react' {
* @stickyTypes
* @order 10
*/
- export const CubeProvider: React.FC;
-
- type CubeContextVariables = {
+ export const CubeProvider: React.FC;
+
+ type CubeContextProps = {
cubejsApi: CubejsApi;
- };
+ }
/**
- * Cube.js context consumer
- * In case when you need access to cubejsApi directly you can use CubeContext anywhere in your app
+ * In case when you need direct access to `cubejsApi` you can use `CubeContext` anywhere in your app
*
* ```js
* import React from 'react';
* import { CubeContext } from '@cubejs-client/react';
*
- *
* export default function DisplayComponent() {
* const { cubejsApi } = React.useContext(CubeContext);
* const [rawResults, setRawResults] = React.useState([]);
@@ -65,7 +73,7 @@ declare module '@cubejs-client/react' {
* };
*
* React.useEffect(() => {
- * const resultSet = cubejsApi.load(query).then(resultSet => {
+ * cubejsApi.load(query).then((resultSet) => {
* setRawResults(resultSet.rawData());
* });
* }, [query]);
@@ -80,7 +88,7 @@ declare module '@cubejs-client/react' {
* }
* ```
*/
- export const CubeContext: React.Context;
+ export const CubeContext: React.Context;
type TLoadingState = {
isLoading: boolean;
@@ -182,19 +190,19 @@ declare module '@cubejs-client/react' {
/**
* An array of available measures to select. They are loaded via the API from Cube.js Backend.
*/
- availableMeasures: TAvailableMeasure[];
+ availableMeasures: TCubeMeasure[];
/**
* An array of available dimensions to select. They are loaded via the API from Cube.js Backend.
*/
- availableDimensions: TAvailableDimension[];
+ availableDimensions: TCubeDimension[];
/**
* An array of available time dimensions to select. They are loaded via the API from Cube.js Backend.
*/
- availableTimeDimensions: TAvailableDimension[];
+ availableTimeDimensions: TCubeDimension[];
/**
* An array of available segments to select. They are loaded via the API from Cube.js Backend.
*/
- availableSegments: TMember[];
+ availableSegments: TCubeMember[];
updateMeasures: MemberUpdater;
updateDimensions: MemberUpdater;
@@ -336,28 +344,6 @@ declare module '@cubejs-client/react' {
*/
export function isQueryPresent(query: Query): boolean;
- type TMember = {
- name: string;
- title: string;
- shortTitle: string;
- };
-
- type TMemberType = 'time' | 'number' | 'string' | 'boolean';
-
- type TAvailableMeasure = TMember & {
- type: TMemberType;
- drillMembers: string[];
- drillMembersGrouped: {
- measures: TMember[];
- dimensions: TMember[];
- };
- };
-
- type TAvailableDimension = TMember & {
- type: TMemberType;
- suggestFilterValues: boolean;
- };
-
/**
* You can use the following methods for member manipulaltion
* ```js
@@ -428,8 +414,8 @@ declare module '@cubejs-client/react' {
* ```
*/
type MemberUpdater = {
- add: (member: TMember) => void;
- remove: (member: TMember) => void;
- update: (member: TMember, updateWith: TMember) => void;
+ add: (member: MemberType) => void;
+ remove: (member: MemberType) => void;
+ update: (member: MemberType, updateWith: MemberType) => void;
};
}