11import {
2- useContext , useEffect , useState
2+ useContext , useEffect , useState , useRef
33} from 'react' ;
44import { equals } from 'ramda' ;
55import CubeContext from './CubeContext' ;
66import isQueryPresent from './isQueryPresent' ;
77import useDeepCompareMemoize from './useDeepCompareMemoize' ;
88
99export 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