@alicloud/cloud-charts
Version:

85 lines (79 loc) • 3.82 kB
JavaScript
;
import _extends from "@babel/runtime/helpers/extends";
import { timePretty, timeCat } from './autoTimeTicksMethod';
import { getText } from '../ChartProvider';
import { getAutoMask } from '../common/common';
// 移入国际化文件中
/*
| 间隔 \ 跨度 | 大于半年 | 大于一个月 | 大于一天 | 大于一小时 | 大于一分钟 | 小于分钟 | 小于秒 |
| 大于半年 | YYYY | - | - | - | - | - | - |
| 大于一个月 | YYYY-MM | YYYY-MM | - | - | - | - | - |
| 大于一天 | YYYY-MM-DD | MM-DD | MM-DD | - | - | - | - |
| 大于一小时 | YYYY-MM-DD HH:mm | MM-DD HH:mm | MM-DD HH:mm | HH:mm | - | - | - |
| 大于一分钟 | YYYY-MM-DD HH:mm | MM-DD HH:mm | MM-DD HH:mm | HH:mm | HH:mm | - | - |
| 小于分钟 | YYYY-MM-DD HH:mm:ss | MM-DD HH:mm:ss | MM-DD HH:mm:ss | HH:mm:ss | mm:ss | mm:ss | - |
| 小于秒 | YYYY-MM-DD HH:mm:ss | MM-DD HH:mm:ss | MM-DD HH:mm:ss | HH:mm:ss | mm:ss | mm:ss.SSS | mm:ss.SSS |
*/
function findIndexOfSubStringIn2DArray(needle, haystack) {
for (var i = 0; i < haystack.length; i++) {
for (var j = 0; j < haystack[i].length; j++) {
if (haystack[i][j] === needle) {
return [i, j];
}
}
}
// 如果未找到,则返回null或其他合适的默认值
return null;
}
/**
* 自动计算时间格式。
* @param defs {object} 数据列定义
* @param data {array} G2图表实例
* */
export default function (defs, data, language) {
var def = defs.x;
// 所有的时间刻度计算都走图表库自己内置的(迁移G2的算法)
if ((def.type === 'time' || def.type === 'timeCat') && Array.isArray(data) && data[0] && Array.isArray(data[0].data)) {
// 格式化另算
if (def.mask === 'auto') {
def.mask = getAutoMask(def, data[0].data, language);
} else {
// 业务自定义国际化处理
// 初始化的mask
var sourceMaskMap = getText('timeMask', 'zh-cn', null, true);
// 当前语言下的mask
var currentMaskMap = getText('timeMask', language, null);
// 用户自定义mask
var customMask = def.mask;
// 获取自定义mask在初始化mask Map下的索引地址
var customMaskIndex = findIndexOfSubStringIn2DArray(customMask, sourceMaskMap);
// 得到当前语言下的mask
var currentMask = customMaskIndex ? currentMaskMap[customMaskIndex[0]][customMaskIndex[1]] || customMask : customMask;
def.mask = currentMask;
}
// 覆盖G2内置算法
// 默认的tickCount为7,导致时间永远无法获取全量数据
// 这里通过修改tickCount的值为当前X轴的数量,使保底能得到全量数据
if (!def.tickMethod && def.type === 'time') {
def.tickMethod = function (cfg) {
var values = cfg.values;
return timePretty(_extends({}, cfg, def, {
// 补充优化逻辑,针对当前画布尺寸适配标签个数
tickCount: def.tickCount || (values === null || values === void 0 ? void 0 : values.length) || 7
}));
};
} else if (!def.tickMethod && def.type === 'timeCat') {
def.tickMethod = function (cfg) {
var values = cfg.values;
return timeCat(_extends({}, cfg, def, {
tickCount: def.tickCount || (values === null || values === void 0 ? void 0 : values.length) || 7
}));
};
}
} else {
// 分类型默认显示最后一个
if (def.type === 'cat' || def.type === 'timeCat') {
def.showLast = true;
}
}
}