@cubejs-client/react 1.7.13 → 1.7.14

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,765 @@
1
+ /**
2
+ * Types of `@cubejs-client/react`.
3
+ *
4
+ * Everything exported from `src/index.ts` is part of the published API: the
5
+ * declarations shipped in `dist` are emitted from these sources, so a change
6
+ * here is a change to what consumers see.
7
+ */
8
+ import type * as React from 'react';
9
+ import type { BinaryOperator, CacheMode, CubeApi, DateRange, DeeplyReadonly, DryRunResponse, Filter, FilterOperator, LoadMethodOptions, MemberType, Meta, PivotConfig, ProgressResponse, Query, QueryOrder, RequestError, ResultSet, SqlQuery, TCubeDimension, TCubeMeasure, TCubeSegment, TimeDimension, TimeDimensionGranularity, TOrderMember, TSourceAxis, UnaryOperator } from '@cubejs-client/core';
10
+ /**
11
+ * Object the API methods store their MUTEX in.
12
+ */
13
+ export type MutexObj = NonNullable<LoadMethodOptions['mutexObj']>;
14
+ /**
15
+ * A query as accepted by `useCubeQuery`.
16
+ */
17
+ export type ReadonlyQueryInput = DeeplyReadonly<Query | Query[]>;
18
+ export type CubeProviderOptions = {
19
+ castNumerics?: boolean;
20
+ };
21
+ export type CubeProviderProps = {
22
+ cubeApi: CubeApi | null;
23
+ options?: CubeProviderOptions;
24
+ children: React.ReactNode;
25
+ };
26
+ export type CubeContextProps = {
27
+ cubeApi: CubeApi;
28
+ options?: CubeProviderOptions;
29
+ };
30
+ export type TLoadingState = {
31
+ isLoading: boolean;
32
+ };
33
+ export type ChartType = 'line' | 'bar' | 'table' | 'area' | 'number' | 'pie';
34
+ export type VizState = {
35
+ query?: Query;
36
+ pivotConfig?: PivotConfig;
37
+ chartType?: ChartType;
38
+ };
39
+ export type QueryRendererRenderProps = {
40
+ resultSet: ResultSet | null;
41
+ error: Error | null;
42
+ loadingState: TLoadingState;
43
+ sqlQuery: SqlQuery | null;
44
+ };
45
+ export type QueryRendererProps = {
46
+ /**
47
+ * Analytic query. [Learn more about it's format](/product/apis-integrations/rest-api/query-format)
48
+ */
49
+ query: Query | Query[];
50
+ queries?: {
51
+ [key: string]: Query;
52
+ };
53
+ /**
54
+ * Indicates whether the generated by `Cube.js` SQL Code should be requested. See [rest-api#sql](/reference/rest-api#v1sql). When set to `only` then only the request to [/v1/sql](/reference/rest-api#v1sql) will be performed. When set to `true` the sql request will be performed along with the query request. Will not be performed if set to `false`
55
+ */
56
+ loadSql?: 'only' | boolean;
57
+ /**
58
+ * When `true` the **resultSet** will be reset to `null` first on every state change
59
+ */
60
+ resetResultSetOnChange?: boolean;
61
+ updateOnlyOnStateChange?: boolean;
62
+ /**
63
+ * `CubeApi` instance to use
64
+ */
65
+ cubeApi?: CubeApi;
66
+ /**
67
+ * Server-side cache policy for query execution. Does not control client-side caching.
68
+ */
69
+ cache?: CacheMode;
70
+ /**
71
+ * Output of this function will be rendered by the `QueryRenderer`
72
+ */
73
+ render: (renderProps: QueryRendererRenderProps) => void;
74
+ /**
75
+ * @hidden
76
+ */
77
+ children?: never;
78
+ };
79
+ /**
80
+ * `resultSet` holds a map of result sets keyed by query name when the `queries`
81
+ * prop is used, and a single result set otherwise.
82
+ *
83
+ * @hidden
84
+ */
85
+ export type QueryRendererState = {
86
+ isLoading?: boolean;
87
+ error?: RequestError | null;
88
+ sqlQuery?: SqlQuery | null;
89
+ resultSet?: ResultSet | {
90
+ [key: string]: ResultSet;
91
+ } | null;
92
+ /**
93
+ * Never assigned — `render()` has always read it from state rather than from
94
+ * props, so the empty-object fallback for `resultSet` does not kick in.
95
+ */
96
+ queries?: {
97
+ [key: string]: Query;
98
+ };
99
+ };
100
+ export type QueryRendererWithTotalsProps = Omit<QueryRendererProps, 'queries' | 'query'> & {
101
+ query: Query;
102
+ };
103
+ /**
104
+ * What `QueryRenderer` passes to its render prop. `resultSet`,
105
+ * `loadingState.isLoading` and `sqlQuery` are only set once a request resolves.
106
+ *
107
+ * @hidden
108
+ */
109
+ export type QueryRendererLoadState = {
110
+ error: Error | null;
111
+ resultSet: ResultSet | {
112
+ [key: string]: ResultSet;
113
+ } | null | undefined;
114
+ loadingState: {
115
+ isLoading?: boolean;
116
+ };
117
+ sqlQuery: SqlQuery | null | undefined;
118
+ };
119
+ /**
120
+ * @hidden
121
+ */
122
+ export type SchemaChangeProps = {
123
+ schemaVersion: number;
124
+ refresh: () => Promise<void>;
125
+ };
126
+ export type QueryBuilderState = VizState & {
127
+ query?: Query;
128
+ };
129
+ export type QueryBuilderProps = {
130
+ /**
131
+ * `CubeApi` instance to use
132
+ */
133
+ cubeApi?: CubeApi;
134
+ /**
135
+ * State for the QueryBuilder to start with. Pass in the value previously saved from onVizStateChanged to restore a session.
136
+ */
137
+ initialVizState?: VizState;
138
+ /**
139
+ * Called by the `QueryBuilder` when the viz state has changed. Use it to save state outside of the `QueryBuilder` component.
140
+ */
141
+ onVizStateChanged?: (vizState: VizState) => void;
142
+ /**
143
+ * @default defaultChartType line (used when initialVizState is not set or does not contain chartType)
144
+ */
145
+ defaultChartType?: ChartType;
146
+ /**
147
+ * Default query (used when initialVizState is not set or does not contain query)
148
+ */
149
+ defaultQuery?: Query;
150
+ /**
151
+ * Defaults to `false`. This means that the default heuristics will be applied. For example: when the query is empty and you select a measure that has a default time dimension it will be pushed to the query.
152
+ * @default disableHeuristics false
153
+ */
154
+ disableHeuristics?: boolean;
155
+ wrapWithQueryRenderer?: boolean;
156
+ render: (renderProps: QueryBuilderRenderProps) => React.ReactNode;
157
+ /**
158
+ * A function that accepts the `newState` just before it's applied. You can use it to override the **defaultHeuristics** or to tweak the query or the vizState in any way.
159
+ */
160
+ stateChangeHeuristics?: (state: QueryBuilderState, newState: QueryBuilderState) => QueryBuilderState;
161
+ /**
162
+ * @ignore @deprecated Controlled query
163
+ */
164
+ query?: Query;
165
+ /**
166
+ * @ignore @deprecated Controlled query setter
167
+ */
168
+ setQuery?: (query: Query) => void;
169
+ /**
170
+ * @ignore @deprecated Controlled vizState
171
+ */
172
+ vizState?: VizState;
173
+ /**
174
+ * @ignore @deprecated Controlled vizState setter
175
+ */
176
+ setVizState?: (vizState: VizState) => void;
177
+ /**
178
+ * @hidden
179
+ */
180
+ schemaVersion?: number;
181
+ /**
182
+ * @hidden
183
+ */
184
+ queryVersion?: number | string;
185
+ /**
186
+ * @hidden
187
+ */
188
+ onSchemaChange?: (props: SchemaChangeProps) => void;
189
+ };
190
+ export type QueryBuilderRenderProps = {
191
+ resultSet?: ResultSet | null;
192
+ error?: Error | null;
193
+ loadingState?: TLoadingState;
194
+ meta: Meta | undefined;
195
+ metaError?: Error | null;
196
+ richMetaError?: Error | null;
197
+ metaErrorStack?: string | null;
198
+ isFetchingMeta: boolean;
199
+ /**
200
+ * Indicates whether the query is ready to be displayed or not
201
+ */
202
+ isQueryPresent: boolean;
203
+ measures: (TCubeMeasure & {
204
+ index: number;
205
+ })[];
206
+ dimensions: (TCubeDimension & {
207
+ index: number;
208
+ })[];
209
+ segments: (TCubeSegment & {
210
+ index: number;
211
+ })[];
212
+ timeDimensions: (TimeDimensionWithExtraFields & {
213
+ index: number;
214
+ })[];
215
+ availableMembers: AvailableMembers;
216
+ availableFilterMembers: Array<AvailableCube<TCubeMeasure> | AvailableCube<TCubeDimension>>;
217
+ /**
218
+ * An array of available measures to select. They are loaded via the API from Cube.js Backend.
219
+ */
220
+ availableMeasures: TCubeMeasure[];
221
+ /**
222
+ * An array of available dimensions to select. They are loaded via the API from Cube.js Backend.
223
+ */
224
+ availableDimensions: TCubeDimension[];
225
+ /**
226
+ * An array of available time dimensions to select. They are loaded via the API from Cube.js Backend.
227
+ */
228
+ availableTimeDimensions: TCubeDimension[];
229
+ /**
230
+ * An array of available segments to select. They are loaded via the API from Cube.js Backend.
231
+ */
232
+ availableSegments: TCubeSegment[];
233
+ updateMeasures: MeasureUpdater;
234
+ updateDimensions: DimensionUpdater;
235
+ updateSegments: SegmentUpdater;
236
+ updateTimeDimensions: TimeDimensionUpdater;
237
+ updateFilters: FilterUpdater;
238
+ /**
239
+ * Used for partial of full query update
240
+ */
241
+ updateQuery: (query: Query) => void;
242
+ filters: (FilterWithExtraFields & {
243
+ index: number;
244
+ })[];
245
+ /**
246
+ * All possible order members for the query
247
+ */
248
+ orderMembers: TOrderMember[];
249
+ /**
250
+ * Used for query order update
251
+ */
252
+ updateOrder: OrderUpdater;
253
+ /**
254
+ * See [Pivot Config](@cubejs-client-core#types-pivot-config)
255
+ */
256
+ pivotConfig?: PivotConfig;
257
+ /**
258
+ * Helper method for `pivotConfig` updates
259
+ */
260
+ updatePivotConfig: PivotConfigUpdater;
261
+ /**
262
+ * Selected chart type
263
+ */
264
+ chartType?: ChartType;
265
+ /**
266
+ * Used for chart type update
267
+ */
268
+ updateChartType: (chartType: ChartType) => void;
269
+ /**
270
+ * Used to set the initial query for this component. Note that adding this prop turns this into an
271
+ * uncontrolled component and will only be able to execute `dryRun` queries. To use this component
272
+ * as a controlled component, use `setQuery` instead.
273
+ */
274
+ query: Query;
275
+ validatedQuery: Query;
276
+ refresh: () => void;
277
+ missingMembers: string[];
278
+ dryRunResponse?: DryRunResponse;
279
+ };
280
+ /**
281
+ * The state `QueryBuilder` keeps. It is a superset of `QueryBuilderState`:
282
+ * everything beyond `query`, `pivotConfig` and `chartType` is internal
283
+ * bookkeeping.
284
+ *
285
+ * @hidden
286
+ */
287
+ export type QueryBuilderInternalState = QueryBuilderState & {
288
+ query: Query;
289
+ validatedQuery?: Query;
290
+ missingMembers: string[];
291
+ isFetchingMeta: boolean;
292
+ dryRunResponse?: DryRunResponse | null;
293
+ meta?: Meta;
294
+ metaError?: Error | null;
295
+ richMetaError?: Error | null;
296
+ metaErrorStack?: string | null;
297
+ queryError?: Error | null;
298
+ richQueryError?: Error | null;
299
+ sessionGranularity?: TimeDimensionGranularity | null;
300
+ shouldApplyHeuristicOrder?: boolean;
301
+ };
302
+ /**
303
+ * A state update on its way through `updateVizState`. Heuristics may return a
304
+ * partial state, and the missing pieces are filled in before it is applied.
305
+ *
306
+ * @hidden
307
+ */
308
+ export type QueryBuilderStateUpdate = Partial<QueryBuilderInternalState>;
309
+ /**
310
+ * @hidden
311
+ */
312
+ export type QueryMemberType = MemberType | 'timeDimensions';
313
+ /**
314
+ * State `QueryBuilder.resolveMember` resolves members against.
315
+ *
316
+ * @hidden
317
+ */
318
+ export type ResolveMemberArgs = {
319
+ meta?: Meta;
320
+ query: Query | Query[];
321
+ };
322
+ /**
323
+ * Resolved query members carry the position they hold in the query.
324
+ *
325
+ * @hidden
326
+ */
327
+ export type IndexedMeasure = TCubeMeasure & {
328
+ index: number;
329
+ };
330
+ /**
331
+ * @hidden
332
+ */
333
+ export type IndexedDimension = TCubeDimension & {
334
+ index: number;
335
+ };
336
+ /**
337
+ * @hidden
338
+ */
339
+ export type IndexedSegment = TCubeSegment & {
340
+ index: number;
341
+ };
342
+ export type AvailableMembers = {
343
+ measures: AvailableCube<TCubeMeasure>[];
344
+ dimensions: AvailableCube<TCubeDimension>[];
345
+ segments: AvailableCube<TCubeSegment>[];
346
+ timeDimensions: AvailableCube<TCubeDimension>[];
347
+ };
348
+ export type AvailableCube<T = any> = {
349
+ type: 'cube' | 'view';
350
+ public: boolean;
351
+ cubeName: string;
352
+ cubeTitle: string;
353
+ members: T[];
354
+ };
355
+ export type UseCubeQueryOptions = {
356
+ /**
357
+ * A `CubeApi` instance to use. Taken from the context if the param is not passed
358
+ */
359
+ cubeApi?: CubeApi;
360
+ /**
361
+ * Query execution will be skipped when `skip` is set to `true`. You can use this flag to avoid sending incomplete queries.
362
+ */
363
+ skip?: boolean;
364
+ /**
365
+ * Use continuous fetch behavior. See [Real-Time Data Fetch](/product/apis-integrations/rest-api/real-time-data-fetch)
366
+ */
367
+ subscribe?: boolean;
368
+ /**
369
+ * When `true` the resultSet will be reset to `null` first
370
+ */
371
+ resetResultSetOnChange?: boolean;
372
+ /**
373
+ * If enabled, all members of the 'number' type will be automatically converted to numerical values on the client side
374
+ */
375
+ castNumerics?: boolean;
376
+ /**
377
+ * Server-side cache policy for query execution. Does not control client-side caching.
378
+ */
379
+ cache?: CacheMode;
380
+ };
381
+ /**
382
+ * `ResultSet` constrains its data to `Record<string, any>`, while `Data` is
383
+ * unconstrained here, as it is in `useCubeQuery`.
384
+ */
385
+ type ResultSetData<Data> = Data extends Record<string, any> ? Data : any;
386
+ export type UseCubeQueryResult<QueryInput, Data> = {
387
+ error: Error | null;
388
+ isLoading: boolean;
389
+ resultSet: ResultSet<ResultSetData<Data>> | null;
390
+ /**
391
+ * Set from the `Continue wait` messages of a long-running query.
392
+ *
393
+ * Note: this is `null` until the first such message arrives — the type is
394
+ * kept non-nullable for backwards compatibility, so read it with `progress?.`
395
+ */
396
+ progress: ProgressResponse;
397
+ /**
398
+ * The query the current `resultSet` was loaded for.
399
+ *
400
+ * Note: this is `null` until the first query runs — the type is kept
401
+ * non-nullable for backwards compatibility.
402
+ */
403
+ previousQuery: QueryInput;
404
+ refetch: () => Promise<void>;
405
+ };
406
+ /**
407
+ * What `useCubeQuery` builds, with `progress` and `previousQuery` as they
408
+ * actually are before the first response.
409
+ *
410
+ * @hidden
411
+ */
412
+ export type UseCubeQueryInternalResult = {
413
+ error: Error | null;
414
+ isLoading: boolean;
415
+ resultSet: ResultSet | null;
416
+ progress: ProgressResponse | null;
417
+ previousQuery: ReadonlyQueryInput | null;
418
+ refetch: () => Promise<void>;
419
+ };
420
+ /**
421
+ * @hidden
422
+ */
423
+ export type CubeFetchOptions = {
424
+ skip?: boolean;
425
+ cubeApi?: CubeApi;
426
+ query?: Query;
427
+ };
428
+ /**
429
+ * @hidden
430
+ */
431
+ export type CubeFetchResult<T> = {
432
+ isLoading: boolean;
433
+ error: Error | null;
434
+ /**
435
+ * The response of the last request.
436
+ *
437
+ * Note: this is `null` until the first request resolves — the type is kept
438
+ * non-nullable for backwards compatibility, so check `isLoading` first.
439
+ */
440
+ response: T;
441
+ };
442
+ /**
443
+ * The result of `useCubeMeta`, `useCubeSql` and `useDryRun`: a
444
+ * `CubeFetchResult` plus the `refetch` they expose.
445
+ */
446
+ export type UseCubeFetchResult<T> = CubeFetchResult<T> & {
447
+ refetch: (options?: UseCubeFetchLoadOptions) => Promise<void>;
448
+ };
449
+ /**
450
+ * What `useCubeFetch` returns before the first request resolves.
451
+ *
452
+ * @hidden
453
+ */
454
+ export type UseCubeFetchInternalResult<T> = CubeFetchState<T> & {
455
+ error: Error | null;
456
+ refetch: (options?: UseCubeFetchLoadOptions) => Promise<void>;
457
+ };
458
+ /**
459
+ * @hidden
460
+ */
461
+ export type UseDryRunResult = CubeFetchResult<DryRunResponse>;
462
+ /**
463
+ * @hidden
464
+ */
465
+ export type UseCubeSqlResponse = {
466
+ sql: string;
467
+ };
468
+ /**
469
+ * What `useCubeSql` resolves with. Its declared `response` is a
470
+ * `DryRunResponse` for backwards compatibility; cast to this to get at the
471
+ * `SqlQuery` it actually resolves with.
472
+ */
473
+ export type UseCubeSqlResult = UseCubeFetchResult<SqlQuery>;
474
+ /**
475
+ * @hidden
476
+ */
477
+ export type LoadLazyDryRunOptions = {
478
+ query?: Query | Query[];
479
+ };
480
+ /**
481
+ * `CubeApi` methods `useCubeFetch` can dispatch to.
482
+ *
483
+ * @hidden
484
+ */
485
+ export type CubeFetchMethod = 'meta' | 'sql' | 'dryRun';
486
+ /**
487
+ * Options of `useCubeSql`, `useDryRun` and `useLazyDryRun`. Unlike
488
+ * `CubeFetchOptions` they accept an array of queries and a `baseRequestId`.
489
+ */
490
+ export type UseCubeFetchOptions = Omit<CubeFetchOptions, 'query'> & {
491
+ query?: Query | Query[];
492
+ baseRequestId?: string;
493
+ onlyViews?: boolean;
494
+ };
495
+ /**
496
+ * The query a `refetch` — or `useLazyDryRun`'s loader — runs instead of the one
497
+ * the hook was called with.
498
+ */
499
+ export type UseCubeFetchLoadOptions = {
500
+ query?: Query | Query[];
501
+ onlyViews?: boolean;
502
+ };
503
+ /**
504
+ * @hidden
505
+ */
506
+ export type CubeMetaFetchOptions = Omit<CubeFetchOptions, 'query'> & {
507
+ /**
508
+ * Request views only — the response's `cubes` array then contains only entries
509
+ * whose `type` is `view`. Over HTTP, servers predating the flag ignore it and
510
+ * return the full model, so callers should not assume the response is filtered;
511
+ * over `WebSocketTransport` such servers reject the message with a 400.
512
+ */
513
+ onlyViews?: boolean;
514
+ /**
515
+ * @hidden
516
+ */
517
+ baseRequestId?: string;
518
+ };
519
+ /**
520
+ * What `useCubeFetch` keeps in state.
521
+ *
522
+ * @hidden
523
+ */
524
+ export type CubeFetchState<T> = {
525
+ isLoading: boolean;
526
+ response: T | null;
527
+ };
528
+ /**
529
+ * Arguments the dispatched `CubeApi` method is called with: `meta` takes only
530
+ * options, `sql` and `dryRun` take a query as well.
531
+ *
532
+ * @hidden
533
+ */
534
+ export type CubeFetchArgs = [LoadMethodOptions] | [Query | Query[], LoadMethodOptions];
535
+ /**
536
+ * The `CubeApi` method `useCubeFetch` dispatches to. The three methods share
537
+ * neither their signatures nor their response type, so the response is narrowed
538
+ * by the caller.
539
+ *
540
+ * @hidden
541
+ */
542
+ export type CubeFetchDispatch = (this: CubeApi, ...args: CubeFetchArgs) => Promise<unknown>;
543
+ /**
544
+ * `ProgressResult` keeps `progressResponse` private, but `useCubeQuery` has
545
+ * always read it to expose the raw response.
546
+ *
547
+ * @hidden
548
+ */
549
+ export type ProgressResultWithResponse = {
550
+ progressResponse: ProgressResponse;
551
+ };
552
+ /**
553
+ * @hidden
554
+ */
555
+ export type ProgressCallback = NonNullable<LoadMethodOptions['progressCallback']>;
556
+ /**
557
+ * You can use the following methods for member manipulaltion
558
+ * ```js
559
+ * <QueryBuilder
560
+ * // ...
561
+ * cubeApi={cubeApi}
562
+ * render={({
563
+ * // ...
564
+ * availableMeasures,
565
+ * updateMeasures,
566
+ * }) => {
567
+ * return (
568
+ * // ...
569
+ * <Select
570
+ * mode="multiple"
571
+ * placeholder="Please select"
572
+ * onSelect={(measure) => updateMeasures.add(measure)}
573
+ * onDeselect={(measure) => updateMeasures.remove(measure)}
574
+ * >
575
+ * {availableMeasures.map((measure) => (
576
+ * <Select.Option key={measure.name} value={measure}>
577
+ * {measure.title}
578
+ * </Select.Option>
579
+ * ))}
580
+ * </Select>
581
+ * );
582
+ * }}
583
+ * />
584
+ * ```
585
+ *
586
+ * NOTE: if you need to add or remove more than one member at a time you should use `updateQuery` prop of {@see QueryBuilderRenderProps}
587
+ * ```js
588
+ * <QueryBuilder
589
+ * // ...
590
+ * cubeApi={cubeApi}
591
+ * render={({
592
+ * // ...
593
+ * measures,
594
+ * updateMeasures,
595
+ * updateQuery,
596
+ * }) => {
597
+ * // ...
598
+ * return (
599
+ * <>
600
+ * // WRONG: This code will not work properly
601
+ * <button
602
+ * onClick={() =>
603
+ * measures.forEach((measure) => updateMeasures.remove(measure))
604
+ * }
605
+ * >
606
+ * Remove all
607
+ * </button>
608
+ *
609
+ * // CORRECT: Using `updateQuery` for removing all measures
610
+ * <button
611
+ * onClick={() =>
612
+ * updateQuery({
613
+ * measures: [],
614
+ * })
615
+ * }
616
+ * >
617
+ * Remove all
618
+ * </button>
619
+ * </>
620
+ * );
621
+ * }}
622
+ * />
623
+ * ```
624
+ */
625
+ export type MemberUpdater<T> = {
626
+ add: (member: T) => void;
627
+ remove: (member: {
628
+ index: number;
629
+ }) => void;
630
+ update: (member: {
631
+ index: number;
632
+ }, updateWith: T) => void;
633
+ };
634
+ /**
635
+ * Builds the updater for one kind of query member. `toQuery` turns a member
636
+ * into its query representation, and defaults to reading its name.
637
+ *
638
+ * @hidden
639
+ */
640
+ export type MemberUpdaterFactory = <Member>(memberType: QueryMemberType | 'filters', toQuery?: (member: Member) => unknown) => MemberUpdater<Member>;
641
+ export type FilterExtraFields = {
642
+ dimension: TCubeDimension | TCubeMeasure;
643
+ operators: {
644
+ name: string;
645
+ title: string;
646
+ }[];
647
+ };
648
+ export type FilterWithExtraFields = Omit<Filter, 'dimension'> & FilterExtraFields;
649
+ export type GranularityOptions = {
650
+ granularities: {
651
+ name: string;
652
+ title: string;
653
+ }[];
654
+ };
655
+ export type TimeDimensionExtraFields = {
656
+ dimension: TCubeDimension & GranularityOptions;
657
+ };
658
+ export type TimeDimensionWithExtraFields = Omit<TimeDimension, 'dimension'> & TimeDimensionExtraFields;
659
+ export type DimensionUpdater = MemberUpdater<TCubeDimension>;
660
+ export type MeasureUpdater = MemberUpdater<TCubeMeasure>;
661
+ export type SegmentUpdater = MemberUpdater<TCubeSegment>;
662
+ export type TimeDimensionRangedUpdateFields = {
663
+ granularity?: TimeDimensionGranularity;
664
+ dateRange?: DateRange;
665
+ dimension: TCubeDimension;
666
+ };
667
+ export type TimeDimensionComparisonUpdateFields = {
668
+ granularity?: TimeDimensionGranularity;
669
+ compareDateRange: Array<DateRange>;
670
+ dimension: TCubeDimension;
671
+ };
672
+ export type TimeDimensionUpdater = MemberUpdater<TimeDimensionRangedUpdateFields | TimeDimensionComparisonUpdateFields>;
673
+ export type FilterUpdateFields = {
674
+ member?: string;
675
+ operator: BinaryOperator | UnaryOperator;
676
+ values?: string[];
677
+ dimension: TCubeDimension | TCubeMeasure;
678
+ };
679
+ export type FilterUpdater = MemberUpdater<FilterUpdateFields>;
680
+ /**
681
+ * The fields `toTimeDimension` reads off a member. The updater takes either the
682
+ * ranged or the comparison variant, so both range fields are optional here.
683
+ *
684
+ * @hidden
685
+ */
686
+ export type TimeDimensionUpdateInput = {
687
+ granularity?: TimeDimensionGranularity;
688
+ dateRange?: DateRange;
689
+ compareDateRange?: Array<DateRange>;
690
+ dimension: TCubeDimension;
691
+ };
692
+ /**
693
+ * The fields `toFilter` reads off a member. Unlike `FilterUpdateFields`, where
694
+ * `member` is declared as a string, the resolved member object is what is read
695
+ * here.
696
+ *
697
+ * @hidden
698
+ */
699
+ export type FilterUpdateInput = {
700
+ member?: TCubeDimension | TCubeMeasure;
701
+ dimension?: TCubeDimension | TCubeMeasure;
702
+ operator: BinaryOperator | UnaryOperator;
703
+ values?: string[];
704
+ };
705
+ /**
706
+ * A time dimension as `QueryBuilder.resolveMember` returns it: the resolved
707
+ * dimension carries the granularity options the query builder offers.
708
+ *
709
+ * @hidden
710
+ */
711
+ export type ResolvedTimeDimension = Omit<TimeDimension, 'dimension'> & {
712
+ dimension: TCubeDimension & {
713
+ granularities: GranularityOption[];
714
+ };
715
+ index: number;
716
+ };
717
+ /**
718
+ * A granularity the query builder offers. `name` is left out for the
719
+ * "w/o grouping" option.
720
+ */
721
+ export type GranularityOption = {
722
+ name?: TimeDimensionGranularity;
723
+ title: string;
724
+ };
725
+ /**
726
+ * Either an `Error` or the `plainError` string from the API response, of which
727
+ * `fetchMeta` only reads `message`/`toString()`.
728
+ *
729
+ * @hidden
730
+ */
731
+ export type MetaErrorSource = {
732
+ message?: string;
733
+ toString(): string;
734
+ };
735
+ /**
736
+ * A filter as it reaches the render props: the resolved member and the
737
+ * operators available for it, alongside the fields of the query filter.
738
+ *
739
+ * @hidden
740
+ */
741
+ export type ResolvedFilter = Omit<Filter, 'dimension'> & {
742
+ dimension: TCubeDimension | TCubeMeasure;
743
+ operators: FilterOperator[];
744
+ index: number;
745
+ };
746
+ export type OrderUpdater = {
747
+ set: (memberId: string, order: QueryOrder | 'none') => void;
748
+ update: (order: Query['order']) => void;
749
+ reorder: (sourceIndex: number, destinationIndex: number) => void;
750
+ };
751
+ export type PivotConfigUpdaterArgs = {
752
+ sourceIndex: number;
753
+ destinationIndex: number;
754
+ sourceAxis: TSourceAxis;
755
+ destinationAxis: TSourceAxis;
756
+ };
757
+ export type PivotConfigExtraUpdateFields = {
758
+ limit?: number;
759
+ };
760
+ export type PivotConfigUpdater = {
761
+ moveItem: (args: PivotConfigUpdaterArgs) => void;
762
+ update: (pivotConfig: PivotConfig & PivotConfigExtraUpdateFields) => void;
763
+ };
764
+ export {};
765
+ //# sourceMappingURL=types.d.ts.map