@mapbox/mapbox-gl-draw
Version:
A drawing component for Mapbox GL JS
69 lines (57 loc) • 1.67 kB
JavaScript
import * as Constants from './constants.js';
import styles from './lib/theme.js';
import modes from './modes/index.js';
const defaultOptions = {
defaultMode: Constants.modes.SIMPLE_SELECT,
keybindings: true,
touchEnabled: true,
clickBuffer: 2,
touchBuffer: 25,
boxSelect: true,
displayControlsDefault: true,
styles,
modes,
controls: {},
userProperties: false,
suppressAPIEvents: true
};
const showControls = {
point: true,
line_string: true,
polygon: true,
trash: true,
combine_features: true,
uncombine_features: true
};
const hideControls = {
point: false,
line_string: false,
polygon: false,
trash: false,
combine_features: false,
uncombine_features: false
};
function addSources(styles, sourceBucket) {
return styles.map((style) => {
if (style.source) return style;
return Object.assign({}, style, {
id: `${style.id}.${sourceBucket}`,
source: (sourceBucket === 'hot') ? Constants.sources.HOT : Constants.sources.COLD
});
});
}
export default function(options = {}) {
let withDefaults = Object.assign({}, options);
if (!options.controls) {
withDefaults.controls = {};
}
if (options.displayControlsDefault === false) {
withDefaults.controls = Object.assign({}, hideControls, options.controls);
} else {
withDefaults.controls = Object.assign({}, showControls, options.controls);
}
withDefaults = Object.assign({}, defaultOptions, withDefaults);
// Layers with a shared source should be adjacent for performance reasons
withDefaults.styles = addSources(withDefaults.styles, 'cold').concat(addSources(withDefaults.styles, 'hot'));
return withDefaults;
}