export function runInitRule()

in src/rule/runRule.ts [11:122]


export function runInitRule(chartObj: any, config: any, data: any) {
  const { chartName } = chartObj;

  // 1.图表分类,读取该图表所有规则
  // 部分子类有与父类不同的规则,需要合并
  const chartRule = classifyChart(chartName, data, config);
  if (!chartRule) {
    // console.log(chartName, '没有规则映射');
    return {};
  }
  chartObj.chartRule = chartRule;

  // chartObj.errorInfo = '';

  let showEmptyChart = false;

  // loading状态,与空状态调用同样的规则
  if (chartObj?.props?.loading) {
    showEmptyChart = true;
  }
  // 数据结构检查
  // else if (!checkData(chartRule.dataStructure, data)) {
  //   chartObj.errorInfo = getText('error', chartObj.props?.language || chartObj.context.language, chartObj.context.locale);
  //   showEmptyChart = true;
  // }
  // error状态
  else if (chartObj.props?.errorInfo) {
    showEmptyChart = true;
  } else {
    // 2.计算数据量
    const dataSize = calcDataSize(chartRule.dataStructure, data);
    chartObj.dataSize = dataSize;
    // 3.空数据处理
    if (isEmptyData(dataSize)) {
      chartObj.isEmpty = true;
      showEmptyChart = true;
    } else {
      chartObj.isEmpty = false;
    }
  }

  // loading、error、空数据状态,进行相同操作
  if (showEmptyChart) {
    const { data: emptyReplaceData, config: emptyReplaceConfig } = processEmptyData(
      chartRule.emptyData,
      chartRule.dataStructure,
      chartName,
    );
    // if (!emptyReplaceData && !emptyReplaceConfig) {
    //   console.log(chartName, '没有空数据处理');
    // }
    const newConfig = merge({}, config, emptyReplaceConfig);
    // 双y轴配置项特殊处理
    if (Array.isArray(config?.yAxis) && emptyReplaceConfig?.yAxis) {
      newConfig.yAxis = emptyReplaceConfig?.yAxis;
    }
    // error状态的颜色特殊处理
    if (chartObj?.props?.errorInfo && emptyReplaceConfig?.colors) {
      newConfig.colors = themes['widgets-color-layout-background'];
    }
    return {
      data: emptyReplaceData,
      config: newConfig,
    };
  }

  // 4.大数据处理
  if (
    isBigDataInit(
      chartRule?.name,
      chartRule?.bigData?.judgements,
      chartObj.dataSize,
      chartObj.size[0],
      chartObj.size[1],
      chartRule.mainAxis,
    )
  ) {
    chartObj.isBigData = true;

    if (chartRule?.bigData?.process) {
      const { data: bigReplaceData, config: bigDataConfig } = chartRule?.bigData?.process?.(chartObj, data);

      return {
        data: bigReplaceData,
        config: merge({}, config, bigDataConfig),
      };
    }
  } else {
    chartObj.isBigData = false;
  }

  // 5.极端数据处理
  if (chartRule.extremeData) {
    const extremeProcess = chartRule.extremeData;
    const {
      isExtreme,
      config: extremeReplaceConfig,
      data: extremeReplaceData,
    } = extremeProcess?.(chartObj, config, data);
    if (isExtreme) {
      chartObj.isExtreme = true;
      return {
        data: extremeReplaceData,
        config: merge({}, config, extremeReplaceConfig),
      };
    } else {
      chartObj.isExtreme = false;
    }
  }

  return {};
}