cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
84 lines (83 loc) • 2.46 kB
JavaScript
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 };