From 328aeeac34e770ff2c28f5b1a8ad704ab00af0a5 Mon Sep 17 00:00:00 2001 From: MiniPear Date: Thu, 17 Aug 2023 15:02:24 +0800 Subject: [PATCH] fix(interaction): muti iteraction (#5419) --- .../countries-bubble-multi-legends/step0.png | Bin 0 -> 47190 bytes .../countries-bubble-multi-legends/step1.png | Bin 0 -> 34691 bytes .../countries-bubble-multi-legends.ts | 50 +++++++++++ __tests__/plots/interaction/index.ts | 1 + src/interaction/brushFilter.ts | 59 ++++++------ src/interaction/chartIndex.ts | 49 +++++----- src/interaction/fisheye.ts | 28 +++--- src/interaction/legendFilter.ts | 85 +++++++++--------- src/interaction/sliderFilter.ts | 31 ++++--- src/runtime/plot.ts | 29 ++++-- 10 files changed, 206 insertions(+), 126 deletions(-) create mode 100644 __tests__/integration/snapshots/interaction/countries-bubble-multi-legends/step0.png create mode 100644 __tests__/integration/snapshots/interaction/countries-bubble-multi-legends/step1.png create mode 100644 __tests__/plots/interaction/countries-bubble-multi-legends.ts diff --git a/__tests__/integration/snapshots/interaction/countries-bubble-multi-legends/step0.png b/__tests__/integration/snapshots/interaction/countries-bubble-multi-legends/step0.png new file mode 100644 index 0000000000000000000000000000000000000000..945b057ea73cdcea86091fdf7ae61431e37c3024 GIT binary patch literal 47190 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 QNC3Q)o~p|i%b9-oUlS8yO8@`> literal 0 HcmV?d00001 diff --git a/__tests__/integration/snapshots/interaction/countries-bubble-multi-legends/step1.png b/__tests__/integration/snapshots/interaction/countries-bubble-multi-legends/step1.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba1d1242cd6164ec3a3c6cf3ab20e331251a0bb GIT binary patch literal 34691 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 i_#h7f{` d.toFixed(1) }, + y: { labelFormatter: (d) => d.toFixed(1) }, + }, + }; +} + +countriesBubbleMultiLegends.steps = ({ canvas }) => { + const { document } = canvas; + const elements = document.getElementsByClassName(LEGEND_ITEMS_CLASS_NAME); + const [e0] = elements; + const sliders = document.getElementsByClassName(SLIDER_CLASS_NAME); + const [s1] = sliders; + return [ + step(e0, 'click'), + { + changeState: () => { + dispatchValueChange(s1); + }, + }, + ]; +}; diff --git a/__tests__/plots/interaction/index.ts b/__tests__/plots/interaction/index.ts index 940e3cab2e..f8a5505b9b 100644 --- a/__tests__/plots/interaction/index.ts +++ b/__tests__/plots/interaction/index.ts @@ -67,3 +67,4 @@ export { unemploymentAreaLegendFilterPages } from './unemployment-area-legend-fi export { mockAreaSliderFilterLabel } from './mock-area-slider-filter-label'; export { commitsPointLegendFilter } from './commits-point-legend-filter'; export { settleWeatherLegendFilter } from './seattle-weather-legend-filter'; +export { countriesBubbleMultiLegends } from './countries-bubble-multi-legends'; diff --git a/src/interaction/brushFilter.ts b/src/interaction/brushFilter.ts index 38f47cc4e0..5eefc599a9 100644 --- a/src/interaction/brushFilter.ts +++ b/src/interaction/brushFilter.ts @@ -82,7 +82,7 @@ export function brushFilter( export function BrushFilter({ hideX = true, hideY = true, ...rest }) { return (target, viewInstances, emitter) => { - const { container, view, options: viewOptions, update } = target; + const { container, view, options: viewOptions, update, setState } = target; const plotArea = selectPlotArea(container); const defaultOptions = { maskFill: '#777', @@ -110,26 +110,35 @@ export function BrushFilter({ hideX = true, hideY = true, ...rest }) { // Update the domain of x and y scale to filter data. const [domainX, domainY] = selection; - const { marks } = viewOptions; - const newMarks = marks.map((mark) => - deepMix( - { - // Hide label to keep smooth transition. - axis: { - ...(hideX && { x: { transform: [{ type: 'hide' }] } }), - ...(hideY && { y: { transform: [{ type: 'hide' }] } }), + + setState('brushFilter', (options) => { + const { marks } = options; + const newMarks = marks.map((mark) => + deepMix( + { + // Hide label to keep smooth transition. + axis: { + ...(hideX && { x: { transform: [{ type: 'hide' }] } }), + ...(hideY && { y: { transform: [{ type: 'hide' }] } }), + }, }, - }, - mark, - { - // Set nice to false to avoid modify domain. - scale: { - x: { domain: domainX, nice: false }, - y: { domain: domainY, nice: false }, + mark, + { + // Set nice to false to avoid modify domain. + scale: { + x: { domain: domainX, nice: false }, + y: { domain: domainY, nice: false }, + }, }, - }, - ), - ); + ), + ); + + return { + ...viewOptions, + marks: newMarks, + clip: true, // Clip shapes out of plot area. + }; + }); // Emit event. emitter.emit('brush:filter', { @@ -137,13 +146,7 @@ export function BrushFilter({ hideX = true, hideY = true, ...rest }) { data: { selection: [domainX, domainY] }, }); - // Rerender and update view. - const newOptions = { - ...viewOptions, - marks: newMarks, - clip: true, // Clip shapes out of plot area. - }; - const newState = await update(newOptions); + const newState = await update(); newView = newState.view; filtering = false; filtered = true; @@ -160,10 +163,10 @@ export function BrushFilter({ hideX = true, hideY = true, ...rest }) { ...event, data: { selection: [domainX, domainY] }, }); - filtered = false; newView = view; - update(viewOptions); + setState('brushFilter'); + update(); }, extent: undefined, emitter, diff --git a/src/interaction/chartIndex.ts b/src/interaction/chartIndex.ts index b27285ed37..c3c411b185 100644 --- a/src/interaction/chartIndex.ts +++ b/src/interaction/chartIndex.ts @@ -58,7 +58,7 @@ export function ChartIndex({ ...style }: Record) { return (context) => { - const { options, view, container, update } = context; + const { view, container, update, setState } = context; const { markState, scale, coordinate } = view; // Get line mark value, exit if it is not existed. @@ -70,18 +70,6 @@ export function ChartIndex({ const I = Y.map((_, i) => i); const sortedX: number[] = sort(I.map((i) => X[i])); - // Clone options and get line mark. - const clonedOptions = deepMix({}, options); - const lineMark = clonedOptions.marks.find((d) => d.type === 'line'); - - // Update domain of y scale for the line mark. - const r = (I: number[]) => max(I, (i) => +Y[i]) / min(I, (i) => +Y[i]); - const k = max(rollup(I, r, (i) => S[i]).values()); - const domainY = [1 / k, k]; - deepMix(lineMark, { - scale: { y: { domain: domainY } }, - }); - // Prepare shapes. const plotArea = selectPlotArea(container); const lines = container.getElementsByClassName(ELEMENT_CLASS_NAME); @@ -142,16 +130,31 @@ export function ChartIndex({ updateRule(focus, date); - // Update normalize options. - const normalizeY = maybeTransform(lineMark); - normalizeY.groupBy = 'color'; - normalizeY.basis = (I, Y) => { - const i = I[bisector((i) => X[+i]).center(I, date)]; - return Y[i]; - }; - // Disable animation. - for (const mark of clonedOptions.marks) mark.animate = false; - const newState = await update(clonedOptions); + setState('chartIndex', (options) => { + // Clone options and get line mark. + const clonedOptions = deepMix({}, options); + const lineMark = clonedOptions.marks.find((d) => d.type === 'line'); + + // Update domain of y scale for the line mark. + const r = (I: number[]) => max(I, (i) => +Y[i]) / min(I, (i) => +Y[i]); + const k = max(rollup(I, r, (i) => S[i]).values()); + const domainY = [1 / k, k]; + deepMix(lineMark, { + scale: { y: { domain: domainY } }, + }); + // Update normalize options. + const normalizeY = maybeTransform(lineMark); + normalizeY.groupBy = 'color'; + normalizeY.basis = (I, Y) => { + const i = I[bisector((i) => X[+i]).center(I, date)]; + return Y[i]; + }; + // Disable animation. + for (const mark of clonedOptions.marks) mark.animate = false; + return clonedOptions; + }); + + const newState = await update(); newView = newState.view; }; diff --git a/src/interaction/fisheye.ts b/src/interaction/fisheye.ts index 550968929e..38f4204673 100644 --- a/src/interaction/fisheye.ts +++ b/src/interaction/fisheye.ts @@ -22,26 +22,30 @@ export function Fisheye({ trailing = false, }: Record) { return (context) => { - const { options, update, container } = context; + const { options, update, setState, container } = context; const plotArea = selectPlotArea(container); - // Clone options and mutate it. - // Disable animation. - const clonedOptions = deepMix({}, options); - for (const mark of clonedOptions.marks) mark.animate = false; const updateFocus = throttle( (event) => { const focus = mousePosition(plotArea, event); if (!focus) { - update(options); + setState('fisheye'); + update(); return; } - const [x, y] = focus; - const fisheye = maybeCoordinate(clonedOptions); - fisheye.focusX = x; - fisheye.focusY = y; - fisheye.visual = true; - update(clonedOptions); + setState('fisheye', (options) => { + // Clone options and mutate it. + // Disable animation. + const clonedOptions = deepMix({}, options); + for (const mark of clonedOptions.marks) mark.animate = false; + const [x, y] = focus; + const fisheye = maybeCoordinate(clonedOptions); + fisheye.focusX = x; + fisheye.focusY = y; + fisheye.visual = true; + return clonedOptions; + }); + update(); }, wait, { leading, trailing }, diff --git a/src/interaction/legendFilter.ts b/src/interaction/legendFilter.ts index 11c594a138..5f591ad65a 100644 --- a/src/interaction/legendFilter.ts +++ b/src/interaction/legendFilter.ts @@ -200,52 +200,57 @@ function legendFilterContinuous(_, { legend, filter, emitter, channel }) { export function LegendFilter() { return (context, _, emitter) => { - const { container, view, options: viewOptions, update } = context; + const { container, view, update, setState } = context; + const channelsOf = (legend) => { + return dataOf(legend).scales.map((d) => d.name); + }; const legends = [ ...legendsOf(container), ...legendsContinuousOf(container), ]; + const allChannels = legends.flatMap(channelsOf); const filter = throttle( - async (channel, value, ordinal: boolean, channels) => { - const { marks } = viewOptions; - // Add filter transform for every marks, - // which will skip for mark without color channel. - const newMarks = marks.map((mark) => { - if (mark.type === 'legends') return mark; - - // Inset after aggregate transform, such as group, and bin. - const { transform = [] } = mark; - const index = transform.findIndex( - ({ type }) => type.startsWith('group') || type.startsWith('bin'), - ); - const newTransform = [...transform]; - newTransform.splice(index + 1, 0, { - type: 'filter', - [channel]: { value, ordinal }, - }); - - // Set domain of scale to preserve encoding. - const newScale = Object.fromEntries( - channels.map((channel) => [ - channel, - { domain: view.scale[channel].getOptions().domain }, - ]), - ); - - return deepMix({}, mark, { - transform: newTransform, - scale: newScale, - ...(!ordinal && { animate: false }), - legend: { [channel]: { preserve: true } }, + async (legend, channel, value, ordinal: boolean, channels) => { + setState(legend, (viewOptions) => { + const { marks } = viewOptions; + // Add filter transform for every marks, + // which will skip for mark without color channel. + const newMarks = marks.map((mark) => { + if (mark.type === 'legends') return mark; + + // Inset after aggregate transform, such as group, and bin. + const { transform = [] } = mark; + const index = transform.findIndex( + ({ type }) => type.startsWith('group') || type.startsWith('bin'), + ); + const newTransform = [...transform]; + newTransform.splice(index + 1, 0, { + type: 'filter', + [channel]: { value, ordinal }, + }); + + // Set domain of scale to preserve encoding. + const newScale = Object.fromEntries( + channels.map((channel) => [ + channel, + { domain: view.scale[channel].getOptions().domain }, + ]), + ); + + return deepMix({}, mark, { + transform: newTransform, + scale: newScale, + ...(!ordinal && { animate: false }), + legend: Object.fromEntries( + allChannels.map((d) => [d, { preserve: true }]), + ), + }); }); + return { ...viewOptions, marks: newMarks }; }); - const newOptions = { - ...viewOptions, - marks: newMarks, - }; - await update(newOptions); + await update(); }, 50, { trailing: true }, @@ -253,7 +258,7 @@ export function LegendFilter() { const removes = legends.map((legend) => { const { name: channel, domain } = dataOf(legend).scales[0]; - const channels = dataOf(legend).scales.map((d) => d.name); + const channels = channelsOf(legend); if (legend.className === CATEGORY_LEGEND_CLASS_NAME) { return legendFilterOrdinal(container, { legends: itemsOf, @@ -264,7 +269,7 @@ export function LegendFilter() { const { index } = datum; return domain[index]; }, - filter: (value) => filter(channel, value, true, channels), + filter: (value) => filter(legend, channel, value, true, channels), state: legend.attributes.state, channel, emitter, @@ -272,7 +277,7 @@ export function LegendFilter() { } else { return legendFilterContinuous(container, { legend, - filter: (value) => filter(channel, value, false, channels), + filter: (value) => filter(legend, channel, value, false, channels), emitter, channel, }); diff --git a/src/interaction/sliderFilter.ts b/src/interaction/sliderFilter.ts index 3a56177419..61d0c63688 100644 --- a/src/interaction/sliderFilter.ts +++ b/src/interaction/sliderFilter.ts @@ -68,7 +68,7 @@ export function SliderFilter({ trailing = false, }: any) { return (context, _, emitter) => { - const { container, view, options, update } = context; + const { container, view, update, setState } = context; const sliders = container.getElementsByClassName(className); if (!sliders.length) return () => {}; @@ -138,18 +138,6 @@ export function SliderFilter({ channelDomain[channel0] = domain0; channelDomain[channel1] = domain1; - // Filter data. - const newOptions = filterDataByDomain( - options, - { - // Set nice to false to avoid modify domain. - [channel0]: { domain: domain0, nice: false }, - [channel1]: { domain: domain1, nice: false }, - }, - prefix, - hasState, - ); - if (nativeEvent) { // Emit events. const X = isX ? domain0 : domain1; @@ -161,13 +149,24 @@ export function SliderFilter({ }); } - await update({ - ...newOptions, + setState(slider, (options) => ({ + ...filterDataByDomain( + options, + { + // Set nice to false to avoid modify domain. + [channel0]: { domain: domain0, nice: false }, + [channel1]: { domain: domain1, nice: false }, + }, + prefix, + hasState, + ), paddingLeft, paddingTop, paddingBottom, paddingRight, - }); + })); + + await update(); filtering = false; }, wait, diff --git a/src/runtime/plot.ts b/src/runtime/plot.ts index e3036c3cc2..9e405b19cc 100644 --- a/src/runtime/plot.ts +++ b/src/runtime/plot.ts @@ -1,7 +1,7 @@ import { Vector2 } from '@antv/coord'; import { DisplayObject, IAnimation as GAnimation, Rect } from '@antv/g'; import { deepMix, upperFirst } from '@antv/util'; -import { group, groups } from 'd3-array'; +import { group, groups, sort } from 'd3-array'; import { format } from 'd3-format'; import { mapObject } from '../utils/array'; import { ChartEvent } from '../utils/event'; @@ -237,12 +237,27 @@ export async function plot( const viewInstanceof = ( viewContainer: Map, ) => { - return Array.from(viewContainer.entries()).map(([view, container]) => ({ - view, - container, - options: viewNode.get(view), - update: createUpdateView(select(container), library, context), - })); + return Array.from(viewContainer.entries()).map(([view, container]) => { + // Index state by component or interaction name, + // such as legend, scrollbar, brushFilter. + // Each state transform options to another options. + const store = new Map G2ViewTree>(); + const setState = (key, reducer = (x) => x) => store.set(key, reducer); + const update = createUpdateView(select(container), library, context); + const options = viewNode.get(view); + return { + view, + container, + options, + setState, + update: async () => { + // Apply all state functions to get new options. + const reducer = compose(Array.from(store.values())); + const newOptions = reducer(options); + return await update(newOptions); + }, + }; + }); }; // Interactions for enter views.