You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
1.0 KiB
28 lines
1.0 KiB
import { useEffect } from 'react'; |
|
import { useAttribution } from './attribution.js'; |
|
import { useLeafletContext } from './context.js'; |
|
import { useEventHandlers } from './events.js'; |
|
import { withPane } from './pane.js'; |
|
export function useLayerLifecycle(element, context) { |
|
useEffect(function addLayer() { |
|
const container = context.layerContainer ?? context.map; |
|
container.addLayer(element.instance); |
|
return function removeLayer() { |
|
context.layerContainer?.removeLayer(element.instance); |
|
context.map.removeLayer(element.instance); |
|
}; |
|
}, [ |
|
context, |
|
element |
|
]); |
|
} |
|
export function createLayerHook(useElement) { |
|
return function useLayer(props) { |
|
const context = useLeafletContext(); |
|
const elementRef = useElement(withPane(props, context), context); |
|
useAttribution(context.map, props.attribution); |
|
useEventHandlers(elementRef.current, props.eventHandlers); |
|
useLayerLifecycle(elementRef.current, context); |
|
return elementRef; |
|
}; |
|
}
|
|
|