@jbrowse/sv-core 2.18.0 → 3.0.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.
- package/dist/BreakendMultiLevelOptionDialog.d.ts +1 -2
- package/dist/BreakendMultiLevelOptionDialog.js +30 -132
- package/dist/BreakendSingleLevelOptionDialog.d.ts +1 -2
- package/dist/BreakendSingleLevelOptionDialog.js +38 -62
- package/dist/Checkbox2.d.ts +1 -2
- package/dist/Checkbox2.js +2 -5
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/navToMultiLevelBreak.d.ts +11 -0
- package/dist/navToMultiLevelBreak.js +77 -0
- package/dist/navToSingleLevelBreak.d.ts +61 -0
- package/dist/navToSingleLevelBreak.js +136 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.js +2 -0
- package/dist/util.d.ts +8 -51
- package/dist/util.js +9 -158
- package/esm/BreakendMultiLevelOptionDialog.d.ts +1 -2
- package/esm/BreakendMultiLevelOptionDialog.js +30 -109
- package/esm/BreakendSingleLevelOptionDialog.d.ts +1 -2
- package/esm/BreakendSingleLevelOptionDialog.js +38 -39
- package/esm/Checkbox2.d.ts +1 -2
- package/esm/Checkbox2.js +2 -2
- package/esm/index.d.ts +2 -0
- package/esm/index.js +2 -0
- package/esm/navToMultiLevelBreak.d.ts +11 -0
- package/esm/navToMultiLevelBreak.js +74 -0
- package/esm/navToSingleLevelBreak.d.ts +61 -0
- package/esm/navToSingleLevelBreak.js +131 -0
- package/esm/types.d.ts +13 -0
- package/esm/types.js +1 -0
- package/esm/util.d.ts +8 -51
- package/esm/util.js +7 -155
- package/package.json +9 -9
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
|
|
2
|
+
export interface Display {
|
|
3
|
+
id: string;
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
}
|
|
6
|
+
export interface Track {
|
|
7
|
+
id: string;
|
|
8
|
+
displays: Display[];
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
export interface BreakpointSplitView {
|
|
12
|
+
views: LinearGenomeViewModel[];
|
|
13
|
+
}
|
package/dist/types.js
ADDED
package/dist/util.d.ts
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
|
+
import type { Track } from './types';
|
|
1
2
|
import type { Assembly } from '@jbrowse/core/assemblyManager/assembly';
|
|
2
|
-
import type {
|
|
3
|
-
export interface Display {
|
|
4
|
-
id: string;
|
|
5
|
-
[key: string]: unknown;
|
|
6
|
-
}
|
|
7
|
-
export interface Track {
|
|
8
|
-
id: string;
|
|
9
|
-
displays: Display[];
|
|
10
|
-
[key: string]: unknown;
|
|
11
|
-
}
|
|
3
|
+
import type { Feature } from '@jbrowse/core/util';
|
|
12
4
|
export declare function getBreakendCoveringRegions({ feature, assembly, }: {
|
|
13
5
|
feature: Feature;
|
|
14
6
|
assembly: Assembly;
|
|
@@ -18,44 +10,9 @@ export declare function getBreakendCoveringRegions({ feature, assembly, }: {
|
|
|
18
10
|
mateRefName: string;
|
|
19
11
|
matePos: any;
|
|
20
12
|
};
|
|
21
|
-
export declare function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
pos: number;
|
|
28
|
-
refName: string;
|
|
29
|
-
mateRefName: string;
|
|
30
|
-
matePos: any;
|
|
31
|
-
};
|
|
32
|
-
snap: {
|
|
33
|
-
type: string;
|
|
34
|
-
views: {
|
|
35
|
-
type: string;
|
|
36
|
-
displayedRegions: {
|
|
37
|
-
assemblyName: string;
|
|
38
|
-
start: number;
|
|
39
|
-
end: number;
|
|
40
|
-
refName: string;
|
|
41
|
-
}[];
|
|
42
|
-
}[];
|
|
43
|
-
displayName: string;
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
export declare function navToSingleLevelBreak({ stableViewId, feature, assemblyName, session, tracks, windowSize, }: {
|
|
47
|
-
stableViewId?: string;
|
|
48
|
-
feature: Feature;
|
|
49
|
-
assemblyName: string;
|
|
50
|
-
windowSize?: number;
|
|
51
|
-
session: AbstractSessionModel;
|
|
52
|
-
tracks?: any;
|
|
53
|
-
}): Promise<void>;
|
|
54
|
-
export declare function navToMultiLevelBreak({ stableViewId, feature, assemblyName, session, tracks, }: {
|
|
55
|
-
stableViewId?: string;
|
|
56
|
-
feature: Feature;
|
|
57
|
-
assemblyName: string;
|
|
58
|
-
windowSize?: number;
|
|
59
|
-
session: AbstractSessionModel;
|
|
60
|
-
tracks?: any;
|
|
61
|
-
}): Promise<void>;
|
|
13
|
+
export declare function stripIds(arr: Track[]): {
|
|
14
|
+
displays: {
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}[];
|
|
17
|
+
}[];
|
|
18
|
+
export declare function makeTitle(f: Feature): string;
|
package/dist/util.js
CHANGED
|
@@ -1,19 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getBreakendCoveringRegions = getBreakendCoveringRegions;
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
6
|
-
exports.navToMultiLevelBreak = navToMultiLevelBreak;
|
|
4
|
+
exports.stripIds = stripIds;
|
|
5
|
+
exports.makeTitle = makeTitle;
|
|
7
6
|
const vcf_1 = require("@gmod/vcf");
|
|
8
|
-
const util_1 = require("@jbrowse/core/util");
|
|
9
|
-
const mobx_1 = require("mobx");
|
|
10
|
-
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
11
|
-
function stripIds(arr) {
|
|
12
|
-
return arr.map(({ id, displays, ...rest }) => ({
|
|
13
|
-
...rest,
|
|
14
|
-
displays: displays.map(({ id, ...rest }) => rest),
|
|
15
|
-
}));
|
|
16
|
-
}
|
|
17
7
|
function getBreakendCoveringRegions({ feature, assembly, }) {
|
|
18
8
|
var _a;
|
|
19
9
|
const alt = (_a = feature.get('ALT')) === null || _a === void 0 ? void 0 : _a[0];
|
|
@@ -57,151 +47,12 @@ function getBreakendCoveringRegions({ feature, assembly, }) {
|
|
|
57
47
|
};
|
|
58
48
|
}
|
|
59
49
|
}
|
|
60
|
-
function
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
if (!assembly.regions) {
|
|
67
|
-
throw new Error(`assembly ${assemblyName} regions not loaded`);
|
|
68
|
-
}
|
|
69
|
-
const coverage = getBreakendCoveringRegions({
|
|
70
|
-
feature,
|
|
71
|
-
assembly,
|
|
72
|
-
});
|
|
73
|
-
const { refName, mateRefName } = coverage;
|
|
74
|
-
const topRegion = assembly.regions.find(f => f.refName === refName);
|
|
75
|
-
const bottomRegion = assembly.regions.find(f => f.refName === mateRefName);
|
|
76
|
-
return {
|
|
77
|
-
coverage,
|
|
78
|
-
snap: {
|
|
79
|
-
type: 'BreakpointSplitView',
|
|
80
|
-
views: [
|
|
81
|
-
{
|
|
82
|
-
type: 'LinearGenomeView',
|
|
83
|
-
displayedRegions: (0, util_1.gatherOverlaps)([
|
|
84
|
-
{ ...topRegion, assemblyName },
|
|
85
|
-
{ ...bottomRegion, assemblyName },
|
|
86
|
-
]),
|
|
87
|
-
},
|
|
88
|
-
],
|
|
89
|
-
displayName: `${feature.get('name') || feature.get('id') || 'breakend'} split detail`,
|
|
90
|
-
},
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
async function navToSingleLevelBreak({ stableViewId, feature, assemblyName, session, tracks, windowSize = 0, }) {
|
|
94
|
-
var _a;
|
|
95
|
-
const { snap, coverage } = singleLevelSnapshotFromBreakendFeature({
|
|
96
|
-
feature,
|
|
97
|
-
assemblyName,
|
|
98
|
-
session,
|
|
99
|
-
});
|
|
100
|
-
const { refName, pos: startPos, mateRefName, matePos: endPos } = coverage;
|
|
101
|
-
let viewInStack = session.views.find(f => f.id === stableViewId);
|
|
102
|
-
if (!viewInStack) {
|
|
103
|
-
viewInStack = session.addView('BreakpointSplitView', {
|
|
104
|
-
...snap,
|
|
105
|
-
views: [
|
|
106
|
-
{
|
|
107
|
-
...snap.views[0],
|
|
108
|
-
tracks: tracks ? stripIds((0, mobx_state_tree_1.getSnapshot)(tracks)) : [],
|
|
109
|
-
},
|
|
110
|
-
],
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
(_a = viewInStack.views[0]) === null || _a === void 0 ? void 0 : _a.setDisplayedRegions(snap.views[0].displayedRegions);
|
|
115
|
-
viewInStack.setDisplayName(snap.displayName);
|
|
116
|
-
}
|
|
117
|
-
const lgv = viewInStack.views[0];
|
|
118
|
-
await (0, util_1.when)(() => lgv.initialized);
|
|
119
|
-
const l0 = lgv.bpToPx({
|
|
120
|
-
coord: Math.max(0, startPos - windowSize),
|
|
121
|
-
refName,
|
|
122
|
-
});
|
|
123
|
-
const r0 = lgv.bpToPx({
|
|
124
|
-
coord: endPos + windowSize,
|
|
125
|
-
refName: mateRefName,
|
|
126
|
-
});
|
|
127
|
-
if (l0 && r0) {
|
|
128
|
-
lgv.moveTo({ ...l0, offset: l0.offsetPx }, { ...r0, offset: r0.offsetPx });
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
(0, util_1.getSession)(lgv).notify('Unable to navigate to breakpoint');
|
|
132
|
-
}
|
|
50
|
+
function stripIds(arr) {
|
|
51
|
+
return arr.map(({ id, displays, ...rest }) => ({
|
|
52
|
+
...rest,
|
|
53
|
+
displays: displays.map(({ id, ...rest }) => rest),
|
|
54
|
+
}));
|
|
133
55
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const { assemblyManager } = session;
|
|
137
|
-
const assembly = assemblyManager.get(assemblyName);
|
|
138
|
-
if (!assembly) {
|
|
139
|
-
throw new Error(`assembly ${assemblyName} not found`);
|
|
140
|
-
}
|
|
141
|
-
if (!assembly.regions) {
|
|
142
|
-
throw new Error(`assembly ${assemblyName} regions not loaded`);
|
|
143
|
-
}
|
|
144
|
-
const { refName, pos: startPos, mateRefName, matePos: endPos, } = getBreakendCoveringRegions({
|
|
145
|
-
feature,
|
|
146
|
-
assembly,
|
|
147
|
-
});
|
|
148
|
-
const topRegion = assembly.regions.find(f => f.refName === refName);
|
|
149
|
-
const bottomRegion = assembly.regions.find(f => f.refName === mateRefName);
|
|
150
|
-
const topMarkedRegion = [{ ...topRegion }, { ...topRegion }];
|
|
151
|
-
const bottomMarkedRegion = [{ ...bottomRegion }, { ...bottomRegion }];
|
|
152
|
-
topMarkedRegion[0].end = startPos;
|
|
153
|
-
topMarkedRegion[1].start = startPos;
|
|
154
|
-
bottomMarkedRegion[0].end = endPos;
|
|
155
|
-
bottomMarkedRegion[1].start = endPos;
|
|
156
|
-
const snap = {
|
|
157
|
-
type: 'BreakpointSplitView',
|
|
158
|
-
views: [
|
|
159
|
-
{
|
|
160
|
-
type: 'LinearGenomeView',
|
|
161
|
-
displayedRegions: topMarkedRegion,
|
|
162
|
-
hideHeader: true,
|
|
163
|
-
bpPerPx,
|
|
164
|
-
offsetPx: (topRegion.start + feature.get('start')) / bpPerPx,
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
type: 'LinearGenomeView',
|
|
168
|
-
displayedRegions: bottomMarkedRegion,
|
|
169
|
-
hideHeader: true,
|
|
170
|
-
bpPerPx,
|
|
171
|
-
tracks,
|
|
172
|
-
offsetPx: (bottomRegion.start + endPos) / bpPerPx,
|
|
173
|
-
},
|
|
174
|
-
],
|
|
175
|
-
displayName: `${feature.get('name') || feature.get('id') || 'breakend'} split detail`,
|
|
176
|
-
};
|
|
177
|
-
let viewInStack = session.views.find(f => f.id === stableViewId);
|
|
178
|
-
if (!viewInStack) {
|
|
179
|
-
viewInStack = session.addView('BreakpointSplitView', {
|
|
180
|
-
...snap,
|
|
181
|
-
id: stableViewId,
|
|
182
|
-
views: [
|
|
183
|
-
{
|
|
184
|
-
...snap.views[0],
|
|
185
|
-
tracks: tracks ? stripIds((0, mobx_state_tree_1.getSnapshot)(tracks)) : [],
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
...snap.views[1],
|
|
189
|
-
tracks: (tracks ? stripIds((0, mobx_state_tree_1.getSnapshot)(tracks)) : []).reverse(),
|
|
190
|
-
},
|
|
191
|
-
],
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
(0, mobx_1.transaction)(() => {
|
|
196
|
-
for (let i = 0; i < viewInStack.views.length; i++) {
|
|
197
|
-
const s = snap.views[i];
|
|
198
|
-
if (s) {
|
|
199
|
-
viewInStack.views[i].setDisplayedRegions(s.displayedRegions);
|
|
200
|
-
viewInStack.views[i].scrollTo(s.offsetPx - 800);
|
|
201
|
-
viewInStack.views[i].zoomTo(s.bpPerPx);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
viewInStack.setDisplayName(snap.displayName);
|
|
205
|
-
});
|
|
206
|
-
}
|
|
56
|
+
function makeTitle(f) {
|
|
57
|
+
return `${f.get('name') || f.get('id') || 'breakend'} split detail`;
|
|
207
58
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import type { AbstractSessionModel, Feature } from '@jbrowse/core/util';
|
|
3
2
|
import type { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
|
|
4
3
|
declare const BreakendMultiLevelOptionDialog: ({ session, handleClose, feature, assemblyName, stableViewId, view, }: {
|
|
@@ -8,5 +7,5 @@ declare const BreakendMultiLevelOptionDialog: ({ session, handleClose, feature,
|
|
|
8
7
|
view?: LinearGenomeViewModel;
|
|
9
8
|
assemblyName: string;
|
|
10
9
|
stableViewId?: string;
|
|
11
|
-
}) =>
|
|
10
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
12
11
|
export default BreakendMultiLevelOptionDialog;
|
|
@@ -1,120 +1,41 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
2
3
|
import { Dialog } from '@jbrowse/core/ui';
|
|
3
4
|
import { Button, DialogActions, DialogContent } from '@mui/material';
|
|
4
|
-
import { when } from 'mobx';
|
|
5
5
|
import { observer } from 'mobx-react';
|
|
6
6
|
import { getSnapshot } from 'mobx-state-tree';
|
|
7
7
|
import Checkbox2 from './Checkbox2';
|
|
8
|
-
import {
|
|
9
|
-
function stripIds(arr) {
|
|
10
|
-
return arr.map(({ id, displays, ...rest }) => ({
|
|
11
|
-
...rest,
|
|
12
|
-
displays: displays.map(({ id, ...rest }) => rest),
|
|
13
|
-
}));
|
|
14
|
-
}
|
|
8
|
+
import { navToMultiLevelBreak } from './navToMultiLevelBreak';
|
|
15
9
|
const BreakendMultiLevelOptionDialog = observer(function ({ session, handleClose, feature, assemblyName, stableViewId, view, }) {
|
|
16
10
|
const [copyTracks, setCopyTracks] = useState(true);
|
|
17
11
|
const [mirror, setMirror] = useState(true);
|
|
18
|
-
return (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const assembly = await assemblyManager.waitForAssembly(assemblyName);
|
|
35
|
-
if (!assembly) {
|
|
36
|
-
throw new Error(`assembly ${assemblyName} not found`);
|
|
37
|
-
}
|
|
38
|
-
const { refName, pos, mateRefName, matePos } = getBreakendCoveringRegions({
|
|
39
|
-
feature,
|
|
40
|
-
assembly: assembly,
|
|
41
|
-
});
|
|
42
|
-
const viewTracks = view
|
|
43
|
-
? getSnapshot(view.tracks)
|
|
44
|
-
: [];
|
|
45
|
-
let viewInStack = session.views.find(f => f.id === stableViewId);
|
|
46
|
-
const displayName = `${feature.get('name') || feature.get('id') || 'breakend'} split detail`;
|
|
47
|
-
if (!viewInStack) {
|
|
48
|
-
viewInStack = session.addView('BreakpointSplitView', {
|
|
49
|
-
id: stableViewId,
|
|
50
|
-
type: 'BreakpointSplitView',
|
|
51
|
-
displayName,
|
|
52
|
-
views: [
|
|
53
|
-
{
|
|
54
|
-
type: 'LinearGenomeView',
|
|
55
|
-
hideHeader: true,
|
|
56
|
-
tracks: stripIds(viewTracks),
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
type: 'LinearGenomeView',
|
|
60
|
-
hideHeader: true,
|
|
61
|
-
tracks: stripIds(mirror ? [...viewTracks].reverse() : viewTracks),
|
|
62
|
-
},
|
|
63
|
-
],
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
viewInStack.setDisplayName(displayName);
|
|
67
|
-
const r1 = assembly.regions.find(r => r.refName === refName);
|
|
68
|
-
const r2 = assembly.regions.find(r => r.refName === mateRefName);
|
|
69
|
-
if (!r1 || !r2) {
|
|
70
|
-
throw new Error("can't find regions");
|
|
71
|
-
}
|
|
72
|
-
await Promise.all([
|
|
73
|
-
viewInStack.views[0].navToLocations([
|
|
74
|
-
{
|
|
75
|
-
refName,
|
|
76
|
-
start: r1.start,
|
|
77
|
-
end: pos,
|
|
12
|
+
return (_jsxs(Dialog, { open: true, onClose: handleClose, title: "Multi-level breakpoint split view options", children: [_jsxs(DialogContent, { children: [_jsx("div", { children: "Launch multi-level breakpoint split view" }), view ? (_jsxs(_Fragment, { children: [_jsx(Checkbox2, { checked: copyTracks, label: "Copy tracks into the new view", onChange: event => {
|
|
13
|
+
setCopyTracks(event.target.checked);
|
|
14
|
+
} }), copyTracks ? (_jsx(Checkbox2, { checked: mirror, disabled: !copyTracks, label: "Mirror the copied tracks (only available if copying tracks and using two level)", onChange: event => {
|
|
15
|
+
setMirror(event.target.checked);
|
|
16
|
+
} })) : null] })) : null] }), _jsxs(DialogActions, { children: [_jsx(Button, { onClick: () => {
|
|
17
|
+
;
|
|
18
|
+
(async () => {
|
|
19
|
+
try {
|
|
20
|
+
await navToMultiLevelBreak({
|
|
21
|
+
stableViewId,
|
|
22
|
+
session,
|
|
23
|
+
tracks: copyTracks && view
|
|
24
|
+
? getSnapshot(view.tracks)
|
|
25
|
+
: [],
|
|
26
|
+
mirror,
|
|
27
|
+
feature,
|
|
78
28
|
assemblyName,
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
start: r2.start,
|
|
91
|
-
end: matePos,
|
|
92
|
-
assemblyName,
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
refName: mateRefName,
|
|
96
|
-
start: matePos + 1,
|
|
97
|
-
end: r2.end,
|
|
98
|
-
assemblyName,
|
|
99
|
-
},
|
|
100
|
-
]),
|
|
101
|
-
]);
|
|
102
|
-
await when(() => viewInStack.views[1].initialized &&
|
|
103
|
-
viewInStack.views[0].initialized);
|
|
104
|
-
viewInStack.views[1].zoomTo(10);
|
|
105
|
-
viewInStack.views[0].zoomTo(10);
|
|
106
|
-
viewInStack.views[1].centerAt(matePos, mateRefName);
|
|
107
|
-
viewInStack.views[0].centerAt(pos, refName);
|
|
108
|
-
}
|
|
109
|
-
catch (e) {
|
|
110
|
-
console.error(e);
|
|
111
|
-
session.notifyError(`${e}`, e);
|
|
112
|
-
}
|
|
113
|
-
})();
|
|
114
|
-
handleClose();
|
|
115
|
-
}, variant: "contained", color: "primary", autoFocus: true }, "OK"),
|
|
116
|
-
React.createElement(Button, { color: "secondary", variant: "contained", onClick: () => {
|
|
117
|
-
handleClose();
|
|
118
|
-
} }, "Cancel"))));
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
console.error(e);
|
|
33
|
+
session.notifyError(`${e}`, e);
|
|
34
|
+
}
|
|
35
|
+
})();
|
|
36
|
+
handleClose();
|
|
37
|
+
}, variant: "contained", color: "primary", autoFocus: true, children: "OK" }), _jsx(Button, { color: "secondary", variant: "contained", onClick: () => {
|
|
38
|
+
handleClose();
|
|
39
|
+
}, children: "Cancel" })] })] }));
|
|
119
40
|
});
|
|
120
41
|
export default BreakendMultiLevelOptionDialog;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import type { AbstractSessionModel, Feature } from '@jbrowse/core/util';
|
|
3
2
|
import type { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
|
|
4
3
|
declare const BreakendSingleLevelOptionDialog: ({ session, handleClose, feature, stableViewId, assemblyName, view, }: {
|
|
@@ -8,5 +7,5 @@ declare const BreakendSingleLevelOptionDialog: ({ session, handleClose, feature,
|
|
|
8
7
|
feature: Feature;
|
|
9
8
|
view?: LinearGenomeViewModel;
|
|
10
9
|
assemblyName: string;
|
|
11
|
-
}) =>
|
|
10
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
12
11
|
export default BreakendSingleLevelOptionDialog;
|
|
@@ -1,49 +1,48 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
2
3
|
import { Dialog } from '@jbrowse/core/ui';
|
|
3
4
|
import { useLocalStorage } from '@jbrowse/core/util';
|
|
4
5
|
import { Button, DialogActions, DialogContent, TextField } from '@mui/material';
|
|
5
6
|
import { observer } from 'mobx-react';
|
|
6
7
|
import Checkbox2 from './Checkbox2';
|
|
7
|
-
import { navToSingleLevelBreak } from './
|
|
8
|
+
import { navToSingleLevelBreak } from './navToSingleLevelBreak';
|
|
8
9
|
const BreakendSingleLevelOptionDialog = observer(function ({ session, handleClose, feature, stableViewId, assemblyName, view, }) {
|
|
9
10
|
const [copyTracks, setCopyTracks] = useState(true);
|
|
11
|
+
const [focusOnBreakends, setFocusOnBreakends] = useState(true);
|
|
10
12
|
const [windowSize, setWindowSize] = useLocalStorage('breakpointWindowSize', '5000');
|
|
11
|
-
return (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
React.createElement(Button, { color: "secondary", variant: "contained", onClick: () => {
|
|
46
|
-
handleClose();
|
|
47
|
-
} }, "Cancel"))));
|
|
13
|
+
return (_jsxs(Dialog, { open: true, onClose: handleClose, title: "Single-level breakpoint split view options", children: [_jsxs(DialogContent, { children: [view ? (_jsx(Checkbox2, { checked: copyTracks, label: "Copy tracks into the new view", onChange: event => {
|
|
14
|
+
setCopyTracks(event.target.checked);
|
|
15
|
+
} })) : null, _jsx(Checkbox2, { checked: copyTracks, label: "Focus on breakends", onChange: event => {
|
|
16
|
+
setFocusOnBreakends(event.target.checked);
|
|
17
|
+
} }), _jsx(TextField, { label: "Window size (bp)", value: windowSize, onChange: event => {
|
|
18
|
+
setWindowSize(event.target.value);
|
|
19
|
+
} })] }), _jsxs(DialogActions, { children: [_jsx(Button, { onClick: () => {
|
|
20
|
+
;
|
|
21
|
+
(async () => {
|
|
22
|
+
try {
|
|
23
|
+
const { assemblyManager } = session;
|
|
24
|
+
const assembly = await assemblyManager.waitForAssembly(assemblyName);
|
|
25
|
+
if (!assembly) {
|
|
26
|
+
throw new Error(`assembly ${assemblyName} not found`);
|
|
27
|
+
}
|
|
28
|
+
await navToSingleLevelBreak({
|
|
29
|
+
feature,
|
|
30
|
+
assemblyName,
|
|
31
|
+
focusOnBreakends,
|
|
32
|
+
session,
|
|
33
|
+
stableViewId,
|
|
34
|
+
tracks: view === null || view === void 0 ? void 0 : view.tracks,
|
|
35
|
+
windowSize: +windowSize || 0,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
console.error(e);
|
|
40
|
+
session.notifyError(`${e}`, e);
|
|
41
|
+
}
|
|
42
|
+
})();
|
|
43
|
+
handleClose();
|
|
44
|
+
}, variant: "contained", color: "primary", autoFocus: true, children: "OK" }), _jsx(Button, { color: "secondary", variant: "contained", onClick: () => {
|
|
45
|
+
handleClose();
|
|
46
|
+
}, children: "Cancel" })] })] }));
|
|
48
47
|
});
|
|
49
48
|
export default BreakendSingleLevelOptionDialog;
|
package/esm/Checkbox2.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
export default function Checkbox2({ checked, disabled, label, onChange, }: {
|
|
3
2
|
checked: boolean;
|
|
4
3
|
disabled?: boolean;
|
|
5
4
|
label: string;
|
|
6
5
|
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
7
|
-
}):
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
package/esm/Checkbox2.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Checkbox, FormControlLabel } from '@mui/material';
|
|
3
3
|
import { makeStyles } from 'tss-react/mui';
|
|
4
4
|
const useStyles = makeStyles()({
|
|
@@ -8,5 +8,5 @@ const useStyles = makeStyles()({
|
|
|
8
8
|
});
|
|
9
9
|
export default function Checkbox2({ checked, disabled, label, onChange, }) {
|
|
10
10
|
const { classes } = useStyles();
|
|
11
|
-
return (
|
|
11
|
+
return (_jsx(FormControlLabel, { disabled: disabled, className: classes.block, control: _jsx(Checkbox, { checked: checked, onChange: onChange }), label: label }));
|
|
12
12
|
}
|
package/esm/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { default as BreakendMultiLevelOptionDialog } from './BreakendMultiLevelOptionDialog';
|
|
2
2
|
export { default as BreakendSingleLevelOptionDialog } from './BreakendSingleLevelOptionDialog';
|
|
3
3
|
export * from './util';
|
|
4
|
+
export * from './navToSingleLevelBreak';
|
|
5
|
+
export * from './navToMultiLevelBreak';
|
package/esm/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { default as BreakendMultiLevelOptionDialog } from './BreakendMultiLevelOptionDialog';
|
|
2
2
|
export { default as BreakendSingleLevelOptionDialog } from './BreakendSingleLevelOptionDialog';
|
|
3
3
|
export * from './util';
|
|
4
|
+
export * from './navToSingleLevelBreak';
|
|
5
|
+
export * from './navToMultiLevelBreak';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Track } from './types';
|
|
2
|
+
import type { AbstractSessionModel, Feature } from '@jbrowse/core/util';
|
|
3
|
+
export declare function navToMultiLevelBreak({ stableViewId, feature, assemblyName, session, mirror, tracks: viewTracks, }: {
|
|
4
|
+
stableViewId?: string;
|
|
5
|
+
feature: Feature;
|
|
6
|
+
assemblyName: string;
|
|
7
|
+
windowSize?: number;
|
|
8
|
+
session: AbstractSessionModel;
|
|
9
|
+
mirror?: boolean;
|
|
10
|
+
tracks?: Track[];
|
|
11
|
+
}): Promise<void>;
|