Skip to content

Commit d9ca6fb

Browse files
authored
Merge pull request #634 from adobe/highlightingRefactor
refactor: add hovered item opacity controls to area
2 parents 3972b04 + 0ca37e1 commit d9ca6fb

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

packages/vega-spec-builder/src/area/areaSpecBuilder.test.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
FILTERED_TABLE,
2424
HIGHLIGHTED_ITEM,
2525
HIGHLIGHTED_SERIES,
26+
HOVERED_ITEM,
2627
LINEAR_PADDING,
2728
MARK_ID,
2829
SELECTED_GROUP,
@@ -210,22 +211,23 @@ describe('areaSpecBuilder', () => {
210211

211212
test('children: should add signals', () => {
212213
const signals = addSignals(defaultSignals, { ...defaultAreaOptions, chartTooltips: [{}] });
213-
expect(signals).toHaveLength(defaultSignals.length + 1);
214+
expect(signals).toHaveLength(defaultSignals.length + 2);
214215
expect(signals[0]).toHaveProperty('name', HIGHLIGHTED_ITEM);
215216
expect(signals[2]).toHaveProperty('name', HIGHLIGHTED_SERIES);
216217
expect(signals[2].on).toHaveLength(2);
217218
expect(signals[3]).toHaveProperty('name', SELECTED_ITEM);
218219
expect(signals[4]).toHaveProperty('name', SELECTED_SERIES);
219220
expect(signals[5]).toHaveProperty('name', SELECTED_GROUP);
220-
expect(signals[6]).toHaveProperty('name', 'area0_controlledHoveredId');
221+
expect(signals[6]).toHaveProperty('name', `${defaultAreaOptions.name}_${HOVERED_ITEM}`);
222+
expect(signals[7]).toHaveProperty('name', `${defaultAreaOptions.name}_controlledHoveredId`);
221223
});
222224

223225
test('should exclude data with key from update if tooltip has excludeDataKey', () => {
224226
const signals = addSignals(defaultSignals, {
225227
...defaultAreaOptions,
226228
chartTooltips: [{ excludeDataKeys: ['excludeFromTooltip'] }],
227229
});
228-
expect(signals).toHaveLength(defaultSignals.length + 1);
230+
expect(signals).toHaveLength(defaultSignals.length + 2);
229231
expect(signals[2]).toHaveProperty('name', HIGHLIGHTED_SERIES);
230232
expect(signals[2].on?.[0]).toHaveProperty('events', '@area0:mouseover');
231233
expect(signals[2].on?.[0]).toHaveProperty('update', '(datum.excludeFromTooltip) ? null : datum.rscSeriesId');
@@ -237,10 +239,12 @@ describe('areaSpecBuilder', () => {
237239
chartTooltips: [{}],
238240
highlightedItem: 'highlightedItem',
239241
});
240-
expect(signals).toHaveLength(defaultSignals.length + 1);
242+
expect(signals).toHaveLength(defaultSignals.length + 2);
241243
expect(signals[0]).toHaveProperty('name', HIGHLIGHTED_ITEM);
242244
expect(signals[0]).toHaveProperty('on');
243245
expect(signals[0].on).toHaveLength(1);
246+
expect(signals.at(-2)).toHaveProperty('name', `${defaultAreaOptions.name}_${HOVERED_ITEM}`);
247+
expect(signals.at(-1)).toHaveProperty('name', `${defaultAreaOptions.name}_controlledHoveredId`);
244248
});
245249
});
246250

packages/vega-spec-builder/src/area/areaSpecBuilder.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import { hasPopover, hasTooltip, isInteractive } from '../marks/markUtils';
3939
import { addContinuousDimensionScale, addFieldToFacetScaleDomain, addMetricScale } from '../scale/scaleSpecBuilder';
4040
import {
4141
addHighlightedSeriesSignalEvents,
42+
addHoveredItemSignal,
4243
getControlledHoveredGroupSignal,
4344
getControlledHoveredIdSignal,
4445
} from '../signal/signalSpecBuilder';
@@ -191,6 +192,7 @@ export const addSignals = produce<Signal[], [AreaSpecOptions]>((signals, areaOpt
191192
const { chartTooltips, name } = areaOptions;
192193
if (!isInteractive(areaOptions)) return;
193194
addHighlightedSeriesSignalEvents(signals, name, 1, chartTooltips[0]?.excludeDataKeys);
195+
addHoveredItemSignal(signals, name);
194196
if (areaOptions.highlightedItem) {
195197
addHighlightedItemEvents(signals, name);
196198
}

packages/vega-spec-builder/src/area/areaUtils.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
HIGHLIGHTED_ITEM,
1818
HIGHLIGHTED_SERIES,
1919
HIGHLIGHT_CONTRAST_RATIO,
20+
HOVERED_ITEM,
2021
SELECTED_SERIES,
2122
SERIES_ID,
2223
} from '@spectrum-charts/constants';
@@ -148,6 +149,10 @@ export function getAreaOpacity(areaOptions: AreaMarkOptions): ProductionRule<Num
148149

149150
return [
150151
...opacityRules,
152+
{
153+
test: `isValid(${name}_${HOVERED_ITEM})`,
154+
signal: `${name}_${HOVERED_ITEM}.${SERIES_ID} === datum.${SERIES_ID} ? 1 : ${fadedOpacity}`,
155+
},
151156
{
152157
test: `isValid(${HIGHLIGHTED_SERIES}) && ${HIGHLIGHTED_SERIES} !== datum.${SERIES_ID}`,
153158
value: fadedOpacity,

0 commit comments

Comments
 (0)