jbrowse-plugin-msaview 2.2.3 → 2.2.5
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/CHANGELOG.md +1 -1
- package/README.md +229 -0
- package/dist/AddHighlightModel/GenomeMouseoverHighlight.js +23 -18
- package/dist/AddHighlightModel/GenomeMouseoverHighlight.js.map +1 -1
- package/dist/AddHighlightModel/MsaToGenomeHighlight.js +23 -13
- package/dist/AddHighlightModel/MsaToGenomeHighlight.js.map +1 -1
- package/dist/AddHighlightModel/index.js +8 -1
- package/dist/AddHighlightModel/index.js.map +1 -1
- package/dist/AddHighlightModel/util.d.ts +2 -2
- package/dist/BgzipFastaMsaAdapter/configSchema.d.ts +2 -2
- package/dist/LaunchMsaView/components/EnsemblGeneTree/EnsemblGeneTree.js +5 -11
- package/dist/LaunchMsaView/components/EnsemblGeneTree/EnsemblGeneTree.js.map +1 -1
- package/dist/LaunchMsaView/components/EnsemblGeneTree/useGeneTree.js +5 -1
- package/dist/LaunchMsaView/components/EnsemblGeneTree/useGeneTree.js.map +1 -1
- package/dist/LaunchMsaView/components/LaunchMsaViewDialog.js +16 -16
- package/dist/LaunchMsaView/components/LaunchMsaViewDialog.js.map +1 -1
- package/dist/LaunchMsaView/components/ManualMSALoader/ManualMSALoader.js +38 -46
- package/dist/LaunchMsaView/components/ManualMSALoader/ManualMSALoader.js.map +1 -1
- package/dist/LaunchMsaView/components/ManualMSALoader/launchView.d.ts +4 -3
- package/dist/LaunchMsaView/components/ManualMSALoader/launchView.js +4 -3
- package/dist/LaunchMsaView/components/ManualMSALoader/launchView.js.map +1 -1
- package/dist/LaunchMsaView/components/NCBIBlastQuery/CachedBlastResults.d.ts +9 -0
- package/dist/LaunchMsaView/components/NCBIBlastQuery/CachedBlastResults.js +76 -0
- package/dist/LaunchMsaView/components/NCBIBlastQuery/CachedBlastResults.js.map +1 -0
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastAutomaticPanel.js +35 -13
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastAutomaticPanel.js.map +1 -1
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastManualPanel.js +6 -12
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastManualPanel.js.map +1 -1
- package/dist/LaunchMsaView/components/NCBIBlastQuery/blastLaunchView.d.ts +6 -0
- package/dist/LaunchMsaView/components/NCBIBlastQuery/blastLaunchView.js +15 -0
- package/dist/LaunchMsaView/components/NCBIBlastQuery/blastLaunchView.js.map +1 -1
- package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js +12 -34
- package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js.map +1 -1
- package/dist/LaunchMsaView/components/PreLoadedMSA/consts.d.ts +1 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/consts.js +1 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/consts.js.map +1 -1
- package/dist/LaunchMsaView/components/TabPanel.d.ts +2 -2
- package/dist/LaunchMsaView/components/TranscriptSelector.d.ts +2 -2
- package/dist/LaunchMsaView/components/TranscriptSelector.js +3 -6
- package/dist/LaunchMsaView/components/TranscriptSelector.js.map +1 -1
- package/dist/LaunchMsaView/components/useSWRFeatureSequence.js +6 -4
- package/dist/LaunchMsaView/components/useSWRFeatureSequence.js.map +1 -1
- package/dist/LaunchMsaView/components/useTranscriptSelection.d.ts +16 -0
- package/dist/LaunchMsaView/components/useTranscriptSelection.js +31 -0
- package/dist/LaunchMsaView/components/useTranscriptSelection.js.map +1 -0
- package/dist/LaunchMsaView/components/util.d.ts +3 -1
- package/dist/LaunchMsaView/components/util.js +12 -2
- package/dist/LaunchMsaView/components/util.js.map +1 -1
- package/dist/LaunchMsaView/util.d.ts +2 -0
- package/dist/LaunchMsaView/util.js +16 -4
- package/dist/LaunchMsaView/util.js.map +1 -1
- package/dist/LaunchMsaViewExtensionPoint/index.d.ts +2 -0
- package/dist/LaunchMsaViewExtensionPoint/index.js +31 -0
- package/dist/LaunchMsaViewExtensionPoint/index.js.map +1 -0
- package/dist/MsaViewPanel/components/ConnectStructureDialog.d.ts +7 -0
- package/dist/MsaViewPanel/components/ConnectStructureDialog.js +56 -0
- package/dist/MsaViewPanel/components/ConnectStructureDialog.js.map +1 -0
- package/dist/MsaViewPanel/components/MsaViewPanel.js +4 -2
- package/dist/MsaViewPanel/components/MsaViewPanel.js.map +1 -1
- package/dist/MsaViewPanel/doLaunchBlast.d.ts +1 -0
- package/dist/MsaViewPanel/doLaunchBlast.js +65 -19
- package/dist/MsaViewPanel/doLaunchBlast.js.map +1 -1
- package/dist/MsaViewPanel/genomeToMSA.d.ts +6 -0
- package/dist/MsaViewPanel/genomeToMSA.js +38 -8
- package/dist/MsaViewPanel/genomeToMSA.js.map +1 -1
- package/dist/MsaViewPanel/genomeToMSA.test.d.ts +1 -0
- package/dist/MsaViewPanel/genomeToMSA.test.js +244 -0
- package/dist/MsaViewPanel/genomeToMSA.test.js.map +1 -0
- package/dist/MsaViewPanel/model.d.ts +719 -226
- package/dist/MsaViewPanel/model.js +467 -39
- package/dist/MsaViewPanel/model.js.map +1 -1
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.d.ts +7 -2
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.js +26 -27
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.js.map +1 -1
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.test.d.ts +1 -0
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.test.js +240 -0
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.test.js.map +1 -0
- package/dist/MsaViewPanel/msaDataStore.d.ts +14 -0
- package/dist/MsaViewPanel/msaDataStore.js +197 -0
- package/dist/MsaViewPanel/msaDataStore.js.map +1 -0
- package/dist/MsaViewPanel/pairwiseAlignment.d.ts +27 -0
- package/dist/MsaViewPanel/pairwiseAlignment.js +776 -0
- package/dist/MsaViewPanel/pairwiseAlignment.js.map +1 -0
- package/dist/MsaViewPanel/pairwiseAlignment.test.d.ts +1 -0
- package/dist/MsaViewPanel/pairwiseAlignment.test.js +112 -0
- package/dist/MsaViewPanel/pairwiseAlignment.test.js.map +1 -0
- package/dist/MsaViewPanel/structureConnection.d.ts +27 -0
- package/dist/MsaViewPanel/structureConnection.js +46 -0
- package/dist/MsaViewPanel/structureConnection.js.map +1 -0
- package/dist/MsaViewPanel/structureConnection.test.d.ts +1 -0
- package/dist/MsaViewPanel/structureConnection.test.js +122 -0
- package/dist/MsaViewPanel/structureConnection.test.js.map +1 -0
- package/dist/MsaViewPanel/types.d.ts +13 -0
- package/dist/MsaViewPanel/types.js +2 -0
- package/dist/MsaViewPanel/types.js.map +1 -0
- package/dist/MsaViewPanel/util.d.ts +7 -0
- package/dist/MsaViewPanel/util.js +10 -0
- package/dist/MsaViewPanel/util.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/jbrowse-plugin-msaview.umd.production.min.js +39 -90
- package/dist/jbrowse-plugin-msaview.umd.production.min.js.map +4 -4
- package/dist/utils/blastCache.d.ts +34 -0
- package/dist/utils/blastCache.js +58 -0
- package/dist/utils/blastCache.js.map +1 -0
- package/dist/utils/fetch.d.ts +1 -1
- package/dist/utils/fetch.js +1 -1
- package/dist/utils/fetch.js.map +1 -1
- package/dist/utils/ncbiBlast.d.ts +1 -5
- package/dist/utils/taxonomyNames.d.ts +5 -0
- package/dist/utils/taxonomyNames.js +79 -0
- package/dist/utils/taxonomyNames.js.map +1 -0
- package/dist/utils/types.d.ts +8 -5
- package/package.json +50 -54
- package/src/AddHighlightModel/GenomeMouseoverHighlight.tsx +37 -21
- package/src/AddHighlightModel/MsaToGenomeHighlight.tsx +38 -17
- package/src/AddHighlightModel/index.tsx +9 -4
- package/src/LaunchMsaView/components/EnsemblGeneTree/EnsemblGeneTree.tsx +13 -13
- package/src/LaunchMsaView/components/EnsemblGeneTree/useGeneTree.ts +6 -0
- package/src/LaunchMsaView/components/LaunchMsaViewDialog.tsx +30 -23
- package/src/LaunchMsaView/components/ManualMSALoader/ManualMSALoader.tsx +64 -51
- package/src/LaunchMsaView/components/ManualMSALoader/launchView.ts +9 -6
- package/src/LaunchMsaView/components/NCBIBlastQuery/CachedBlastResults.tsx +146 -0
- package/src/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastAutomaticPanel.tsx +53 -22
- package/src/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastManualPanel.tsx +8 -13
- package/src/LaunchMsaView/components/NCBIBlastQuery/blastLaunchView.ts +25 -0
- package/src/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.tsx +27 -47
- package/src/LaunchMsaView/components/PreLoadedMSA/consts.ts +1 -0
- package/src/LaunchMsaView/components/TabPanel.tsx +2 -2
- package/src/LaunchMsaView/components/TranscriptSelector.tsx +13 -20
- package/src/LaunchMsaView/components/useSWRFeatureSequence.ts +5 -5
- package/src/LaunchMsaView/components/useTranscriptSelection.ts +48 -0
- package/src/LaunchMsaView/components/util.ts +17 -2
- package/src/LaunchMsaView/index.ts +1 -1
- package/src/LaunchMsaView/util.ts +25 -6
- package/src/LaunchMsaViewExtensionPoint/index.ts +74 -0
- package/src/MsaViewPanel/components/ConnectStructureDialog.tsx +156 -0
- package/src/MsaViewPanel/components/MsaViewPanel.tsx +6 -1
- package/src/MsaViewPanel/doLaunchBlast.ts +83 -23
- package/src/MsaViewPanel/genomeToMSA.test.ts +281 -0
- package/src/MsaViewPanel/genomeToMSA.ts +43 -10
- package/src/MsaViewPanel/model.ts +590 -43
- package/src/MsaViewPanel/msaCoordToGenomeCoord.test.ts +256 -0
- package/src/MsaViewPanel/msaCoordToGenomeCoord.ts +43 -29
- package/src/MsaViewPanel/msaDataStore.ts +236 -0
- package/src/MsaViewPanel/pairwiseAlignment.test.ts +140 -0
- package/src/MsaViewPanel/pairwiseAlignment.ts +818 -0
- package/src/MsaViewPanel/structureConnection.test.ts +143 -0
- package/src/MsaViewPanel/structureConnection.ts +72 -0
- package/src/MsaViewPanel/types.ts +14 -0
- package/src/MsaViewPanel/util.ts +11 -0
- package/src/index.ts +3 -1
- package/src/utils/blastCache.ts +114 -0
- package/src/utils/fetch.ts +1 -1
- package/src/utils/taxonomyNames.ts +111 -0
- package/src/utils/types.ts +9 -1
- package/dist/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.d.ts +0 -5
- package/dist/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.js +0 -16
- package/dist/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.js.map +0 -1
- package/dist/out.js +0 -55381
- package/src/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.ts +0 -25
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
2
|
import { ErrorMessage, FileSelector } from '@jbrowse/core/ui';
|
|
3
3
|
import { getContainingView, getSession, } from '@jbrowse/core/util';
|
|
4
|
-
import {
|
|
5
|
-
import { Button, DialogActions, DialogContent, FormControl, FormControlLabel, Radio, RadioGroup, } from '@mui/material';
|
|
4
|
+
import { Alert, Button, DialogActions, DialogContent, FormControl, FormControlLabel, Radio, RadioGroup, } from '@mui/material';
|
|
6
5
|
import { observer } from 'mobx-react';
|
|
7
6
|
import { makeStyles } from 'tss-react/mui';
|
|
8
7
|
import { launchView } from './launchView';
|
|
9
8
|
import TextField2 from '../../../components/TextField2';
|
|
10
|
-
import { getGeneDisplayName
|
|
9
|
+
import { getGeneDisplayName } from '../../util';
|
|
11
10
|
import TranscriptSelector from '../TranscriptSelector';
|
|
12
|
-
import {
|
|
11
|
+
import { useTranscriptSelection } from '../useTranscriptSelection';
|
|
13
12
|
const useStyles = makeStyles()({
|
|
14
13
|
dialogContent: {
|
|
15
14
|
width: '80em',
|
|
@@ -28,14 +27,8 @@ const ManualMSALoader = observer(function PreLoadedMSA2({ model, feature, handle
|
|
|
28
27
|
const [treeText, setTreeText] = useState('');
|
|
29
28
|
const [msaFileLocation, setMsaFileLocation] = useState();
|
|
30
29
|
const [treeFileLocation, setTreeFileLocation] = useState();
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const ret = options.find(val => userSelection === getId(val));
|
|
34
|
-
const selectedTranscript = options.find(val => getId(val) === userSelection);
|
|
35
|
-
const { proteinSequence, error: error2 } = useFeatureSequence({
|
|
36
|
-
view,
|
|
37
|
-
feature: selectedTranscript,
|
|
38
|
-
});
|
|
30
|
+
const [querySeqName, setQuerySeqName] = useState('');
|
|
31
|
+
const { options, setSelectedId, selectedTranscript, proteinSequence, error: error2, } = useTranscriptSelection({ feature, view });
|
|
39
32
|
const e = launchViewError ?? error2;
|
|
40
33
|
return (React.createElement(React.Fragment, null,
|
|
41
34
|
React.createElement(DialogContent, { className: classes.dialogContent },
|
|
@@ -55,45 +48,44 @@ const ManualMSALoader = observer(function PreLoadedMSA2({ model, feature, handle
|
|
|
55
48
|
React.createElement(TextField2, { variant: "outlined", name: "Tree", multiline: true, minRows: 5, maxRows: 10, fullWidth: true, placeholder: "Paste newick tree (optional)", value: treeText, onChange: event => {
|
|
56
49
|
setTreeText(event.target.value);
|
|
57
50
|
} })))),
|
|
58
|
-
React.createElement(TranscriptSelector, { feature: feature, options: options,
|
|
51
|
+
React.createElement(TranscriptSelector, { feature: feature, options: options, selectedTranscript: selectedTranscript, onTranscriptChange: setSelectedId, proteinSequence: proteinSequence }),
|
|
52
|
+
React.createElement(TextField2, { variant: "outlined", name: "MSA row name", fullWidth: true, required: true, style: { marginTop: 20 }, placeholder: "Row name in MSA that corresponds to the selected transcript", helperText: "Required: Specify the name of the row in your MSA that should be aligned with the selected transcript", value: querySeqName, onChange: event => {
|
|
53
|
+
setQuerySeqName(event.target.value);
|
|
54
|
+
} }),
|
|
55
|
+
!querySeqName.trim() && (React.createElement(Alert, { severity: "warning", style: { marginTop: 10 } }, "Without specifying the MSA row name, clicking on the MSA will not navigate to the corresponding genome position, and hovering highlights will not work."))),
|
|
59
56
|
React.createElement(DialogActions, null,
|
|
60
|
-
React.createElement(Button, { color: "primary", variant: "contained", disabled: !
|
|
57
|
+
React.createElement(Button, { color: "primary", variant: "contained", disabled: !selectedTranscript ||
|
|
61
58
|
(inputMethod === 'file' && !msaFileLocation) ||
|
|
62
59
|
(inputMethod === 'text' && !msaText.trim()), onClick: () => {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
tree: treeFileLocation
|
|
82
|
-
? await openLocation(treeFileLocation).readFile('utf8')
|
|
83
|
-
: undefined,
|
|
84
|
-
}
|
|
85
|
-
: {
|
|
60
|
+
try {
|
|
61
|
+
if (!selectedTranscript) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
setLaunchViewError(undefined);
|
|
65
|
+
launchView({
|
|
66
|
+
session,
|
|
67
|
+
newViewTitle: getGeneDisplayName(selectedTranscript),
|
|
68
|
+
view,
|
|
69
|
+
feature: selectedTranscript,
|
|
70
|
+
querySeqName: querySeqName.trim() || undefined,
|
|
71
|
+
...(inputMethod === 'file'
|
|
72
|
+
? {
|
|
73
|
+
msaFilehandle: msaFileLocation,
|
|
74
|
+
treeFilehandle: treeFileLocation,
|
|
75
|
+
}
|
|
76
|
+
: {
|
|
77
|
+
data: {
|
|
86
78
|
msa: msaText,
|
|
87
|
-
tree: treeText,
|
|
79
|
+
tree: treeText || undefined,
|
|
88
80
|
},
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
81
|
+
}),
|
|
82
|
+
});
|
|
83
|
+
handleClose();
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
console.error(e);
|
|
87
|
+
setLaunchViewError(e);
|
|
88
|
+
}
|
|
97
89
|
} }, "Submit"),
|
|
98
90
|
React.createElement(Button, { color: "secondary", variant: "contained", onClick: () => {
|
|
99
91
|
handleClose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManualMSALoader.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/ManualMSALoader/ManualMSALoader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAIL,iBAAiB,EACjB,UAAU,GACX,MAAM,oBAAoB,CAAA;AAC3B,OAAO,
|
|
1
|
+
{"version":3,"file":"ManualMSALoader.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/ManualMSALoader/ManualMSALoader.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { AbstractSessionModel, Feature, FileLocation } from '@jbrowse/core/util';
|
|
2
2
|
import type { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
|
|
3
|
-
export declare function launchView({ session, newViewTitle, view, feature,
|
|
3
|
+
export declare function launchView({ session, newViewTitle, view, feature, msaFilehandle, treeFilehandle, querySeqName, data, }: {
|
|
4
4
|
session: AbstractSessionModel;
|
|
5
5
|
newViewTitle: string;
|
|
6
6
|
view: LinearGenomeViewModel;
|
|
7
7
|
feature: Feature;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
msaFilehandle?: FileLocation;
|
|
9
|
+
treeFilehandle?: FileLocation;
|
|
10
|
+
querySeqName?: string;
|
|
10
11
|
data?: {
|
|
11
12
|
msa: string;
|
|
12
13
|
tree?: string;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
export function launchView({ session, newViewTitle, view, feature,
|
|
1
|
+
export function launchView({ session, newViewTitle, view, feature, msaFilehandle, treeFilehandle, querySeqName, data, }) {
|
|
2
2
|
session.addView('MsaView', {
|
|
3
3
|
type: 'MsaView',
|
|
4
4
|
displayName: newViewTitle,
|
|
5
5
|
connectedViewId: view.id,
|
|
6
6
|
connectedFeature: feature.toJSON(),
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
msaFilehandle,
|
|
8
|
+
treeFilehandle,
|
|
9
|
+
querySeqName,
|
|
9
10
|
data,
|
|
10
11
|
});
|
|
11
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launchView.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/ManualMSALoader/launchView.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,
|
|
1
|
+
{"version":3,"file":"launchView.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/ManualMSALoader/launchView.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,aAAa,EACb,cAAc,EACd,YAAY,EACZ,IAAI,GAaL;IACC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE;QACzB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,YAAY;QACzB,eAAe,EAAE,IAAI,CAAC,EAAE;QACxB,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE;QAClC,aAAa;QACb,cAAc;QACd,YAAY;QACZ,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Feature } from '@jbrowse/core/util';
|
|
3
|
+
import type { AbstractTrackModel } from '@jbrowse/core/util';
|
|
4
|
+
declare const CachedBlastResults: ({ model, handleClose, feature, }: {
|
|
5
|
+
model: AbstractTrackModel;
|
|
6
|
+
handleClose: () => void;
|
|
7
|
+
feature: Feature;
|
|
8
|
+
}) => React.JSX.Element;
|
|
9
|
+
export default CachedBlastResults;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { getContainingView } from '@jbrowse/core/util';
|
|
3
|
+
import DeleteIcon from '@mui/icons-material/Delete';
|
|
4
|
+
import { Button, IconButton, List, ListItem, ListItemButton, ListItemText, Typography, } from '@mui/material';
|
|
5
|
+
import { observer } from 'mobx-react';
|
|
6
|
+
import { blastLaunchViewFromCache } from './blastLaunchView';
|
|
7
|
+
import { clearAllCachedResults, deleteCachedResult, getAllCachedResults, } from '../../../utils/blastCache';
|
|
8
|
+
const CachedBlastResults = observer(function ({ model, handleClose, feature, }) {
|
|
9
|
+
const [results, setResults] = useState([]);
|
|
10
|
+
const [loading, setLoading] = useState(true);
|
|
11
|
+
const view = getContainingView(model);
|
|
12
|
+
const geneId = feature.get('id');
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
15
|
+
;
|
|
16
|
+
(async () => {
|
|
17
|
+
try {
|
|
18
|
+
const cached = await getAllCachedResults();
|
|
19
|
+
setResults(cached.filter(r => r.geneId === geneId));
|
|
20
|
+
setLoading(false);
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
console.error(e);
|
|
24
|
+
}
|
|
25
|
+
})();
|
|
26
|
+
}, [geneId]);
|
|
27
|
+
const handleDelete = async (id) => {
|
|
28
|
+
await deleteCachedResult(id);
|
|
29
|
+
setResults(r => r.filter(result => result.id !== id));
|
|
30
|
+
};
|
|
31
|
+
const handleClearAll = async () => {
|
|
32
|
+
await clearAllCachedResults();
|
|
33
|
+
setResults([]);
|
|
34
|
+
};
|
|
35
|
+
const handleUseCached = (cached) => {
|
|
36
|
+
blastLaunchViewFromCache({
|
|
37
|
+
view,
|
|
38
|
+
cached,
|
|
39
|
+
newViewTitle: `BLAST - ${cached.geneId ?? cached.transcriptId ?? 'Unknown gene'}`,
|
|
40
|
+
});
|
|
41
|
+
handleClose();
|
|
42
|
+
};
|
|
43
|
+
if (loading) {
|
|
44
|
+
return React.createElement(Typography, null, "Loading cached results...");
|
|
45
|
+
}
|
|
46
|
+
if (results.length === 0) {
|
|
47
|
+
return (React.createElement(Typography, { color: "textSecondary" }, "No cached BLAST results found for this gene. Run a BLAST query to cache results."));
|
|
48
|
+
}
|
|
49
|
+
return (React.createElement("div", null,
|
|
50
|
+
React.createElement("div", { style: {
|
|
51
|
+
display: 'flex',
|
|
52
|
+
justifyContent: 'space-between',
|
|
53
|
+
alignItems: 'center',
|
|
54
|
+
marginBottom: 8,
|
|
55
|
+
} },
|
|
56
|
+
React.createElement(Typography, { variant: "subtitle1" },
|
|
57
|
+
"Cached BLAST Results (",
|
|
58
|
+
results.length,
|
|
59
|
+
")"),
|
|
60
|
+
React.createElement(Button, { size: "small", color: "error", onClick: () => {
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
62
|
+
handleClearAll();
|
|
63
|
+
} }, "Clear All")),
|
|
64
|
+
React.createElement(List, { dense: true, style: { maxHeight: 300, overflow: 'auto' } }, results.map(result => (React.createElement(ListItem, { key: result.id, disablePadding: true, secondaryAction: React.createElement(IconButton, { edge: "end", size: "small", onClick: e => {
|
|
65
|
+
e.stopPropagation();
|
|
66
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
67
|
+
handleDelete(result.id);
|
|
68
|
+
} },
|
|
69
|
+
React.createElement(DeleteIcon, { fontSize: "small" })) },
|
|
70
|
+
React.createElement(ListItemButton, { onClick: () => {
|
|
71
|
+
handleUseCached(result);
|
|
72
|
+
} },
|
|
73
|
+
React.createElement(ListItemText, { primary: `${result.geneId ?? result.transcriptId ?? 'Unknown'} - ${result.blastDatabase}/${result.blastProgram} (${result.msaAlgorithm})`, secondary: `${new Date(result.timestamp).toLocaleString()} - Seq: ${result.proteinSequence.slice(0, 30)}...` }))))))));
|
|
74
|
+
});
|
|
75
|
+
export default CachedBlastResults;
|
|
76
|
+
//# sourceMappingURL=CachedBlastResults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CachedBlastResults.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NCBIBlastQuery/CachedBlastResults.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAElD,OAAO,EAAW,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,UAAU,MAAM,4BAA4B,CAAA;AACnD,OAAO,EACL,MAAM,EACN,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,GACX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAMlC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,EAC5C,KAAK,EACL,WAAW,EACX,OAAO,GAKR;IACC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAA;IAC/D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAA0B,CAAA;IAE9D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChC,SAAS,CAAC,GAAG,EAAE;QACb,mEAAmE;QACnE,CAAC;QAAA,CAAC,KAAK,IAAI,EAAE;YACX,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAA;gBAC1C,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAA;gBACnD,UAAU,CAAC,KAAK,CAAC,CAAA;YACnB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAClB,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;IACN,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,MAAM,YAAY,GAAG,KAAK,EAAE,EAAU,EAAE,EAAE;QACxC,MAAM,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC5B,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACvD,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,MAAM,qBAAqB,EAAE,CAAA;QAC7B,UAAU,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC,CAAA;IAED,MAAM,eAAe,GAAG,CAAC,MAAyB,EAAE,EAAE;QACpD,wBAAwB,CAAC;YACvB,IAAI;YACJ,MAAM;YACN,YAAY,EAAE,WAAW,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,IAAI,cAAc,EAAE;SAClF,CAAC,CAAA;QACF,WAAW,EAAE,CAAA;IACf,CAAC,CAAA;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,oBAAC,UAAU,oCAAuC,CAAA;IAC3D,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CACL,oBAAC,UAAU,IAAC,KAAK,EAAC,eAAe,uFAGpB,CACd,CAAA;IACH,CAAC;IAED,OAAO,CACL;QACE,6BACE,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM;gBACf,cAAc,EAAE,eAAe;gBAC/B,UAAU,EAAE,QAAQ;gBACpB,YAAY,EAAE,CAAC;aAChB;YAED,oBAAC,UAAU,IAAC,OAAO,EAAC,WAAW;;gBACN,OAAO,CAAC,MAAM;oBAC1B;YACb,oBAAC,MAAM,IACL,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,OAAO,EACb,OAAO,EAAE,GAAG,EAAE;oBACZ,mEAAmE;oBACnE,cAAc,EAAE,CAAA;gBAClB,CAAC,gBAGM,CACL;QACN,oBAAC,IAAI,IAAC,KAAK,QAAC,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IACpD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CACrB,oBAAC,QAAQ,IACP,GAAG,EAAE,MAAM,CAAC,EAAE,EACd,cAAc,QACd,eAAe,EACb,oBAAC,UAAU,IACT,IAAI,EAAC,KAAK,EACV,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,CAAC,CAAC,EAAE;oBACX,CAAC,CAAC,eAAe,EAAE,CAAA;oBACnB,mEAAmE;oBACnE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBACzB,CAAC;gBAED,oBAAC,UAAU,IAAC,QAAQ,EAAC,OAAO,GAAG,CACpB;YAGf,oBAAC,cAAc,IACb,OAAO,EAAE,GAAG,EAAE;oBACZ,eAAe,CAAC,MAAM,CAAC,CAAA;gBACzB,CAAC;gBAED,oBAAC,YAAY,IACX,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,IAAI,SAAS,MAAM,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,YAAY,GAAG,EACzI,SAAS,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,WAAW,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,GAC5G,CACa,CACR,CACZ,CAAC,CACG,CACH,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,kBAAkB,CAAA"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
|
2
2
|
import { ErrorMessage } from '@jbrowse/core/ui';
|
|
3
3
|
import { getContainingView, } from '@jbrowse/core/util';
|
|
4
|
-
import
|
|
4
|
+
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
5
|
+
import { Accordion, AccordionDetails, AccordionSummary, Button, DialogActions, DialogContent, MenuItem, Typography, } from '@mui/material';
|
|
5
6
|
import { observer } from 'mobx-react';
|
|
6
7
|
import { makeStyles } from 'tss-react/mui';
|
|
8
|
+
import CachedBlastResults from './CachedBlastResults';
|
|
7
9
|
import { blastLaunchView } from './blastLaunchView';
|
|
8
10
|
import TextField2 from '../../../components/TextField2';
|
|
9
|
-
import {
|
|
11
|
+
import { getAllCachedResults } from '../../../utils/blastCache';
|
|
12
|
+
import { getGeneDisplayName, getTranscriptDisplayName } from '../../util';
|
|
10
13
|
import TranscriptSelector from '../TranscriptSelector';
|
|
11
|
-
import {
|
|
14
|
+
import { useTranscriptSelection } from '../useTranscriptSelection';
|
|
12
15
|
const useStyles = makeStyles()({
|
|
13
16
|
dialogContent: {
|
|
14
17
|
width: '80em',
|
|
@@ -26,20 +29,31 @@ const NCBIBlastAutomaticPanel = observer(function ({ handleClose, feature, model
|
|
|
26
29
|
const [launchViewError, setLaunchViewError] = useState();
|
|
27
30
|
const [selectedBlastDatabase, setSelectedBlastDatabase] = useState('nr');
|
|
28
31
|
const [selectedMsaAlgorithm, setSelectedMsaAlgorithm] = useState('clustalo');
|
|
29
|
-
const options = getTranscriptFeatures(feature);
|
|
30
|
-
const [selectedTranscriptId, setSelectedTranscriptId] = useState(getId(options[0]));
|
|
31
32
|
const [selectedBlastProgram, setSelectedBlastProgram] = useState('quick-blastp');
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
const [hasCachedResults, setHasCachedResults] = useState(false);
|
|
34
|
+
const [error, setError] = useState();
|
|
35
|
+
const geneId = feature.get('id');
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
38
|
+
;
|
|
39
|
+
(async () => {
|
|
40
|
+
try {
|
|
41
|
+
const results = await getAllCachedResults();
|
|
42
|
+
setHasCachedResults(results.some(r => r.geneId === geneId));
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
console.error(e);
|
|
46
|
+
setError(e);
|
|
47
|
+
}
|
|
48
|
+
})();
|
|
49
|
+
}, [geneId]);
|
|
50
|
+
const { options, setSelectedId, selectedTranscript, proteinSequence, error: proteinSequenceError, } = useTranscriptSelection({ feature, view });
|
|
37
51
|
useEffect(() => {
|
|
38
52
|
if (selectedBlastDatabase === 'nr_cluster_seq') {
|
|
39
53
|
setSelectedBlastProgram('blastp');
|
|
40
54
|
}
|
|
41
55
|
}, [selectedBlastDatabase]);
|
|
42
|
-
const e = proteinSequenceError ?? launchViewError;
|
|
56
|
+
const e = proteinSequenceError ?? launchViewError ?? error;
|
|
43
57
|
const style = { width: 150 };
|
|
44
58
|
return (React.createElement(React.Fragment, null,
|
|
45
59
|
React.createElement(DialogContent, { className: classes.dialogContent },
|
|
@@ -59,11 +73,19 @@ const NCBIBlastAutomaticPanel = observer(function ({ handleClose, feature, model
|
|
|
59
73
|
marginLeft: 4,
|
|
60
74
|
alignContent: 'center',
|
|
61
75
|
} }, "Can only use blastp on nr_cluster_seq")) : null),
|
|
62
|
-
React.createElement(TranscriptSelector, { feature: feature, options: options,
|
|
63
|
-
React.createElement(Typography, { style: { marginTop: 20 } }, "This panel will automatically submit a query to NCBI. Using blastp can take 10+ minutes to run, quick-blastp is generally a lot faster but is not available for the clustered database. After completion, all the hits will be run through a multiple sequence alignment. Note: we are not able to currently run NCBI COBALT automatically on the BLAST results, even though that is the method NCBI uses on their website. If you need a COBALT alignment, please use the manual approach of submitting BLAST yourself and downloading the resulting files")
|
|
76
|
+
React.createElement(TranscriptSelector, { feature: feature, options: options, selectedTranscript: selectedTranscript, onTranscriptChange: setSelectedId, proteinSequence: proteinSequence }),
|
|
77
|
+
React.createElement(Typography, { style: { marginTop: 20 } }, "This panel will automatically submit a query to NCBI. Using blastp can take 10+ minutes to run, quick-blastp is generally a lot faster but is not available for the clustered database. After completion, all the hits will be run through a multiple sequence alignment. Note: we are not able to currently run NCBI COBALT automatically on the BLAST results, even though that is the method NCBI uses on their website. If you need a COBALT alignment, please use the manual approach of submitting BLAST yourself and downloading the resulting files"),
|
|
78
|
+
hasCachedResults ? (React.createElement(Accordion, { style: { marginTop: 20 } },
|
|
79
|
+
React.createElement(AccordionSummary, { expandIcon: React.createElement(ExpandMoreIcon, null) },
|
|
80
|
+
React.createElement(Typography, null, "Previous BLAST Results")),
|
|
81
|
+
React.createElement(AccordionDetails, null,
|
|
82
|
+
React.createElement(CachedBlastResults, { model: model, handleClose: handleClose, feature: feature })))) : null),
|
|
64
83
|
React.createElement(DialogActions, null,
|
|
65
84
|
React.createElement(Button, { color: "primary", variant: "contained", onClick: () => {
|
|
66
85
|
try {
|
|
86
|
+
if (!selectedTranscript) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
67
89
|
setLaunchViewError(undefined);
|
|
68
90
|
blastLaunchView({
|
|
69
91
|
feature: selectedTranscript,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NCBIBlastAutomaticPanel.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastAutomaticPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAGL,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,
|
|
1
|
+
{"version":3,"file":"NCBIBlastAutomaticPanel.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastAutomaticPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { ErrorMessage } from '@jbrowse/core/ui';
|
|
3
3
|
import { getContainingView, shorten2 } from '@jbrowse/core/util';
|
|
4
4
|
import { Button, DialogActions, DialogContent, Typography } from '@mui/material';
|
|
5
5
|
import { observer } from 'mobx-react';
|
|
6
6
|
import { makeStyles } from 'tss-react/mui';
|
|
7
7
|
import ExternalLink from '../../../components/ExternalLink';
|
|
8
|
-
import {
|
|
8
|
+
import { cleanProteinSequence } from '../../util';
|
|
9
9
|
import TranscriptSelector from '../TranscriptSelector';
|
|
10
|
-
import {
|
|
10
|
+
import { useTranscriptSelection } from '../useTranscriptSelection';
|
|
11
11
|
const useStyles = makeStyles()({
|
|
12
12
|
dialogContent: {
|
|
13
13
|
width: '80em',
|
|
@@ -24,21 +24,15 @@ const useStyles = makeStyles()({
|
|
|
24
24
|
const NCBIBlastManualPanel = observer(function ({ handleClose, feature, model, children, baseUrl, }) {
|
|
25
25
|
const { classes } = useStyles();
|
|
26
26
|
const view = getContainingView(model);
|
|
27
|
-
const options =
|
|
28
|
-
const
|
|
29
|
-
const selectedTranscript = options.find(val => getId(val) === userSelection);
|
|
30
|
-
const { proteinSequence, error } = useFeatureSequence({
|
|
31
|
-
view,
|
|
32
|
-
feature: selectedTranscript,
|
|
33
|
-
});
|
|
34
|
-
const s2 = proteinSequence.replaceAll('*', '').replaceAll('&', '');
|
|
27
|
+
const { options, setSelectedId, selectedTranscript, proteinSequence, error } = useTranscriptSelection({ feature, view });
|
|
28
|
+
const s2 = cleanProteinSequence(proteinSequence);
|
|
35
29
|
const link = `${baseUrl}?PAGE_TYPE=BlastSearch&PAGE=Proteins&PROGRAM=blastp&QUERY=${s2}`;
|
|
36
30
|
const link2 = `${baseUrl}?PAGE_TYPE=BlastSearch&PAGE=Proteins&PROGRAM=blastp&QUERY=${shorten2(s2, 10)}`;
|
|
37
31
|
return (React.createElement(React.Fragment, null,
|
|
38
32
|
React.createElement(DialogContent, { className: classes.dialogContent },
|
|
39
33
|
children,
|
|
40
34
|
error ? React.createElement(ErrorMessage, { error: error }) : null,
|
|
41
|
-
React.createElement(TranscriptSelector, { feature: feature, options: options,
|
|
35
|
+
React.createElement(TranscriptSelector, { feature: feature, options: options, selectedTranscript: selectedTranscript, onTranscriptChange: setSelectedId, proteinSequence: proteinSequence }),
|
|
42
36
|
proteinSequence ? (React.createElement("div", { className: classes.ncbiLink },
|
|
43
37
|
"Link to NCBI BLAST: ",
|
|
44
38
|
React.createElement(ExternalLink, { href: link }, link2))) : null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NCBIBlastManualPanel.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastManualPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"NCBIBlastManualPanel.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastManualPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,YAAY,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,kBAAkB,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAKlE,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC7B,aAAa,EAAE;QACb,KAAK,EAAE,MAAM;KACd;IACD,YAAY,EAAE;QACZ,UAAU,EAAE,aAAa;KAC1B;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,GAAG;KACd;CACF,CAAC,CAAA;AAEF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,UAAU,EAC9C,WAAW,EACX,OAAO,EACP,KAAK,EACL,QAAQ,EACR,OAAO,GAOR;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAA0B,CAAA;IAC9D,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,KAAK,EAAE,GAC1E,sBAAsB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IAE3C,MAAM,EAAE,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAA;IAChD,MAAM,IAAI,GAAG,GAAG,OAAO,6DAA6D,EAAE,EAAE,CAAA;IACxF,MAAM,KAAK,GAAG,GAAG,OAAO,6DAA6D,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAA;IAEvG,OAAO,CACL;QACE,oBAAC,aAAa,IAAC,SAAS,EAAE,OAAO,CAAC,aAAa;YAC5C,QAAQ;YACR,KAAK,CAAC,CAAC,CAAC,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC,CAAC,CAAC,IAAI;YAE9C,oBAAC,kBAAkB,IACjB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,kBAAkB,EACtC,kBAAkB,EAAE,aAAa,EACjC,eAAe,EAAE,eAAe,GAChC;YAED,eAAe,CAAC,CAAC,CAAC,CACjB,6BAAK,SAAS,EAAE,OAAO,CAAC,QAAQ;;gBACV,oBAAC,YAAY,IAAC,IAAI,EAAE,IAAI,IAAG,KAAK,CAAgB,CAChE,CACP,CAAC,CAAC,CAAC,IAAI;YAER,oBAAC,UAAU,IAAC,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,2UAMvB,CACC;QAEhB,oBAAC,aAAa;YACZ,oBAAC,MAAM,IACL,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,GAAG,EAAE;oBACZ,WAAW,EAAE,CAAA;gBACf,CAAC,aAGM;YACT,oBAAC,MAAM,IACL,KAAK,EAAC,WAAW,EACjB,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,GAAG,EAAE;oBACZ,WAAW,EAAE,CAAA;gBACf,CAAC,YAGM,CACK,CACf,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,oBAAoB,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Feature } from '@jbrowse/core/util';
|
|
2
2
|
import type { JBrowsePluginMsaViewModel } from '../../../MsaViewPanel/model';
|
|
3
|
+
import type { CachedBlastResult } from '../../../utils/blastCache';
|
|
3
4
|
import type { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
|
|
4
5
|
export declare function blastLaunchView({ newViewTitle, view, feature, blastParams, }: {
|
|
5
6
|
newViewTitle: string;
|
|
@@ -7,3 +8,8 @@ export declare function blastLaunchView({ newViewTitle, view, feature, blastPara
|
|
|
7
8
|
feature: Feature;
|
|
8
9
|
blastParams: Record<string, unknown>;
|
|
9
10
|
}): JBrowsePluginMsaViewModel;
|
|
11
|
+
export declare function blastLaunchViewFromCache({ newViewTitle, view, cached, }: {
|
|
12
|
+
newViewTitle: string;
|
|
13
|
+
view: LinearGenomeViewModel;
|
|
14
|
+
cached: CachedBlastResult;
|
|
15
|
+
}): JBrowsePluginMsaViewModel;
|
|
@@ -11,4 +11,19 @@ export function blastLaunchView({ newViewTitle, view, feature, blastParams, }) {
|
|
|
11
11
|
blastParams,
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
|
+
export function blastLaunchViewFromCache({ newViewTitle, view, cached, }) {
|
|
15
|
+
return getSession(view).addView('MsaView', {
|
|
16
|
+
type: 'MsaView',
|
|
17
|
+
displayName: newViewTitle,
|
|
18
|
+
connectedViewId: view.id,
|
|
19
|
+
drawNodeBubbles: true,
|
|
20
|
+
colWidth: 10,
|
|
21
|
+
rowHeight: 12,
|
|
22
|
+
data: {
|
|
23
|
+
msa: cached.msa,
|
|
24
|
+
tree: cached.tree,
|
|
25
|
+
treeMetadata: cached.treeMetadata,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
14
29
|
//# sourceMappingURL=blastLaunchView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blastLaunchView.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NCBIBlastQuery/blastLaunchView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"blastLaunchView.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/NCBIBlastQuery/blastLaunchView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAMxD,MAAM,UAAU,eAAe,CAAC,EAC9B,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,WAAW,GAMZ;IACC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE;QACzC,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,YAAY;QACzB,eAAe,EAAE,IAAI,CAAC,EAAE;QACxB,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE;QAClC,eAAe,EAAE,IAAI;QACrB,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,WAAW;KACZ,CAA8B,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,EACvC,YAAY,EACZ,IAAI,EACJ,MAAM,GAKP;IACC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE;QACzC,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,YAAY;QACzB,eAAe,EAAE,IAAI,CAAC,EAAE;QACxB,eAAe,EAAE,IAAI;QACrB,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,IAAI,EAAE;YACJ,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC;KACF,CAA8B,CAAA;AACjC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
2
|
import { readConfObject } from '@jbrowse/core/configuration';
|
|
3
3
|
import { ErrorMessage, LoadingEllipses, SanitizedHTML } from '@jbrowse/core/ui';
|
|
4
4
|
import { getContainingView, getEnv, getSession, } from '@jbrowse/core/util';
|
|
@@ -7,12 +7,11 @@ import { observer } from 'mobx-react';
|
|
|
7
7
|
import useSWR from 'swr';
|
|
8
8
|
import { makeStyles } from 'tss-react/mui';
|
|
9
9
|
import TextField2 from '../../../components/TextField2';
|
|
10
|
-
import { getGeneDisplayName
|
|
10
|
+
import { getGeneDisplayName } from '../../util';
|
|
11
11
|
import TranscriptSelector from '../TranscriptSelector';
|
|
12
|
-
import {
|
|
12
|
+
import { useTranscriptSelection } from '../useTranscriptSelection';
|
|
13
13
|
import { swrFlags } from './consts';
|
|
14
14
|
import { fetchMSA, fetchMSAList } from './fetchMSAData';
|
|
15
|
-
import { findValidTranscriptId } from './findValidTranscriptId';
|
|
16
15
|
import { preCalculatedLaunchView } from './preCalculatedLaunchView';
|
|
17
16
|
const useStyles = makeStyles()({
|
|
18
17
|
dialogContent: {
|
|
@@ -25,16 +24,7 @@ const PreLoadedMSA = observer(function PreLoadedMSA2({ model, feature, handleClo
|
|
|
25
24
|
const { classes } = useStyles();
|
|
26
25
|
const { pluginManager } = getEnv(model);
|
|
27
26
|
const { assemblyNames } = view;
|
|
28
|
-
const transcripts = getTranscriptFeatures(feature);
|
|
29
|
-
const [selectedTranscriptId, setSelectedTranscriptId] = useState(getId(transcripts[0]));
|
|
30
27
|
const [viewError, setViewError] = useState();
|
|
31
|
-
const selectedTranscript = selectedTranscriptId
|
|
32
|
-
? transcripts.find(val => getId(val) === selectedTranscriptId)
|
|
33
|
-
: undefined;
|
|
34
|
-
const { proteinSequence, error: proteinSequenceError } = useFeatureSequence({
|
|
35
|
-
view,
|
|
36
|
-
feature: selectedTranscript,
|
|
37
|
-
});
|
|
38
28
|
const { jbrowse } = session;
|
|
39
29
|
const datasets = readConfObject(jbrowse, ['msa', 'datasets']);
|
|
40
30
|
const [selectedDatasetId, setSelectedDatasetId] = useState(datasets?.[0]?.datasetId);
|
|
@@ -45,28 +35,16 @@ const PreLoadedMSA = observer(function PreLoadedMSA2({ model, feature, handleClo
|
|
|
45
35
|
pluginManager,
|
|
46
36
|
})
|
|
47
37
|
: undefined, swrFlags);
|
|
48
|
-
const {
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
const { options: transcripts, selectedId, setSelectedId, selectedTranscript, proteinSequence, error: proteinSequenceError, validSet, } = useTranscriptSelection({ feature, view, validIds: msaList });
|
|
39
|
+
const { data: msaData, isLoading: msaDataLoading, error: msaDataFetchError, } = useSWR(selectedId && selectedDatasetId
|
|
40
|
+
? `${selectedId}-${selectedId}-${msaList?.length}-msa`
|
|
41
|
+
: 'none-msa', () => selectedId && selectedDataset && msaList
|
|
51
42
|
? fetchMSA({
|
|
52
|
-
msaId:
|
|
43
|
+
msaId: selectedId,
|
|
53
44
|
config: selectedDataset.adapter,
|
|
54
45
|
pluginManager,
|
|
55
46
|
})
|
|
56
47
|
: undefined, swrFlags);
|
|
57
|
-
const validSet = useMemo(() => new Set(msaList), [msaList]);
|
|
58
|
-
// Update selectedTranscriptId when msaList changes
|
|
59
|
-
useEffect(() => {
|
|
60
|
-
if (msaList && msaList.length > 0) {
|
|
61
|
-
const validId = findValidTranscriptId({
|
|
62
|
-
transcriptsList: transcripts,
|
|
63
|
-
validMsaList: msaList,
|
|
64
|
-
});
|
|
65
|
-
if (validId && validId !== selectedTranscriptId) {
|
|
66
|
-
setSelectedTranscriptId(validId);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}, [msaList, transcripts, selectedTranscriptId]);
|
|
70
48
|
const e = msaListFetchError ?? msaDataFetchError ?? proteinSequenceError ?? viewError;
|
|
71
49
|
if (e) {
|
|
72
50
|
console.error(e);
|
|
@@ -76,20 +54,20 @@ const PreLoadedMSA = observer(function PreLoadedMSA2({ model, feature, handleClo
|
|
|
76
54
|
e ? React.createElement(ErrorMessage, { error: e }) : null,
|
|
77
55
|
React.createElement(TextField2, { select: true, label: "Select MSA dataset", value: selectedDatasetId, onChange: event => {
|
|
78
56
|
setSelectedDatasetId(event.target.value);
|
|
79
|
-
} }, datasets
|
|
57
|
+
} }, datasets?.map(d => (React.createElement(MenuItem, { key: d.datasetId, value: d.datasetId }, d.name)))),
|
|
80
58
|
selectedDataset ? (React.createElement("div", { style: { marginTop: 50 } },
|
|
81
|
-
!msaListLoading && msaDataLoading ? (React.createElement(LoadingEllipses, { variant: "h6", message: `Loading MSA for (${
|
|
59
|
+
!msaListLoading && msaDataLoading ? (React.createElement(LoadingEllipses, { variant: "h6", message: `Loading MSA for (${selectedId})` })) : null,
|
|
82
60
|
msaListLoading ? (React.createElement(LoadingEllipses, { variant: "h6", message: `Loading available MSAs for (${selectedDataset.name})` })) : null,
|
|
83
61
|
msaList ? (React.createElement("div", null,
|
|
84
62
|
React.createElement(SanitizedHTML, { html: selectedDataset.description }),
|
|
85
|
-
React.createElement(TranscriptSelector, { feature: feature, options: transcripts,
|
|
63
|
+
React.createElement(TranscriptSelector, { feature: feature, options: transcripts, selectedTranscript: selectedTranscript, onTranscriptChange: setSelectedId, proteinSequence: proteinSequence, validSet: validSet }))) : null)) : null),
|
|
86
64
|
React.createElement(DialogActions, null,
|
|
87
65
|
React.createElement(Button, { color: "primary", variant: "contained", disabled: !selectedTranscript || !msaData?.length, onClick: () => {
|
|
88
66
|
try {
|
|
89
67
|
if (!selectedTranscript || !msaData) {
|
|
90
68
|
return;
|
|
91
69
|
}
|
|
92
|
-
const querySeqName = `${
|
|
70
|
+
const querySeqName = `${selectedId}_${assemblyNames[0]}`;
|
|
93
71
|
preCalculatedLaunchView({
|
|
94
72
|
session,
|
|
95
73
|
newViewTitle: getGeneDisplayName(selectedTranscript),
|