From 0a4f376bbf5b70223ff604af69fea97262fff69d Mon Sep 17 00:00:00 2001 From: Shanjie Chen <17211870+csjkevin@users.noreply.github.com> Date: Fri, 3 Mar 2023 15:46:06 +0800 Subject: [PATCH] fix(Sankey): insufficient pass-in parameters for the callback function of edgeStyle (#3483) --- __tests__/unit/plots/sankey/adaptor-spec.ts | 133 ++++++++++++++++++++ src/plots/sankey/adaptor.ts | 3 +- 2 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 __tests__/unit/plots/sankey/adaptor-spec.ts diff --git a/__tests__/unit/plots/sankey/adaptor-spec.ts b/__tests__/unit/plots/sankey/adaptor-spec.ts new file mode 100644 index 0000000000..a7bec39989 --- /dev/null +++ b/__tests__/unit/plots/sankey/adaptor-spec.ts @@ -0,0 +1,133 @@ +import { Sankey } from '../../../../src'; +import { createDiv } from '../../../utils/dom'; + +describe('sankey adaptor', () => { + const mockCallback = jest.fn(); + + const DATA = [ + { + sourceName: '低活', + targetName: '低活2', + sourceDisplayName: '低活', + targetDisplayName: '低活', + value: 1, + }, + { + sourceName: '低活', + targetName: '中活2', + sourceDisplayName: '低活', + targetDisplayName: '中活', + value: 1, + }, + { + sourceName: '低活', + targetName: '高活2', + sourceDisplayName: '低活', + targetDisplayName: '高活', + value: 1, + }, + { + sourceName: '中活', + targetName: '低活2', + sourceDisplayName: '中活', + targetDisplayName: '低活', + value: 1, + }, + { + sourceName: '中活', + targetName: '中活2', + sourceDisplayName: '中活', + targetDisplayName: '中活', + value: 1, + }, + { + sourceName: '中活', + targetName: '流失2', + sourceDisplayName: '中活', + targetDisplayName: '流失', + value: 1, + }, + { + sourceName: '高活', + targetName: '低活2', + sourceDisplayName: '高活', + targetDisplayName: '低活', + value: 1, + }, + { + sourceName: '高活', + targetName: '高活2', + sourceDisplayName: '高活', + targetDisplayName: '高活', + value: 1, + }, + { + sourceName: '沉默', + targetName: '高活2', + sourceDisplayName: '沉默', + targetDisplayName: '高活', + value: 1, + }, + { + sourceName: '沉默', + targetName: '沉默2', + sourceDisplayName: '沉默', + targetDisplayName: '沉默', + value: 1, + }, + { + sourceName: '流失', + targetName: '沉默2', + sourceDisplayName: '流失', + targetDisplayName: '沉默', + value: 1, + }, + { + sourceName: '流失', + targetName: '流失2', + sourceDisplayName: '流失', + targetDisplayName: '流失', + value: 1, + }, + { + sourceName: '低活2', + targetName: '低活3', + sourceDisplayName: '低活', + targetDisplayName: '低活', + value: 1, + }, + { + sourceName: '低活2', + targetName: '中活3', + sourceDisplayName: '低活', + targetDisplayName: '中活', + value: 1, + }, + { + sourceName: '低活2', + targetName: '高活3', + sourceDisplayName: '低活', + targetDisplayName: '高活', + value: 1, + }, + ]; + + const sankey = new Sankey(createDiv(), { + height: 500, + data: DATA, + sourceField: 'sourceName', + targetField: 'targetName', + weightField: 'value', + rawFields: ['sourceDisplayName', 'targetDisplayName'], + edgeStyle: mockCallback, + }); + + sankey.render(); + + it('edgeStyle callback', () => { + expect(mockCallback.mock.calls[0][0].source).toBeDefined(); + expect(mockCallback.mock.calls[0][0].target).toBeDefined(); + expect(mockCallback.mock.calls[0][0].sourceDisplayName).toBeDefined(); + expect(mockCallback.mock.calls[0][0].targetDisplayName).toBeDefined(); + }); +}); diff --git a/src/plots/sankey/adaptor.ts b/src/plots/sankey/adaptor.ts index 4367292027..d098422711 100644 --- a/src/plots/sankey/adaptor.ts +++ b/src/plots/sankey/adaptor.ts @@ -38,7 +38,7 @@ function defaultOptions(params: Params): Params { */ function geometry(params: Params): Params { const { chart, options } = params; - const { color, nodeStyle, edgeStyle, label, tooltip, nodeState, edgeState } = options; + const { color, nodeStyle, edgeStyle, label, tooltip, nodeState, edgeState, rawFields = [] } = options; // 1. 组件,优先设置,因为子 view 会继承配置 chart.legend(false); @@ -62,6 +62,7 @@ function geometry(params: Params): Params { xField: X_FIELD, yField: Y_FIELD, seriesField: COLOR_FIELD, + rawFields: ['source', 'target', ...rawFields], edge: { color, style: edgeStyle,