| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- import { __assign, __rest } from "tslib";
- import { get } from '@antv/util';
- import { animation, annotation, interaction, scale, state, theme } from '../../adaptor/common';
- import { interval } from '../../adaptor/geometries';
- import { getLocale } from '../../core/locale';
- import { deepAssign, findGeometry, flow, transformLabel } from '../../utils';
- import { ABSOLUTE_FIELD, DIFF_FIELD, IS_TOTAL, Y_FIELD } from './constant';
- import './shape';
- import { transformData } from './utils';
- /**
- * 处理默认配置项
- * @param params
- * @returns
- */
- function defaultOptions(params) {
- var _a = params.options, locale = _a.locale, total = _a.total;
- var localeTotalLabel = getLocale(locale).get(['waterfall', 'total']);
- if (total && typeof total.label !== 'string' && localeTotalLabel) {
- // @ts-ignore
- params.options.total.label = localeTotalLabel;
- }
- return params;
- }
- /**
- * 字段
- * @param params
- */
- function geometry(params) {
- var chart = params.chart, options = params.options;
- var data = options.data, xField = options.xField, yField = options.yField, total = options.total, leaderLine = options.leaderLine, columnWidthRatio = options.columnWidthRatio, waterfallStyle = options.waterfallStyle, risingFill = options.risingFill, fallingFill = options.fallingFill, color = options.color, shape = options.shape, customInfo = options.customInfo;
- // 数据处理
- chart.data(transformData(data, xField, yField, total));
- // 瀑布图自带的 colorMapping
- var colorMapping = color ||
- function (datum) {
- if (get(datum, [IS_TOTAL])) {
- return get(total, ['style', 'fill'], '');
- }
- return get(datum, [Y_FIELD, 1]) - get(datum, [Y_FIELD, 0]) > 0 ? risingFill : fallingFill;
- };
- var p = deepAssign({}, params, {
- options: {
- xField: xField,
- yField: Y_FIELD,
- seriesField: xField,
- rawFields: [yField, DIFF_FIELD, IS_TOTAL, Y_FIELD],
- widthRatio: columnWidthRatio,
- interval: {
- style: waterfallStyle,
- // 支持外部自定义形状
- shape: shape || 'waterfall',
- color: colorMapping,
- },
- },
- });
- var ext = interval(p).ext;
- var geometry = ext.geometry;
- // 将 waterfall leaderLineCfg 传入到自定义 shape 中
- geometry.customInfo(__assign(__assign({}, customInfo), { leaderLine: leaderLine }));
- return params;
- }
- /**
- * meta 配置
- * @param params
- */
- function meta(params) {
- var _a, _b;
- var options = params.options;
- var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, meta = options.meta;
- var Y_FIELD_META = deepAssign({}, { alias: yField }, get(meta, yField));
- return flow(scale((_a = {},
- _a[xField] = xAxis,
- _a[yField] = yAxis,
- _a[Y_FIELD] = yAxis,
- _a), deepAssign({}, meta, (_b = {}, _b[Y_FIELD] = Y_FIELD_META, _b[DIFF_FIELD] = Y_FIELD_META, _b[ABSOLUTE_FIELD] = Y_FIELD_META, _b))))(params);
- }
- /**
- * axis 配置
- * @param params
- */
- function axis(params) {
- var chart = params.chart, options = params.options;
- var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;
- // 为 false 则是不显示轴
- if (xAxis === false) {
- chart.axis(xField, false);
- }
- else {
- chart.axis(xField, xAxis);
- }
- if (yAxis === false) {
- chart.axis(yField, false);
- chart.axis(Y_FIELD, false);
- }
- else {
- chart.axis(yField, yAxis);
- chart.axis(Y_FIELD, yAxis);
- }
- return params;
- }
- /**
- * legend 配置 todo 添加 hover 交互
- * @param params
- */
- function legend(params) {
- var chart = params.chart, options = params.options;
- var legend = options.legend, total = options.total, risingFill = options.risingFill, fallingFill = options.fallingFill, locale = options.locale;
- var i18n = getLocale(locale);
- if (legend === false) {
- chart.legend(false);
- }
- else {
- var items = [
- {
- name: i18n.get(['general', 'increase']),
- value: 'increase',
- marker: { symbol: 'square', style: { r: 5, fill: risingFill } },
- },
- {
- name: i18n.get(['general', 'decrease']),
- value: 'decrease',
- marker: { symbol: 'square', style: { r: 5, fill: fallingFill } },
- },
- ];
- if (total) {
- items.push({
- name: total.label || '',
- value: 'total',
- marker: {
- symbol: 'square',
- style: deepAssign({}, { r: 5 }, get(total, 'style')),
- },
- });
- }
- chart.legend(deepAssign({}, {
- custom: true,
- position: 'top',
- items: items,
- }, legend));
- chart.removeInteraction('legend-filter');
- }
- return params;
- }
- /**
- * 数据标签
- * @param params
- */
- function label(params) {
- var chart = params.chart, options = params.options;
- var label = options.label, labelMode = options.labelMode, xField = options.xField;
- var geometry = findGeometry(chart, 'interval');
- if (!label) {
- geometry.label(false);
- }
- else {
- var callback = label.callback, cfg = __rest(label, ["callback"]);
- geometry.label({
- fields: labelMode === 'absolute' ? [ABSOLUTE_FIELD, xField] : [DIFF_FIELD, xField],
- callback: callback,
- cfg: transformLabel(cfg),
- });
- }
- return params;
- }
- /**
- * tooltip 配置
- * @param params
- */
- export function tooltip(params) {
- var chart = params.chart, options = params.options;
- var tooltip = options.tooltip, xField = options.xField, yField = options.yField;
- if (tooltip !== false) {
- chart.tooltip(__assign({ showCrosshairs: false, showMarkers: false, shared: true,
- // tooltip 默认展示 y 字段值
- fields: [yField] }, tooltip));
- // 瀑布图默认以 yField 作为 tooltip 内容
- var geometry_1 = chart.geometries[0];
- (tooltip === null || tooltip === void 0 ? void 0 : tooltip.formatter) ? geometry_1.tooltip("".concat(xField, "*").concat(yField), tooltip.formatter) : geometry_1.tooltip(yField);
- }
- else {
- chart.tooltip(false);
- }
- return params;
- }
- /**
- * 瀑布图适配器
- * @param params
- */
- export function adaptor(params) {
- return flow(defaultOptions, theme, geometry, meta, axis, legend, tooltip, label, state, interaction, animation, annotation())(params);
- }
- //# sourceMappingURL=adaptor.js.map
|