@apollo-annotation/jbrowse-plugin-apollo 0.3.13 → 1.0.0
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/ApolloRefNameAliasAdapter/ApolloRefNameAliasAdapter.d.ts +1 -1
- package/dist/ApolloRefNameAliasAdapter/ApolloRefNameAliasAdapter.d.ts.map +1 -1
- package/dist/BackendDrivers/BackendDriver.d.ts +29 -4
- package/dist/BackendDrivers/BackendDriver.d.ts.map +1 -1
- package/dist/BackendDrivers/CollaborationServerDriver.d.ts +3 -1
- package/dist/BackendDrivers/CollaborationServerDriver.d.ts.map +1 -1
- package/dist/BackendDrivers/LocalDriver/LocalDriver.d.ts +22 -0
- package/dist/BackendDrivers/LocalDriver/LocalDriver.d.ts.map +1 -0
- package/dist/BackendDrivers/LocalDriver/db.d.ts +4 -0
- package/dist/BackendDrivers/LocalDriver/db.d.ts.map +1 -0
- package/dist/BackendDrivers/index.d.ts +1 -2
- package/dist/BackendDrivers/index.d.ts.map +1 -1
- package/dist/ChangeManager.d.ts +3 -3
- package/dist/ChangeManager.d.ts.map +1 -1
- package/dist/FeatureDetailsWidget/ApolloTranscriptDetailsWidget.d.ts +0 -6
- package/dist/FeatureDetailsWidget/ApolloTranscriptDetailsWidget.d.ts.map +1 -1
- package/dist/FeatureDetailsWidget/TranscriptWidgetEditLocation.d.ts.map +1 -1
- package/dist/FeatureDetailsWidget/model.d.ts +0 -2
- package/dist/FeatureDetailsWidget/model.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/components/CheckResultWarnings.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/components/LinearApolloDisplay.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/components/OverlayCanvas.d.ts +7 -0
- package/dist/LinearApolloDisplay/components/OverlayCanvas.d.ts.map +1 -0
- package/dist/LinearApolloDisplay/components/Tooltip.d.ts +10 -0
- package/dist/LinearApolloDisplay/components/Tooltip.d.ts.map +1 -0
- package/dist/LinearApolloDisplay/glyphs/BoxGlyph.d.ts +0 -1
- package/dist/LinearApolloDisplay/glyphs/BoxGlyph.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/glyphs/CDSGlyph.d.ts +3 -0
- package/dist/LinearApolloDisplay/glyphs/CDSGlyph.d.ts.map +1 -0
- package/dist/LinearApolloDisplay/glyphs/ExonGlyph.d.ts +3 -0
- package/dist/LinearApolloDisplay/glyphs/ExonGlyph.d.ts.map +1 -0
- package/dist/LinearApolloDisplay/glyphs/GeneGlyph.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/glyphs/GenericChildGlyph.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/glyphs/Glyph.d.ts +26 -20
- package/dist/LinearApolloDisplay/glyphs/Glyph.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/glyphs/TranscriptGlyph.d.ts +3 -0
- package/dist/LinearApolloDisplay/glyphs/TranscriptGlyph.d.ts.map +1 -0
- package/dist/LinearApolloDisplay/glyphs/util.d.ts +13 -0
- package/dist/LinearApolloDisplay/glyphs/util.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/stateModel/base.d.ts +17 -0
- package/dist/LinearApolloDisplay/stateModel/base.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/stateModel/index.d.ts +35 -17
- package/dist/LinearApolloDisplay/stateModel/index.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/stateModel/layouts.d.ts +29 -7
- package/dist/LinearApolloDisplay/stateModel/layouts.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/stateModel/mouseEvents.d.ts +69 -23
- package/dist/LinearApolloDisplay/stateModel/mouseEvents.d.ts.map +1 -1
- package/dist/LinearApolloDisplay/stateModel/rendering.d.ts +26 -9
- package/dist/LinearApolloDisplay/stateModel/rendering.d.ts.map +1 -1
- package/dist/LinearApolloReferenceSequenceDisplay/stateModel/base.d.ts +6 -0
- package/dist/LinearApolloReferenceSequenceDisplay/stateModel/base.d.ts.map +1 -1
- package/dist/LinearApolloReferenceSequenceDisplay/stateModel/index.d.ts +6 -0
- package/dist/LinearApolloReferenceSequenceDisplay/stateModel/index.d.ts.map +1 -1
- package/dist/LinearApolloReferenceSequenceDisplay/stateModel/rendering.d.ts +6 -0
- package/dist/LinearApolloReferenceSequenceDisplay/stateModel/rendering.d.ts.map +1 -1
- package/dist/LinearApolloSixFrameDisplay/components/LinearApolloSixFrameDisplay.d.ts.map +1 -1
- package/dist/LinearApolloSixFrameDisplay/glyphs/GeneGlyph.d.ts.map +1 -1
- package/dist/LinearApolloSixFrameDisplay/glyphs/Glyph.d.ts +1 -1
- package/dist/LinearApolloSixFrameDisplay/glyphs/Glyph.d.ts.map +1 -1
- package/dist/LinearApolloSixFrameDisplay/stateModel/layouts.d.ts.map +1 -1
- package/dist/LinearApolloSixFrameDisplay/stateModel/rendering.d.ts.map +1 -1
- package/dist/OntologyManager/OntologyStore/fulltext.d.ts +1 -1
- package/dist/OntologyManager/OntologyStore/fulltext.d.ts.map +1 -1
- package/dist/OntologyManager/OntologyStore/index.d.ts +2 -2
- package/dist/OntologyManager/OntologyStore/index.d.ts.map +1 -1
- package/dist/OntologyManager/OntologyStore/indexeddb-storage.d.ts +1 -1
- package/dist/OntologyManager/OntologyStore/indexeddb-storage.d.ts.map +1 -1
- package/dist/OntologyManager/OntologyStore/types.d.ts +18 -0
- package/dist/OntologyManager/OntologyStore/types.d.ts.map +1 -0
- package/dist/TabularEditor/HybridGrid/featureContextMenuItems.d.ts.map +1 -1
- package/dist/components/AddChildFeature.d.ts.map +1 -1
- package/dist/components/ColorFeature.d.ts +13 -0
- package/dist/components/ColorFeature.d.ts.map +1 -0
- package/dist/components/CreateApolloAnnotation.d.ts.map +1 -1
- package/dist/components/DownloadGFF3.d.ts +4 -1
- package/dist/components/DownloadGFF3.d.ts.map +1 -1
- package/dist/components/DuplicateTranscript.d.ts.map +1 -1
- package/dist/components/ViewChangeLog.d.ts +2 -1
- package/dist/components/ViewChangeLog.d.ts.map +1 -1
- package/dist/components/ViewCheckResults.d.ts +2 -1
- package/dist/components/ViewCheckResults.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/extensions/annotationFromJBrowseFeature.d.ts.map +1 -1
- package/dist/extensions/annotationFromPileup.d.ts.map +1 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +6325 -5997
- package/dist/index.esm.js.map +1 -1
- package/dist/jbrowse-plugin-apollo.cjs.development.js +5869 -5541
- package/dist/jbrowse-plugin-apollo.cjs.development.js.map +1 -1
- package/dist/jbrowse-plugin-apollo.cjs.production.min.js +1 -1
- package/dist/jbrowse-plugin-apollo.cjs.production.min.js.map +1 -1
- package/dist/jbrowse-plugin-apollo.umd.development.js +16782 -25897
- package/dist/jbrowse-plugin-apollo.umd.development.js.map +1 -1
- package/dist/jbrowse-plugin-apollo.umd.production.min.js +1 -1
- package/dist/jbrowse-plugin-apollo.umd.production.min.js.map +1 -1
- package/dist/makeDisplayComponent.d.ts.map +1 -1
- package/dist/menus/Icons.d.ts +3 -0
- package/dist/menus/Icons.d.ts.map +1 -0
- package/dist/menus/topLevelMenu.d.ts.map +1 -1
- package/dist/session/changeHandlers.d.ts +9 -0
- package/dist/session/changeHandlers.d.ts.map +1 -0
- package/dist/util/annotationFeatureUtils.d.ts +2 -1
- package/dist/util/annotationFeatureUtils.d.ts.map +1 -1
- package/dist/util/glyphUtils.d.ts +3 -3
- package/dist/util/glyphUtils.d.ts.map +1 -1
- package/dist/util/index.d.ts +0 -1
- package/dist/util/index.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/ApolloInternetAccount/model.ts +68 -4
- package/src/ApolloRefNameAliasAdapter/ApolloRefNameAliasAdapter.ts +6 -3
- package/src/ApolloTextSearchAdapter/ApolloTextSearchAdapter.ts +1 -1
- package/src/BackendDrivers/BackendDriver.ts +36 -3
- package/src/BackendDrivers/CollaborationServerDriver.ts +78 -23
- package/src/BackendDrivers/LocalDriver/LocalDriver.ts +367 -0
- package/src/BackendDrivers/LocalDriver/db.ts +37 -0
- package/src/BackendDrivers/index.ts +1 -2
- package/src/ChangeManager.ts +27 -25
- package/src/FeatureDetailsWidget/ApolloTranscriptDetailsWidget.tsx +1 -1
- package/src/FeatureDetailsWidget/TranscriptWidgetEditLocation.tsx +69 -53
- package/src/LinearApolloDisplay/components/CheckResultWarnings.tsx +1 -5
- package/src/LinearApolloDisplay/components/LinearApolloDisplay.tsx +95 -115
- package/src/LinearApolloDisplay/components/OverlayCanvas.tsx +76 -0
- package/src/LinearApolloDisplay/components/Tooltip.tsx +42 -0
- package/src/LinearApolloDisplay/glyphs/BoxGlyph.ts +60 -302
- package/src/LinearApolloDisplay/glyphs/CDSGlyph.ts +145 -0
- package/src/LinearApolloDisplay/glyphs/ExonGlyph.ts +212 -0
- package/src/LinearApolloDisplay/glyphs/GeneGlyph.ts +65 -999
- package/src/LinearApolloDisplay/glyphs/GenericChildGlyph.ts +71 -181
- package/src/LinearApolloDisplay/glyphs/Glyph.ts +42 -66
- package/src/LinearApolloDisplay/glyphs/TranscriptGlyph.ts +291 -0
- package/src/LinearApolloDisplay/glyphs/util.ts +87 -0
- package/src/LinearApolloDisplay/stateModel/base.ts +83 -0
- package/src/LinearApolloDisplay/stateModel/layouts.ts +198 -138
- package/src/LinearApolloDisplay/stateModel/mouseEvents.ts +252 -158
- package/src/LinearApolloDisplay/stateModel/rendering.ts +103 -21
- package/src/LinearApolloReferenceSequenceDisplay/drawSequenceOverlay.ts +3 -3
- package/src/LinearApolloReferenceSequenceDisplay/stateModel/base.ts +20 -2
- package/src/LinearApolloSixFrameDisplay/components/LinearApolloSixFrameDisplay.tsx +7 -2
- package/src/LinearApolloSixFrameDisplay/glyphs/GeneGlyph.ts +8 -13
- package/src/LinearApolloSixFrameDisplay/glyphs/Glyph.ts +1 -1
- package/src/LinearApolloSixFrameDisplay/stateModel/layouts.ts +4 -3
- package/src/LinearApolloSixFrameDisplay/stateModel/mouseEvents.ts +1 -1
- package/src/LinearApolloSixFrameDisplay/stateModel/rendering.ts +2 -1
- package/src/OntologyManager/OntologyStore/__snapshots__/index.test.ts.snap +18262 -8519
- package/src/OntologyManager/OntologyStore/fulltext.ts +1 -2
- package/src/OntologyManager/OntologyStore/index.test.ts +5 -2
- package/src/OntologyManager/OntologyStore/index.ts +7 -8
- package/src/OntologyManager/OntologyStore/indexeddb-storage.ts +2 -2
- package/src/OntologyManager/OntologyStore/types.ts +27 -0
- package/src/OntologyManager/index.ts +15 -26
- package/src/TabularEditor/HybridGrid/featureContextMenuItems.ts +4 -5
- package/src/components/AddChildFeature.tsx +15 -8
- package/src/components/ColorFeature.tsx +167 -0
- package/src/components/CreateApolloAnnotation.tsx +35 -9
- package/src/components/DownloadGFF3.tsx +92 -121
- package/src/components/DuplicateTranscript.tsx +10 -0
- package/src/components/ViewChangeLog.tsx +123 -83
- package/src/components/ViewCheckResults.tsx +15 -73
- package/src/components/index.ts +1 -1
- package/src/config.ts +37 -19
- package/src/extensions/annotationFromJBrowseFeature.test.ts +1 -1
- package/src/extensions/annotationFromJBrowseFeature.ts +91 -63
- package/src/extensions/annotationFromPileup.ts +40 -40
- package/src/index.ts +45 -1
- package/src/makeDisplayComponent.tsx +10 -3
- package/src/menus/Icons.tsx +49 -0
- package/src/menus/topLevelMenu.ts +24 -96
- package/src/session/ClientDataStore.ts +16 -17
- package/src/session/changeHandlers.ts +261 -0
- package/src/session/session.ts +77 -46
- package/src/util/annotationFeatureUtils.ts +29 -1
- package/src/util/glyphUtils.ts +74 -31
- package/src/util/index.ts +0 -1
- package/dist/BackendDrivers/DesktopFileDriver.d.ts +0 -160
- package/dist/BackendDrivers/DesktopFileDriver.d.ts.map +0 -1
- package/dist/BackendDrivers/InMemoryFileDriver.d.ts +0 -162
- package/dist/BackendDrivers/InMemoryFileDriver.d.ts.map +0 -1
- package/dist/LinearApolloDisplay/glyphs/index.d.ts +0 -4
- package/dist/LinearApolloDisplay/glyphs/index.d.ts.map +0 -1
- package/dist/components/OpenLocalFile.d.ts +0 -15
- package/dist/components/OpenLocalFile.d.ts.map +0 -1
- package/dist/util/loadAssemblyIntoClient.d.ts +0 -5
- package/dist/util/loadAssemblyIntoClient.d.ts.map +0 -1
- package/src/BackendDrivers/DesktopFileDriver.ts +0 -184
- package/src/BackendDrivers/InMemoryFileDriver.ts +0 -107
- package/src/LinearApolloDisplay/glyphs/index.ts +0 -3
- package/src/components/OpenLocalFile.tsx +0 -189
- package/src/util/loadAssemblyIntoClient.ts +0 -94
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
2
|
-
/* eslint-disable @typescript-eslint/unbound-method */
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-misused-promises */
|
|
5
|
-
import { type AbstractSessionModel, isElectron } from '@jbrowse/core/util'
|
|
6
|
-
import {
|
|
7
|
-
Button,
|
|
8
|
-
DialogActions,
|
|
9
|
-
DialogContent,
|
|
10
|
-
DialogContentText,
|
|
11
|
-
FormControl,
|
|
12
|
-
FormHelperText,
|
|
13
|
-
TextField,
|
|
14
|
-
useTheme,
|
|
15
|
-
} from '@mui/material'
|
|
16
|
-
import { nanoid } from 'nanoid'
|
|
17
|
-
import React, { useState } from 'react'
|
|
18
|
-
|
|
19
|
-
import type { InMemoryFileDriver } from '../BackendDrivers'
|
|
20
|
-
import type { ApolloSessionModel } from '../session'
|
|
21
|
-
import { loadAssemblyIntoClient } from '../util'
|
|
22
|
-
|
|
23
|
-
import { Dialog } from './Dialog'
|
|
24
|
-
|
|
25
|
-
interface OpenLocalFileProps {
|
|
26
|
-
session: ApolloSessionModel
|
|
27
|
-
handleClose(): void
|
|
28
|
-
inMemoryFileDriver: InMemoryFileDriver
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface RefSeqInterface {
|
|
32
|
-
refName: string
|
|
33
|
-
uniqueId: string
|
|
34
|
-
aliases?: string[]
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function OpenLocalFile({ handleClose, session }: OpenLocalFileProps) {
|
|
38
|
-
const { apolloDataStore } = session
|
|
39
|
-
const { addAssembly, addSessionAssembly, assemblyManager, notify } =
|
|
40
|
-
session as unknown as AbstractSessionModel & {
|
|
41
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
42
|
-
addSessionAssembly: Function
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const [file, setFile] = useState<File | null>(null)
|
|
46
|
-
const [assemblyName, setAssemblyName] = useState('')
|
|
47
|
-
const [errorMessage, setErrorMessage] = useState('')
|
|
48
|
-
const [submitted, setSubmitted] = useState(false)
|
|
49
|
-
const theme = useTheme()
|
|
50
|
-
|
|
51
|
-
function handleChangeFile(e: React.ChangeEvent<HTMLInputElement>) {
|
|
52
|
-
const selectedFile = e.target.files?.item(0)
|
|
53
|
-
if (!selectedFile) {
|
|
54
|
-
return
|
|
55
|
-
}
|
|
56
|
-
setErrorMessage('')
|
|
57
|
-
setFile(selectedFile)
|
|
58
|
-
if (!assemblyName) {
|
|
59
|
-
const fileName = selectedFile.name
|
|
60
|
-
const lastDotIndex = fileName.lastIndexOf('.')
|
|
61
|
-
if (lastDotIndex === -1) {
|
|
62
|
-
setAssemblyName(fileName)
|
|
63
|
-
} else {
|
|
64
|
-
setAssemblyName(fileName.slice(0, lastDotIndex))
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
async function onSubmit(event: React.FormEvent<HTMLFormElement>) {
|
|
70
|
-
event.preventDefault()
|
|
71
|
-
setErrorMessage('')
|
|
72
|
-
setSubmitted(true)
|
|
73
|
-
|
|
74
|
-
if (!file) {
|
|
75
|
-
throw new Error('No file selected')
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Right now we are not using stream because there was a problem with 'pipe' in ReadStream
|
|
79
|
-
const fileData = await new Response(file).text()
|
|
80
|
-
const assemblyId = `${assemblyName}-${file.name}-${nanoid(8)}`
|
|
81
|
-
try {
|
|
82
|
-
await loadAssemblyIntoClient(assemblyId, fileData, apolloDataStore)
|
|
83
|
-
} catch (error) {
|
|
84
|
-
console.error(error)
|
|
85
|
-
notify(`Error loading GFF3 ${file.name}, ${String(error)}`, 'error')
|
|
86
|
-
handleClose()
|
|
87
|
-
return
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const fileMetadata: { file?: string } = {}
|
|
91
|
-
if (isElectron) {
|
|
92
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
93
|
-
const { webUtils } = globalThis.require('electron')
|
|
94
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
95
|
-
fileMetadata.file = webUtils.getPathForFile(file) as string
|
|
96
|
-
}
|
|
97
|
-
const assemblyConfig = {
|
|
98
|
-
name: assemblyId,
|
|
99
|
-
aliases: [assemblyName],
|
|
100
|
-
displayName: assemblyName,
|
|
101
|
-
sequence: {
|
|
102
|
-
trackId: `sequenceConfigId-${assemblyName}`,
|
|
103
|
-
type: 'ReferenceSequenceTrack',
|
|
104
|
-
adapter: { type: 'ApolloSequenceAdapter', assemblyId },
|
|
105
|
-
metadata: { apollo: true, ...fileMetadata },
|
|
106
|
-
},
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Save assembly into session
|
|
110
|
-
await (isElectron
|
|
111
|
-
? addAssembly?.(assemblyConfig)
|
|
112
|
-
: (addSessionAssembly || addAssembly)(assemblyConfig))
|
|
113
|
-
const a = await assemblyManager.waitForAssembly(assemblyConfig.name)
|
|
114
|
-
if (a) {
|
|
115
|
-
// @ts-expect-error MST type coercion problem?
|
|
116
|
-
session.addApolloTrackConfig(a)
|
|
117
|
-
notify(`Loaded GFF3 ${file.name}`, 'success')
|
|
118
|
-
} else {
|
|
119
|
-
notify(`Error loading GFF3 ${file.name}`, 'error')
|
|
120
|
-
}
|
|
121
|
-
handleClose()
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
function handleAssemblyNameChange(
|
|
125
|
-
event: React.ChangeEvent<HTMLInputElement>,
|
|
126
|
-
) {
|
|
127
|
-
setAssemblyName(event.target.value)
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return (
|
|
131
|
-
<Dialog
|
|
132
|
-
open
|
|
133
|
-
title="Open local GFF3 file"
|
|
134
|
-
handleClose={handleClose}
|
|
135
|
-
maxWidth={false}
|
|
136
|
-
data-testid="open-local-file"
|
|
137
|
-
>
|
|
138
|
-
<form onSubmit={onSubmit}>
|
|
139
|
-
<DialogContent style={{ display: 'flex', flexDirection: 'column' }}>
|
|
140
|
-
<FormControl>
|
|
141
|
-
<div style={{ flexDirection: 'row' }}>
|
|
142
|
-
<Button
|
|
143
|
-
variant="contained"
|
|
144
|
-
component="label"
|
|
145
|
-
style={{ marginRight: theme.spacing() }}
|
|
146
|
-
>
|
|
147
|
-
Choose File
|
|
148
|
-
<input
|
|
149
|
-
type="file"
|
|
150
|
-
required
|
|
151
|
-
hidden
|
|
152
|
-
onChange={handleChangeFile}
|
|
153
|
-
/>
|
|
154
|
-
</Button>
|
|
155
|
-
{file ? file.name : 'No file chosen'}
|
|
156
|
-
</div>
|
|
157
|
-
<FormHelperText>
|
|
158
|
-
Make sure your GFF3 has an embedded FASTA section
|
|
159
|
-
</FormHelperText>
|
|
160
|
-
</FormControl>
|
|
161
|
-
<TextField
|
|
162
|
-
required
|
|
163
|
-
label="Assembly name"
|
|
164
|
-
value={assemblyName}
|
|
165
|
-
onChange={handleAssemblyNameChange}
|
|
166
|
-
/>
|
|
167
|
-
</DialogContent>
|
|
168
|
-
<DialogActions>
|
|
169
|
-
<Button disabled={false} variant="contained" type="submit">
|
|
170
|
-
{submitted ? 'Submitting...' : 'Submit'}
|
|
171
|
-
</Button>
|
|
172
|
-
<Button
|
|
173
|
-
disabled={submitted}
|
|
174
|
-
variant="outlined"
|
|
175
|
-
type="submit"
|
|
176
|
-
onClick={handleClose}
|
|
177
|
-
>
|
|
178
|
-
Cancel
|
|
179
|
-
</Button>
|
|
180
|
-
</DialogActions>
|
|
181
|
-
</form>
|
|
182
|
-
{errorMessage ? (
|
|
183
|
-
<DialogContent>
|
|
184
|
-
<DialogContentText color="error">{errorMessage}</DialogContentText>
|
|
185
|
-
</DialogContent>
|
|
186
|
-
) : null}
|
|
187
|
-
</Dialog>
|
|
188
|
-
)
|
|
189
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { type ClientDataStore, checkRegistry } from '@apollo-annotation/common'
|
|
2
|
-
import type {
|
|
3
|
-
ApolloAssemblyI,
|
|
4
|
-
CheckResultSnapshot,
|
|
5
|
-
} from '@apollo-annotation/mst'
|
|
6
|
-
import { gff3ToAnnotationFeature } from '@apollo-annotation/shared'
|
|
7
|
-
import {
|
|
8
|
-
type GFF3Comment,
|
|
9
|
-
type GFF3Feature,
|
|
10
|
-
type GFF3Sequence,
|
|
11
|
-
parseStringSync,
|
|
12
|
-
} from '@gmod/gff'
|
|
13
|
-
import { getSnapshot } from '@jbrowse/mobx-state-tree'
|
|
14
|
-
|
|
15
|
-
export async function loadAssemblyIntoClient(
|
|
16
|
-
assemblyId: string,
|
|
17
|
-
gff3FileText: string,
|
|
18
|
-
apolloDataStore: ClientDataStore,
|
|
19
|
-
) {
|
|
20
|
-
const featuresAndSequences: (GFF3Feature | GFF3Sequence | GFF3Comment)[] =
|
|
21
|
-
parseStringSync(gff3FileText, {
|
|
22
|
-
parseSequences: true,
|
|
23
|
-
parseComments: true,
|
|
24
|
-
parseDirectives: false,
|
|
25
|
-
parseFeatures: true,
|
|
26
|
-
})
|
|
27
|
-
if (featuresAndSequences.length === 0) {
|
|
28
|
-
throw new Error('No features found in GFF3 file')
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
let sequenceFeatureCount = 0
|
|
32
|
-
let assembly = apolloDataStore.assemblies.get(assemblyId)
|
|
33
|
-
if (!assembly) {
|
|
34
|
-
assembly = apolloDataStore.addAssembly(assemblyId, 'InMemoryFileDriver')
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
for (const seqLine of featuresAndSequences) {
|
|
38
|
-
if (Array.isArray(seqLine)) {
|
|
39
|
-
// regular feature
|
|
40
|
-
const feature = gff3ToAnnotationFeature(seqLine)
|
|
41
|
-
|
|
42
|
-
const ref =
|
|
43
|
-
assembly.refSeqs.get(feature.refSeq) ??
|
|
44
|
-
assembly.addRefSeq(feature.refSeq, feature.refSeq)
|
|
45
|
-
if (!ref.features.has(feature._id)) {
|
|
46
|
-
ref.addFeature(feature)
|
|
47
|
-
}
|
|
48
|
-
} else if ('comment' in seqLine) {
|
|
49
|
-
assembly.addComment(seqLine.comment)
|
|
50
|
-
} else {
|
|
51
|
-
sequenceFeatureCount++
|
|
52
|
-
// sequence feature
|
|
53
|
-
let ref = assembly.refSeqs.get(seqLine.id)
|
|
54
|
-
if (!ref) {
|
|
55
|
-
ref = assembly.addRefSeq(seqLine.id, seqLine.id, seqLine.description)
|
|
56
|
-
}
|
|
57
|
-
if (seqLine.description && !ref.description) {
|
|
58
|
-
ref.setDescription(seqLine.description)
|
|
59
|
-
}
|
|
60
|
-
ref.addSequence({
|
|
61
|
-
start: 0,
|
|
62
|
-
stop: seqLine.sequence.length,
|
|
63
|
-
sequence: seqLine.sequence,
|
|
64
|
-
})
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (sequenceFeatureCount === 0) {
|
|
69
|
-
throw new Error('No embedded FASTA section found in GFF3')
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const checkResults: CheckResultSnapshot[] = await checkFeatures(assembly)
|
|
73
|
-
apolloDataStore.addCheckResults(checkResults)
|
|
74
|
-
return assembly
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export async function checkFeatures(
|
|
78
|
-
assembly: ApolloAssemblyI,
|
|
79
|
-
): Promise<CheckResultSnapshot[]> {
|
|
80
|
-
const checkResults: CheckResultSnapshot[] = []
|
|
81
|
-
for (const ref of assembly.refSeqs.values()) {
|
|
82
|
-
for (const feature of ref.features.values()) {
|
|
83
|
-
for (const check of checkRegistry.getChecks().values()) {
|
|
84
|
-
const result: CheckResultSnapshot[] = await check.checkFeature(
|
|
85
|
-
getSnapshot(feature),
|
|
86
|
-
(start: number, stop: number) =>
|
|
87
|
-
Promise.resolve(ref.getSequence(start, stop)),
|
|
88
|
-
)
|
|
89
|
-
checkResults.push(...result)
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return checkResults
|
|
94
|
-
}
|