@@ -10,6 +10,7 @@ import { WorldmapCore } from './core';
10
10
import { WorldmapChrome } from './chrome' ;
11
11
import { ErrorManager } from './errors' ;
12
12
import DataFormatter from './data_formatter' ;
13
+ import appEvents from 'grafana/app/core/app_events' ;
13
14
14
15
const panelDefaults = {
15
16
maxDataPoints : 1 ,
@@ -264,13 +265,16 @@ export default class WorldmapCtrl extends MetricsPanelCtrl {
264
265
* Obtain data from the Grafana data source,
265
266
* decode appropriately and render the map.
266
267
*/
267
-
268
268
console . info ( 'Data received:' , dataList ) ;
269
269
270
270
// Is this the right place to indicate the plugin has been initialized?
271
271
this . initializing = false ;
272
272
273
273
try {
274
+ if ( this . dashboard . snapshot && this . locations ) {
275
+ this . panel . snapshotLocationData = this . locations ;
276
+ }
277
+
274
278
this . processData ( dataList ) ;
275
279
276
280
this . updateThresholdData ( ) ;
@@ -280,9 +284,9 @@ export default class WorldmapCtrl extends MetricsPanelCtrl {
280
284
if ( this . data . length && autoCenterMap ) {
281
285
this . updateMapCenter ( false ) ;
282
286
}
283
- } catch ( e ) {
284
- this . errors . add ( e , { domain : 'data' } ) ;
285
- throw e ;
287
+ } catch ( err ) {
288
+ this . errors . add ( err , { domain : 'data' } ) ;
289
+ appEvents . emit ( 'alert-error' , [ 'Data error' , err . toString ( ) ] ) ;
286
290
} finally {
287
291
this . render ( ) ;
288
292
}
@@ -370,48 +374,48 @@ export default class WorldmapCtrl extends MetricsPanelCtrl {
370
374
}
371
375
372
376
link ( scope , elem , attrs , ctrl ) {
373
- /*
374
- * Hook the panel into the rendering phase.
375
- */
377
+ let firstRender = true ;
376
378
377
- ctrl . events . on ( 'render' , ev => {
378
- // Perform rendering.
379
+ ctrl . events . on ( 'render' , ( ) => {
379
380
render ( ) ;
380
381
ctrl . renderingCompleted ( ) ;
381
- console . info ( 'Rendering panel completed' ) ;
382
-
383
- // Propagate warnings and errors to tooltip in panel corner.
384
- ctrl . propagateWarningsAndErrors ( ) ;
385
382
} ) ;
386
383
387
384
function render ( ) {
388
- console . info ( 'Rendering panel' ) ;
389
385
if ( ! ctrl . data ) {
390
386
return ;
391
387
}
392
388
389
+ // delay first render as the map panel sizing is bugged first render even though the element has correct height
390
+ if ( firstRender ) {
391
+ firstRender = false ;
392
+ setTimeout ( render , 100 ) ;
393
+ return ;
394
+ }
395
+
393
396
const mapContainer = elem . find ( '.mapcontainer' ) ;
394
397
395
398
if ( mapContainer [ 0 ] . id . indexOf ( '{{' ) > - 1 ) {
396
399
return ;
397
400
}
398
401
399
- console . info ( 'Rendering map' ) ;
400
402
if ( ! ctrl . map ) {
401
- // Create map.
402
403
const map = new WorldMap ( ctrl , mapContainer [ 0 ] ) ;
403
404
map . createMap ( ) ;
404
405
ctrl . map = map ;
406
+ }
405
407
406
- // When rendering the first time, make sure to signal `panToMapCenter()`.
407
- ctrl . mapCenterMoved = true ;
408
+ ctrl . map . resize ( ) ;
408
409
409
- // Render the map the first time, timing-safe.
410
- ctrl . map . renderMapFirst ( ) ;
411
- } else {
412
- // Invoke regular map rendering.
413
- ctrl . map . renderMap ( ) ;
410
+ if ( ctrl . mapCenterMoved ) {
411
+ ctrl . map . panToMapCenter ( ) ;
414
412
}
413
+
414
+ if ( ! ctrl . map . legend && ctrl . panel . showLegend ) {
415
+ ctrl . map . createLegend ( ) ;
416
+ }
417
+
418
+ ctrl . map . drawCircles ( ) ;
415
419
}
416
420
}
417
421
0 commit comments