36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
import { ExtensionManager } from '@/lib/extension'
|
|
import { APIs } from '@/lib/service'
|
|
import { EventEmitter } from '@/services/events'
|
|
import { EngineManager, ModelManager } from '@janhq/core'
|
|
import { PropsWithChildren, useCallback, useEffect, useState } from 'react'
|
|
|
|
export function ExtensionProvider({ children }: PropsWithChildren) {
|
|
const [finishedSetup, setFinishedSetup] = useState(false)
|
|
const setupExtensions = useCallback(async () => {
|
|
window.core = {
|
|
api: APIs,
|
|
}
|
|
|
|
window.core.events = new EventEmitter()
|
|
window.core.extensionManager = new ExtensionManager()
|
|
window.core.engineManager = new EngineManager()
|
|
window.core.modelManager = new ModelManager()
|
|
|
|
// Register all active extensions
|
|
await ExtensionManager.getInstance()
|
|
.registerActive()
|
|
.then(() => ExtensionManager.getInstance().load())
|
|
.then(() => setFinishedSetup(true))
|
|
}, [])
|
|
|
|
useEffect(() => {
|
|
setupExtensions()
|
|
|
|
return () => {
|
|
ExtensionManager.getInstance().unload()
|
|
}
|
|
}, [setupExtensions])
|
|
|
|
return <>{finishedSetup && children}</>
|
|
}
|