* feat: local engine management * chore: move remote engine into engine page instead extension page * chore: set default engine from extension * chore: update endpoint update engine * chore: update event onEngineUpdate * chore: filter out engine download * chore: update version env * chore: select default engine variant base on user device specs * chore: symlink engine variants * chore: rolldown.config in mjs format * chore: binary codesign * fix: download state in footer bar and variant status * chore: update yarn.lock * fix: rimraf failure * fix: setup-node@v3 for built-in cache * fix: cov pipeline * fix: build syntax * chore: fix build step * fix: create engines folder on launch * chore: update ui delete engine variant with modal confirmation * chore: fix linter * chore: add installing progress for Local Engine download * chore: wording --------- Co-authored-by: Louis <louis@jan.ai>
58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import { atom } from 'jotai'
|
|
import { atomWithStorage } from 'jotai/utils'
|
|
|
|
type ExtensionId = string
|
|
|
|
export type InstallingExtensionState = {
|
|
extensionId: ExtensionId
|
|
percentage: number
|
|
localPath?: string
|
|
}
|
|
|
|
export const installingExtensionAtom = atom<InstallingExtensionState[]>([])
|
|
|
|
export const setInstallingExtensionAtom = atom(
|
|
null,
|
|
(get, set, extensionId: string, state: InstallingExtensionState) => {
|
|
const current = get(installingExtensionAtom)
|
|
|
|
const isExists = current.some((e) => e.extensionId === extensionId)
|
|
if (isExists) {
|
|
const newCurrent = current.map((e) => {
|
|
if (e.extensionId === extensionId) {
|
|
return state
|
|
}
|
|
return e
|
|
})
|
|
set(installingExtensionAtom, newCurrent)
|
|
} else {
|
|
set(installingExtensionAtom, [...current, state])
|
|
}
|
|
}
|
|
)
|
|
|
|
export const removeInstallingExtensionAtom = atom(
|
|
null,
|
|
(get, set, extensionId: string) => {
|
|
const current = get(installingExtensionAtom)
|
|
const newCurrent = current.filter((e) => e.extensionId !== extensionId)
|
|
set(installingExtensionAtom, newCurrent)
|
|
}
|
|
)
|
|
|
|
const INACTIVE_ENGINE_PROVIDER = 'inActiveEngineProvider'
|
|
export const inActiveEngineProviderAtom = atomWithStorage<string[]>(
|
|
INACTIVE_ENGINE_PROVIDER,
|
|
[],
|
|
undefined,
|
|
{ getOnInit: true }
|
|
)
|
|
|
|
const SHOW_SETTING_ACTIVE_LOCAL_ENGINE = 'showSettingActiveLocalEngine'
|
|
export const showSettingActiveLocalEngineAtom = atomWithStorage<string[]>(
|
|
SHOW_SETTING_ACTIVE_LOCAL_ENGINE,
|
|
[],
|
|
undefined,
|
|
{ getOnInit: true }
|
|
)
|