UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

84 lines (83 loc) 2.46 kB
import { each, curry, assert, extend, map, keys } from "../../../../zrender/lib/core/util.mjs"; import { makeInner } from "../../util/model.mjs"; var inner = makeInner(); function linkSeriesData(opt) { var mainData = opt.mainData; var datas = opt.datas; if (!datas) { datas = { main: mainData }; opt.datasAttr = { main: "data" }; } opt.datas = opt.mainData = null; linkAll(mainData, datas, opt); each(datas, function(data) { each(mainData.TRANSFERABLE_METHODS, function(methodName) { data.wrapMethod(methodName, curry(transferInjection, opt)); }); }); mainData.wrapMethod("cloneShallow", curry(cloneShallowInjection, opt)); each(mainData.CHANGABLE_METHODS, function(methodName) { mainData.wrapMethod(methodName, curry(changeInjection, opt)); }); assert(datas[mainData.dataType] === mainData); } function transferInjection(opt, res) { if (isMainData(this)) { var datas = extend({}, inner(this).datas); datas[this.dataType] = res; linkAll(res, datas, opt); } else { linkSingle(res, this.dataType, inner(this).mainData, opt); } return res; } function changeInjection(opt, res) { opt.struct && opt.struct.update(); return res; } function cloneShallowInjection(opt, res) { each(inner(res).datas, function(data, dataType) { data !== res && linkSingle(data.cloneShallow(), dataType, res, opt); }); return res; } function getLinkedData(dataType) { var mainData = inner(this).mainData; return dataType == null || mainData == null ? mainData : inner(mainData).datas[dataType]; } function getLinkedDataAll() { var mainData = inner(this).mainData; return mainData == null ? [{ data: mainData }] : map(keys(inner(mainData).datas), function(type) { return { type, data: inner(mainData).datas[type] }; }); } function isMainData(data) { return inner(data).mainData === data; } function linkAll(mainData, datas, opt) { inner(mainData).datas = {}; each(datas, function(data, dataType) { linkSingle(data, dataType, mainData, opt); }); } function linkSingle(data, dataType, mainData, opt) { inner(mainData).datas[dataType] = data; inner(data).mainData = mainData; data.dataType = dataType; if (opt.struct) { data[opt.structAttr] = opt.struct; opt.struct[opt.datasAttr[dataType]] = data; } data.getLinkedData = getLinkedData; data.getLinkedDataAll = getLinkedDataAll; } export { linkSeriesData as default };