const events = require('./events');
const Store = require('./store');
const ui = require('./ui');
const Constants = require('./constants');
module.exports = function(ctx) {
ctx.events = events(ctx);
ctx.map = null;
ctx.container = null;
ctx.store = null;
ctx.ui = ui(ctx);
let controlContainer = null;
const setup = {
onRemove: function() {
setup.removeLayers();
ctx.ui.removeButtons();
ctx.events.removeEventListeners();
ctx.map = null;
ctx.container = null;
ctx.store = null;
Iif (controlContainer && controlContainer.parentNode) controlContainer.parentNode.removeChild(controlContainer);
controlContainer = null;
return this;
},
onAdd: function(map) {
ctx.map = map;
ctx.container = map.getContainer();
ctx.store = new Store(ctx);
controlContainer = ctx.ui.addButtons();
if (ctx.options.boxSelect) E{
map.boxZoom.disable();
// Need to toggle dragPan on and off or else first
// dragPan disable attempt in simple_select doesn't work
map.dragPan.disable();
map.dragPan.enable();
}
if (map.loaded()) {
setup.addLayers();
ctx.events.addEventListeners();
} else E{
map.on('load', () => {
setup.addLayers();
ctx.events.addEventListeners();
});
}
return controlContainer;
},
addLayers: function() {
// drawn features style
ctx.map.addSource(Constants.sources.COLD, {
data: {
type: Constants.geojsonTypes.FEATURE_COLLECTION,
features: []
},
type: 'geojson'
});
// hot features style
ctx.map.addSource(Constants.sources.HOT, {
data: {
type: Constants.geojsonTypes.FEATURE_COLLECTION,
features: []
},
type: 'geojson'
});
ctx.options.styles.forEach(style => {
ctx.map.addLayer(style);
});
ctx.store.render();
},
removeLayers: function() {
ctx.options.styles.forEach(style => {
ctx.map.removeLayer(style.id);
});
ctx.map.removeSource(Constants.sources.COLD);
ctx.map.removeSource(Constants.sources.HOT);
}
};
ctx.setup = setup;
return setup;
};
|