@cubejs-client/react 1.7.37 → 1.7.39

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.
package/README.md CHANGED
@@ -1,16 +1,16 @@
1
- <p align="center"><a href="https://cube.dev"><img src="https://i.imgur.com/zYHXm4o.png" alt="Cube.js" width="300px"></a></p>
1
+ <p align="center"><a href="https://cube.dev"><img src="https://i.imgur.com/zYHXm4o.png" alt="Cube" width="300px"></a></p>
2
2
 
3
3
  [Website](https://cube.dev) • [Docs](https://docs.cube.dev) • [Blog](https://cube.dev/blog) • [Slack](https://slack.cube.dev) • [Twitter](https://twitter.com/the_cube_dev)
4
4
 
5
5
  [![npm version](https://badge.fury.io/js/%40cubejs-client%2Freact.svg)](https://badge.fury.io/js/%40cubejs-client%2Freact)
6
6
  [![GitHub Actions](https://github.com/cube-js/cube.js/workflows/Build/badge.svg)](https://github.com/cube-js/cube.js/actions?query=workflow%3ABuild+branch%3Amaster)
7
7
 
8
- # Cube.js React
8
+ # Cube React
9
9
 
10
- Cube.js React is a set of helper React components to simplify Cube.js query rendering.
10
+ Cube React is a set of helper React components to simplify Cube query rendering.
11
11
 
12
12
  [Learn more](https://github.com/cube-js/cube.js#getting-started)
13
13
 
14
14
  ### License
15
15
 
16
- Cube.js React is [MIT licensed](./LICENSE).
16
+ Cube React is [MIT licensed](./LICENSE).
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { CubeProviderProps } from './types';
3
3
  /**
4
- * Cube.js context provider
4
+ * Cube context provider
5
5
  * ```js
6
6
  * import React from 'react';
7
7
  * import cube from '@cubejs-client/core';
@@ -1,8 +1,9 @@
1
1
  import React from 'react';
2
2
  import type { CubeApi, DryRunResponse, Meta, PivotConfig, Query } from '@cubejs-client/core';
3
+ import CubeContext from './CubeContext';
3
4
  import type { ChartType, CubeContextProps, QueryBuilderInternalState, QueryBuilderProps, QueryBuilderRenderProps, QueryBuilderStateUpdate, QueryMemberType, QueryRendererRenderProps, ResolveMemberArgs } from './types';
4
5
  /**
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
+ * `<QueryBuilder />` is used to build interactive analytics query builders. It abstracts state management and API calls to Cube Backend. It uses render prop technique and doesn’t render anything itself, but calls the render function instead.
6
7
  *
7
8
  * **Example**
8
9
  *
@@ -67,6 +68,7 @@ import type { ChartType, CubeContextProps, QueryBuilderInternalState, QueryBuild
67
68
  */
68
69
  export default class QueryBuilder extends React.Component<QueryBuilderProps, QueryBuilderInternalState> {
69
70
  static contextType: React.Context<CubeContextProps>;
71
+ context: React.ContextType<typeof CubeContext>;
70
72
  static defaultProps: {
71
73
  cubeApi: null;
72
74
  stateChangeHeuristics: null;
@@ -130,6 +132,6 @@ export default class QueryBuilder extends React.Component<QueryBuilderProps, Que
130
132
  validatedQuery(state?: QueryBuilderStateUpdate): Query;
131
133
  defaultHeuristics(newState: QueryBuilderStateUpdate): QueryBuilderStateUpdate;
132
134
  applyStateChangeHeuristics(newState: QueryBuilderStateUpdate): QueryBuilderStateUpdate;
133
- render(): React.ReactNode;
135
+ render(): string | number | boolean | Iterable<React.ReactNode> | React.JSX.Element | null | undefined;
134
136
  }
135
137
  //# sourceMappingURL=QueryBuilder.d.ts.map
@@ -1 +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"}
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;AAG7B,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,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,OAAO,EAAG,KAAK,CAAC,WAAW,CAAC,OAAO,WAAW,CAAC,CAAC;IAEhD,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;IA+BrD,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"}
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { CubeApi, Query } from '@cubejs-client/core';
3
+ import CubeContext from './CubeContext';
3
4
  import type { QueryRendererProps, QueryRendererState } from './types';
4
5
  /**
5
6
  * `<QueryRenderer />` a react component that accepts a query, fetches the given query, and uses the render prop to render the resulting data
@@ -8,6 +9,7 @@ import type { QueryRendererProps, QueryRendererState } from './types';
8
9
  */
9
10
  export default class QueryRenderer extends React.Component<QueryRendererProps, QueryRendererState> {
10
11
  static contextType: React.Context<import("./types").CubeContextProps>;
12
+ context: React.ContextType<typeof CubeContext>;
11
13
  static defaultProps: {
12
14
  cubeApi: null;
13
15
  query: null;
@@ -1 +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"}
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;AAExF,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,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,OAAO,EAAG,KAAK,CAAC,WAAW,CAAC,OAAO,WAAW,CAAC,CAAC;IAEhD,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;IAehD,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"}
@@ -1,4 +1,5 @@
1
+ import React from 'react';
1
2
  import type { QueryRendererWithTotalsProps } from './types';
2
- declare const QueryRendererWithTotals: ({ query, ...restProps }: QueryRendererWithTotalsProps) => JSX.Element;
3
+ declare const QueryRendererWithTotals: ({ query, ...restProps }: QueryRendererWithTotalsProps) => React.JSX.Element;
3
4
  export default QueryRendererWithTotals;
4
5
  //# sourceMappingURL=QueryRendererWithTotals.d.ts.map
@@ -1 +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,GAAI,yBAAyB,4BAA4B,gBAerF,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"QueryRendererWithTotals.d.ts","sourceRoot":"","sources":["../src/QueryRendererWithTotals.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAE5D,QAAA,MAAM,uBAAuB,GAAI,yBAAyB,4BAA4B,sBAerF,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -407,14 +407,11 @@ var QueryRenderer = /*#__PURE__*/function (_React$Component) {
407
407
  var _this;
408
408
  _classCallCheck(this, QueryRenderer);
409
409
  _this = _callSuper(this, QueryRenderer, [props]);
410
+ _defineProperty(_this, "context", void 0);
410
411
  // These sit after the lifecycle methods because `react/sort-comp` sorts
411
412
  // TypeScript field declarations into `everything-else`, which the configured
412
413
  // order puts after `lifecycle`. Runtime is unaffected: field initializers run
413
414
  // right after `super()`, so the constructor's assignments still win.
414
- //
415
- // `this.context` is not re-declared: React types it as `any`, and a field
416
- // declaration would be emitted at runtime and shadow the context React
417
- // assigns.
418
415
  _defineProperty(_this, "mutexObj", void 0);
419
416
  _this.state = {};
420
417
  _this.mutexObj = {};
@@ -708,7 +705,7 @@ var granularities = [{
708
705
  }];
709
706
 
710
707
  /**
711
- * `<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.
708
+ * `<QueryBuilder />` is used to build interactive analytics query builders. It abstracts state management and API calls to Cube Backend. It uses render prop technique and doesn’t render anything itself, but calls the render function instead.
712
709
  *
713
710
  * **Example**
714
711
  *
@@ -776,14 +773,11 @@ var QueryBuilder = /*#__PURE__*/function (_React$Component) {
776
773
  var _this;
777
774
  _classCallCheck(this, QueryBuilder);
778
775
  _this = _callSuper(this, QueryBuilder, [props]);
776
+ _defineProperty(_this, "context", void 0);
779
777
  // These sit after the lifecycle methods because `react/sort-comp` sorts
780
778
  // TypeScript field declarations into `everything-else`, which the configured
781
779
  // order puts after `lifecycle`. Runtime is unaffected: field initializers run
782
780
  // right after `super()`, so the constructor's assignments still win.
783
- //
784
- // `this.context` is not re-declared: React types it as `any`, and a field
785
- // declaration would be emitted at runtime and shadow the context React
786
- // assigns.
787
781
  _defineProperty(_this, "mutexObj", void 0);
788
782
  _defineProperty(_this, "orderMembersOrderKeys", void 0);
789
783
  _defineProperty(_this, "prevContext", void 0);
@@ -1454,7 +1448,7 @@ _defineProperty(QueryBuilder, "defaultProps", {
1454
1448
  });
1455
1449
 
1456
1450
  /**
1457
- * Cube.js context provider
1451
+ * Cube context provider
1458
1452
  * ```js
1459
1453
  * import React from 'react';
1460
1454
  * import cube from '@cubejs-client/core';
@@ -1647,7 +1641,7 @@ function useLazyDryRun(query) {
1647
1641
  }
1648
1642
 
1649
1643
  /**
1650
- * A React hook for executing Cube.js queries
1644
+ * A React hook for executing Cube queries
1651
1645
  * ```js
1652
1646
  * import React from 'react';
1653
1647
  * import { Table } from 'antd';
@@ -1706,17 +1700,29 @@ function useCubeQuery(query) {
1706
1700
  error = _useState0[0],
1707
1701
  setError = _useState0[1];
1708
1702
  var context = React.useContext(CubeContext);
1703
+ var requestIdRef = React.useRef(0);
1704
+ var hasStartedRequestRef = React.useRef(false);
1709
1705
  var subscribeRequest = null;
1710
-
1711
- // `progressResponse` is not part of the public `ProgressResult` API
1712
- var progressCallback = function progressCallback(progressResult) {
1713
- return setProgress(progressResult.progressResponse);
1714
- };
1715
- function fetch() {
1716
- return _fetch.apply(this, arguments);
1706
+ function isCurrentRequest(requestId) {
1707
+ return requestId === requestIdRef.current;
1717
1708
  }
1718
- function _fetch() {
1719
- _fetch = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
1709
+ function startRequest() {
1710
+ hasStartedRequestRef.current = true;
1711
+ return ++requestIdRef.current;
1712
+ }
1713
+ function createProgressCallback(requestId) {
1714
+ return function (progressResult) {
1715
+ if (isCurrentRequest(requestId)) {
1716
+ // `progressResponse` is not part of the public `ProgressResult` API
1717
+ setProgress(progressResult.progressResponse);
1718
+ }
1719
+ };
1720
+ }
1721
+ function fetchQuery(_x) {
1722
+ return _fetchQuery.apply(this, arguments);
1723
+ }
1724
+ function _fetchQuery() {
1725
+ _fetchQuery = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(requestId) {
1720
1726
  var resetResultSetOnChange, cubeApi, _context$options, response, _t2;
1721
1727
  return _regenerator().w(function (_context2) {
1722
1728
  while (1) switch (_context2.p = _context2.n) {
@@ -1734,35 +1740,61 @@ function useCubeQuery(query) {
1734
1740
  }
1735
1741
  setError(null);
1736
1742
  setLoading(true);
1743
+ setProgress(null);
1737
1744
  _context2.p = 2;
1738
1745
  _context2.n = 3;
1739
1746
  return cubeApi.load(query, _objectSpread2({
1740
1747
  mutexObj: mutexRef.current,
1741
1748
  mutexKey: 'query',
1742
- progressCallback: progressCallback,
1749
+ progressCallback: createProgressCallback(requestId),
1743
1750
  castNumerics: Boolean(typeof options.castNumerics === 'boolean' ? options.castNumerics : context === null || context === void 0 || (_context$options = context.options) === null || _context$options === void 0 ? void 0 : _context$options.castNumerics)
1744
1751
  }, options.cache ? {
1745
1752
  cache: options.cache
1746
1753
  } : {}));
1747
1754
  case 3:
1748
1755
  response = _context2.v;
1749
- setResultSet(response);
1750
- setProgress(null);
1756
+ if (isCurrentRequest(requestId)) {
1757
+ setResultSet(response);
1758
+ setProgress(null);
1759
+ }
1751
1760
  _context2.n = 5;
1752
1761
  break;
1753
1762
  case 4:
1754
1763
  _context2.p = 4;
1755
1764
  _t2 = _context2.v;
1756
- setError(_t2);
1757
- setResultSet(null);
1758
- setProgress(null);
1765
+ if (isCurrentRequest(requestId)) {
1766
+ setError(_t2);
1767
+ setResultSet(null);
1768
+ setProgress(null);
1769
+ }
1759
1770
  case 5:
1760
- setLoading(false);
1771
+ if (isCurrentRequest(requestId)) {
1772
+ setLoading(false);
1773
+ }
1761
1774
  case 6:
1762
1775
  return _context2.a(2);
1763
1776
  }
1764
1777
  }, _callee2, null, [[2, 4]]);
1765
1778
  }));
1779
+ return _fetchQuery.apply(this, arguments);
1780
+ }
1781
+ function fetch() {
1782
+ return _fetch.apply(this, arguments);
1783
+ }
1784
+ function _fetch() {
1785
+ _fetch = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
1786
+ var requestId;
1787
+ return _regenerator().w(function (_context3) {
1788
+ while (1) switch (_context3.n) {
1789
+ case 0:
1790
+ requestId = startRequest();
1791
+ _context3.n = 1;
1792
+ return fetchQuery(requestId);
1793
+ case 1:
1794
+ return _context3.a(2);
1795
+ }
1796
+ }, _callee3);
1797
+ }));
1766
1798
  return _fetch.apply(this, arguments);
1767
1799
  }
1768
1800
  React.useEffect(function () {
@@ -1778,15 +1810,15 @@ function useCubeQuery(query) {
1778
1810
  }
1779
1811
  function _loadQuery() {
1780
1812
  _loadQuery = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
1781
- var previousQuery, _t;
1813
+ var requestId, previousQuery, _t;
1782
1814
  return _regenerator().w(function (_context) {
1783
1815
  while (1) switch (_context.p = _context.n) {
1784
1816
  case 0:
1785
1817
  if (!(!skip && core.isQueryPresent(query))) {
1786
- _context.n = 7;
1818
+ _context.n = 8;
1787
1819
  break;
1788
1820
  }
1789
- // `areQueriesEqual` is declared for a single query, and reads no more
1821
+ requestId = startRequest(); // `areQueriesEqual` is declared for a single query, and reads no more
1790
1822
  // than `order` off one when given an array of queries
1791
1823
  previousQuery = currentQuery;
1792
1824
  if (!core.areQueriesEqual(previousQuery, query)) {
@@ -1797,6 +1829,7 @@ function useCubeQuery(query) {
1797
1829
  }
1798
1830
  setError(null);
1799
1831
  setLoading(true);
1832
+ setProgress(null);
1800
1833
  _context.p = 1;
1801
1834
  if (!subscribeRequest) {
1802
1835
  _context.n = 3;
@@ -1814,34 +1847,46 @@ function useCubeQuery(query) {
1814
1847
  subscribeRequest = cubeApi.subscribe(query, _objectSpread2({
1815
1848
  mutexObj: mutexRef.current,
1816
1849
  mutexKey: 'query',
1817
- progressCallback: progressCallback
1850
+ progressCallback: createProgressCallback(requestId)
1818
1851
  }, options.cache ? {
1819
1852
  cache: options.cache
1820
1853
  } : {}), function (e, result) {
1821
- if (e) {
1822
- setError(e);
1823
- } else {
1824
- setResultSet(result);
1854
+ if (isCurrentRequest(requestId)) {
1855
+ if (e) {
1856
+ setError(e);
1857
+ } else {
1858
+ setResultSet(result);
1859
+ }
1860
+ setLoading(false);
1861
+ setProgress(null);
1825
1862
  }
1826
- setLoading(false);
1827
- setProgress(null);
1828
1863
  });
1829
1864
  _context.n = 5;
1830
1865
  break;
1831
1866
  case 4:
1832
1867
  _context.n = 5;
1833
- return fetch();
1868
+ return fetchQuery(requestId);
1834
1869
  case 5:
1835
1870
  _context.n = 7;
1836
1871
  break;
1837
1872
  case 6:
1838
1873
  _context.p = 6;
1839
1874
  _t = _context.v;
1840
- setError(_t);
1841
- setResultSet(null);
1842
- setLoading(false);
1843
- setProgress(null);
1875
+ if (isCurrentRequest(requestId)) {
1876
+ setError(_t);
1877
+ setResultSet(null);
1878
+ setLoading(false);
1879
+ setProgress(null);
1880
+ }
1844
1881
  case 7:
1882
+ _context.n = 9;
1883
+ break;
1884
+ case 8:
1885
+ if (hasStartedRequestRef.current) {
1886
+ setLoading(false);
1887
+ setProgress(null);
1888
+ }
1889
+ case 9:
1845
1890
  return _context.a(2);
1846
1891
  }
1847
1892
  }, _callee, null, [[1, 6]]);
@@ -1850,6 +1895,7 @@ function useCubeQuery(query) {
1850
1895
  }
1851
1896
  loadQuery();
1852
1897
  return function () {
1898
+ requestIdRef.current += 1;
1853
1899
  if (subscribeRequest) {
1854
1900
  subscribeRequest.unsubscribe();
1855
1901
  subscribeRequest = null;