blob: 81038f95a4c2ab3cab74a01ee2fda74952db0daa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
import { useEffect, useMemo } from 'react';
import { map } from '../core/MapView';
import './notification.css';
const statusClass = (status) => `maplibregl-ctrl-icon maplibre-ctrl-notification maplibre-ctrl-notification-${status}`;
class NotificationControl {
constructor(eventHandler) {
this.eventHandler = eventHandler;
}
onAdd() {
this.button = document.createElement('button');
this.button.className = statusClass('off');
this.button.type = 'button';
this.button.onclick = () => this.eventHandler(this);
this.container = document.createElement('div');
this.container.className = 'maplibregl-ctrl-group maplibregl-ctrl';
this.container.appendChild(this.button);
return this.container;
}
onRemove() {
this.container.parentNode.removeChild(this.container);
}
setEnabled(enabled) {
this.button.className = statusClass(enabled ? 'on' : 'off');
}
}
const MapNotification = ({ enabled, onClick }) => {
const control = useMemo(() => new NotificationControl(onClick), [onClick]);
useEffect(() => {
map.addControl(control);
return () => map.removeControl(control);
}, [onClick]);
useEffect(() => {
control.setEnabled(enabled);
}, [enabled]);
return null;
};
export default MapNotification;
|