1
1
import * as React from 'react' ;
2
- import { useContext , useEffect , useMemo , useCallback , useState , useRef , cloneElement } from 'react' ;
2
+ import { useContext , useEffect , useMemo , useState , useRef , cloneElement } from 'react' ;
3
3
import { MapContext } from './map' ;
4
4
import assert from '../utils/assert' ;
5
5
import { deepEqual } from '../utils/deep-equal' ;
@@ -25,7 +25,8 @@ export type SourceProps = (SourceSpecification | CanvasSourceSpecification) & {
25
25
let sourceCounter = 0 ;
26
26
27
27
function createSource ( map : MapInstance , id : string , props : SourceProps ) {
28
- if ( map . isStyleLoaded ( ) ) {
28
+ // @ts -ignore
29
+ if ( map . style && map . style . _loaded ) {
29
30
const options = { ...props } ;
30
31
delete options . id ;
31
32
delete options . children ;
@@ -83,12 +84,11 @@ export function Source(props: SourceProps) {
83
84
const [ , setStyleLoaded ] = useState ( 0 ) ;
84
85
85
86
const id = useMemo ( ( ) => props . id || `jsx-source-${ sourceCounter ++ } ` , [ ] ) ;
86
- const forceUpdate = useCallback ( ( ) => setStyleLoaded ( version => version + 1 ) , [ ] ) ;
87
87
88
88
useEffect ( ( ) => {
89
89
if ( map ) {
90
- // Fired on initial load signaling the map is ready to add custom sources
91
- // Subsequently fired on style changes
90
+ /* global setTimeout */
91
+ const forceUpdate = ( ) => setTimeout ( ( ) => setStyleLoaded ( version => version + 1 ) , 0 ) ;
92
92
map . on ( 'styledata' , forceUpdate ) ;
93
93
forceUpdate ( ) ;
94
94
@@ -124,20 +124,6 @@ export function Source(props: SourceProps) {
124
124
}
125
125
propsRef . current = props ;
126
126
127
- useEffect ( ( ) => {
128
- if ( ! source ) {
129
- // on `styledata` event, `map.isStyleLoaded()` still returns false.
130
- // `load` and `style.load` only fire once and not when `isStyleLoaded` changes from true to false to true.
131
- // `sourcedata` potentially suggests that `isStyleLoaded` has changed. But it fires on every tile load.
132
- // Unsubscribe once source is added.
133
- map . on ( 'sourcedata' , forceUpdate ) ;
134
- return ( ) => {
135
- map . off ( 'sourcedata' , forceUpdate ) ;
136
- } ;
137
- }
138
- return undefined ;
139
- } , [ map , source ] ) ;
140
-
141
127
return (
142
128
( source &&
143
129
React . Children . map (
0 commit comments