UNPKG

@jbrowse/core

Version:

JBrowse 2 core libraries used by plugins

90 lines (89 loc) 3.39 kB
import { addDisposer, destroy, types } from '@jbrowse/mobx-state-tree'; import { autorun } from 'mobx'; import { localStorageGetBoolean, localStorageGetItem, localStorageGetNumber, localStorageSetItem, } from "../../util/index.js"; function localStorageSetNumber(key, value) { localStorageSetItem(key, JSON.stringify(value)); } function localStorageSetBoolean(key, value) { localStorageSetItem(key, JSON.stringify(value)); } const p = 'sequenceFeatureDetails'; export function SequenceFeatureDetailsF() { return types .model('SequenceFeatureDetails') .volatile(() => ({ showCoordinatesSetting: localStorageGetItem(`${p}-showCoordinatesSetting`) || 'none', intronBp: localStorageGetNumber(`${p}-intronBp`, 10), upDownBp: localStorageGetNumber(`${p}-upDownBp`, 100), upperCaseCDS: localStorageGetBoolean(`${p}-upperCaseCDS`, true), charactersPerRow: 100, feature: undefined, mode: '', })) .actions(self => ({ setFeature(f) { self.feature = f; }, setUpDownBp(f) { self.upDownBp = f; }, setIntronBp(f) { self.intronBp = f; }, setUpperCaseCDS(f) { self.upperCaseCDS = f; }, setShowCoordinates(f) { self.showCoordinatesSetting = f; }, setMode(mode) { self.mode = mode; }, })) .views(self => ({ get showCoordinates() { return self.showCoordinatesSetting !== 'none'; }, get showGenomicCoordsOption() { return (self.mode === 'gene' || self.mode === 'gene_updownstream' || self.mode === 'genomic' || self.mode === 'genomic_sequence_updownstream'); }, get hasCDS() { const featureType = self.feature?.type?.toLowerCase(); if (featureType === 'mature_protein_region_of_cds') { return true; } return self.feature?.subfeatures?.some(sub => { const type = sub.type?.toLowerCase(); return type === 'cds' || type === 'mature_protein_region_of_cds'; }); }, get hasExon() { return self.feature?.subfeatures?.some(sub => sub.type === 'exon'); }, get hasExonOrCDS() { return this.hasExon || this.hasCDS; }, })) .actions(self => ({ afterCreate() { addDisposer(self, autorun(function sequenceFeatureLocalStorageAutorun() { localStorageSetNumber(`${p}-upDownBp`, self.upDownBp); localStorageSetNumber(`${p}-intronBp`, self.intronBp); localStorageSetBoolean(`${p}-upperCaseCDS`, self.upperCaseCDS); localStorageSetItem(`${p}-showCoordinatesSetting`, self.showCoordinatesSetting); }, { name: 'SequenceFeatureLocalStorage' })); addDisposer(self, autorun(function sequenceFeatureModeAutorun() { self.setMode(self.hasCDS ? 'cds' : self.hasExon ? 'cdna' : 'genomic'); }, { name: 'SequenceFeatureMode' })); }, })); } export function createSequenceFeatureDetailsModel() { return SequenceFeatureDetailsF().create({}); } export function destroySequenceFeatureDetailsModel(model) { destroy(model); }