mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-15 14:43:46 +01:00
Merge pull request #24468 from overleaf/mj-client-side-references
[web] Perform ARS on client-side GitOrigin-RevId: 19703c82758cae450fe52463ad9612d3a2383ba0
This commit is contained in:
committed by
Copybot
parent
f6820ed794
commit
ed0c4c447e
@@ -0,0 +1,47 @@
|
||||
import BasicReferenceIndex from './basic-reference-index'
|
||||
import { ReferenceIndex } from './reference-index'
|
||||
import { AdvancedReferenceSearchResult, Changes } from './types'
|
||||
import importOverleafModules from '../../../../macros/import-overleaf-module.macro'
|
||||
|
||||
interface IndexConstructor {
|
||||
new (): ReferenceIndex
|
||||
}
|
||||
|
||||
const indices = importOverleafModules('referenceIndices') as {
|
||||
import: { default: IndexConstructor }
|
||||
path: string
|
||||
}[]
|
||||
|
||||
export type ReferenceWorkerRequest =
|
||||
| { type: 'update'; changes: Changes }
|
||||
| { type: 'search'; query: string }
|
||||
|
||||
export type ReferenceWorkerResponse =
|
||||
| { type: 'updateKeys'; keys: Set<string> }
|
||||
| { type: 'searchResult'; result: AdvancedReferenceSearchResult }
|
||||
|
||||
function createIndex(): ReferenceIndex {
|
||||
const Klass = indices[0]?.import.default ?? BasicReferenceIndex
|
||||
return new Klass()
|
||||
}
|
||||
|
||||
const indexer: ReferenceIndex = createIndex()
|
||||
|
||||
self.addEventListener('message', async (event: MessageEvent) => {
|
||||
const message = event.data as ReferenceWorkerRequest
|
||||
switch (message.type) {
|
||||
case 'update':
|
||||
indexer.updateIndex(message.changes)
|
||||
self.postMessage({ type: 'updateKeys', keys: indexer.getKeys() })
|
||||
break
|
||||
|
||||
case 'search': {
|
||||
const result = await indexer.search(message.query)
|
||||
self.postMessage({ type: 'searchResult', result })
|
||||
break
|
||||
}
|
||||
|
||||
default:
|
||||
console.error('Unknown message type:', message)
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user