NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/g2/esm/chart/util/scale-pool.js.map
2023-09-14 14:47:11 +08:00

1 line
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"scale-pool.js","sourceRoot":"","sources":["../../../src/chart/util/scale-pool.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * view 中缓存 scale 的类\n */\nimport { deepMix, each, get, isNumber, last } from '@antv/util';\nimport { Scale } from '../../dependents';\nimport { Data, LooseObject, ScaleOption } from '../../interface';\nimport { createScaleByField, syncScale } from '../../util/scale';\n\n/** @ignore */\ninterface ScaleMeta {\n readonly key: string;\n readonly scale: Scale;\n scaleDef: ScaleOption;\n syncKey?: string;\n}\n\n/** @ignore */\nexport class ScalePool {\n /** 所有的 scales */\n private scales = new Map<string, ScaleMeta>();\n /** 需要同步的 scale 分组, key: scaleKeyArray */\n private syncScales= new Map<string, string[]>();\n\n /**\n * 创建 scale\n * @param field\n * @param data\n * @param scaleDef\n * @param key\n */\n public createScale(field: string, data: Data, scaleDef: ScaleOption, key: string): Scale {\n let finalScaleDef = scaleDef;\n\n const cacheScaleMeta = this.getScaleMeta(key);\n if (data.length === 0 && cacheScaleMeta) {\n // 在更新过程中数据变为空,同时 key 对应的 scale 已存在则保持 scale 同类型\n const cacheScale = cacheScaleMeta.scale;\n const cacheScaleDef: LooseObject = {\n type: cacheScale.type,\n };\n if (cacheScale.isCategory) {\n // 如果是分类类型,保持 values\n cacheScaleDef.values = cacheScale.values;\n }\n finalScaleDef = deepMix(cacheScaleDef, cacheScaleMeta.scaleDef, scaleDef);\n }\n\n const scale = createScaleByField(field, data, finalScaleDef);\n\n // 缓存起来\n this.cacheScale(scale, scaleDef, key);\n\n return scale;\n }\n\n /**\n * 同步 scale\n */\n public sync() {\n // 对于 syncScales 中每一个 syncKey 下面的 scale 数组进行同步处理\n this.syncScales.forEach((scaleKeys: string[], syncKey: string) => {\n // min, max, values\n let min = Number.MAX_SAFE_INTEGER;\n let max = Number.MIN_SAFE_INTEGER;\n const values = [];\n\n // 1. 遍历求得最大最小值values 等\n each(scaleKeys, (key: string) => {\n const scale = this.getScale(key);\n\n max = isNumber(scale.max) ? Math.max(max, scale.max) : max;\n min = isNumber(scale.min) ? Math.min(min, scale.min) : min;\n\n // 去重\n each(scale.values, (v: any) => {\n if (!values.includes(v)) {\n values.push(v);\n }\n });\n });\n\n // 2. 同步\n each(scaleKeys, (key: string) => {\n const scale = this.getScale(key);\n\n if (scale.isContinuous) {\n scale.change({\n min,\n max,\n values,\n });\n } else if (scale.isCategory) {\n scale.change({\n values,\n });\n }\n });\n });\n }\n\n /**\n * 缓存一个 scale\n * @param scale\n * @param scaleDef\n * @param key\n */\n private cacheScale(scale: Scale, scaleDef: ScaleOption, key: string) {\n // 1. 缓存到 scales\n\n let sm = this.getScaleMeta(key);\n // 存在则更新,同时检测类型是否一致\n if (sm && sm.scale.type === scale.type) {\n syncScale(sm.scale, scale);\n sm.scaleDef = scaleDef;\n // 更新 scaleDef\n } else {\n sm = {\n key,\n scale,\n scaleDef,\n };\n\n this.scales.set(key, sm);\n }\n\n // 2. 缓存到 syncScales构造 Record<sync, string[]> 数据结构\n const syncKey = this.getSyncKey(sm);\n sm.syncKey = syncKey; // 设置 sync 同步的 key\n\n // 因为存在更新 scale 机制,所以在缓存之前,先从原 syncScales 中去除 sync 的缓存引用\n this.removeFromSyncScales(key);\n\n // 存在 sync 标记才进行 sync\n if (syncKey) {\n // 不存在这个 syncKey则创建一个空数组\n let scaleKeys = this.syncScales.get(syncKey);\n if (!scaleKeys) {\n scaleKeys = []\n this.syncScales.set(syncKey, scaleKeys);\n }\n scaleKeys.push(key);\n }\n }\n\n /**\n * 通过 key 获取 scale\n * @param key\n */\n public getScale(key: string): Scale {\n let scaleMeta = this.getScaleMeta(key);\n if (!scaleMeta) {\n const field = last(key.split('-'));\n const scaleKeys = this.syncScales.get(field);\n if (scaleKeys && scaleKeys.length) {\n scaleMeta = this.getScaleMeta(scaleKeys[0]);\n }\n }\n return scaleMeta && scaleMeta.scale;\n }\n\n /**\n * 在 view 销毁的时候,删除 scale 实例,防止内存泄露\n * @param key\n */\n public deleteScale(key: string) {\n let scaleMeta = this.getScaleMeta(key);\n if (scaleMeta) {\n const { syncKey } = scaleMeta;\n\n const scaleKeys = this.syncScales.get(syncKey);\n\n // 移除同步的关系\n if (scaleKeys && scaleKeys.length) {\n const idx = scaleKeys.indexOf(key);\n\n if (idx !== -1) {\n scaleKeys.splice(idx, 1);\n }\n }\n }\n\n // 删除 scale 实例\n this.scales.delete(key);\n }\n\n /**\n * 清空\n */\n public clear() {\n this.scales.clear();\n this.syncScales.clear();\n }\n\n /**\n * 删除 sync scale 引用\n * @param key\n */\n private removeFromSyncScales(key: string) {\n this.syncScales.forEach((scaleKeys: string[], syncKey: string) => {\n const idx = scaleKeys.indexOf(key);\n\n if (idx !== -1) {\n scaleKeys.splice(idx, 1);\n\n // 删除空数组值\n if (scaleKeys.length === 0) {\n this.syncScales.delete(syncKey);\n }\n\n return false; // 跳出循环\n }\n });\n }\n\n /**\n * get sync key\n * @param sm\n */\n private getSyncKey(sm: ScaleMeta): string {\n const { scale, scaleDef } = sm;\n const { field } = scale;\n const sync = get(scaleDef, ['sync']);\n\n // 如果 sync = true则直接使用字段名作为 syncKey\n return sync === true ? field : sync === false ? undefined : sync;\n }\n\n /**\n * 通过 key 获取 scale\n * @param key\n */\n private getScaleMeta(key: string): ScaleMeta {\n return this.scales.get(key);\n }\n}\n"]}