From 232375cfc01bfdf72223a31bb97bbd5222058dc4 Mon Sep 17 00:00:00 2001 From: Quincy Morgan Date: Sat, 18 Jan 2020 14:30:14 -0500 Subject: [PATCH] Fix sidebar state issues with adding and removing features from multiselection --- modules/ui/entity_editor.js | 2 +- modules/ui/selection_list.js | 26 ++++++++++++++++---------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/modules/ui/entity_editor.js b/modules/ui/entity_editor.js index 975c5035e..ed7c01bef 100644 --- a/modules/ui/entity_editor.js +++ b/modules/ui/entity_editor.js @@ -100,7 +100,7 @@ export function uiEntityEditor(context) { update: function(section) { section .call(selectionList - .setSelectedIDs(_entityIDs) + .selectedIDs(_entityIDs) ); } }, diff --git a/modules/ui/selection_list.js b/modules/ui/selection_list.js index cbbf7b56e..fe201f23f 100644 --- a/modules/ui/selection_list.js +++ b/modules/ui/selection_list.js @@ -8,7 +8,7 @@ import { utilDisplayName, utilHighlightEntities } from '../util'; export function uiSelectionList(context) { - var selectedIDs = []; + var _selectedIDs = []; function selectEntity(entity) { @@ -18,21 +18,25 @@ export function uiSelectionList(context) { function deselectEntity(entity) { d3_event.stopPropagation(); + + var selectedIDs = _selectedIDs.slice(); var index = selectedIDs.indexOf(entity.id); if (index > -1) { selectedIDs.splice(index, 1); + context.enter(modeSelect(context, selectedIDs)); } - context.enter(modeSelect(context, selectedIDs)); } function selectionList(selection) { var list = selection.selectAll('.feature-list') - .data([0]) - .enter() + .data([0]); + + list = list.enter() .append('div') - .attr('class', 'feature-list'); + .attr('class', 'feature-list') + .merge(list); context.history() .on('change.selectionList', function(difference) { @@ -41,11 +45,10 @@ export function uiSelectionList(context) { drawList(); - function drawList() { - var entities = selectedIDs + var entities = _selectedIDs .map(function(id) { return context.hasEntity(id); }) - .filter(function(entity) { return entity; }); + .filter(Boolean); var items = list.selectAll('.feature-list-item') .data(entities, osmEntity.key); @@ -109,10 +112,13 @@ export function uiSelectionList(context) { } } - selectionList.setSelectedIDs = function(val) { - selectedIDs = val; + + selectionList.selectedIDs = function(val) { + if (!arguments.length) return _selectedIDs; + _selectedIDs = val; return selectionList; }; + return selectionList; }