Skip to content

Commit

Permalink
fix: membersForQuery return type (#909)
Browse files Browse the repository at this point in the history
* fix: membersForQuery return type

* docs: CubeContext

* minor fixes
  • Loading branch information
vasilev-alex authored Jul 30, 2020
1 parent 9ba875c commit 4976fcf
Show file tree
Hide file tree
Showing 6 changed files with 134 additions and 119 deletions.
31 changes: 28 additions & 3 deletions docs/Cube.js-Frontend/@cubejs-client-core.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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
{
Expand Down Expand Up @@ -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)[]*
Expand Down Expand Up @@ -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 |
Expand Down
77 changes: 48 additions & 29 deletions docs/Cube.js-Frontend/@cubejs-client-react.md
Original file line number Diff line number Diff line change
Expand Up @@ -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[] | - |
Expand Down Expand Up @@ -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
Expand All @@ -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 |
------ | ------ |
Expand Down Expand Up @@ -311,36 +350,16 @@ 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

Name | Type |
------ | ------ |
isLoading | boolean |

### TMember

Name | Type |
------ | ------ |
name | string |
shortTitle | string |
title | string |

### TMemberType

Ƭ **TMemberType**: *"time" | "number" | "string" | "boolean"*

### VizState

Name | Type |
Expand Down
38 changes: 31 additions & 7 deletions packages/cubejs-client-core/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
*/
Expand Down Expand Up @@ -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
Expand All @@ -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
* {
Expand Down Expand Up @@ -706,7 +730,7 @@ declare module '@cubejs-client/core' {
*/
meta(options?: LoadMethodOptions, callback?: LoadMethodCallback<Meta>): void;
}

/**
* Creates an instance of the `CubejsApi`. The API entry point.
*
Expand Down
25 changes: 1 addition & 24 deletions packages/cubejs-client-core/src/Meta.js
Original file line number Diff line number Diff line change
Expand Up @@ -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]) {
Expand Down
16 changes: 0 additions & 16 deletions packages/cubejs-client-core/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Loading

0 comments on commit 4976fcf

Please sign in to comment.