jbrowse-plugin-msaview 2.2.1 → 2.2.3
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/BgzipFastaMsaAdapter/BgzipFastaMsaAdapter.d.ts +10 -0
- package/dist/BgzipFastaMsaAdapter/BgzipFastaMsaAdapter.js +64 -0
- package/dist/BgzipFastaMsaAdapter/BgzipFastaMsaAdapter.js.map +1 -0
- package/dist/BgzipFastaMsaAdapter/configSchema.d.ts +7 -0
- package/dist/BgzipFastaMsaAdapter/configSchema.js +13 -0
- package/dist/BgzipFastaMsaAdapter/configSchema.js.map +1 -0
- package/dist/BgzipFastaMsaAdapter/index.d.ts +2 -0
- package/dist/BgzipFastaMsaAdapter/index.js +15 -0
- package/dist/BgzipFastaMsaAdapter/index.js.map +1 -0
- package/dist/LaunchMsaView/components/EnsemblGeneTree/EnsemblGeneTree.js.map +1 -1
- package/dist/LaunchMsaView/components/EnsemblGeneTree/useGeneTree.d.ts +1 -1
- package/dist/LaunchMsaView/components/EnsemblGeneTree/useGeneTree.js +3 -23
- package/dist/LaunchMsaView/components/EnsemblGeneTree/useGeneTree.js.map +1 -1
- package/dist/LaunchMsaView/components/EnsemblGeneTree/util.d.ts +1 -4
- package/dist/LaunchMsaView/components/EnsemblGeneTree/util.js +1 -37
- package/dist/LaunchMsaView/components/EnsemblGeneTree/util.js.map +1 -1
- package/dist/LaunchMsaView/components/LaunchMsaViewDialog.d.ts +1 -1
- package/dist/LaunchMsaView/components/LaunchMsaViewDialog.js +21 -16
- package/dist/LaunchMsaView/components/LaunchMsaViewDialog.js.map +1 -1
- package/dist/LaunchMsaView/components/ManualMSALoader/ManualMSALoader.js +1 -1
- package/dist/LaunchMsaView/components/ManualMSALoader/ManualMSALoader.js.map +1 -1
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastAutomaticPanel.js +12 -8
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastAutomaticPanel.js.map +1 -1
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastManualPanel.js +1 -1
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastManualPanel.js.map +1 -1
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastPanel.js +8 -7
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastPanel.js.map +1 -1
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBISettingsDialog.js +1 -1
- package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBISettingsDialog.js.map +1 -1
- package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js +87 -63
- package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js.map +1 -1
- package/dist/LaunchMsaView/components/PreLoadedMSA/consts.d.ts +7 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/consts.js +8 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/consts.js.map +1 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/fetchMSAData.d.ts +12 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/fetchMSAData.js +12 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/fetchMSAData.js.map +1 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.d.ts +5 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.js +16 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.js.map +1 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.d.ts +6 -3
- package/dist/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.js +3 -20
- package/dist/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.js.map +1 -1
- package/dist/LaunchMsaView/components/PreLoadedMSA/types.d.ts +7 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/types.js +2 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/types.js.map +1 -0
- package/dist/LaunchMsaView/components/TranscriptSelector.js +2 -2
- package/dist/LaunchMsaView/components/TranscriptSelector.js.map +1 -1
- package/dist/LaunchMsaView/components/calculateProteinSequence.d.ts +2 -2
- package/dist/LaunchMsaView/components/calculateProteinSequence.js +2 -2
- package/dist/LaunchMsaView/components/calculateProteinSequence.js.map +1 -1
- package/dist/LaunchMsaView/components/types.d.ts +1 -0
- package/dist/LaunchMsaView/components/useFeatureSequence.d.ts +3 -7
- package/dist/LaunchMsaView/components/useFeatureSequence.js +9 -62
- package/dist/LaunchMsaView/components/useFeatureSequence.js.map +1 -1
- package/dist/LaunchMsaView/components/useSWRFeatureSequence.d.ts +13 -0
- package/dist/LaunchMsaView/components/useSWRFeatureSequence.js +53 -0
- package/dist/LaunchMsaView/components/useSWRFeatureSequence.js.map +1 -0
- package/dist/LaunchMsaView/index.js +3 -1
- package/dist/LaunchMsaView/index.js.map +1 -1
- package/dist/MsaViewPanel/components/RIDLink.js +1 -1
- package/dist/MsaViewPanel/components/RIDLink.js.map +1 -1
- package/dist/MsaViewPanel/genomeToMSA.js +2 -2
- package/dist/MsaViewPanel/genomeToMSA.js.map +1 -1
- package/dist/MsaViewPanel/model.d.ts +23 -84
- package/dist/MsaViewPanel/model.js +42 -22
- package/dist/MsaViewPanel/model.js.map +1 -1
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.d.ts +6 -3
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.js +39 -14
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.js.map +1 -1
- package/dist/MsaViewPanel/util.js +2 -2
- package/dist/MsaViewPanel/util.js.map +1 -1
- package/dist/components/ExternalLink.js.map +1 -0
- package/dist/components/ReadOnlyTextField2.js.map +1 -0
- package/dist/components/TextField2.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -1
- package/dist/jbrowse-plugin-msaview.umd.production.min.js +46 -33
- package/dist/jbrowse-plugin-msaview.umd.production.min.js.map +4 -4
- package/dist/out.js +55381 -0
- package/dist/utils/fetch.d.ts +3 -1
- package/dist/utils/fetch.js +24 -3
- package/dist/utils/fetch.js.map +1 -1
- package/package.json +7 -6
- package/src/BgzipFastaMsaAdapter/BgzipFastaMsaAdapter.ts +78 -0
- package/src/BgzipFastaMsaAdapter/configSchema.ts +18 -0
- package/src/BgzipFastaMsaAdapter/index.ts +18 -0
- package/src/LaunchMsaView/components/EnsemblGeneTree/EnsemblGeneTree.tsx +0 -1
- package/src/LaunchMsaView/components/EnsemblGeneTree/useGeneTree.ts +6 -24
- package/src/LaunchMsaView/components/EnsemblGeneTree/util.ts +6 -45
- package/src/LaunchMsaView/components/LaunchMsaViewDialog.tsx +23 -24
- package/src/LaunchMsaView/components/ManualMSALoader/ManualMSALoader.tsx +1 -1
- package/src/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastAutomaticPanel.tsx +13 -8
- package/src/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastManualPanel.tsx +1 -1
- package/src/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastPanel.tsx +20 -29
- package/src/LaunchMsaView/components/NCBIBlastQuery/NCBISettingsDialog.tsx +1 -1
- package/src/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.tsx +154 -68
- package/src/LaunchMsaView/components/PreLoadedMSA/consts.ts +7 -0
- package/src/LaunchMsaView/components/PreLoadedMSA/fetchMSAData.ts +33 -0
- package/src/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.ts +25 -0
- package/src/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.ts +7 -26
- package/src/LaunchMsaView/components/PreLoadedMSA/types.ts +8 -0
- package/src/LaunchMsaView/components/TranscriptSelector.tsx +2 -2
- package/src/LaunchMsaView/components/calculateProteinSequence.ts +3 -3
- package/src/LaunchMsaView/components/types.ts +1 -0
- package/src/LaunchMsaView/components/useFeatureSequence.ts +10 -71
- package/src/LaunchMsaView/components/useSWRFeatureSequence.ts +90 -0
- package/src/LaunchMsaView/index.ts +4 -1
- package/src/MsaViewPanel/components/RIDLink.tsx +1 -1
- package/src/MsaViewPanel/genomeToMSA.ts +2 -2
- package/src/MsaViewPanel/model.ts +45 -29
- package/src/MsaViewPanel/msaCoordToGenomeCoord.ts +43 -18
- package/src/MsaViewPanel/util.ts +2 -2
- package/src/index.ts +31 -0
- package/src/utils/fetch.ts +31 -3
- package/dist/ExternalLink.js.map +0 -1
- package/dist/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.d.ts +0 -1
- package/dist/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.js +0 -12
- package/dist/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.js.map +0 -1
- package/dist/ReadOnlyTextField2.js.map +0 -1
- package/dist/TextField2.js.map +0 -1
- package/src/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.ts +0 -13
- /package/dist/{ExternalLink.d.ts → components/ExternalLink.d.ts} +0 -0
- /package/dist/{ExternalLink.js → components/ExternalLink.js} +0 -0
- /package/dist/{ReadOnlyTextField2.d.ts → components/ReadOnlyTextField2.d.ts} +0 -0
- /package/dist/{ReadOnlyTextField2.js → components/ReadOnlyTextField2.js} +0 -0
- /package/dist/{TextField2.d.ts → components/TextField2.d.ts} +0 -0
- /package/dist/{TextField2.js → components/TextField2.js} +0 -0
- /package/src/{ExternalLink.tsx → components/ExternalLink.tsx} +0 -0
- /package/src/{ReadOnlyTextField2.tsx → components/ReadOnlyTextField2.tsx} +0 -0
- /package/src/{TextField2.tsx → components/TextField2.tsx} +0 -0
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
import React, { useEffect, useState } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import React, { useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { readConfObject } from '@jbrowse/core/configuration';
|
|
3
|
+
import { ErrorMessage, LoadingEllipses, SanitizedHTML } from '@jbrowse/core/ui';
|
|
4
|
+
import { getContainingView, getEnv, getSession, } from '@jbrowse/core/util';
|
|
5
|
+
import { Button, DialogActions, DialogContent, MenuItem } from '@mui/material';
|
|
5
6
|
import { observer } from 'mobx-react';
|
|
7
|
+
import useSWR from 'swr';
|
|
6
8
|
import { makeStyles } from 'tss-react/mui';
|
|
7
|
-
import
|
|
8
|
-
import { preCalculatedLaunchView } from './preCalculatedLaunchView';
|
|
9
|
-
import ExternalLink from '../../../ExternalLink';
|
|
9
|
+
import TextField2 from '../../../components/TextField2';
|
|
10
10
|
import { getGeneDisplayName, getId, getTranscriptFeatures } from '../../util';
|
|
11
11
|
import TranscriptSelector from '../TranscriptSelector';
|
|
12
12
|
import { useFeatureSequence } from '../useFeatureSequence';
|
|
13
|
+
import { swrFlags } from './consts';
|
|
14
|
+
import { fetchMSA, fetchMSAList } from './fetchMSAData';
|
|
15
|
+
import { findValidTranscriptId } from './findValidTranscriptId';
|
|
16
|
+
import { preCalculatedLaunchView } from './preCalculatedLaunchView';
|
|
13
17
|
const useStyles = makeStyles()({
|
|
14
18
|
dialogContent: {
|
|
15
19
|
width: '80em',
|
|
@@ -19,70 +23,90 @@ const PreLoadedMSA = observer(function PreLoadedMSA2({ model, feature, handleClo
|
|
|
19
23
|
const session = getSession(model);
|
|
20
24
|
const view = getContainingView(model);
|
|
21
25
|
const { classes } = useStyles();
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const set = new Set(data);
|
|
32
|
-
const options = getTranscriptFeatures(feature);
|
|
33
|
-
const ret = options.find(val => set.has(getId(val)));
|
|
34
|
-
if (ret) {
|
|
35
|
-
setUserSelection(getId(ret));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
catch (e) {
|
|
39
|
-
console.error(e);
|
|
40
|
-
setError(e);
|
|
41
|
-
}
|
|
42
|
-
})();
|
|
43
|
-
}, [feature]);
|
|
44
|
-
const validSet = new Set(geneNameList);
|
|
45
|
-
const options = getTranscriptFeatures(feature);
|
|
46
|
-
const ret = options.find(val => validSet.has(getId(val)));
|
|
47
|
-
const [userSelection, setUserSelection] = useState(getId(options[0]));
|
|
48
|
-
const selectedTranscript = options.find(val => getId(val) === userSelection);
|
|
49
|
-
const { proteinSequence, error: error2 } = useFeatureSequence({
|
|
26
|
+
const { pluginManager } = getEnv(model);
|
|
27
|
+
const { assemblyNames } = view;
|
|
28
|
+
const transcripts = getTranscriptFeatures(feature);
|
|
29
|
+
const [selectedTranscriptId, setSelectedTranscriptId] = useState(getId(transcripts[0]));
|
|
30
|
+
const [viewError, setViewError] = useState();
|
|
31
|
+
const selectedTranscript = selectedTranscriptId
|
|
32
|
+
? transcripts.find(val => getId(val) === selectedTranscriptId)
|
|
33
|
+
: undefined;
|
|
34
|
+
const { proteinSequence, error: proteinSequenceError } = useFeatureSequence({
|
|
50
35
|
view,
|
|
51
36
|
feature: selectedTranscript,
|
|
52
37
|
});
|
|
53
|
-
const
|
|
38
|
+
const { jbrowse } = session;
|
|
39
|
+
const datasets = readConfObject(jbrowse, ['msa', 'datasets']);
|
|
40
|
+
const [selectedDatasetId, setSelectedDatasetId] = useState(datasets?.[0]?.datasetId);
|
|
41
|
+
const selectedDataset = datasets?.find(d => d.datasetId === selectedDatasetId);
|
|
42
|
+
const { data: msaList, isLoading: msaListLoading, error: msaListFetchError, } = useSWR(selectedDatasetId ? `${selectedDatasetId}-msa-list` : 'none-msa-list', () => selectedDataset
|
|
43
|
+
? fetchMSAList({
|
|
44
|
+
config: selectedDataset.adapter,
|
|
45
|
+
pluginManager,
|
|
46
|
+
})
|
|
47
|
+
: undefined, swrFlags);
|
|
48
|
+
const { data: msaData, isLoading: msaDataLoading, error: msaDataFetchError, } = useSWR(selectedTranscriptId && selectedDatasetId
|
|
49
|
+
? `${selectedTranscriptId}-${selectedTranscriptId}-${msaList?.length}-msa`
|
|
50
|
+
: 'none-msa', () => selectedTranscriptId && selectedDataset && msaList
|
|
51
|
+
? fetchMSA({
|
|
52
|
+
msaId: selectedTranscriptId,
|
|
53
|
+
config: selectedDataset.adapter,
|
|
54
|
+
pluginManager,
|
|
55
|
+
})
|
|
56
|
+
: 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
|
+
const e = msaListFetchError ?? msaDataFetchError ?? proteinSequenceError ?? viewError;
|
|
71
|
+
if (e) {
|
|
72
|
+
console.error(e);
|
|
73
|
+
}
|
|
54
74
|
return (React.createElement(React.Fragment, null,
|
|
55
75
|
React.createElement(DialogContent, { className: classes.dialogContent },
|
|
56
76
|
e ? React.createElement(ErrorMessage, { error: e }) : null,
|
|
57
|
-
React.createElement(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
77
|
+
React.createElement(TextField2, { select: true, label: "Select MSA dataset", value: selectedDatasetId, onChange: event => {
|
|
78
|
+
setSelectedDatasetId(event.target.value);
|
|
79
|
+
} }, datasets && datasets.length > 0 ? (datasets.map(d => (React.createElement(MenuItem, { key: d.datasetId, value: d.datasetId }, d.name)))) : (React.createElement(MenuItem, null, "No MSA datasets found"))),
|
|
80
|
+
selectedDataset ? (React.createElement("div", { style: { marginTop: 50 } },
|
|
81
|
+
!msaListLoading && msaDataLoading ? (React.createElement(LoadingEllipses, { variant: "h6", message: `Loading MSA for (${selectedTranscriptId})` })) : null,
|
|
82
|
+
msaListLoading ? (React.createElement(LoadingEllipses, { variant: "h6", message: `Loading available MSAs for (${selectedDataset.name})` })) : null,
|
|
83
|
+
msaList ? (React.createElement("div", null,
|
|
84
|
+
React.createElement(SanitizedHTML, { html: selectedDataset.description }),
|
|
85
|
+
React.createElement(TranscriptSelector, { feature: feature, options: transcripts, selectedTranscriptId: selectedTranscriptId, onTranscriptChange: setSelectedTranscriptId, proteinSequence: proteinSequence, validSet: validSet }))) : null)) : null),
|
|
63
86
|
React.createElement(DialogActions, null,
|
|
64
|
-
React.createElement(Button, { color: "primary", variant: "contained", onClick: () => {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
if (!ret) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
await preCalculatedLaunchView({
|
|
73
|
-
userSelection,
|
|
74
|
-
session,
|
|
75
|
-
newViewTitle: getGeneDisplayName(ret),
|
|
76
|
-
view,
|
|
77
|
-
feature: ret,
|
|
78
|
-
});
|
|
79
|
-
handleClose();
|
|
80
|
-
}
|
|
81
|
-
catch (e) {
|
|
82
|
-
console.error(e);
|
|
83
|
-
setError(e);
|
|
87
|
+
React.createElement(Button, { color: "primary", variant: "contained", disabled: !selectedTranscript || !msaData?.length, onClick: () => {
|
|
88
|
+
try {
|
|
89
|
+
if (!selectedTranscript || !msaData) {
|
|
90
|
+
return;
|
|
84
91
|
}
|
|
85
|
-
|
|
92
|
+
const querySeqName = `${selectedTranscriptId}_${assemblyNames[0]}`;
|
|
93
|
+
preCalculatedLaunchView({
|
|
94
|
+
session,
|
|
95
|
+
newViewTitle: getGeneDisplayName(selectedTranscript),
|
|
96
|
+
view,
|
|
97
|
+
querySeqName,
|
|
98
|
+
feature: selectedTranscript,
|
|
99
|
+
data: {
|
|
100
|
+
msa: msaData
|
|
101
|
+
.map(r => `>${r.get('refName')}\n${r.get('seq')}`)
|
|
102
|
+
.join('\n'),
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
handleClose();
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
setViewError(e);
|
|
109
|
+
}
|
|
86
110
|
} }, "Submit"),
|
|
87
111
|
React.createElement(Button, { color: "secondary", variant: "contained", onClick: () => {
|
|
88
112
|
handleClose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreLoadedMSADataPanel.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"PreLoadedMSADataPanel.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/PreLoadedMSA/consts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,iBAAiB,EAAE,KAAK;IACxB,qBAAqB,EAAE,KAAK;IAC5B,iBAAiB,EAAE,KAAK;IACxB,kBAAkB,EAAE,KAAK;IACzB,kBAAkB,EAAE,KAAK;CAC1B,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AnyConfigurationModel } from '@jbrowse/core/configuration';
|
|
2
|
+
import { Feature } from '@jbrowse/core/util';
|
|
3
|
+
import type PluginManager from '@jbrowse/core/PluginManager';
|
|
4
|
+
export declare function fetchMSAList({ config, pluginManager, }: {
|
|
5
|
+
config: AnyConfigurationModel;
|
|
6
|
+
pluginManager: PluginManager;
|
|
7
|
+
}): Promise<string[]>;
|
|
8
|
+
export declare function fetchMSA({ config, pluginManager, msaId, }: {
|
|
9
|
+
config: AnyConfigurationModel;
|
|
10
|
+
pluginManager: PluginManager;
|
|
11
|
+
msaId: string;
|
|
12
|
+
}): Promise<Feature[]>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { getAdapter } from '@jbrowse/core/data_adapters/dataAdapterCache';
|
|
2
|
+
export async function fetchMSAList({ config, pluginManager, }) {
|
|
3
|
+
const result = await getAdapter(pluginManager, 'msa', config);
|
|
4
|
+
// @ts-expect-error
|
|
5
|
+
return result.dataAdapter.getMSAList();
|
|
6
|
+
}
|
|
7
|
+
export async function fetchMSA({ config, pluginManager, msaId, }) {
|
|
8
|
+
const result = await getAdapter(pluginManager, 'msa', config);
|
|
9
|
+
// @ts-expect-error
|
|
10
|
+
return result.dataAdapter.getMSA(msaId);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=fetchMSAData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchMSAData.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/PreLoadedMSA/fetchMSAData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAA;AAKzE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,MAAM,EACN,aAAa,GAId;IACC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAE7D,mBAAmB;IACnB,OAAO,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAA;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,EAC7B,MAAM,EACN,aAAa,EACb,KAAK,GAKN;IACC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAE7D,mBAAmB;IACnB,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getId } from '../../util';
|
|
2
|
+
// Function to find a valid transcript ID that exists in the MSA list
|
|
3
|
+
export function findValidTranscriptId({ transcriptsList, validMsaList, }) {
|
|
4
|
+
if (!validMsaList || validMsaList.length === 0) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
// Try to find a transcript ID that exists in the MSA list
|
|
8
|
+
for (const transcript of transcriptsList) {
|
|
9
|
+
const id = getId(transcript);
|
|
10
|
+
if (id && validMsaList.includes(id)) {
|
|
11
|
+
return id;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=findValidTranscriptId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findValidTranscriptId.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIlC,qEAAqE;AACrE,MAAM,UAAU,qBAAqB,CAAC,EACpC,eAAe,EACf,YAAY,GAIb;IACC,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,0DAA0D;IAC1D,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAA;QAC5B,IAAI,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { AbstractSessionModel, Feature } from '@jbrowse/core/util';
|
|
2
2
|
import type { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
|
|
3
|
-
export declare function preCalculatedLaunchView({
|
|
3
|
+
export declare function preCalculatedLaunchView({ session, newViewTitle, view, feature, data, querySeqName, }: {
|
|
4
|
+
data: {
|
|
5
|
+
msa: string;
|
|
6
|
+
};
|
|
4
7
|
session: AbstractSessionModel;
|
|
5
|
-
userSelection: string;
|
|
6
8
|
newViewTitle: string;
|
|
7
9
|
view: LinearGenomeViewModel;
|
|
8
10
|
feature: Feature;
|
|
9
|
-
|
|
11
|
+
querySeqName: string;
|
|
12
|
+
}): void;
|
|
@@ -1,18 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
async function myfetch(url) {
|
|
3
|
-
const res = await fetch(url);
|
|
4
|
-
if (!res.ok) {
|
|
5
|
-
throw new Error(`HTTP ${res.status} fetching ${await res.text()}`);
|
|
6
|
-
}
|
|
7
|
-
const data = await res.arrayBuffer();
|
|
8
|
-
return new TextDecoder().decode(ungzip(data));
|
|
9
|
-
}
|
|
10
|
-
export async function preCalculatedLaunchView({ userSelection, session, newViewTitle, view, feature, }) {
|
|
11
|
-
const d = await myfetch(`https://jbrowse.org/demos/msaview/knownCanonical/${userSelection}.mfa.gz`);
|
|
1
|
+
export function preCalculatedLaunchView({ session, newViewTitle, view, feature, data, querySeqName, }) {
|
|
12
2
|
session.addView('MsaView', {
|
|
13
3
|
type: 'MsaView',
|
|
14
4
|
displayName: newViewTitle,
|
|
15
5
|
treeAreaWidth: 200,
|
|
6
|
+
querySeqName,
|
|
16
7
|
treeWidth: 100,
|
|
17
8
|
drawNodeBubbles: false,
|
|
18
9
|
labelsAlignRight: true,
|
|
@@ -20,15 +11,7 @@ export async function preCalculatedLaunchView({ userSelection, session, newViewT
|
|
|
20
11
|
colWidth: 10,
|
|
21
12
|
rowHeight: 12,
|
|
22
13
|
colorSchemeName: 'percent_identity_dynamic',
|
|
23
|
-
|
|
24
|
-
uri: 'https://hgdownload.soe.ucsc.edu/goldenPath/hg38/multiz100way/hg38.100way.nh',
|
|
25
|
-
},
|
|
26
|
-
treeMetadataFilehandle: {
|
|
27
|
-
uri: 'https://s3.amazonaws.com/jbrowse.org/demos/app/species.json',
|
|
28
|
-
},
|
|
29
|
-
data: {
|
|
30
|
-
msa: d,
|
|
31
|
-
},
|
|
14
|
+
data,
|
|
32
15
|
connectedViewId: view.id,
|
|
33
16
|
connectedFeature: feature.toJSON(),
|
|
34
17
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preCalculatedLaunchView.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preCalculatedLaunchView.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,uBAAuB,CAAC,EACtC,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,YAAY,GAQb;IACC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE;QACzB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,GAAG;QAClB,YAAY;QACZ,SAAS,EAAE,GAAG;QACd,eAAe,EAAE,KAAK;QACtB,gBAAgB,EAAE,IAAI;QACtB,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,eAAe,EAAE,0BAA0B;QAC3C,IAAI;QACJ,eAAe,EAAE,IAAI,CAAC,EAAE;QACxB,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE;KACnC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/PreLoadedMSA/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
2
|
import { Button, MenuItem } from '@mui/material';
|
|
3
3
|
import { makeStyles } from 'tss-react/mui';
|
|
4
|
-
import ReadOnlyTextField2 from '../../ReadOnlyTextField2';
|
|
5
|
-
import TextField2 from '../../TextField2';
|
|
4
|
+
import ReadOnlyTextField2 from '../../components/ReadOnlyTextField2';
|
|
5
|
+
import TextField2 from '../../components/TextField2';
|
|
6
6
|
import { getGeneDisplayName, getId, getTranscriptDisplayName, getTranscriptLength, } from '../util';
|
|
7
7
|
const useStyles = makeStyles()({
|
|
8
8
|
flex: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranscriptSelector.js","sourceRoot":"","sources":["../../../src/LaunchMsaView/components/TranscriptSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGvC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,kBAAkB,MAAM,
|
|
1
|
+
{"version":3,"file":"TranscriptSelector.js","sourceRoot":"","sources":["../../../src/LaunchMsaView/components/TranscriptSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGvC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,kBAAkB,MAAM,qCAAqC,CAAA;AACpE,OAAO,UAAU,MAAM,6BAA6B,CAAA;AACpD,OAAO,EACL,kBAAkB,EAClB,KAAK,EACL,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,SAAS,CAAA;AAEhB,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM;KAChB;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,GAAG;KACd;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,OAAO,EACP,OAAO,EACP,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,QAAQ,GAQT;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvD,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,CACrC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,oBAAoB,CAC1C,CAAA;IAEF,OAAO,CACL;QACE,6BAAK,SAAS,EAAE,OAAO,CAAC,IAAI;YAC1B,oBAAC,UAAU,IACT,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,qBAAqB,kBAAkB,CAAC,OAAO,CAAC,EAAE,EACzD,MAAM,QACN,SAAS,EAAE,OAAO,CAAC,QAAQ,EAC3B,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,KAAK,CAAC,EAAE;oBAChB,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACxC,CAAC,IAEA,OAAO;iBACL,QAAQ,CACP,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,CAClE;iBACA,GAAG,CAAC,GAAG,CAAC,EAAE;gBACT,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gBACxD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAA;gBAC7C,OAAO,CACL,oBAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK;oBACzD,wBAAwB,CAAC,GAAG,CAAC;;oBAAI,GAAG;;oBAAM,GAAG;oBAC7C,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE;oBACjC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAC9C,CACZ,CAAA;YACH,CAAC,CAAC,CACO;YACb,6BAAK,KAAK,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;gBACpD,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,GAAG,EAAE;wBACZ,eAAe,CAAC,CAAC,YAAY,CAAC,CAAA;oBAChC,CAAC,IAEA,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAC1C,CACL,CACF;QAEL,YAAY,IAAI,CACf,oBAAC,kBAAkB,IACjB,KAAK,EACH,eAAe;gBACb,CAAC,CAAC,IAAI,wBAAwB,CAAC,kBAAkB,CAAC,KAAK,eAAe,EAAE;gBACxE,CAAC,CAAC,YAAY,GAElB,CACH,CACA,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -11,7 +11,7 @@ export declare function revlist(list: Feat[], seqlen: number): {
|
|
|
11
11
|
end: number;
|
|
12
12
|
type?: string;
|
|
13
13
|
}[];
|
|
14
|
-
export declare function getProteinSequenceFromFeature({
|
|
14
|
+
export declare function getProteinSequenceFromFeature({ feature, seq, }: {
|
|
15
15
|
seq: string;
|
|
16
|
-
|
|
16
|
+
feature: Feature;
|
|
17
17
|
}): string;
|
|
@@ -20,8 +20,8 @@ export function revlist(list, seqlen) {
|
|
|
20
20
|
}))
|
|
21
21
|
.toSorted((a, b) => a.start - b.start);
|
|
22
22
|
}
|
|
23
|
-
export function getProteinSequenceFromFeature({
|
|
24
|
-
const { subfeatures, start, strand } =
|
|
23
|
+
export function getProteinSequenceFromFeature({ feature, seq, }) {
|
|
24
|
+
const { subfeatures, start, strand } = feature.toJSON();
|
|
25
25
|
const cds = dedupe(subfeatures
|
|
26
26
|
?.toSorted((a, b) => a.start - b.start)
|
|
27
27
|
.map(sub => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculateProteinSequence.js","sourceRoot":"","sources":["../../../src/LaunchMsaView/components/calculateProteinSequence.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,GACP,MAAM,oBAAoB,CAAA;AAK3B,MAAM,UAAU,MAAM,CAAC,QAAgB,EAAE,QAAgB;IACvD,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,EACvC,GAAG,EACH,QAAQ,EACR,UAAU,GAKX;IACC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IACjC,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,qDAAqD;QACrD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAA;IACnD,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,MAAc;IAClD,OAAO,IAAI;SACR,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACX,GAAG,GAAG;QACN,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG;QACvB,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,KAAK;KACxB,CAAC,CAAC;SACF,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,EAC5C,
|
|
1
|
+
{"version":3,"file":"calculateProteinSequence.js","sourceRoot":"","sources":["../../../src/LaunchMsaView/components/calculateProteinSequence.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,GACP,MAAM,oBAAoB,CAAA;AAK3B,MAAM,UAAU,MAAM,CAAC,QAAgB,EAAE,QAAgB;IACvD,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,EACvC,GAAG,EACH,QAAQ,EACR,UAAU,GAKX;IACC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IACjC,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,qDAAqD;QACrD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAA;IACnD,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,MAAc;IAClD,OAAO,IAAI;SACR,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACX,GAAG,GAAG;QACN,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG;QACvB,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,KAAK;KACxB,CAAC,CAAC;SACF,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,EAC5C,OAAO,EACP,GAAG,GAIJ;IACC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IACvD,MAAM,GAAG,GAAG,MAAM,CAChB,WAAW;QACT,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACtC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACX,GAAG,GAAG;QACN,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK;QACxB,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,KAAK;KACrB,CAAC,CAAC;SACF,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,EACxD,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CACpC,CAAA;IAED,OAAO,wBAAwB,CAAC;QAC9B,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;QACnD,QAAQ,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;QAC3C,UAAU,EAAE,kBAAkB,CAAC,iBAAiB,CAAC;KAClD,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
import type { SeqState } from './types';
|
|
2
1
|
import type { Feature } from '@jbrowse/core/util';
|
|
3
|
-
export interface ErrorState {
|
|
4
|
-
error: string;
|
|
5
|
-
}
|
|
6
2
|
export declare function useFeatureSequence({ view, feature, upDownBp, forceLoad, }: {
|
|
7
3
|
view: {
|
|
8
4
|
assemblyNames?: string[];
|
|
9
5
|
} | undefined;
|
|
10
|
-
feature
|
|
6
|
+
feature?: Feature;
|
|
11
7
|
upDownBp?: number;
|
|
12
8
|
forceLoad?: boolean;
|
|
13
9
|
}): {
|
|
14
10
|
proteinSequence: string;
|
|
15
|
-
sequence: SeqState |
|
|
16
|
-
error:
|
|
11
|
+
sequence: import("./types").SeqState | undefined;
|
|
12
|
+
error: any;
|
|
17
13
|
};
|
|
@@ -1,69 +1,16 @@
|
|
|
1
|
-
import { useEffect, useState } from 'react';
|
|
2
|
-
import { getSession } from '@jbrowse/core/util';
|
|
3
1
|
import { getProteinSequenceFromFeature } from './calculateProteinSequence';
|
|
4
|
-
import {
|
|
5
|
-
const BPLIMIT = 500_000;
|
|
2
|
+
import { useSWRFeatureSequence } from './useSWRFeatureSequence';
|
|
6
3
|
export function useFeatureSequence({ view, feature, upDownBp = 0, forceLoad = true, }) {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
(async () => {
|
|
15
|
-
try {
|
|
16
|
-
setError(undefined);
|
|
17
|
-
setSequence(undefined);
|
|
18
|
-
const session = getSession(view);
|
|
19
|
-
const { start, end, refName } = feature.toJSON();
|
|
20
|
-
if (!assemblyName) {
|
|
21
|
-
throw new Error('No assembly found');
|
|
22
|
-
}
|
|
23
|
-
if (!forceLoad && end - start > BPLIMIT) {
|
|
24
|
-
setSequence({
|
|
25
|
-
error: `Genomic sequence larger than ${BPLIMIT}bp, use "force load" button to display`,
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
const b = start - upDownBp;
|
|
30
|
-
const e = end + upDownBp;
|
|
31
|
-
setSequence({
|
|
32
|
-
seq: await fetchSeq({
|
|
33
|
-
start,
|
|
34
|
-
end,
|
|
35
|
-
refName,
|
|
36
|
-
assemblyName,
|
|
37
|
-
session,
|
|
38
|
-
}),
|
|
39
|
-
upstream: await fetchSeq({
|
|
40
|
-
start: Math.max(0, b),
|
|
41
|
-
end: start,
|
|
42
|
-
refName,
|
|
43
|
-
assemblyName,
|
|
44
|
-
session,
|
|
45
|
-
}),
|
|
46
|
-
downstream: await fetchSeq({
|
|
47
|
-
start: end,
|
|
48
|
-
end: e,
|
|
49
|
-
refName,
|
|
50
|
-
assemblyName,
|
|
51
|
-
session,
|
|
52
|
-
}),
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
catch (e) {
|
|
57
|
-
console.error(e);
|
|
58
|
-
setError(e);
|
|
59
|
-
}
|
|
60
|
-
})();
|
|
61
|
-
}
|
|
62
|
-
}, [feature, view, upDownBp, assemblyName, forceLoad]);
|
|
63
|
-
const proteinSequence = sequence && !('error' in sequence)
|
|
4
|
+
const { sequence, error } = useSWRFeatureSequence({
|
|
5
|
+
view,
|
|
6
|
+
feature,
|
|
7
|
+
upDownBp,
|
|
8
|
+
forceLoad,
|
|
9
|
+
});
|
|
10
|
+
const proteinSequence = sequence && !('error' in sequence) && feature
|
|
64
11
|
? getProteinSequenceFromFeature({
|
|
65
12
|
seq: sequence.seq,
|
|
66
|
-
|
|
13
|
+
feature,
|
|
67
14
|
})
|
|
68
15
|
: '';
|
|
69
16
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFeatureSequence.js","sourceRoot":"","sources":["../../../src/LaunchMsaView/components/useFeatureSequence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useFeatureSequence.js","sourceRoot":"","sources":["../../../src/LaunchMsaView/components/useFeatureSequence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAI/D,MAAM,UAAU,kBAAkB,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,QAAQ,GAAG,CAAC,EACZ,SAAS,GAAG,IAAI,GAMjB;IACC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,qBAAqB,CAAC;QAChD,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,SAAS;KACV,CAAC,CAAA;IAEF,MAAM,eAAe,GACnB,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,OAAO;QAC3C,CAAC,CAAC,6BAA6B,CAAC;YAC5B,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,OAAO;SACR,CAAC;QACJ,CAAC,CAAC,EAAE,CAAA;IAER,OAAO;QACL,eAAe;QACf,QAAQ;QACR,KAAK;KACN,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SeqState } from './types';
|
|
2
|
+
import type { Feature } from '@jbrowse/core/util';
|
|
3
|
+
export declare function useSWRFeatureSequence({ view, feature, upDownBp, forceLoad, }: {
|
|
4
|
+
view: {
|
|
5
|
+
assemblyNames?: string[];
|
|
6
|
+
} | undefined;
|
|
7
|
+
feature?: Feature;
|
|
8
|
+
upDownBp?: number;
|
|
9
|
+
forceLoad?: boolean;
|
|
10
|
+
}): {
|
|
11
|
+
sequence: SeqState | undefined;
|
|
12
|
+
error: any;
|
|
13
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { getSession } from '@jbrowse/core/util';
|
|
2
|
+
import useSWR from 'swr';
|
|
3
|
+
import { fetchSeq } from './fetchSeq';
|
|
4
|
+
const BPLIMIT = 500_000;
|
|
5
|
+
async function featureSequenceFetcher({ feature, assemblyName, upDownBp, view, forceLoad, }) {
|
|
6
|
+
const session = getSession(view);
|
|
7
|
+
const { start, end, refName } = feature.toJSON();
|
|
8
|
+
const b = start - upDownBp;
|
|
9
|
+
const e = end + upDownBp;
|
|
10
|
+
const [seq, upstream, downstream] = await Promise.all([
|
|
11
|
+
fetchSeq({
|
|
12
|
+
start,
|
|
13
|
+
end,
|
|
14
|
+
refName,
|
|
15
|
+
assemblyName,
|
|
16
|
+
session,
|
|
17
|
+
}),
|
|
18
|
+
fetchSeq({
|
|
19
|
+
start: Math.max(0, b),
|
|
20
|
+
end: start,
|
|
21
|
+
refName,
|
|
22
|
+
assemblyName,
|
|
23
|
+
session,
|
|
24
|
+
}),
|
|
25
|
+
fetchSeq({
|
|
26
|
+
start: end,
|
|
27
|
+
end: e,
|
|
28
|
+
refName,
|
|
29
|
+
assemblyName,
|
|
30
|
+
session,
|
|
31
|
+
}),
|
|
32
|
+
]);
|
|
33
|
+
return { seq, upstream, downstream };
|
|
34
|
+
}
|
|
35
|
+
export function useSWRFeatureSequence({ view, feature, upDownBp = 0, forceLoad = true, }) {
|
|
36
|
+
const assemblyName = view?.assemblyNames?.[0];
|
|
37
|
+
const { data, error } = useSWR(
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
39
|
+
feature && assemblyName && view
|
|
40
|
+
? [feature.id(), assemblyName, upDownBp, forceLoad, 'feature-sequence']
|
|
41
|
+
: null, () => featureSequenceFetcher({
|
|
42
|
+
feature: feature,
|
|
43
|
+
assemblyName: assemblyName,
|
|
44
|
+
upDownBp,
|
|
45
|
+
view: view,
|
|
46
|
+
forceLoad,
|
|
47
|
+
}));
|
|
48
|
+
return {
|
|
49
|
+
sequence: data,
|
|
50
|
+
error,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=useSWRFeatureSequence.js.map
|