@cubejs-client/react 1.7.13 → 1.7.15

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.
Files changed (62) hide show
  1. package/dist/CubeContext.d.ts +35 -0
  2. package/dist/CubeContext.d.ts.map +1 -0
  3. package/dist/CubeProvider.d.ts +31 -0
  4. package/dist/CubeProvider.d.ts.map +1 -0
  5. package/dist/QueryBuilder.d.ts +135 -0
  6. package/dist/QueryBuilder.d.ts.map +1 -0
  7. package/dist/QueryRenderer.d.ts +34 -0
  8. package/dist/QueryRenderer.d.ts.map +1 -0
  9. package/dist/QueryRendererWithTotals.d.ts +4 -0
  10. package/dist/QueryRendererWithTotals.d.ts.map +1 -0
  11. package/dist/cubejs-client-react.cjs.js +248 -23
  12. package/dist/cubejs-client-react.cjs.js.map +1 -1
  13. package/dist/cubejs-client-react.esm.js +253 -31
  14. package/dist/cubejs-client-react.esm.js.map +1 -1
  15. package/dist/cubejs-client-react.umd.js +248 -23
  16. package/dist/cubejs-client-react.umd.js.map +1 -1
  17. package/dist/hooks/cube-fetch.d.ts +6 -0
  18. package/dist/hooks/cube-fetch.d.ts.map +1 -0
  19. package/dist/hooks/cube-meta.d.ts +4 -0
  20. package/dist/hooks/cube-meta.d.ts.map +1 -0
  21. package/dist/hooks/cube-query.d.ts +39 -0
  22. package/dist/hooks/cube-query.d.ts.map +1 -0
  23. package/dist/hooks/cube-sql.d.ts +12 -0
  24. package/dist/hooks/cube-sql.d.ts.map +1 -0
  25. package/dist/hooks/deep-compare-memoize.d.ts +2 -0
  26. package/dist/hooks/deep-compare-memoize.d.ts.map +1 -0
  27. package/dist/hooks/dry-run.d.ts +7 -0
  28. package/dist/hooks/dry-run.d.ts.map +1 -0
  29. package/dist/hooks/lazy-dry-run.d.ts +7 -0
  30. package/dist/hooks/lazy-dry-run.d.ts.map +1 -0
  31. package/dist/index.d.ts +21 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/types.d.ts +765 -0
  34. package/dist/types.d.ts.map +1 -0
  35. package/dist/utils.d.ts +2 -0
  36. package/dist/utils.d.ts.map +1 -0
  37. package/package.json +14 -10
  38. package/src/CubeContext.ts +37 -0
  39. package/src/CubeProvider.tsx +42 -0
  40. package/src/{QueryBuilder.jsx → QueryBuilder.tsx} +238 -89
  41. package/src/{QueryRenderer.jsx → QueryRenderer.tsx} +39 -14
  42. package/src/QueryRendererWithTotals.tsx +24 -0
  43. package/src/hooks/cube-fetch.ts +98 -0
  44. package/src/hooks/cube-meta.ts +8 -0
  45. package/src/hooks/{cube-query.js → cube-query.ts} +90 -14
  46. package/src/hooks/cube-sql.ts +22 -0
  47. package/src/hooks/{deep-compare-memoize.js → deep-compare-memoize.ts} +2 -2
  48. package/src/hooks/dry-run.ts +17 -0
  49. package/src/hooks/lazy-dry-run.ts +24 -0
  50. package/src/index.ts +77 -0
  51. package/src/types.ts +837 -0
  52. package/src/{utils.js → utils.ts} +3 -3
  53. package/index.d.ts +0 -697
  54. package/src/CubeContext.js +0 -3
  55. package/src/CubeProvider.jsx +0 -14
  56. package/src/QueryRendererWithTotals.jsx +0 -20
  57. package/src/hooks/cube-fetch.js +0 -66
  58. package/src/hooks/cube-meta.js +0 -5
  59. package/src/hooks/cube-sql.js +0 -8
  60. package/src/hooks/dry-run.js +0 -8
  61. package/src/hooks/lazy-dry-run.js +0 -11
  62. package/src/index.js +0 -18
@@ -0,0 +1,35 @@
1
+ /// <reference types="react" />
2
+ import type { CubeContextProps } from './types';
3
+ /**
4
+ * In case when you need direct access to `cubeApi` you can use `CubeContext` anywhere in your app
5
+ *
6
+ * ```js
7
+ * import React from 'react';
8
+ * import { CubeContext } from '@cubejs-client/react';
9
+ *
10
+ * export default function DisplayComponent() {
11
+ * const { cubeApi } = React.useContext(CubeContext);
12
+ * const [rawResults, setRawResults] = React.useState([]);
13
+ * const query = {
14
+ * ...
15
+ * };
16
+ *
17
+ * React.useEffect(() => {
18
+ * cubeApi.load(query).then((resultSet) => {
19
+ * setRawResults(resultSet.rawData());
20
+ * });
21
+ * }, [query]);
22
+ *
23
+ * return (
24
+ * <>
25
+ * {rawResults.map(row => (
26
+ * ...
27
+ * ))}
28
+ * </>
29
+ * )
30
+ * }
31
+ * ```
32
+ */
33
+ declare const _default: import("react").Context<CubeContextProps>;
34
+ export default _default;
35
+ //# sourceMappingURL=CubeContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CubeContext.d.ts","sourceRoot":"","sources":["../src/CubeContext.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;;AAGH,wBAAoF"}
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import type { CubeProviderProps } from './types';
3
+ /**
4
+ * Cube.js context provider
5
+ * ```js
6
+ * import React from 'react';
7
+ * import cube from '@cubejs-client/core';
8
+ * import { CubeProvider } from '@cubejs-client/react';
9
+ *
10
+ * const API_URL = 'https://harsh-eel.aws-us-east-2.cubecloudapp.dev';
11
+ * const CUBE_TOKEN =
12
+ * 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.* eyJpYXQiOjE1OTE3MDcxNDgsImV4cCI6MTU5NDI5OTE0OH0.* n5jGLQJ14igg6_Hri_Autx9qOIzVqp4oYxmX27V-4T4';
13
+ *
14
+ * const cubeApi = cube(CUBE_TOKEN, {
15
+ * apiUrl: `${API_URL}/cubejs-api/v1`,
16
+ * });
17
+ *
18
+ * export default function App() {
19
+ * return (
20
+ * <CubeProvider cubeApi={cubeApi}>
21
+ * //...
22
+ * </CubeProvider>
23
+ * )
24
+ * }
25
+ * ```
26
+ * @stickyTypes
27
+ * @order 10
28
+ */
29
+ declare const CubeProvider: React.FC<CubeProviderProps>;
30
+ export default CubeProvider;
31
+ //# sourceMappingURL=CubeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CubeProvider.d.ts","sourceRoot":"","sources":["../src/CubeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAQ7C,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,135 @@
1
+ import React from 'react';
2
+ import type { CubeApi, DryRunResponse, Meta, PivotConfig, Query } from '@cubejs-client/core';
3
+ import type { ChartType, CubeContextProps, QueryBuilderInternalState, QueryBuilderProps, QueryBuilderRenderProps, QueryBuilderStateUpdate, QueryMemberType, QueryRendererRenderProps, ResolveMemberArgs } from './types';
4
+ /**
5
+ * `<QueryBuilder />` is used to build interactive analytics query builders. It abstracts state management and API calls to Cube.js Backend. It uses render prop technique and doesn’t render anything itself, but calls the render function instead.
6
+ *
7
+ * **Example**
8
+ *
9
+ * [Open in CodeSandbox](https://codesandbox.io/s/z6r7qj8wm)
10
+ * ```js
11
+ * import React from 'react';
12
+ * import ReactDOM from 'react-dom';
13
+ * import { Layout, Divider, Empty, Select } from 'antd';
14
+ * import { QueryBuilder } from '@cubejs-client/react';
15
+ * import cube from '@cubejs-client/core';
16
+ * import 'antd/dist/antd.css';
17
+ *
18
+ * import ChartRenderer from './ChartRenderer';
19
+ *
20
+ * const cubeApi = cube('YOUR-CUBE-API-TOKEN', {
21
+ * apiUrl: 'http://localhost:4000/cubejs-api/v1',
22
+ * });
23
+ *
24
+ * const App = () => (
25
+ * <QueryBuilder
26
+ * query={{
27
+ * timeDimensions: [
28
+ * {
29
+ * dimension: 'LineItems.createdAt',
30
+ * granularity: 'month',
31
+ * },
32
+ * ],
33
+ * }}
34
+ * cubeApi={cubeApi}
35
+ * render={({ resultSet, measures, availableMeasures, updateMeasures }) => (
36
+ * <Layout.Content style={{ padding: '20px' }}>
37
+ * <Select
38
+ * mode="multiple"
39
+ * style={{ width: '100%' }}
40
+ * placeholder="Please select"
41
+ * onSelect={(measure) => updateMeasures.add(measure)}
42
+ * onDeselect={(measure) => updateMeasures.remove(measure)}
43
+ * >
44
+ * {availableMeasures.map((measure) => (
45
+ * <Select.Option key={measure.name} value={measure}>
46
+ * {measure.title}
47
+ * </Select.Option>
48
+ * ))}
49
+ * </Select>
50
+ * <Divider />
51
+ * {measures.length > 0 ? (
52
+ * <ChartRenderer resultSet={resultSet} />
53
+ * ) : (
54
+ * <Empty description="Select measure or dimension to get started" />
55
+ * )}
56
+ * </Layout.Content>
57
+ * )}
58
+ * />
59
+ * );
60
+ *
61
+ * const rootElement = document.getElementById("root");
62
+ * ReactDOM.render(<App />, rootElement);
63
+ * ```
64
+ * @stickyTypes QueryBuilderProps, QueryBuilderRenderProps, QueryBuilderState
65
+ * @noInheritDoc
66
+ * @order 2
67
+ */
68
+ export default class QueryBuilder extends React.Component<QueryBuilderProps, QueryBuilderInternalState> {
69
+ static contextType: React.Context<CubeContextProps>;
70
+ static defaultProps: {
71
+ cubeApi: null;
72
+ stateChangeHeuristics: null;
73
+ disableHeuristics: boolean;
74
+ render: null;
75
+ wrapWithQueryRenderer: boolean;
76
+ defaultChartType: string;
77
+ defaultQuery: {};
78
+ initialVizState: null;
79
+ onVizStateChanged: null;
80
+ query: null;
81
+ setQuery: null;
82
+ vizState: null;
83
+ setVizState: null;
84
+ };
85
+ static getDerivedStateFromProps(props: QueryBuilderProps, state: QueryBuilderInternalState): {
86
+ query: {
87
+ measures?: string[] | undefined;
88
+ dimensions?: string[] | undefined;
89
+ filters?: import("@cubejs-client/core").Filter[] | undefined;
90
+ timeDimensions?: import("@cubejs-client/core").TimeDimension[] | undefined;
91
+ segments?: string[] | undefined;
92
+ limit?: number | null | undefined;
93
+ rowLimit?: number | null | undefined;
94
+ offset?: number | undefined;
95
+ order?: import("@cubejs-client/core").TQueryOrderObject | import("@cubejs-client/core").TQueryOrderArray | undefined;
96
+ timezone?: string | undefined;
97
+ ungrouped?: boolean | undefined;
98
+ responseFormat?: "compact" | "columnar" | "default" | undefined;
99
+ total?: boolean | undefined;
100
+ };
101
+ pivotConfig?: PivotConfig | undefined;
102
+ chartType?: ChartType | undefined;
103
+ validatedQuery?: Query | undefined;
104
+ missingMembers: string[];
105
+ isFetchingMeta: boolean;
106
+ dryRunResponse?: DryRunResponse | null | undefined;
107
+ meta?: Meta | undefined;
108
+ metaError?: Error | null | undefined;
109
+ richMetaError?: Error | null | undefined;
110
+ metaErrorStack?: string | null | undefined;
111
+ queryError?: Error | null | undefined;
112
+ richQueryError?: Error | null | undefined;
113
+ sessionGranularity?: string | null | undefined;
114
+ shouldApplyHeuristicOrder?: boolean | undefined;
115
+ } | null;
116
+ static resolveMember(type: QueryMemberType, { meta, query }: ResolveMemberArgs): unknown[];
117
+ constructor(props: QueryBuilderProps);
118
+ componentDidMount(): Promise<void>;
119
+ componentDidUpdate(prevProps: QueryBuilderProps): Promise<void>;
120
+ private mutexObj;
121
+ private orderMembersOrderKeys;
122
+ private prevContext?;
123
+ fetchMeta: () => Promise<void>;
124
+ cubeApi(): CubeApi;
125
+ getMissingMembers(query: Query, meta?: Meta): string[];
126
+ isQueryPresent(): boolean;
127
+ prepareRenderProps(queryRendererProps?: QueryRendererRenderProps): QueryBuilderRenderProps;
128
+ updateQuery(queryUpdate: Query): void;
129
+ updateVizState(state: QueryBuilderStateUpdate): Promise<void>;
130
+ validatedQuery(state?: QueryBuilderStateUpdate): Query;
131
+ defaultHeuristics(newState: QueryBuilderStateUpdate): QueryBuilderStateUpdate;
132
+ applyStateChangeHeuristics(newState: QueryBuilderStateUpdate): QueryBuilderStateUpdate;
133
+ render(): React.ReactNode;
134
+ }
135
+ //# sourceMappingURL=QueryBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../src/QueryBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,OAAO,KAAK,EACV,OAAO,EAEP,cAAc,EACd,IAAI,EAEJ,WAAW,EAEX,KAAK,EAQN,MAAM,qBAAqB,CAAC;AAK7B,OAAO,KAAK,EAGV,SAAS,EACT,gBAAgB,EAYhB,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,EAEvB,uBAAuB,EACvB,eAAe,EACf,wBAAwB,EAExB,iBAAiB,EAMlB,MAAM,SAAS,CAAC;AAcjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;IACrG,MAAM,CAAC,WAAW,kCAAe;IAEjC,MAAM,CAAC,YAAY;;;;;;;;;;;;;;MAgBjB;IAIF,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsB1F,MAAM,CAAC,aAAa,CAClB,IAAI,EAAE,eAAe,EACrB,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,iBAAiB,GACjC,OAAO,EAAE;gBAkCA,KAAK,EAAE,iBAAiB;IAmB9B,iBAAiB;IAKjB,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAmCrD,OAAO,CAAC,QAAQ,CAAW;IAE3B,OAAO,CAAC,qBAAqB,CAAW;IAExC,OAAO,CAAC,WAAW,CAAC,CAAmB;IAEvC,SAAS,sBAmCP;IAEF,OAAO,IAAI,OAAO;IAMlB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI;IAgB3C,cAAc;IAKd,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,wBAAwB,GAAG,uBAAuB;IAgP1F,WAAW,CAAC,WAAW,EAAE,KAAK;IAWxB,cAAc,CAAC,KAAK,EAAE,uBAAuB;IAkGnD,cAAc,CAAC,KAAK,CAAC,EAAE,uBAAuB;IAM9C,iBAAiB,CAAC,QAAQ,EAAE,uBAAuB,GAAG,uBAAuB;IAS7E,0BAA0B,CAAC,QAAQ,EAAE,uBAAuB,GAAG,uBAAuB;IAQtF,MAAM;CAyBP"}
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import type { CubeApi, Query } from '@cubejs-client/core';
3
+ import type { QueryRendererProps, QueryRendererState } from './types';
4
+ /**
5
+ * `<QueryRenderer />` a react component that accepts a query, fetches the given query, and uses the render prop to render the resulting data
6
+ * @stickyTypes QueryRendererProps, QueryRendererRenderProps
7
+ * @noInheritDoc
8
+ */
9
+ export default class QueryRenderer extends React.Component<QueryRendererProps, QueryRendererState> {
10
+ static contextType: React.Context<import("./types").CubeContextProps>;
11
+ static defaultProps: {
12
+ cubeApi: null;
13
+ query: null;
14
+ render: null;
15
+ queries: null;
16
+ loadSql: null;
17
+ updateOnlyOnStateChange: boolean;
18
+ resetResultSetOnChange: boolean;
19
+ cache: null;
20
+ };
21
+ static isQueryPresent(query: Query | Query[]): boolean;
22
+ constructor(props: QueryRendererProps);
23
+ componentDidMount(): void;
24
+ shouldComponentUpdate(nextProps: QueryRendererProps, nextState: QueryRendererState): boolean;
25
+ componentDidUpdate(prevProps: QueryRendererProps): void;
26
+ private mutexObj;
27
+ cubeApi(): CubeApi;
28
+ load(query: Query | Query[]): void;
29
+ loadQueries(queries?: {
30
+ [key: string]: Query;
31
+ }): void;
32
+ render(): React.ReactNode;
33
+ }
34
+ //# sourceMappingURL=QueryRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryRenderer.d.ts","sourceRoot":"","sources":["../src/QueryRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,OAAO,EAAqB,KAAK,EAAa,MAAM,qBAAqB,CAAC;AAGxF,OAAO,KAAK,EAGV,kBAAkB,EAElB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChG,MAAM,CAAC,WAAW,oDAAe;IAEjC,MAAM,CAAC,YAAY;;;;;;;;;MASjB;IAGF,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE;gBAIhC,KAAK,EAAE,kBAAkB;IAMrC,iBAAiB;IAUjB,qBAAqB,CAAC,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,kBAAkB;IAgBlF,kBAAkB,CAAC,SAAS,EAAE,kBAAkB;IAmBhD,OAAO,CAAC,QAAQ,CAAW;IAE3B,OAAO,IAAI,OAAO;IAKlB,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE;IAkD3B,WAAW,CAAC,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAA;KAAE;IA8B9C,MAAM;CAqBP"}
@@ -0,0 +1,4 @@
1
+ import type { QueryRendererWithTotalsProps } from './types';
2
+ declare const QueryRendererWithTotals: ({ query, ...restProps }: QueryRendererWithTotalsProps) => JSX.Element;
3
+ export default QueryRendererWithTotals;
4
+ //# sourceMappingURL=QueryRendererWithTotals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryRendererWithTotals.d.ts","sourceRoot":"","sources":["../src/QueryRendererWithTotals.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAE5D,QAAA,MAAM,uBAAuB,4BAA6B,4BAA4B,gBAerF,CAAC;AAEF,eAAe,uBAAuB,CAAC"}