UNPKG

@jbrowse/plugin-linear-genome-view

Version:

JBrowse 2 linear genome view

123 lines (122 loc) 5.08 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = FeatureDensityMixin; const jsx_runtime_1 = require("react/jsx-runtime"); const configuration_1 = require("@jbrowse/core/configuration"); const util_1 = require("@jbrowse/core/util"); const mobx_1 = require("mobx"); const mobx_state_tree_1 = require("mobx-state-tree"); const autorunFeatureDensityStats_1 = __importDefault(require("./autorunFeatureDensityStats")); const util_2 = require("./util"); const TooLargeMessage_1 = __importDefault(require("../components/TooLargeMessage")); function FeatureDensityMixin() { return mobx_state_tree_1.types .model({ userBpPerPxLimit: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number), userByteSizeLimit: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number), }) .volatile(() => ({ featureDensityStatsP: undefined, featureDensityStats: undefined, currStatsBpPerPx: 0, })) .views(self => ({ get currentBytesRequested() { var _a; return ((_a = self.featureDensityStats) === null || _a === void 0 ? void 0 : _a.bytes) || 0; }, get currentFeatureScreenDensity() { var _a; const view = (0, util_1.getContainingView)(self); return (((_a = self.featureDensityStats) === null || _a === void 0 ? void 0 : _a.featureDensity) || 0) * view.bpPerPx; }, get maxFeatureScreenDensity() { return (0, configuration_1.getConf)(self, 'maxFeatureScreenDensity'); }, get featureDensityStatsReady() { const view = (0, util_1.getContainingView)(self); return (self.currStatsBpPerPx === view.bpPerPx && (!!self.featureDensityStats || !!self.userBpPerPxLimit)); }, get maxAllowableBytes() { var _a; return (self.userByteSizeLimit || ((_a = self.featureDensityStats) === null || _a === void 0 ? void 0 : _a.fetchSizeLimit) || (0, configuration_1.getConf)(self, 'fetchSizeLimit')); }, })) .actions(self => ({ afterAttach() { (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(() => (0, autorunFeatureDensityStats_1.default)(self))); }, })) .actions(self => ({ setCurrStatsBpPerPx(n) { self.currStatsBpPerPx = n; }, setFeatureDensityStatsLimit(stats) { const view = (0, util_1.getContainingView)(self); if (stats === null || stats === void 0 ? void 0 : stats.bytes) { self.userByteSizeLimit = stats.bytes; } else { self.userBpPerPxLimit = view.bpPerPx; } }, getFeatureDensityStats() { if (!self.featureDensityStatsP) { self.featureDensityStatsP = (0, util_2.getFeatureDensityStatsPre)(self).catch((e) => { if ((0, mobx_state_tree_1.isAlive)(self)) { this.setFeatureDensityStatsP(undefined); } throw e; }); } return self.featureDensityStatsP; }, setFeatureDensityStatsP(arg) { self.featureDensityStatsP = arg; }, setFeatureDensityStats(featureDensityStats) { self.featureDensityStats = featureDensityStats; }, clearFeatureDensityStats() { self.featureDensityStatsP = undefined; self.featureDensityStats = undefined; }, })) .views(self => ({ get regionTooLarge() { const view = (0, util_1.getContainingView)(self); if (!self.featureDensityStatsReady || view.dynamicBlocks.totalBp < 20000) { return false; } return (self.currentBytesRequested > self.maxAllowableBytes || (self.userBpPerPxLimit ? view.bpPerPx > self.userBpPerPxLimit : self.currentFeatureScreenDensity > self.maxFeatureScreenDensity)); }, get regionTooLargeReason() { const req = self.currentBytesRequested; const max = self.maxAllowableBytes; return req && req > max ? `Requested too much data (${(0, util_2.getDisplayStr)(req)})` : ''; }, })) .views(self => ({ get statsReadyAndRegionNotTooLarge() { return self.featureDensityStatsReady && !self.regionTooLarge; }, regionCannotBeRenderedText(_region) { return self.regionTooLarge ? 'Force load to see features' : ''; }, regionCannotBeRendered(_region) { return self.regionTooLarge ? ((0, jsx_runtime_1.jsx)(TooLargeMessage_1.default, { model: self })) : null; }, })); }