UNPKG

6.97 kBSource Map (JSON)View Raw
1{"version":3,"file":"scale.js","sourceRoot":"","sources":["../../src/util/scale.ts"],"names":[],"mappings":"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","sourcesContent":["import { firstValue, get, isEmpty, isNil, isNumber, isString, valuesOfKey } from '@antv/util';\nimport { getScale, Scale, Coordinate } from '../dependents';\nimport { LooseObject, ScaleOption, ViewCfg } from '../interface';\nimport { isFullCircle } from './coordinate';\n\nconst dateRegex =\n /^(?:(?!0000)[0-9]{4}([-/.]+)(?:(?:0?[1-9]|1[0-2])\\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\\1(?:29|30)|(?:0?[13578]|1[02])\\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]+)0?2\\2(?:29))(\\s+([01]|([01][0-9]|2[0-3])):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]))?$/;\n\n/**\n * 获取字段对应数据的类型\n * @param field 数据字段名\n * @param data 数据源\n * @returns default type 返回对应的数据类型\n */\nfunction getDefaultType(value: any): string {\n let type = 'linear';\n if (dateRegex.test(value)) {\n type = 'timeCat';\n } else if (isString(value)) {\n type = 'cat';\n }\n return type;\n}\n\n/**\n * @ignore\n * 为指定的 `field` 字段数据创建 scale\n * @param field 字段名\n * @param [data] 数据集,可为空\n * @param [scaleDef] 列定义,可为空\n * @returns scale 返回创建的 Scale 实例\n */\nexport function createScaleByField(field: string | number, data?: LooseObject[] | [], scaleDef?: ScaleOption): Scale {\n const validData = data || [];\n\n if (isNumber(field) || (isNil(firstValue(validData, field)) && isEmpty(scaleDef))) {\n const Identity = getScale('identity');\n return new Identity({\n field: field.toString(),\n values: [field],\n });\n }\n\n const values = valuesOfKey(validData, field);\n\n // 如果已经定义过这个度量\n const type = get(scaleDef, 'type', getDefaultType(values[0]));\n const ScaleCtor = getScale(type);\n return new ScaleCtor({\n field,\n values,\n ...scaleDef,\n });\n}\n\n/**\n * @ignore\n * 同步 scale\n * @todo 是否可以通过 scale.update() 方法进行更新\n * @param scale 需要同步的 scale 实例\n * @param newScale 同步源 Scale\n */\nexport function syncScale(scale: Scale, newScale: Scale) {\n if (scale.type !== 'identity' && newScale.type !== 'identity') {\n const obj = {};\n for (const k in newScale) {\n if (Object.prototype.hasOwnProperty.call(newScale, k)) {\n obj[k] = newScale[k];\n }\n }\n\n scale.change(obj);\n }\n}\n\n/**\n * @ignore\n * get the scale name, if alias exist, return alias, or else field\n * @param scale\n * @returns the name of field\n */\nexport function getName(scale: Scale): string {\n return scale.alias || scale.field;\n}\n\n/**\n * 根据 scale values 和 coordinate 获取分类默认 range\n * @param scale 需要获取的 scale 实例\n * @param coordinate coordinate 实例\n * @param theme theme\n */\nexport function getDefaultCategoryScaleRange(\n scale: Scale,\n coordinate: Coordinate,\n theme: ViewCfg['theme']\n): Scale['range'] {\n const { values } = scale;\n const count = values.length;\n let range;\n\n if (count === 1) {\n range = [0.5, 1]; // 只有一个分类时,防止计算出现 [0.5,0.5] 的状态\n } else {\n let widthRatio = 1;\n let offset = 0;\n\n if (isFullCircle(coordinate)) {\n if (!coordinate.isTransposed) {\n range = [0, 1 - 1 / count];\n } else {\n widthRatio = get(theme, 'widthRatio.multiplePie', 1 / 1.3);\n offset = (1 / count) * widthRatio;\n range = [offset / 2, 1 - offset / 2];\n }\n } else {\n offset = 1 / count / 2; // 两边留下分类空间的一半\n range = [offset, 1 - offset]; // 坐标轴最前面和最后面留下空白防止绘制柱状图时\n }\n }\n return range;\n}\n\n/**\n * @function y轴scale的max\n * @param {yScale}\n */\nexport function getMaxScale(scale: Scale) {\n // 过滤values[]中 NaN/undefined/null 等\n const values = scale.values.filter((item) => !isNil(item) && !isNaN(item));\n\n return Math.max(...values, isNil(scale.max) ? -Infinity : scale.max);\n}\n"]}
\No newline at end of file