@@ -2,7 +2,7 @@ import React, { createContext, useContext, useEffect, useState } from 'react'
22import 'azure-maps-drawing-tools/dist/atlas-drawing.min.css'
33
44import atlas from 'azure-maps-control'
5- import { drawing } from 'azure-maps-drawing-tools'
5+ import { drawing , control } from 'azure-maps-drawing-tools'
66import {
77 DrawingManagerType ,
88 IAzureDrawingManagerStatefulProviderProps ,
@@ -40,13 +40,22 @@ const AzureMapDrawingManagerStatefulProvider = ({
4040 const { mapRef } = useContext < IAzureMapsContextProps > ( AzureMapsContext )
4141 const [ drawingManagerRef , setDrawingManagerRef ] = useState < drawing . DrawingManager | null > ( null )
4242 const [ dataSourceRef , setDataSourceRef ] = useState < atlas . source . DataSource | null > ( null )
43+ const [ toolbarOnceReadyRef , setToolbarOnceReadyRef ] = useState < control . DrawingToolbar | undefined > ( undefined )
4344
44- useCheckRef < MapType , DrawingManagerType > ( mapRef , drawingManagerRef , ( mref , dmref ) => {
45+ useCheckRef < MapType , MapType > ( mapRef , mapRef , mref => {
4546 mref . events . add ( 'ready' , ( ) => {
46- const drawingManager = new drawing . DrawingManager ( mref , options )
47+ // NOTE: if DrawingToolbar gets instantiated before map is 'ready', weird runtime errors follow.
48+ // create toolbar here instead
49+ const drawingManager = new drawing . DrawingManager ( mref )
50+ const toolbar = options . toolbar ? new control . DrawingToolbar ( options . toolbar ) : undefined
51+ drawingManager . setOptions ( {
52+ ...options ,
53+ toolbar
54+ } )
55+
4756 setDrawingManagerRef ( drawingManager )
4857 setDataSourceRef ( drawingManager . getSource ( ) )
49- drawingManager . getLayers ( )
58+ setToolbarOnceReadyRef ( toolbar )
5059
5160 // register drawing events
5261 for ( const eventType in events ) {
@@ -57,31 +66,33 @@ const AzureMapDrawingManagerStatefulProvider = ({
5766
5867 // NOTE: duplication to have the explicit types instead of any
5968 if ( eventType == 'drawingmodechanged' ) {
60- ( mref . events as _EventManager ) . add ( eventType , dmref , handler as ( a : drawing . DrawingMode ) => void )
69+ ( mref . events as _EventManager ) . add ( eventType , drawingManager , handler as ( a : drawing . DrawingMode ) => void )
6170 } else {
62- ( mref . events as _EventManager ) . add ( eventType as IAzureDrawingManagerDrawingEventType , dmref , handler as ( e : Shape ) => void )
71+ ( mref . events as _EventManager ) . add ( eventType as IAzureDrawingManagerDrawingEventType , drawingManager , handler as ( e : Shape ) => void )
6372 }
6473 }
6574
6675 return ( ) => {
6776 setDrawingManagerRef ( null )
6877 setDataSourceRef ( null )
78+ setToolbarOnceReadyRef ( undefined )
6979
7080 for ( const eventType in events ) {
7181 const handler = events [ eventType as IAzureDrawingManagerEventType ] ;
7282 if ( handler ) {
73- ( mref . events as _EventManager ) . remove ( eventType , dmref , handler )
83+ ( mref . events as _EventManager ) . remove ( eventType , drawingManager , handler )
7484 }
7585 }
7686 }
7787 } )
7888 } )
79-
89+
8090 useEffect ( ( ) => {
81- if ( drawingManagerRef && options ) {
82- drawingManagerRef . setOptions ( options )
91+ if ( drawingManagerRef && options ) {
92+ drawingManagerRef . setOptions ( { ...options , toolbar : toolbarOnceReadyRef } )
93+ toolbarOnceReadyRef ?. setOptions ( options . toolbar )
8394 }
84- } , [ drawingManagerRef , options ] )
95+ } , [ drawingManagerRef , options , toolbarOnceReadyRef ] )
8596
8697 return (
8798 < DrawingManagerProvider
0 commit comments