@jbrowse/plugin-linear-comparative-view 2.15.4 → 2.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/LGVSyntenyDisplay/components/LaunchSyntenyViewDialog.d.ts +2 -1
  2. package/dist/LGVSyntenyDisplay/components/LaunchSyntenyViewDialog.js +4 -2
  3. package/dist/LGVSyntenyDisplay/components/util.d.ts +4 -1
  4. package/dist/LGVSyntenyDisplay/components/util.js +7 -15
  5. package/dist/LGVSyntenyDisplay/model.d.ts +26 -14
  6. package/dist/LGVSyntenyDisplay/model.js +23 -1
  7. package/dist/LaunchLinearSyntenyView.js +41 -11
  8. package/dist/LinearComparativeDisplay/stateModelFactory.d.ts +42 -14
  9. package/dist/LinearComparativeDisplay/stateModelFactory.js +20 -10
  10. package/dist/LinearComparativeView/components/Header.d.ts +2 -3
  11. package/dist/LinearComparativeView/components/Header.js +72 -62
  12. package/dist/LinearComparativeView/components/HeaderSearchBoxes.d.ts +6 -0
  13. package/dist/LinearComparativeView/components/HeaderSearchBoxes.js +34 -0
  14. package/dist/LinearComparativeView/components/LinearComparativeRenderArea.d.ts +6 -0
  15. package/dist/LinearComparativeView/components/LinearComparativeRenderArea.js +61 -0
  16. package/dist/LinearComparativeView/components/LinearComparativeView.d.ts +2 -4
  17. package/dist/LinearComparativeView/components/LinearComparativeView.js +3 -67
  18. package/dist/LinearComparativeView/components/Rubberband.js +1 -1
  19. package/dist/LinearComparativeView/index.js +3 -0
  20. package/dist/LinearComparativeView/model.d.ts +265 -12
  21. package/dist/LinearComparativeView/model.js +45 -75
  22. package/dist/LinearSyntenyDisplay/afterAttach.js +5 -4
  23. package/dist/LinearSyntenyDisplay/components/LinearSyntenyRendering.js +47 -32
  24. package/dist/LinearSyntenyDisplay/components/SyntenyContextMenu.js +10 -6
  25. package/dist/LinearSyntenyDisplay/components/util.d.ts +7 -2
  26. package/dist/LinearSyntenyDisplay/components/util.js +12 -14
  27. package/dist/LinearSyntenyDisplay/drawSynteny.d.ts +1 -1
  28. package/dist/LinearSyntenyDisplay/drawSynteny.js +29 -25
  29. package/dist/LinearSyntenyDisplay/index.js +1 -1
  30. package/dist/LinearSyntenyDisplay/model.d.ts +48 -10
  31. package/dist/LinearSyntenyDisplay/model.js +38 -15
  32. package/dist/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.d.ts → AddCustomTrack.d.ts} +2 -3
  33. package/dist/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.js → AddCustomTrack.js} +3 -3
  34. package/dist/LinearSyntenyView/components/ImportForm/LinearSyntenyImportForm.js +195 -0
  35. package/dist/LinearSyntenyView/components/ImportForm/Spacer.d.ts +2 -0
  36. package/dist/LinearSyntenyView/components/ImportForm/Spacer.js +10 -0
  37. package/dist/LinearSyntenyView/components/ImportForm/TrackSelector.d.ts +10 -0
  38. package/dist/LinearSyntenyView/components/ImportForm/{ImportSyntenyTrackSelector.js → TrackSelector.js} +15 -20
  39. package/dist/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.d.ts +14 -0
  40. package/dist/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.js +52 -0
  41. package/dist/LinearSyntenyView/components/LinearSyntenyView.js +3 -3
  42. package/dist/LinearSyntenyView/index.js +1 -1
  43. package/dist/LinearSyntenyView/model.d.ts +267 -9
  44. package/dist/LinearSyntenyView/model.js +2 -2
  45. package/dist/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.d.ts +12 -0
  46. package/dist/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.js +19 -0
  47. package/dist/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.d.ts +1 -3
  48. package/dist/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +36 -27
  49. package/dist/LinearSyntenyViewHelper/index.d.ts +2 -0
  50. package/dist/LinearSyntenyViewHelper/index.js +25 -0
  51. package/dist/LinearSyntenyViewHelper/stateModelFactory.d.ts +30 -0
  52. package/dist/LinearSyntenyViewHelper/stateModelFactory.js +105 -0
  53. package/dist/SyntenyFeatureDetail/SyntenyFeatureDetail.d.ts +14 -0
  54. package/dist/SyntenyFeatureDetail/SyntenyFeatureDetail.js +100 -0
  55. package/dist/SyntenyFeatureDetail/index.d.ts +2 -0
  56. package/dist/SyntenyFeatureDetail/index.js +56 -0
  57. package/dist/index.js +4 -0
  58. package/esm/LGVSyntenyDisplay/components/LaunchSyntenyViewDialog.d.ts +2 -1
  59. package/esm/LGVSyntenyDisplay/components/LaunchSyntenyViewDialog.js +4 -2
  60. package/esm/LGVSyntenyDisplay/components/util.d.ts +4 -1
  61. package/esm/LGVSyntenyDisplay/components/util.js +8 -16
  62. package/esm/LGVSyntenyDisplay/model.d.ts +26 -14
  63. package/esm/LGVSyntenyDisplay/model.js +25 -3
  64. package/esm/LaunchLinearSyntenyView.js +41 -11
  65. package/esm/LinearComparativeDisplay/stateModelFactory.d.ts +42 -14
  66. package/esm/LinearComparativeDisplay/stateModelFactory.js +21 -11
  67. package/esm/LinearComparativeView/components/Header.d.ts +2 -3
  68. package/esm/LinearComparativeView/components/Header.js +73 -63
  69. package/esm/LinearComparativeView/components/HeaderSearchBoxes.d.ts +6 -0
  70. package/esm/LinearComparativeView/components/HeaderSearchBoxes.js +29 -0
  71. package/esm/LinearComparativeView/components/LinearComparativeRenderArea.d.ts +6 -0
  72. package/esm/LinearComparativeView/components/LinearComparativeRenderArea.js +56 -0
  73. package/esm/LinearComparativeView/components/LinearComparativeView.d.ts +2 -4
  74. package/esm/LinearComparativeView/components/LinearComparativeView.js +3 -67
  75. package/esm/LinearComparativeView/components/Rubberband.js +1 -1
  76. package/esm/LinearComparativeView/index.js +3 -0
  77. package/esm/LinearComparativeView/model.d.ts +265 -12
  78. package/esm/LinearComparativeView/model.js +47 -77
  79. package/esm/LinearSyntenyDisplay/afterAttach.js +5 -4
  80. package/esm/LinearSyntenyDisplay/components/LinearSyntenyRendering.js +48 -33
  81. package/esm/LinearSyntenyDisplay/components/SyntenyContextMenu.js +10 -6
  82. package/esm/LinearSyntenyDisplay/components/util.d.ts +7 -2
  83. package/esm/LinearSyntenyDisplay/components/util.js +12 -14
  84. package/esm/LinearSyntenyDisplay/drawSynteny.d.ts +1 -1
  85. package/esm/LinearSyntenyDisplay/drawSynteny.js +29 -25
  86. package/esm/LinearSyntenyDisplay/index.js +1 -1
  87. package/esm/LinearSyntenyDisplay/model.d.ts +48 -10
  88. package/esm/LinearSyntenyDisplay/model.js +38 -15
  89. package/esm/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.d.ts → AddCustomTrack.d.ts} +2 -3
  90. package/esm/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.js → AddCustomTrack.js} +3 -3
  91. package/esm/LinearSyntenyView/components/ImportForm/LinearSyntenyImportForm.js +167 -0
  92. package/esm/LinearSyntenyView/components/ImportForm/Spacer.d.ts +2 -0
  93. package/esm/LinearSyntenyView/components/ImportForm/Spacer.js +4 -0
  94. package/esm/LinearSyntenyView/components/ImportForm/TrackSelector.d.ts +10 -0
  95. package/esm/LinearSyntenyView/components/ImportForm/{ImportSyntenyTrackSelector.js → TrackSelector.js} +15 -20
  96. package/esm/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.d.ts +14 -0
  97. package/esm/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.js +23 -0
  98. package/esm/LinearSyntenyView/components/LinearSyntenyView.js +3 -3
  99. package/esm/LinearSyntenyView/index.js +1 -1
  100. package/esm/LinearSyntenyView/model.d.ts +267 -9
  101. package/esm/LinearSyntenyView/model.js +2 -2
  102. package/esm/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.d.ts +12 -0
  103. package/esm/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.js +13 -0
  104. package/esm/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.d.ts +1 -3
  105. package/esm/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +38 -29
  106. package/esm/LinearSyntenyViewHelper/index.d.ts +2 -0
  107. package/esm/LinearSyntenyViewHelper/index.js +19 -0
  108. package/esm/LinearSyntenyViewHelper/stateModelFactory.d.ts +30 -0
  109. package/esm/LinearSyntenyViewHelper/stateModelFactory.js +102 -0
  110. package/esm/SyntenyFeatureDetail/SyntenyFeatureDetail.d.ts +14 -0
  111. package/esm/SyntenyFeatureDetail/SyntenyFeatureDetail.js +72 -0
  112. package/esm/SyntenyFeatureDetail/index.d.ts +2 -0
  113. package/esm/SyntenyFeatureDetail/index.js +27 -0
  114. package/esm/index.js +4 -0
  115. package/package.json +3 -3
  116. package/dist/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.d.ts +0 -9
  117. package/dist/LinearSyntenyView/components/ImportForm/index.js +0 -138
  118. package/esm/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.d.ts +0 -9
  119. package/esm/LinearSyntenyView/components/ImportForm/index.js +0 -110
  120. /package/dist/LinearSyntenyView/components/ImportForm/{index.d.ts → LinearSyntenyImportForm.d.ts} +0 -0
  121. /package/esm/LinearSyntenyView/components/ImportForm/{index.d.ts → LinearSyntenyImportForm.d.ts} +0 -0
@@ -0,0 +1,72 @@
1
+ import React, { lazy } from 'react';
2
+ import { Link, Paper } from '@mui/material';
3
+ import { observer } from 'mobx-react';
4
+ // locals
5
+ import BaseCard from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/BaseCard';
6
+ import BaseFeatureDetail from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
7
+ import { assembleLocString, getSession, SimpleFeature, } from '@jbrowse/core/util';
8
+ // lazies
9
+ const LaunchSyntenyViewDialog = lazy(() => import('../LGVSyntenyDisplay/components/LaunchSyntenyViewDialog'));
10
+ const CustomLinker = observer(function ({ model, }) {
11
+ const { featureData, view, level, trackId } = model;
12
+ return (React.createElement("ul", null,
13
+ view.type === 'LinearSyntenyView' ? (React.createElement("li", null,
14
+ React.createElement(Link, { href: "#", onClick: event => {
15
+ var _a, _b;
16
+ event.preventDefault();
17
+ const { views } = view;
18
+ if (level !== undefined) {
19
+ // level is "pre-known", and stored in the SyntenyFeatureWidget
20
+ // model state e.g. when clicking on a feature from a
21
+ // LinearSyntenyRendering
22
+ (_a = views[level]) === null || _a === void 0 ? void 0 : _a.navTo(featureData);
23
+ (_b = views[level + 1]) === null || _b === void 0 ? void 0 : _b.navTo(featureData.mate);
24
+ }
25
+ else {
26
+ // best effort to find the right level. this is triggered for
27
+ // example if a user clicks on a feature in a LGVSyntenyDisplay
28
+ // in an existing LinearSyntenyView, there is no real proper
29
+ // level "pre-known" to this situation
30
+ const f1 = featureData;
31
+ const f2 = featureData.mate;
32
+ const r1 = f1.assemblyName;
33
+ const r2 = f2.assemblyName;
34
+ const v1 = views.find(view => view.assemblyNames[0] === r1);
35
+ const v2 = views.find(view => view.assemblyNames[0] === r2);
36
+ if (!v1 || !v2) {
37
+ getSession(model).notify([
38
+ v1
39
+ ? `Unable to find ${assembleLocString(f1)} in synteny view`
40
+ : '',
41
+ v2
42
+ ? `Unable to find ${assembleLocString(f2)} in synteny view`
43
+ : '',
44
+ ].join(' ... '));
45
+ }
46
+ v1 === null || v1 === void 0 ? void 0 : v1.navTo(f1);
47
+ v2 === null || v2 === void 0 ? void 0 : v2.navTo(f2);
48
+ }
49
+ } }, "Center view on this feature"))) : null,
50
+ React.createElement("li", null,
51
+ React.createElement(Link, { href: "#", onClick: event => {
52
+ event.preventDefault();
53
+ const session = getSession(model);
54
+ const feature = new SimpleFeature(featureData);
55
+ session.queueDialog(handleClose => [
56
+ LaunchSyntenyViewDialog,
57
+ {
58
+ model,
59
+ feature,
60
+ trackId,
61
+ handleClose,
62
+ },
63
+ ]);
64
+ } }, "Launch new linear synteny view on this feature"))));
65
+ });
66
+ const SyntenyFeatureDetail = observer(function ({ model, }) {
67
+ return (React.createElement(Paper, { "data-testid": "alignment-side-drawer" },
68
+ React.createElement(BaseFeatureDetail, { title: "Feature", model: model }),
69
+ React.createElement(BaseCard, { title: "Link to view" },
70
+ React.createElement(CustomLinker, { model: model }))));
71
+ });
72
+ export default SyntenyFeatureDetail;
@@ -0,0 +1,2 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ export default function SyntenyFeatureWidgetF(pluginManager: PluginManager): void;
@@ -0,0 +1,27 @@
1
+ import { lazy } from 'react';
2
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
3
+ import WidgetType from '@jbrowse/core/pluggableElementTypes/WidgetType';
4
+ import { types } from 'mobx-state-tree';
5
+ import { stateModelFactory as BaseFeatureWidgetStateModelF } from '@jbrowse/core/BaseFeatureWidget';
6
+ const configSchema = ConfigurationSchema('SyntenyFeatureWidget', {});
7
+ function stateModelF(pluginManager) {
8
+ return types.compose(BaseFeatureWidgetStateModelF(pluginManager), types.model('SyntenyFeatureWidget', {
9
+ /**
10
+ * #property
11
+ */
12
+ type: types.literal('SyntenyFeatureWidget'),
13
+ /**
14
+ * #property
15
+ */
16
+ level: types.maybe(types.number),
17
+ }));
18
+ }
19
+ export default function SyntenyFeatureWidgetF(pluginManager) {
20
+ pluginManager.addWidgetType(() => new WidgetType({
21
+ name: 'SyntenyFeatureWidget',
22
+ heading: 'Synteny feature details',
23
+ configSchema,
24
+ stateModel: stateModelF(pluginManager),
25
+ ReactComponent: lazy(() => import('./SyntenyFeatureDetail')),
26
+ }));
27
+ }
package/esm/index.js CHANGED
@@ -6,19 +6,23 @@ import LinearComparativeViewF from './LinearComparativeView';
6
6
  import LinearSyntenyDisplayF from './LinearSyntenyDisplay';
7
7
  import LGVSyntenyDisplayF from './LGVSyntenyDisplay';
8
8
  import LinearSyntenyViewF from './LinearSyntenyView';
9
+ import LinearSyntenyViewHelperF from './LinearSyntenyViewHelper';
9
10
  import LaunchLinearSyntenyViewF from './LaunchLinearSyntenyView';
10
11
  import SyntenyTrackF from './SyntenyTrack';
11
12
  import LinearReadVsRefMenuItemF from './LinearReadVsRef';
13
+ import SyntenyFeatureWidgetF from './SyntenyFeatureDetail';
12
14
  export default class LinearComparativeViewPlugin extends Plugin {
13
15
  constructor() {
14
16
  super(...arguments);
15
17
  this.name = 'LinearComparativeViewPlugin';
16
18
  }
17
19
  install(pluginManager) {
20
+ LinearSyntenyViewHelperF(pluginManager);
18
21
  LinearComparativeViewF(pluginManager);
19
22
  LinearSyntenyViewF(pluginManager);
20
23
  LinearComparativeDisplayF(pluginManager);
21
24
  LinearSyntenyDisplayF(pluginManager);
25
+ SyntenyFeatureWidgetF(pluginManager);
22
26
  LGVSyntenyDisplayF(pluginManager);
23
27
  LaunchLinearSyntenyViewF(pluginManager);
24
28
  SyntenyTrackF(pluginManager);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-linear-comparative-view",
3
- "version": "2.15.4",
3
+ "version": "2.16.1",
4
4
  "description": "JBrowse 2 linear comparative view",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -16,7 +16,7 @@
16
16
  },
17
17
  "author": "JBrowse Team",
18
18
  "distMain": "dist/index.js",
19
- "srcMain": "src/index.tsx",
19
+ "srcMain": "src/index.ts",
20
20
  "main": "dist/index.js",
21
21
  "files": [
22
22
  "dist",
@@ -61,5 +61,5 @@
61
61
  "publishConfig": {
62
62
  "access": "public"
63
63
  },
64
- "gitHead": "686b4ad9016b3586e8230180f7adb44c238ba4fb"
64
+ "gitHead": "c6a658d2344989895543f0456b1cf7dd3b937769"
65
65
  }
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import { LinearSyntenyViewModel } from '../../model';
3
- declare const Selector: ({ model, assembly1, assembly2, setShowTrackId, }: {
4
- model: LinearSyntenyViewModel;
5
- assembly1: string;
6
- assembly2: string;
7
- setShowTrackId: (arg: string) => void;
8
- }) => React.JSX.Element;
9
- export default Selector;
@@ -1,138 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const react_1 = __importStar(require("react"));
30
- const material_1 = require("@mui/material");
31
- const mui_1 = require("tss-react/mui");
32
- const mobx_react_1 = require("mobx-react");
33
- const util_1 = require("@jbrowse/core/util");
34
- const ui_1 = require("@jbrowse/core/ui");
35
- const ImportCustomTrack_1 = __importDefault(require("./ImportCustomTrack"));
36
- const ImportSyntenyTrackSelector_1 = __importDefault(require("./ImportSyntenyTrackSelector"));
37
- const useStyles = (0, mui_1.makeStyles)()(theme => ({
38
- importFormContainer: {
39
- padding: theme.spacing(4),
40
- margin: '0 auto',
41
- },
42
- assemblySelector: {
43
- width: '75%',
44
- margin: '0 auto',
45
- },
46
- }));
47
- function TrackSelector({ setSessionTrackData, setShowTrackId, sessionTrackData, assembly1, assembly2, model, }) {
48
- const [choice, setChoice] = (0, react_1.useState)('tracklist');
49
- (0, react_1.useEffect)(() => {
50
- if (choice === 'none') {
51
- setSessionTrackData(undefined);
52
- setShowTrackId(undefined);
53
- }
54
- }, [choice, setSessionTrackData, setShowTrackId]);
55
- return (react_1.default.createElement(react_1.default.Fragment, null,
56
- react_1.default.createElement(material_1.FormControl, null,
57
- react_1.default.createElement(material_1.FormLabel, { id: "group-label" }, "(Optional) Select or add a synteny track"),
58
- react_1.default.createElement(material_1.RadioGroup, { row: true, value: choice, onChange: event => {
59
- setChoice(event.target.value);
60
- }, "aria-labelledby": "group-label" },
61
- react_1.default.createElement(material_1.FormControlLabel, { value: "none", control: react_1.default.createElement(material_1.Radio, null), label: "None" }),
62
- react_1.default.createElement(material_1.FormControlLabel, { value: "tracklist", control: react_1.default.createElement(material_1.Radio, null), label: "Existing track" }),
63
- react_1.default.createElement(material_1.FormControlLabel, { value: "custom", control: react_1.default.createElement(material_1.Radio, null), label: "New track" }))),
64
- choice === 'custom' ? (react_1.default.createElement(ImportCustomTrack_1.default, { setSessionTrackData: setSessionTrackData, sessionTrackData: sessionTrackData, assembly2: assembly2, assembly1: assembly1 })) : null,
65
- choice === 'tracklist' ? (react_1.default.createElement(ImportSyntenyTrackSelector_1.default, { model: model, assembly1: assembly1, assembly2: assembly2, setShowTrackId: setShowTrackId })) : null));
66
- }
67
- const LinearSyntenyViewImportForm = (0, mobx_react_1.observer)(function ({ model, }) {
68
- const { classes } = useStyles();
69
- const session = (0, util_1.getSession)(model);
70
- const { assemblyNames } = session;
71
- const [assembly2, setAssembly2] = (0, react_1.useState)(assemblyNames[0] || '');
72
- const [assembly1, setAssembly1] = (0, react_1.useState)(assemblyNames[0] || '');
73
- const [error, setError] = (0, react_1.useState)();
74
- const [sessionTrackData, setSessionTrackData] = (0, react_1.useState)();
75
- const [showTrackId, setShowTrackId] = (0, react_1.useState)();
76
- async function onOpenClick() {
77
- try {
78
- if (!(0, util_1.isSessionWithAddTracks)(session)) {
79
- return;
80
- }
81
- setError(undefined);
82
- const { assemblyManager } = session;
83
- const assemblies = [assembly1, assembly2];
84
- model.setViews(await Promise.all(assemblies.map(async (sel) => {
85
- const asm = await assemblyManager.waitForAssembly(sel);
86
- if (!asm) {
87
- throw new Error(`Assembly ${sel} failed to load`);
88
- }
89
- return {
90
- type: 'LinearGenomeView',
91
- bpPerPx: 1,
92
- offsetPx: 0,
93
- hideHeader: true,
94
- displayedRegions: asm.regions,
95
- };
96
- })));
97
- model.views.forEach(view => {
98
- view.setWidth(model.width);
99
- });
100
- model.views.forEach(view => {
101
- view.showAllRegions();
102
- });
103
- if (sessionTrackData) {
104
- session.addTrackConf(sessionTrackData);
105
- model.toggleTrack(sessionTrackData.trackId);
106
- }
107
- else if (showTrackId) {
108
- model.showTrack(showTrackId);
109
- }
110
- }
111
- catch (e) {
112
- console.error(e);
113
- setError(e);
114
- }
115
- }
116
- // this is a combination of any displayed error message we have
117
- const displayError = error;
118
- return (react_1.default.createElement(material_1.Container, { className: classes.importFormContainer },
119
- displayError ? react_1.default.createElement(ui_1.ErrorMessage, { error: displayError }) : null,
120
- react_1.default.createElement(material_1.Grid, { container: true, spacing: 1, justifyContent: "center", alignItems: "center", className: classes.assemblySelector },
121
- react_1.default.createElement(material_1.Grid, { item: true },
122
- react_1.default.createElement(material_1.Paper, { style: { padding: 12 } },
123
- react_1.default.createElement("p", { style: { textAlign: 'center' } }, "Select assemblies for linear synteny view"),
124
- react_1.default.createElement(material_1.Grid, { container: true, spacing: 1, justifyContent: "center", alignItems: "center" },
125
- react_1.default.createElement(material_1.Grid, { item: true },
126
- react_1.default.createElement(ui_1.AssemblySelector, { selected: assembly1, onChange: val => {
127
- setAssembly1(val);
128
- }, session: session })),
129
- react_1.default.createElement(material_1.Grid, { item: true },
130
- react_1.default.createElement(ui_1.AssemblySelector, { selected: assembly2, onChange: val => {
131
- setAssembly2(val);
132
- }, session: session })),
133
- react_1.default.createElement(material_1.Grid, { item: true },
134
- react_1.default.createElement(material_1.FormControl, null,
135
- react_1.default.createElement(material_1.Button, { onClick: onOpenClick, variant: "contained", color: "primary" }, "Launch"))))),
136
- react_1.default.createElement(TrackSelector, { setShowTrackId: setShowTrackId, assembly2: assembly2, assembly1: assembly1, setSessionTrackData: setSessionTrackData, sessionTrackData: sessionTrackData, model: model })))));
137
- });
138
- exports.default = LinearSyntenyViewImportForm;
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import { LinearSyntenyViewModel } from '../../model';
3
- declare const Selector: ({ model, assembly1, assembly2, setShowTrackId, }: {
4
- model: LinearSyntenyViewModel;
5
- assembly1: string;
6
- assembly2: string;
7
- setShowTrackId: (arg: string) => void;
8
- }) => React.JSX.Element;
9
- export default Selector;
@@ -1,110 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { Button, Container, FormControl, FormLabel, FormControlLabel, Grid, Paper, Radio, RadioGroup, } from '@mui/material';
3
- import { makeStyles } from 'tss-react/mui';
4
- import { observer } from 'mobx-react';
5
- import { getSession, isSessionWithAddTracks } from '@jbrowse/core/util';
6
- import { ErrorMessage, AssemblySelector } from '@jbrowse/core/ui';
7
- import ImportCustomTrack from './ImportCustomTrack';
8
- import ImportSyntenyTrackSelector from './ImportSyntenyTrackSelector';
9
- const useStyles = makeStyles()(theme => ({
10
- importFormContainer: {
11
- padding: theme.spacing(4),
12
- margin: '0 auto',
13
- },
14
- assemblySelector: {
15
- width: '75%',
16
- margin: '0 auto',
17
- },
18
- }));
19
- function TrackSelector({ setSessionTrackData, setShowTrackId, sessionTrackData, assembly1, assembly2, model, }) {
20
- const [choice, setChoice] = useState('tracklist');
21
- useEffect(() => {
22
- if (choice === 'none') {
23
- setSessionTrackData(undefined);
24
- setShowTrackId(undefined);
25
- }
26
- }, [choice, setSessionTrackData, setShowTrackId]);
27
- return (React.createElement(React.Fragment, null,
28
- React.createElement(FormControl, null,
29
- React.createElement(FormLabel, { id: "group-label" }, "(Optional) Select or add a synteny track"),
30
- React.createElement(RadioGroup, { row: true, value: choice, onChange: event => {
31
- setChoice(event.target.value);
32
- }, "aria-labelledby": "group-label" },
33
- React.createElement(FormControlLabel, { value: "none", control: React.createElement(Radio, null), label: "None" }),
34
- React.createElement(FormControlLabel, { value: "tracklist", control: React.createElement(Radio, null), label: "Existing track" }),
35
- React.createElement(FormControlLabel, { value: "custom", control: React.createElement(Radio, null), label: "New track" }))),
36
- choice === 'custom' ? (React.createElement(ImportCustomTrack, { setSessionTrackData: setSessionTrackData, sessionTrackData: sessionTrackData, assembly2: assembly2, assembly1: assembly1 })) : null,
37
- choice === 'tracklist' ? (React.createElement(ImportSyntenyTrackSelector, { model: model, assembly1: assembly1, assembly2: assembly2, setShowTrackId: setShowTrackId })) : null));
38
- }
39
- const LinearSyntenyViewImportForm = observer(function ({ model, }) {
40
- const { classes } = useStyles();
41
- const session = getSession(model);
42
- const { assemblyNames } = session;
43
- const [assembly2, setAssembly2] = useState(assemblyNames[0] || '');
44
- const [assembly1, setAssembly1] = useState(assemblyNames[0] || '');
45
- const [error, setError] = useState();
46
- const [sessionTrackData, setSessionTrackData] = useState();
47
- const [showTrackId, setShowTrackId] = useState();
48
- async function onOpenClick() {
49
- try {
50
- if (!isSessionWithAddTracks(session)) {
51
- return;
52
- }
53
- setError(undefined);
54
- const { assemblyManager } = session;
55
- const assemblies = [assembly1, assembly2];
56
- model.setViews(await Promise.all(assemblies.map(async (sel) => {
57
- const asm = await assemblyManager.waitForAssembly(sel);
58
- if (!asm) {
59
- throw new Error(`Assembly ${sel} failed to load`);
60
- }
61
- return {
62
- type: 'LinearGenomeView',
63
- bpPerPx: 1,
64
- offsetPx: 0,
65
- hideHeader: true,
66
- displayedRegions: asm.regions,
67
- };
68
- })));
69
- model.views.forEach(view => {
70
- view.setWidth(model.width);
71
- });
72
- model.views.forEach(view => {
73
- view.showAllRegions();
74
- });
75
- if (sessionTrackData) {
76
- session.addTrackConf(sessionTrackData);
77
- model.toggleTrack(sessionTrackData.trackId);
78
- }
79
- else if (showTrackId) {
80
- model.showTrack(showTrackId);
81
- }
82
- }
83
- catch (e) {
84
- console.error(e);
85
- setError(e);
86
- }
87
- }
88
- // this is a combination of any displayed error message we have
89
- const displayError = error;
90
- return (React.createElement(Container, { className: classes.importFormContainer },
91
- displayError ? React.createElement(ErrorMessage, { error: displayError }) : null,
92
- React.createElement(Grid, { container: true, spacing: 1, justifyContent: "center", alignItems: "center", className: classes.assemblySelector },
93
- React.createElement(Grid, { item: true },
94
- React.createElement(Paper, { style: { padding: 12 } },
95
- React.createElement("p", { style: { textAlign: 'center' } }, "Select assemblies for linear synteny view"),
96
- React.createElement(Grid, { container: true, spacing: 1, justifyContent: "center", alignItems: "center" },
97
- React.createElement(Grid, { item: true },
98
- React.createElement(AssemblySelector, { selected: assembly1, onChange: val => {
99
- setAssembly1(val);
100
- }, session: session })),
101
- React.createElement(Grid, { item: true },
102
- React.createElement(AssemblySelector, { selected: assembly2, onChange: val => {
103
- setAssembly2(val);
104
- }, session: session })),
105
- React.createElement(Grid, { item: true },
106
- React.createElement(FormControl, null,
107
- React.createElement(Button, { onClick: onOpenClick, variant: "contained", color: "primary" }, "Launch"))))),
108
- React.createElement(TrackSelector, { setShowTrackId: setShowTrackId, assembly2: assembly2, assembly1: assembly1, setSessionTrackData: setSessionTrackData, sessionTrackData: sessionTrackData, model: model })))));
109
- });
110
- export default LinearSyntenyViewImportForm;