Skip to content

Commit 79c597a

Browse files
authored
Merge pull request #848 from cmu-delphi/sgratzl/fixes
fix: reset highlight region in line chart
2 parents 7eb737e + 805c1ce commit 79c597a

File tree

3 files changed

+49
-12
lines changed

3 files changed

+49
-12
lines changed

src/components/tooltipUtils.js

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,33 @@ function getOrInitPopper() {
4848
],
4949
});
5050

51-
const update = (x = 0, y = 0, width = 0, height = 0) => {
51+
const update = (id, x = 0, y = 0) => {
5252
bb.x = x;
5353
bb.y = y;
54-
bb.width = width;
55-
bb.height = height;
54+
bb.width = 0;
55+
bb.height = 0;
5656
popper.style.display = '';
57+
const currentlyActive = popper.dataset.active;
58+
if (currentlyActive !== id) {
59+
// hide the old content
60+
const old = currentlyActive ? popper.querySelector(`[data-id="${currentlyActive}"]`) : null;
61+
if (old) {
62+
old.setAttribute('hidden', '');
63+
}
64+
popper.dataset.active = id;
65+
}
5766
instance.update();
5867
};
5968
const hide = () => {
69+
const currentlyActive = popper.dataset.active;
70+
if (currentlyActive) {
71+
// hide the old content
72+
const old = popper.querySelector(`[data-id="${currentlyActive}"]`);
73+
if (old) {
74+
old.setAttribute('hidden', '');
75+
}
76+
popper.dataset.active = ''; // hide active one
77+
}
6078
if (popper.style.display !== 'none') {
6179
popper.style.display = 'none';
6280
return true;
@@ -105,8 +123,17 @@ export function createVegaTooltipAdapter(svelteComponent, initialExtraProps = {}
105123
return undefined;
106124
}
107125
let destroyed = false;
126+
/**
127+
* @type {import('svelte').SvelteComponent | null}
128+
*/
108129
let tooltip = null;
130+
/**
131+
* @type {HTMLElement | null}
132+
*/
133+
let tooltipElem = null;
109134
let extraProps = initialExtraProps;
135+
// unique id for each tooltip content
136+
const uniqueID = Math.random().toString().substr(2, 8);
110137

111138
function tooltipHandler(_, event, item, value) {
112139
if (destroyed) {
@@ -122,24 +149,28 @@ export function createVegaTooltipAdapter(svelteComponent, initialExtraProps = {}
122149
// ignore
123150
return;
124151
}
125-
if (hide() && tooltip) {
152+
if (hide(uniqueID) && tooltip) {
126153
updateProps(tooltip, {
127154
hidden: true,
128155
view,
129156
});
130157
}
131158
return;
132159
}
133-
update(event.clientX, event.clientY);
160+
update(uniqueID, event.clientX, event.clientY);
134161
if (tooltip) {
162+
tooltipElem.removeAttribute('hidden');
135163
updateProps(tooltip, {
136164
hidden: false,
137165
item: resolveDatum(item),
138166
view,
139167
});
140168
} else {
169+
tooltipElem = popper.ownerDocument.createElement('div');
170+
tooltipElem.dataset.id = uniqueID;
171+
popper.appendChild(tooltipElem);
141172
tooltip = new svelteComponent({
142-
target: popper,
173+
target: tooltipElem,
143174
props: {
144175
...extraProps,
145176
hidden: false,
@@ -155,6 +186,12 @@ export function createVegaTooltipAdapter(svelteComponent, initialExtraProps = {}
155186
tooltip.$destroy();
156187
tooltip = null;
157188
}
189+
if (tooltipElem) {
190+
tooltipElem.remove();
191+
tooltipElem = null;
192+
}
193+
const { hide } = getOrInitPopper();
194+
hide(uniqueID);
158195
destroyed = true;
159196
};
160197
tooltipHandler.update = (newExtraProps) => {

src/modes/mobile/HistoryLineChart.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@
218218
let highlightRegion = null;
219219
220220
function highlight(r) {
221-
highlightRegion = r ? r.id : null;
221+
highlightRegion = r ? r.id : region.value.id;
222222
}
223223
224224
$: {

src/specs/mapSpec.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -404,8 +404,8 @@ export function generateStateSpec(options = {}) {
404404

405405
// state, msa
406406
spec.layer.push(genLevelLayer(options));
407-
spec.layer.push(genCreditsLayer());
408407
spec.layer.push(genLevelHoverLayer());
408+
spec.layer.push(genCreditsLayer());
409409
return spec;
410410
}
411411

@@ -434,8 +434,8 @@ export function generateNationSpec(options = {}) {
434434
});
435435

436436
spec.layer.push(genLevelLayer(options));
437-
spec.layer.push(genCreditsLayer());
438437
spec.layer.push(genLevelHoverLayer());
438+
spec.layer.push(genCreditsLayer());
439439
return spec;
440440
}
441441

@@ -453,10 +453,10 @@ export function generateStateMapWithCountyDataSpec(options = {}) {
453453
spec.datasets.state = stateJSON();
454454
spec.layer.push(genMegaLayer());
455455
spec.layer.push(genLevelLayer({ ...options, strokeWidth: 0 }));
456-
spec.layer.push(genCreditsLayer());
457456
spec.layer.push(genStateBorderLayer());
458457
spec.layer.push(genMegaHoverLayer(true));
459458
spec.layer.push(genLevelHoverLayer({ strokeWidth: 1 }));
459+
spec.layer.push(genCreditsLayer());
460460
return spec;
461461
}
462462

@@ -502,11 +502,11 @@ export function generateCountiesOfStateSpec(state, { withStates = false, ...opti
502502
spec.layer[spec.layer.length - 1].transform.unshift(isState);
503503
}
504504
spec.layer.push(genLevelLayer(options));
505-
spec.layer.push(genCreditsLayer());
506505
if (withStates) {
507506
spec.layer.push(genStateBorderLayer());
508507
}
509508
spec.layer.push(genLevelHoverLayer());
509+
spec.layer.push(genCreditsLayer());
510510
return spec;
511511
}
512512

@@ -540,7 +540,6 @@ export function generateRelatedCountySpec(county, options = {}) {
540540
spec.layer.push(genMegaLayer());
541541
spec.layer.push(genLevelLayer(options));
542542
spec.layer.push(genStateBorderLayer({ strokeWidth: 2 }));
543-
spec.layer.push(genCreditsLayer());
544543
spec.layer.push(genMegaHoverLayer());
545544
spec.layer.push(genLevelHoverLayer());
546545
// highlight the selected one
@@ -556,6 +555,7 @@ export function generateRelatedCountySpec(county, options = {}) {
556555
},
557556
value: 1,
558557
};
558+
spec.layer.push(genCreditsLayer());
559559
return spec;
560560
}
561561

0 commit comments

Comments
 (0)