jbrowse-plugin-protein3d 0.0.3 → 0.0.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.
Files changed (196) hide show
  1. package/dist/AddHighlightModel/GenomeMouseoverHighlight.js +3 -9
  2. package/dist/AddHighlightModel/GenomeMouseoverHighlight.js.map +1 -1
  3. package/dist/AddHighlightModel/HighlightComponents.d.ts +1 -2
  4. package/dist/AddHighlightModel/HighlightComponents.js.map +1 -1
  5. package/dist/AddHighlightModel/ProteinToGenomeClickHighlight.js +4 -3
  6. package/dist/AddHighlightModel/ProteinToGenomeClickHighlight.js.map +1 -1
  7. package/dist/AddHighlightModel/ProteinToGenomeHoverHighlight.d.ts +1 -2
  8. package/dist/AddHighlightModel/ProteinToGenomeHoverHighlight.js +4 -3
  9. package/dist/AddHighlightModel/ProteinToGenomeHoverHighlight.js.map +1 -1
  10. package/dist/AddHighlightModel/util.js +1 -1
  11. package/dist/AddHighlightModel/util.js.map +1 -1
  12. package/dist/AlphaFoldConfidenceAdapter/AlphaFoldConfidenceAdapter.d.ts +16 -0
  13. package/dist/AlphaFoldConfidenceAdapter/AlphaFoldConfidenceAdapter.js +43 -0
  14. package/dist/AlphaFoldConfidenceAdapter/AlphaFoldConfidenceAdapter.js.map +1 -0
  15. package/dist/AlphaFoldConfidenceAdapter/configSchema.d.ts +13 -0
  16. package/dist/AlphaFoldConfidenceAdapter/configSchema.js +16 -0
  17. package/dist/AlphaFoldConfidenceAdapter/configSchema.js.map +1 -0
  18. package/dist/AlphaFoldConfidenceAdapter/index.d.ts +2 -0
  19. package/dist/AlphaFoldConfidenceAdapter/index.js +11 -0
  20. package/dist/AlphaFoldConfidenceAdapter/index.js.map +1 -0
  21. package/dist/AlphaMissensePathogenicityAdapter/AlphaMissensePathogenicityAdapter.d.ts +30 -0
  22. package/dist/AlphaMissensePathogenicityAdapter/AlphaMissensePathogenicityAdapter.js +78 -0
  23. package/dist/AlphaMissensePathogenicityAdapter/AlphaMissensePathogenicityAdapter.js.map +1 -0
  24. package/dist/AlphaMissensePathogenicityAdapter/configSchema.d.ts +13 -0
  25. package/dist/AlphaMissensePathogenicityAdapter/configSchema.js +16 -0
  26. package/dist/AlphaMissensePathogenicityAdapter/configSchema.js.map +1 -0
  27. package/dist/AlphaMissensePathogenicityAdapter/index.d.ts +2 -0
  28. package/dist/AlphaMissensePathogenicityAdapter/index.js +11 -0
  29. package/dist/AlphaMissensePathogenicityAdapter/index.js.map +1 -0
  30. package/dist/LaunchProteinView/components/AlphaFoldDBSearch.js +162 -13
  31. package/dist/LaunchProteinView/components/AlphaFoldDBSearch.js.map +1 -1
  32. package/dist/LaunchProteinView/components/AlphaFoldDBSearchStatus.js +8 -6
  33. package/dist/LaunchProteinView/components/AlphaFoldDBSearchStatus.js.map +1 -1
  34. package/dist/LaunchProteinView/components/HelpButton.js +6 -2
  35. package/dist/LaunchProteinView/components/HelpButton.js.map +1 -1
  36. package/dist/LaunchProteinView/components/HelpDialog.js +3 -1
  37. package/dist/LaunchProteinView/components/HelpDialog.js.map +1 -1
  38. package/dist/LaunchProteinView/components/LaunchProteinViewDialog.js +12 -4
  39. package/dist/LaunchProteinView/components/LaunchProteinViewDialog.js.map +1 -1
  40. package/dist/LaunchProteinView/components/MSATable.js +3 -1
  41. package/dist/LaunchProteinView/components/MSATable.js.map +1 -1
  42. package/dist/LaunchProteinView/components/ManualUniProtIDEntry.d.ts +8 -0
  43. package/dist/LaunchProteinView/components/ManualUniProtIDEntry.js +225 -0
  44. package/dist/LaunchProteinView/components/ManualUniProtIDEntry.js.map +1 -0
  45. package/dist/LaunchProteinView/components/TranscriptSelector.js +3 -1
  46. package/dist/LaunchProteinView/components/TranscriptSelector.js.map +1 -1
  47. package/dist/LaunchProteinView/components/UserProvidedStructure.js +19 -12
  48. package/dist/LaunchProteinView/components/UserProvidedStructure.js.map +1 -1
  49. package/dist/LaunchProteinView/components/calculateProteinSequence.js +5 -3
  50. package/dist/LaunchProteinView/components/calculateProteinSequence.js.map +1 -1
  51. package/dist/LaunchProteinView/components/useLocalStructureFileSequence.d.ts +1 -1
  52. package/dist/LaunchProteinView/components/useLocalStructureFileSequence.js +29 -9
  53. package/dist/LaunchProteinView/components/useLocalStructureFileSequence.js.map +1 -1
  54. package/dist/LaunchProteinView/components/useRemoteStructureFileSequence.d.ts +1 -1
  55. package/dist/LaunchProteinView/components/useRemoteStructureFileSequence.js +25 -8
  56. package/dist/LaunchProteinView/components/useRemoteStructureFileSequence.js.map +1 -1
  57. package/dist/LaunchProteinView/components/util.js +1 -1
  58. package/dist/LaunchProteinView/index.js +7 -3
  59. package/dist/LaunchProteinView/index.js.map +1 -1
  60. package/dist/ProteinView/{loadStructureFromData.d.ts → addStructureFromData.d.ts} +2 -2
  61. package/dist/ProteinView/{loadStructureFromData.js → addStructureFromData.js} +3 -8
  62. package/dist/ProteinView/addStructureFromData.js.map +1 -0
  63. package/dist/ProteinView/{loadStructureFromURL.d.ts → addStructureFromURL.d.ts} +2 -2
  64. package/dist/ProteinView/{loadStructureFromURL.js → addStructureFromURL.js} +11 -9
  65. package/dist/ProteinView/addStructureFromURL.js.map +1 -0
  66. package/dist/ProteinView/clearSelection.js +1 -1
  67. package/dist/ProteinView/clearSelection.js.map +1 -1
  68. package/dist/ProteinView/components/ProteinAlignment.d.ts +2 -2
  69. package/dist/ProteinView/components/ProteinAlignment.js +37 -26
  70. package/dist/ProteinView/components/ProteinAlignment.js.map +1 -1
  71. package/dist/ProteinView/components/ProteinAlignmentHelpButton.d.ts +2 -2
  72. package/dist/ProteinView/components/ProteinAlignmentHelpButton.js +6 -4
  73. package/dist/ProteinView/components/ProteinAlignmentHelpButton.js.map +1 -1
  74. package/dist/ProteinView/components/ProteinAlignmentHelpDialog.js +6 -5
  75. package/dist/ProteinView/components/ProteinAlignmentHelpDialog.js.map +1 -1
  76. package/dist/ProteinView/components/ProteinView.js +18 -60
  77. package/dist/ProteinView/components/ProteinView.js.map +1 -1
  78. package/dist/ProteinView/components/{Header.js → ProteinViewHeader.js} +29 -12
  79. package/dist/ProteinView/components/ProteinViewHeader.js.map +1 -0
  80. package/dist/ProteinView/components/SplitString.d.ts +4 -4
  81. package/dist/ProteinView/components/SplitString.js +3 -3
  82. package/dist/ProteinView/components/SplitString.js.map +1 -1
  83. package/dist/ProteinView/genomeToProtein.d.ts +2 -2
  84. package/dist/ProteinView/genomeToProtein.js +4 -5
  85. package/dist/ProteinView/genomeToProtein.js.map +1 -1
  86. package/dist/ProteinView/highlightResidue.js +2 -2
  87. package/dist/ProteinView/highlightResidue.js.map +1 -1
  88. package/dist/ProteinView/launchRemotePairwiseAlignment.d.ts +2 -5
  89. package/dist/ProteinView/launchRemotePairwiseAlignment.js +7 -3
  90. package/dist/ProteinView/launchRemotePairwiseAlignment.js.map +1 -1
  91. package/dist/ProteinView/model.d.ts +492 -160
  92. package/dist/ProteinView/model.js +62 -246
  93. package/dist/ProteinView/model.js.map +1 -1
  94. package/dist/ProteinView/proteinToGenomeMapping.d.ts +6 -6
  95. package/dist/ProteinView/proteinToGenomeMapping.js +29 -28
  96. package/dist/ProteinView/proteinToGenomeMapping.js.map +1 -1
  97. package/dist/ProteinView/selectResidue.js +1 -1
  98. package/dist/ProteinView/selectResidue.js.map +1 -1
  99. package/dist/ProteinView/structureModel.d.ts +183 -0
  100. package/dist/ProteinView/structureModel.js +407 -0
  101. package/dist/ProteinView/structureModel.js.map +1 -0
  102. package/dist/ProteinView/useProteinView.d.ts +1 -4
  103. package/dist/ProteinView/useProteinView.js +3 -15
  104. package/dist/ProteinView/useProteinView.js.map +1 -1
  105. package/dist/ProteinView/util.d.ts +3 -3
  106. package/dist/ProteinView/util.js +8 -6
  107. package/dist/ProteinView/util.js.map +1 -1
  108. package/dist/UniProtVariationAdapter/UniProtVariationAdapter.d.ts +15 -0
  109. package/dist/UniProtVariationAdapter/UniProtVariationAdapter.js +55 -0
  110. package/dist/UniProtVariationAdapter/UniProtVariationAdapter.js.map +1 -0
  111. package/dist/UniProtVariationAdapter/configSchema.d.ts +17 -0
  112. package/dist/UniProtVariationAdapter/configSchema.js +20 -0
  113. package/dist/UniProtVariationAdapter/configSchema.js.map +1 -0
  114. package/dist/UniProtVariationAdapter/index.d.ts +2 -0
  115. package/dist/UniProtVariationAdapter/index.js +11 -0
  116. package/dist/UniProtVariationAdapter/index.js.map +1 -0
  117. package/dist/genomeToTranscriptMapping.d.ts +2 -2
  118. package/dist/genomeToTranscriptMapping.js +3 -3
  119. package/dist/genomeToTranscriptMapping.js.map +1 -1
  120. package/dist/index.js +6 -0
  121. package/dist/index.js.map +1 -1
  122. package/dist/jbrowse-plugin-protein3d.umd.production.min.js +2506 -1658
  123. package/dist/jbrowse-plugin-protein3d.umd.production.min.js.map +4 -4
  124. package/dist/mappings.d.ts +12 -10
  125. package/dist/mappings.js +7 -7
  126. package/dist/mappings.js.map +1 -1
  127. package/dist/mappings.test.js +7 -5
  128. package/dist/mappings.test.js.map +1 -1
  129. package/dist/test_data/gene.d.ts +577 -64
  130. package/dist/test_data/gene.js +1 -1
  131. package/dist/test_data/gene.js.map +1 -1
  132. package/package.json +20 -19
  133. package/src/AddHighlightModel/GenomeMouseoverHighlight.tsx +4 -17
  134. package/src/AddHighlightModel/HighlightComponents.tsx +1 -3
  135. package/src/AddHighlightModel/ProteinToGenomeClickHighlight.tsx +17 -14
  136. package/src/AddHighlightModel/ProteinToGenomeHoverHighlight.tsx +18 -17
  137. package/src/AddHighlightModel/util.ts +1 -1
  138. package/src/AlphaFoldConfidenceAdapter/AlphaFoldConfidenceAdapter.ts +63 -0
  139. package/src/AlphaFoldConfidenceAdapter/configSchema.ts +21 -0
  140. package/src/AlphaFoldConfidenceAdapter/index.ts +19 -0
  141. package/src/AlphaMissensePathogenicityAdapter/AlphaMissensePathogenicityAdapter.ts +109 -0
  142. package/src/AlphaMissensePathogenicityAdapter/configSchema.ts +21 -0
  143. package/src/AlphaMissensePathogenicityAdapter/index.ts +19 -0
  144. package/src/LaunchProteinView/components/AlphaFoldDBSearch.tsx +173 -12
  145. package/src/LaunchProteinView/components/AlphaFoldDBSearchStatus.tsx +8 -6
  146. package/src/LaunchProteinView/components/HelpButton.tsx +10 -2
  147. package/src/LaunchProteinView/components/HelpDialog.tsx +6 -1
  148. package/src/LaunchProteinView/components/LaunchProteinViewDialog.tsx +20 -4
  149. package/src/LaunchProteinView/components/MSATable.tsx +3 -1
  150. package/src/LaunchProteinView/components/ManualUniProtIDEntry.tsx +332 -0
  151. package/src/LaunchProteinView/components/TranscriptSelector.tsx +9 -7
  152. package/src/LaunchProteinView/components/UserProvidedStructure.tsx +18 -13
  153. package/src/LaunchProteinView/components/calculateProteinSequence.ts +6 -4
  154. package/src/LaunchProteinView/components/useLocalStructureFileSequence.ts +28 -9
  155. package/src/LaunchProteinView/components/useRemoteStructureFileSequence.ts +23 -8
  156. package/src/LaunchProteinView/components/util.ts +1 -1
  157. package/src/LaunchProteinView/index.ts +36 -26
  158. package/src/ProteinView/{loadStructureFromData.ts → addStructureFromData.ts} +2 -8
  159. package/src/ProteinView/{loadStructureFromURL.ts → addStructureFromURL.ts} +11 -11
  160. package/src/ProteinView/clearSelection.ts +1 -1
  161. package/src/ProteinView/components/ProteinAlignment.tsx +51 -35
  162. package/src/ProteinView/components/ProteinAlignmentHelpButton.tsx +4 -4
  163. package/src/ProteinView/components/ProteinAlignmentHelpDialog.tsx +15 -11
  164. package/src/ProteinView/components/ProteinView.tsx +22 -82
  165. package/src/ProteinView/components/{Header.tsx → ProteinViewHeader.tsx} +44 -23
  166. package/src/ProteinView/components/SplitString.tsx +8 -8
  167. package/src/ProteinView/genomeToProtein.ts +5 -9
  168. package/src/ProteinView/highlightResidue.ts +2 -2
  169. package/src/ProteinView/launchRemotePairwiseAlignment.ts +6 -3
  170. package/src/ProteinView/model.ts +75 -287
  171. package/src/ProteinView/proteinToGenomeMapping.ts +40 -38
  172. package/src/ProteinView/selectResidue.ts +1 -1
  173. package/src/ProteinView/structureModel.ts +512 -0
  174. package/src/ProteinView/useProteinView.ts +2 -19
  175. package/src/ProteinView/util.ts +20 -9
  176. package/src/UniProtVariationAdapter/UniProtVariationAdapter.ts +99 -0
  177. package/src/UniProtVariationAdapter/configSchema.ts +25 -0
  178. package/src/UniProtVariationAdapter/index.ts +17 -0
  179. package/src/__snapshots__/mappings.test.ts.snap +224 -224
  180. package/src/genomeToTranscriptMapping.ts +9 -9
  181. package/src/index.ts +6 -0
  182. package/src/mappings.test.ts +7 -5
  183. package/src/mappings.ts +25 -23
  184. package/src/test_data/gene.ts +3 -3
  185. package/dist/ProteinView/components/Header.js.map +0 -1
  186. package/dist/ProteinView/loadStructureFromData.js.map +0 -1
  187. package/dist/ProteinView/loadStructureFromURL.js.map +0 -1
  188. package/dist/ProteinView/useProteinViewClickBehavior.d.ts +0 -8
  189. package/dist/ProteinView/useProteinViewClickBehavior.js +0 -34
  190. package/dist/ProteinView/useProteinViewClickBehavior.js.map +0 -1
  191. package/dist/ProteinView/useProteinViewHoverBehavior.d.ts +0 -6
  192. package/dist/ProteinView/useProteinViewHoverBehavior.js +0 -31
  193. package/dist/ProteinView/useProteinViewHoverBehavior.js.map +0 -1
  194. package/src/ProteinView/useProteinViewClickBehavior.ts +0 -48
  195. package/src/ProteinView/useProteinViewHoverBehavior.ts +0 -44
  196. /package/dist/ProteinView/components/{Header.d.ts → ProteinViewHeader.d.ts} +0 -0
@@ -7,6 +7,7 @@ import {
7
7
  Feature,
8
8
  getContainingView,
9
9
  getSession,
10
+ isSessionWithAddTracks,
10
11
  } from '@jbrowse/core/util'
11
12
  import { ErrorMessage, LoadingEllipses } from '@jbrowse/core/ui'
12
13
  import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
@@ -78,13 +79,14 @@ const AlphaFoldDBSearch = observer(function ({
78
79
  ? `https://alphafold.ebi.ac.uk/files/AF-${uniprotId}-F1-model_v4.cif`
79
80
  : undefined
80
81
  const {
81
- seq: structureSequence,
82
+ sequences: structureSequences,
82
83
  isLoading: isRemoteStructureSequenceLoading,
83
84
  error: remoteStructureSequenceError,
84
85
  } = useRemoteStructureFileSequence({ url })
85
86
  const e =
86
87
  myGeneError || isoformProteinSequencesError || remoteStructureSequenceError
87
88
 
89
+ const structureSequence = structureSequences?.[0]
88
90
  useEffect(() => {
89
91
  if (isoformSequences !== undefined) {
90
92
  const ret =
@@ -102,8 +104,8 @@ const AlphaFoldDBSearch = observer(function ({
102
104
  <DialogContent className={classes.dialogContent}>
103
105
  {e ? <ErrorMessage error={e} /> : null}
104
106
  <Typography>
105
- Automatically find AlphaFoldDB entry for given transcript{' '}
106
- <HelpButton />
107
+ Automatically find AlphaFoldDB entry for given transcript via gene ID
108
+ lookup <HelpButton />
107
109
  </Typography>
108
110
  {isRemoteStructureSequenceLoading ? (
109
111
  <LoadingEllipses
@@ -116,7 +118,7 @@ const AlphaFoldDBSearch = observer(function ({
116
118
  variant="h6"
117
119
  message="Looking up UniProt ID from mygene.info"
118
120
  />
119
- ) : !uniprotId ? (
121
+ ) : uniprotId ? null : (
120
122
  <div>
121
123
  UniProt ID not found. Search sequence on AlphaFoldDB{' '}
122
124
  <a
@@ -130,7 +132,7 @@ const AlphaFoldDBSearch = observer(function ({
130
132
  After visiting the above link, then paste the structure URL into the
131
133
  Manual tab
132
134
  </div>
133
- ) : null}
135
+ )}
134
136
  {isIsoformProteinSequencesLoading ? (
135
137
  <LoadingEllipses
136
138
  variant="h6"
@@ -160,7 +162,9 @@ const AlphaFoldDBSearch = observer(function ({
160
162
  <Button
161
163
  variant="contained"
162
164
  color="secondary"
163
- onClick={() => handleClose()}
165
+ onClick={() => {
166
+ handleClose()
167
+ }}
164
168
  >
165
169
  Cancel
166
170
  </Button>
@@ -173,16 +177,173 @@ const AlphaFoldDBSearch = observer(function ({
173
177
  onClick={() => {
174
178
  session.addView('ProteinView', {
175
179
  type: 'ProteinView',
176
- url,
177
- seq2: userSelectedProteinSequence?.seq,
178
- feature: selectedTranscript?.toJSON(),
179
- connectedViewId: view.id,
180
- displayName: `Protein view ${getGeneDisplayName(feature)} - ${getTranscriptDisplayName(selectedTranscript)}`,
180
+ isFloating: true,
181
+ structures: [
182
+ {
183
+ url,
184
+ userProvidedTranscriptSequence:
185
+ userSelectedProteinSequence?.seq,
186
+ feature: selectedTranscript?.toJSON(),
187
+ connectedViewId: view.id,
188
+ },
189
+ ],
190
+ displayName: [
191
+ 'Protein view',
192
+ uniprotId,
193
+ getGeneDisplayName(feature),
194
+ getTranscriptDisplayName(selectedTranscript),
195
+ ].join(' - '),
181
196
  })
182
197
  handleClose()
183
198
  }}
184
199
  >
185
- Submit
200
+ Launch 3-D protein structure view
201
+ </Button>
202
+ <Button
203
+ variant="contained"
204
+ disabled={
205
+ !uniprotId || !userSelectedProteinSequence || !selectedTranscript
206
+ }
207
+ onClick={() => {
208
+ if (uniprotId && isSessionWithAddTracks(session)) {
209
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
210
+ ;(async () => {
211
+ try {
212
+ session.addTemporaryAssembly?.({
213
+ name: uniprotId,
214
+ sequence: {
215
+ type: 'ReferenceSequenceTrack',
216
+ trackId: `${uniprotId}-ReferenceSequenceTrack`,
217
+ sequenceType: 'pep',
218
+ adapter: {
219
+ type: 'UnindexedFastaAdapter',
220
+ rewriteRefNames: "jexl:split(refName,'|')[1]",
221
+ fastaLocation: {
222
+ uri: `https://rest.uniprot.org/uniprotkb/${uniprotId}.fasta`,
223
+ },
224
+ },
225
+ },
226
+ })
227
+ const url = `https://rest.uniprot.org/uniprotkb/${uniprotId}.gff`
228
+ const res = await fetch(url)
229
+ if (!res.ok) {
230
+ throw new Error(`HTTP ${res.status} fetching ${url}`)
231
+ }
232
+ const data = await res.text()
233
+
234
+ const types = [
235
+ ...new Set(
236
+ data
237
+ .split('\n')
238
+ .filter(f => !f.startsWith('#'))
239
+ .map(f => f.trim())
240
+ .filter(f => !!f)
241
+ .map(f => f.split('\t')[2]),
242
+ ),
243
+ ]
244
+ types.forEach(type => {
245
+ const s = `${uniprotId}-${type}`
246
+ session.addTrackConf({
247
+ type: 'FeatureTrack',
248
+ trackId: s,
249
+ name: type,
250
+ adapter: {
251
+ type: 'Gff3Adapter',
252
+ gffLocation: {
253
+ uri: `https://rest.uniprot.org/uniprotkb/${uniprotId}.gff`,
254
+ },
255
+ },
256
+ assemblyNames: [uniprotId],
257
+ displays: [
258
+ {
259
+ displayId: `${s}-LinearBasicDisplay`,
260
+ type: 'LinearBasicDisplay',
261
+ jexlFilters: [`get(feature,'type')=='${type}'`],
262
+ },
263
+ ],
264
+ })
265
+ })
266
+ session.addTrackConf({
267
+ type: 'FeatureTrack',
268
+ trackId: `${uniprotId}-Antigen`,
269
+ name: 'Antigen',
270
+ adapter: {
271
+ type: 'Gff3Adapter',
272
+ gffLocation: {
273
+ uri: `https://www.ebi.ac.uk/proteins/api/antigen/${uniprotId}?format=gff`,
274
+ },
275
+ },
276
+ assemblyNames: [uniprotId],
277
+ })
278
+ session.addTrackConf({
279
+ type: 'FeatureTrack',
280
+ trackId: `${uniprotId}-Variation`,
281
+ name: 'Variation',
282
+ adapter: {
283
+ type: 'UniProtVariationAdapter',
284
+ location: {
285
+ uri: `https://www.ebi.ac.uk/proteins/api/variation/${uniprotId}.json`,
286
+ },
287
+ },
288
+ assemblyNames: [uniprotId],
289
+ })
290
+ session.addTrackConf({
291
+ type: 'QuantitativeTrack',
292
+ trackId: `${uniprotId}-AlphaFold-confidence`,
293
+ name: 'AlphaFold confidence',
294
+ adapter: {
295
+ type: 'AlphaFoldConfidenceAdapter',
296
+ location: {
297
+ uri: `https://alphafold.ebi.ac.uk/files/AF-${uniprotId}-F1-confidence_v4.json`,
298
+ },
299
+ },
300
+ assemblyNames: [uniprotId],
301
+ })
302
+ session.addTrackConf({
303
+ type: 'MultiQuantitativeTrack',
304
+ trackId: `${uniprotId}-AlphaMissense-scores`,
305
+ name: 'AlphaMissense scores',
306
+ assemblyNames: [uniprotId],
307
+ adapter: {
308
+ type: 'AlphaMissensePathogenicityAdapter',
309
+ location: {
310
+ uri: `https://alphafold.ebi.ac.uk/files/AF-${uniprotId}-F1-aa-substitutions.csv`,
311
+ },
312
+ },
313
+ displays: [
314
+ {
315
+ type: 'MultiLinearWiggleDisplay',
316
+ displayId: `${uniprotId}-AlphaMissense-scores-MultiLinearWiggleDisplay`,
317
+ defaultRendering: 'multirowdensity',
318
+ renderers: {
319
+ MultiDensityRenderer: {
320
+ type: 'MultiDensityRenderer',
321
+ bicolorPivotValue: 0.5,
322
+ },
323
+ },
324
+ },
325
+ ],
326
+ })
327
+ const view = session.addView('LinearGenomeView', {
328
+ type: 'LinearGenomeView',
329
+ displayName: [
330
+ 'Protein view',
331
+ uniprotId,
332
+ getGeneDisplayName(feature),
333
+ getTranscriptDisplayName(selectedTranscript),
334
+ ].join(' - '),
335
+ }) as LinearGenomeViewModel
336
+ await view.navToLocString(uniprotId, uniprotId)
337
+ } catch (e) {
338
+ console.error(e)
339
+ session.notifyError(`${e}`, e)
340
+ }
341
+ })()
342
+ }
343
+ handleClose()
344
+ }}
345
+ >
346
+ Launch linear protein annotation view
186
347
  </Button>
187
348
  </DialogActions>
188
349
  </>
@@ -39,11 +39,7 @@ export default function AlphaFoldDBSearchStatus({
39
39
  : undefined
40
40
  const [showAllProteinSequences, setShowAllProteinSequences] = useState(false)
41
41
 
42
- return !uniprotId ? (
43
- <Typography>
44
- Searching {getDisplayName(selectedTranscript)} for UniProt ID
45
- </Typography>
46
- ) : (
42
+ return uniprotId ? (
47
43
  <>
48
44
  <Typography>
49
45
  Found Uniprot ID:{' '}
@@ -62,7 +58,9 @@ export default function AlphaFoldDBSearchStatus({
62
58
  <Button
63
59
  variant="contained"
64
60
  color="primary"
65
- onClick={() => setShowAllProteinSequences(!showAllProteinSequences)}
61
+ onClick={() => {
62
+ setShowAllProteinSequences(!showAllProteinSequences)
63
+ }}
66
64
  >
67
65
  {showAllProteinSequences
68
66
  ? 'Hide all isoform protein sequences'
@@ -80,5 +78,9 @@ export default function AlphaFoldDBSearchStatus({
80
78
  <NotFound uniprotId={uniprotId} />
81
79
  )}
82
80
  </>
81
+ ) : (
82
+ <Typography>
83
+ Searching {getDisplayName(selectedTranscript)} for UniProt ID
84
+ </Typography>
83
85
  )
84
86
  }
@@ -10,12 +10,20 @@ export default function HelpButton() {
10
10
  const [show, setShow] = useState(false)
11
11
  return (
12
12
  <>
13
- <IconButton onClick={() => setShow(true)}>
13
+ <IconButton
14
+ onClick={() => {
15
+ setShow(true)
16
+ }}
17
+ >
14
18
  <Help />
15
19
  </IconButton>
16
20
  {show ? (
17
21
  <Suspense fallback={null}>
18
- <HelpDialog handleClose={() => setShow(false)} />
22
+ <HelpDialog
23
+ handleClose={() => {
24
+ setShow(false)
25
+ }}
26
+ />
19
27
  </Suspense>
20
28
  ) : null}
21
29
  </>
@@ -62,7 +62,12 @@ export default function HelpDialog({
62
62
  </DialogContent>
63
63
  <Divider />
64
64
  <DialogActions>
65
- <Button onClick={() => handleClose()} color="primary">
65
+ <Button
66
+ onClick={() => {
67
+ handleClose()
68
+ }}
69
+ color="primary"
70
+ >
66
71
  Close
67
72
  </Button>
68
73
  </DialogActions>
@@ -6,6 +6,7 @@ import { AbstractTrackModel, Feature } from '@jbrowse/core/util'
6
6
  // locals
7
7
  import AlphaFoldDBSearch from './AlphaFoldDBSearch'
8
8
  import UserProvidedStructure from './UserProvidedStructure'
9
+ import ManualUniProtIDEntry from './ManualUniProtIDEntry'
9
10
  import TabPanel from './TabPanel'
10
11
 
11
12
  export default function LaunchProteinViewDialog({
@@ -22,12 +23,20 @@ export default function LaunchProteinViewDialog({
22
23
  <Dialog
23
24
  maxWidth="xl"
24
25
  title="Launch protein view"
25
- onClose={() => handleClose()}
26
26
  open
27
+ onClose={() => {
28
+ handleClose()
29
+ }}
27
30
  >
28
- <Tabs value={choice} onChange={(_, val) => setChoice(val)}>
29
- <Tab value={0} label="Automatic lookup" />
30
- <Tab value={1} label="Manual" />
31
+ <Tabs
32
+ value={choice}
33
+ onChange={(_, val) => {
34
+ setChoice(val)
35
+ }}
36
+ >
37
+ <Tab value={0} label="Automatic UniProt lookup" />
38
+ <Tab value={1} label="Manual UniProt entry" />
39
+ <Tab value={2} label="Open file manually" />
31
40
  </Tabs>
32
41
  <TabPanel value={choice} index={0}>
33
42
  <AlphaFoldDBSearch
@@ -37,6 +46,13 @@ export default function LaunchProteinViewDialog({
37
46
  />
38
47
  </TabPanel>
39
48
  <TabPanel value={choice} index={1}>
49
+ <ManualUniProtIDEntry
50
+ model={model}
51
+ feature={feature}
52
+ handleClose={handleClose}
53
+ />
54
+ </TabPanel>
55
+ <TabPanel value={choice} index={2}>
40
56
  <UserProvidedStructure
41
57
  model={model}
42
58
  feature={feature}
@@ -71,7 +71,9 @@ export default function MSATable({
71
71
  className={classes.margin}
72
72
  control={
73
73
  <Checkbox
74
- onChange={event => setShowInFastaFormat(event.target.checked)}
74
+ onChange={event => {
75
+ setShowInFastaFormat(event.target.checked)
76
+ }}
75
77
  checked={showInFastaFormat}
76
78
  />
77
79
  }