diff --git a/packages/jbrowse-plugin-apollo/src/OntologyManager/OntologyStore/index.ts b/packages/jbrowse-plugin-apollo/src/OntologyManager/OntologyStore/index.ts index 09763c1a2..918ae0854 100644 --- a/packages/jbrowse-plugin-apollo/src/OntologyManager/OntologyStore/index.ts +++ b/packages/jbrowse-plugin-apollo/src/OntologyManager/OntologyStore/index.ts @@ -76,6 +76,7 @@ export interface OntologyStoreOptions { indexFields?: { displayName: string; jsonPath: string }[] } maxSearchResults?: number + update?(message: string, progress: number): void } export interface PropertiesOptions { @@ -115,8 +116,8 @@ export default class OntologyStore { this.ontologyName = name this.ontologyVersion = version this.sourceLocation = source - this.db = this.prepareDatabase() this.options = options ?? {} + this.db = this.prepareDatabase() } /** @@ -182,8 +183,12 @@ export default class OntologyStore { } try { - const { sourceLocation, sourceType } = this + const { options, sourceLocation, sourceType } = this if (sourceType === 'obo-graph-json') { + if (options.update) { + options.update('Importing', 0) + } + // add more updates inside `loadOboGraphJson` await this.loadOboGraphJson(db) } else { throw new Error( diff --git a/packages/jbrowse-plugin-apollo/src/session/ClientDataStore.ts b/packages/jbrowse-plugin-apollo/src/session/ClientDataStore.ts index a6a91faa4..604a42163 100644 --- a/packages/jbrowse-plugin-apollo/src/session/ClientDataStore.ts +++ b/packages/jbrowse-plugin-apollo/src/session/ClientDataStore.ts @@ -42,6 +42,7 @@ import { } from '../OntologyManager' import { ApolloRootModel } from '../types' import { autorun } from 'mobx' +import { ApolloSessionModel } from './session' export function clientDataStoreFactory( AnnotationFeatureExtended: typeof AnnotationFeatureModel, @@ -164,8 +165,27 @@ export function clientDataStoreFactory( ) as TextIndexFieldDefinition[], ] if (!ontologyManager.findOntology(name)) { + // eslint-disable-next-line no-inner-declarations + function update(message: string, progress: number) { + const session = getSession( + self, + ) as unknown as ApolloSessionModel + const { jobsManager } = session + const controller = new AbortController() + const job = { + name: message, + statusMessage: 'Uploading ontology, this may take awhile', + progressPct: progress, + cancelCallback: () => { + controller.abort() + jobsManager.abortJob(job.name) + }, + } + jobsManager.runJob(job) + } ontologyManager.addOntology(name, version, source, { textIndexing: { indexFields }, + update, }) } }