Skip to content

Commit 6e9239d

Browse files
authored
Merge pull request #670 from cube-js/react-query-skip
feat(cubejs-client-react)!: ability to skip the query for the useCubeQuery hook
2 parents 31494d1 + 35b391c commit 6e9239d

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

packages/cubejs-client-react/src/useCubeQuery.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
11
import {
2-
useContext, useEffect, useState
2+
useContext, useEffect, useState, useRef
33
} from 'react';
44
import { equals } from 'ramda';
55
import CubeContext from './CubeContext';
66
import isQueryPresent from './isQueryPresent';
77
import useDeepCompareMemoize from './useDeepCompareMemoize';
88

99
export default (query, options = {}) => {
10-
const [mutexObj] = useState({});
10+
const mutexRef = useRef({});
1111
const [currentQuery, setCurrentQuery] = useState(null);
1212
const [isLoading, setLoading] = useState(false);
1313
const [resultSet, setResultSet] = useState(null);
1414
const [error, setError] = useState(null);
1515
const context = useContext(CubeContext);
16-
const { resetResultSetOnChange } = options;
1716

1817
let subscribeRequest = null;
1918

2019
useEffect(() => {
20+
const { skip = false, resetResultSetOnChange } = options;
21+
2122
async function loadQuery() {
22-
if (query && isQueryPresent(query)) {
23+
if (!skip && query && isQueryPresent(query)) {
2324
if (!equals(currentQuery, query)) {
2425
if (resetResultSetOnChange == null || resetResultSetOnChange) {
2526
setResultSet(null);
@@ -36,19 +37,19 @@ export default (query, options = {}) => {
3637
const cubejsApi = options.cubejsApi || context && context.cubejsApi;
3738
if (options.subscribe) {
3839
subscribeRequest = cubejsApi.subscribe(query, {
39-
mutexObj,
40+
mutexObj: mutexRef.current,
4041
mutexKey: 'query'
4142
}, (e, result) => {
42-
setLoading(false);
4343
if (e) {
4444
setError(e);
4545
} else {
4646
setResultSet(result);
4747
}
48+
setLoading(false);
4849
});
4950
} else {
5051
setResultSet(await cubejsApi.load(query, {
51-
mutexObj,
52+
mutexObj: mutexRef.current,
5253
mutexKey: 'query'
5354
}));
5455
setLoading(false);
@@ -59,6 +60,7 @@ export default (query, options = {}) => {
5960
}
6061
}
6162
}
63+
6264
loadQuery();
6365
return () => {
6466
if (subscribeRequest) {

0 commit comments

Comments
 (0)