Skip to content

Commit

Permalink
Conditionally add double click handler in EditableLayer
Browse files Browse the repository at this point in the history
  • Loading branch information
austintang committed May 29, 2020
1 parent 34d72a9 commit 8c13689
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions modules/layers/src/layers/editable-layer.ts
Expand Up @@ -60,12 +60,27 @@ export default class EditableLayer extends CompositeLayer<any> {
this._removePointerHandlers();
}

// Adding an event handler for dblclick causes deck to debounce clicks. If a controller
// with a property of doubleClickZoom = false is passed to deck via the controller prop
// or via a view through the views prop, deck no longer debounces clicks. This method
// better aligns behavior between EditableLayers with deck.
_getActiveEventTypes() {
// @ts-ignore - typescript complaining that deck does not exist on context type
const { controller, views } = this.context.deck.props;
const viewControllers = views.map((view) => view.props.controller);
const isDoubleClickZoomDisabled = [...viewControllers, controller].some(
(c) => !c.doubleClickZoom
);

return isDoubleClickZoomDisabled ? EVENT_TYPES.filter((t) => t !== 'dblclick') : EVENT_TYPES;
}

_addPointerHandlers() {
// @ts-ignore
const { eventManager } = this.context.deck;
const { eventHandler } = this.state._editableLayerState;

for (const eventType of EVENT_TYPES) {
for (const eventType of this._getActiveEventTypes()) {
eventManager.on(eventType, eventHandler, {
// give nebula a higher priority so that it can stop propagation to deck.gl's map panning handlers
priority: 100,
Expand All @@ -78,7 +93,7 @@ export default class EditableLayer extends CompositeLayer<any> {
const { eventManager } = this.context.deck;
const { eventHandler } = this.state._editableLayerState;

for (const eventType of EVENT_TYPES) {
for (const eventType of this._getActiveEventTypes()) {
eventManager.off(eventType, eventHandler);
}
}
Expand Down

0 comments on commit 8c13689

Please sign in to comment.