@jbrowse/plugin-linear-genome-view
Version:
JBrowse 2 linear genome view
193 lines (192 loc) • 8.4 kB
JavaScript
;
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;