UNPKG

@jbrowse/plugin-linear-genome-view

Version:

JBrowse 2 linear genome view

193 lines (192 loc) 8.4 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = require("react"); const configuration_1 = require("@jbrowse/core/configuration"); const serializableFilterChain_1 = __importDefault(require("@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain")); const util_1 = require("@jbrowse/core/util"); const Visibility_1 = __importDefault(require("@mui/icons-material/Visibility")); const mobx_state_tree_1 = require("mobx-state-tree"); const BaseLinearDisplay_1 = require("../BaseLinearDisplay"); const SetMaxHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetMaxHeightDialog')))); const AddFiltersDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/AddFiltersDialog')))); function stateModelFactory(configSchema) { return mobx_state_tree_1.types .compose('LinearBasicDisplay', BaseLinearDisplay_1.BaseLinearDisplay, mobx_state_tree_1.types.model({ type: mobx_state_tree_1.types.literal('LinearBasicDisplay'), trackShowLabels: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean), trackShowDescriptions: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean), trackDisplayMode: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string), trackMaxHeight: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number), configuration: (0, configuration_1.ConfigurationReference)(configSchema), jexlFilters: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.array(mobx_state_tree_1.types.string)), })) .views(self => ({ get activeFilters() { var _a; return ((_a = self.jexlFilters) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, 'jexlFilters').map((r) => `jexl:${r}`)); }, get rendererTypeName() { return (0, configuration_1.getConf)(self, ['renderer', 'type']); }, get showLabels() { var _a; return (_a = self.trackShowLabels) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, ['renderer', 'showLabels']); }, get showDescriptions() { var _a; return ((_a = self.trackShowDescriptions) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, ['renderer', 'showDescriptions'])); }, get maxHeight() { var _a; return (_a = self.trackMaxHeight) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, ['renderer', 'maxHeight']); }, get displayMode() { var _a; return ((_a = self.trackDisplayMode) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)(self, ['renderer', 'displayMode'])); }, })) .views(self => ({ get rendererConfig() { const configBlob = (0, configuration_1.getConf)(self, ['renderer']) || {}; const config = configBlob; return self.rendererType.configSchema.create({ ...config, showLabels: self.showLabels, showDescriptions: self.showDescriptions, displayMode: self.displayMode, maxHeight: self.maxHeight, }, (0, mobx_state_tree_1.getEnv)(self)); }, })) .actions(self => ({ setJexlFilters(f) { self.jexlFilters = (0, mobx_state_tree_1.cast)(f); }, toggleShowLabels() { self.trackShowLabels = !self.showLabels; }, toggleShowDescriptions() { self.trackShowDescriptions = !self.showDescriptions; }, setDisplayMode(val) { self.trackDisplayMode = val; }, setMaxHeight(val) { self.trackMaxHeight = val; }, })) .views(self => { const { trackMenuItems: superTrackMenuItems, renderProps: superRenderProps, } = self; return { renderProps() { const superProps = superRenderProps(); return { ...superProps, config: self.rendererConfig, filters: new serializableFilterChain_1.default({ filters: self.activeFilters, }), }; }, trackMenuItems() { return [ ...superTrackMenuItems(), { label: 'Show labels', icon: Visibility_1.default, type: 'checkbox', checked: self.showLabels, onClick: () => { self.toggleShowLabels(); }, }, { label: 'Show descriptions', icon: Visibility_1.default, type: 'checkbox', checked: self.showDescriptions, onClick: () => { self.toggleShowDescriptions(); }, }, { label: 'Display mode', icon: Visibility_1.default, subMenu: [ 'compact', 'reducedRepresentation', 'normal', 'collapse', ].map(val => ({ label: val, onClick: () => { self.setDisplayMode(val); }, })), }, { label: 'Set max height', onClick: () => { (0, util_1.getSession)(self).queueDialog(handleClose => [ SetMaxHeightDialog, { model: self, handleClose, }, ]); }, }, { label: 'Edit filters', onClick: () => { (0, util_1.getSession)(self).queueDialog(handleClose => [ AddFiltersDialog, { model: self, handleClose, }, ]); }, }, ]; }, }; }); } exports.default = stateModelFactory;