@visactor/vchart
Version:
charts lib based @visactor/VGrammar
59 lines (49 loc) • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.releaseDataViewWithDependencies = exports.releaseDataView = exports.releaseDataViews = exports.detachDataViewDependencies = void 0;
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);
}, 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);
}));
};
exports.detachDataViewDependencies = detachDataViewDependencies;
const releaseDataViews = dataViews => {
const releaseDataViews = Array.from(new Set(dataViews.filter(Boolean)));
releaseDataViews.length && (releaseDataViews.forEach(exports.detachDataViewDependencies),
releaseDataViews.forEach((dataView => {
var _a;
null === (_a = dataView.destroy) || void 0 === _a || _a.call(dataView);
})));
};
exports.releaseDataViews = releaseDataViews;
const releaseDataView = dataView => {
(0, exports.releaseDataViews)([ dataView ]);
};
exports.releaseDataView = releaseDataView;
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), (0, exports.releaseDataViews)([ dataView, ...releaseDependencies ]);
};
exports.releaseDataViewWithDependencies = releaseDataViewWithDependencies;
//# sourceMappingURL=data-view-utils.js.map