@visactor/vchart
Version:
charts lib based @visactor/VGrammar
47 lines (42 loc) • 2.28 kB
JavaScript
const getDataViewsInDataSet = dataView => {
var _a;
const dataViewMap = null === (_a = null == dataView ? void 0 : dataView.dataSet) || void 0 === _a ? void 0 : _a.dataViewMap;
return dataViewMap ? Object.values(dataViewMap).filter(Boolean) : [];
}, detachDataViewListener = (source, target) => {
var _a, _b;
null === (_a = null == source ? void 0 : source.target) || void 0 === _a || _a.removeListener("change", target.reRunAllTransform),
null === (_b = null == source ? void 0 : source.target) || void 0 === _b || _b.removeListener("markRunning", target.markRunning);
};
export const detachDataViewDependencies = dataView => {
if (!dataView) return;
getDataViewsInDataSet(dataView).forEach((source => {
detachDataViewListener(source, dataView);
}));
const dependencies = null == dataView ? void 0 : dataView.rawData;
Array.isArray(dependencies) && dependencies.forEach((dependency => {
detachDataViewListener(dependency, dataView);
}));
};
export const releaseDataViews = dataViews => {
const releaseDataViews = Array.from(new Set(dataViews.filter(Boolean)));
releaseDataViews.length && (releaseDataViews.forEach(detachDataViewDependencies),
releaseDataViews.forEach((dataView => {
var _a;
null === (_a = dataView.destroy) || void 0 === _a || _a.call(dataView);
})));
};
export const releaseDataView = dataView => {
releaseDataViews([ dataView ]);
};
export const releaseDataViewWithDependencies = (dataView, shouldReleaseDependency) => {
if (!dataView) return;
const dataViewsInDataSet = new Set(getDataViewsInDataSet(dataView)), releaseDependencies = [], collectReleaseDependencies = currentDataView => {
const dependencies = null == currentDataView ? void 0 : currentDataView.rawData;
Array.isArray(dependencies) && dependencies.forEach((dependency => {
dataViewsInDataSet.has(dependency) && shouldReleaseDependency(dependency) && !releaseDependencies.includes(dependency) && (releaseDependencies.push(dependency),
collectReleaseDependencies(dependency));
}));
};
collectReleaseDependencies(dataView), releaseDataViews([ dataView, ...releaseDependencies ]);
};
//# sourceMappingURL=data-view-utils.js.map