chore: refactor rerender components
This commit is contained in:
parent
888da28e91
commit
a6f2de922c
@ -28,6 +28,7 @@ class WindowManager {
|
|||||||
...mainWindowConfig,
|
...mainWindowConfig,
|
||||||
width: bounds.width,
|
width: bounds.width,
|
||||||
height: bounds.height,
|
height: bounds.height,
|
||||||
|
show: false,
|
||||||
x: bounds.x,
|
x: bounds.x,
|
||||||
y: bounds.y,
|
y: bounds.y,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
@ -78,6 +79,11 @@ class WindowManager {
|
|||||||
windowManager.hideMainWindow()
|
windowManager.hideMainWindow()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
windowManager.mainWindow?.on('ready-to-show', function () {
|
||||||
|
// Feature Toggle for Quick Ask
|
||||||
|
windowManager.mainWindow?.show()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
createQuickAskWindow(preloadPath: string, startUrl: string): void {
|
createQuickAskWindow(preloadPath: string, startUrl: string): void {
|
||||||
|
|||||||
@ -2,7 +2,12 @@
|
|||||||
|
|
||||||
import { Fragment, ReactNode, useEffect } from 'react'
|
import { Fragment, ReactNode, useEffect } from 'react'
|
||||||
|
|
||||||
import { AppConfiguration, getUserHomePath } from '@janhq/core'
|
import {
|
||||||
|
AppConfiguration,
|
||||||
|
events,
|
||||||
|
getUserHomePath,
|
||||||
|
ModelEvent,
|
||||||
|
} from '@janhq/core'
|
||||||
import { useSetAtom } from 'jotai'
|
import { useSetAtom } from 'jotai'
|
||||||
|
|
||||||
import useAssistants from '@/hooks/useAssistants'
|
import useAssistants from '@/hooks/useAssistants'
|
||||||
@ -30,12 +35,19 @@ const DataLoader: React.FC<Props> = ({ children }) => {
|
|||||||
const setJanDefaultDataFolder = useSetAtom(defaultJanDataFolderAtom)
|
const setJanDefaultDataFolder = useSetAtom(defaultJanDataFolderAtom)
|
||||||
const setJanSettingScreen = useSetAtom(janSettingScreenAtom)
|
const setJanSettingScreen = useSetAtom(janSettingScreenAtom)
|
||||||
|
|
||||||
useModels()
|
|
||||||
useThreads()
|
useThreads()
|
||||||
useAssistants()
|
useAssistants()
|
||||||
useGetSystemResources()
|
useGetSystemResources()
|
||||||
useLoadTheme()
|
useLoadTheme()
|
||||||
|
|
||||||
|
const { loadDataModel, isUpdated } = useModels()
|
||||||
|
useEffect(() => {
|
||||||
|
// Listen for model updates
|
||||||
|
if (isUpdated) {
|
||||||
|
loadDataModel()
|
||||||
|
}
|
||||||
|
}, [isUpdated, loadDataModel])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
window.core?.api
|
window.core?.api
|
||||||
?.getAppConfigurations()
|
?.getAppConfigurations()
|
||||||
|
|||||||
@ -29,6 +29,7 @@ import {
|
|||||||
const useModels = () => {
|
const useModels = () => {
|
||||||
const setDownloadedModels = useSetAtom(downloadedModelsAtom)
|
const setDownloadedModels = useSetAtom(downloadedModelsAtom)
|
||||||
const setExtensionModels = useSetAtom(configuredModelsAtom)
|
const setExtensionModels = useSetAtom(configuredModelsAtom)
|
||||||
|
let isUpdated = false
|
||||||
|
|
||||||
const getData = useCallback(() => {
|
const getData = useCallback(() => {
|
||||||
const getDownloadedModels = async () => {
|
const getDownloadedModels = async () => {
|
||||||
@ -52,10 +53,10 @@ const useModels = () => {
|
|||||||
|
|
||||||
setDownloadedModels(toUpdate)
|
setDownloadedModels(toUpdate)
|
||||||
|
|
||||||
let isUpdated = false
|
|
||||||
toUpdate.forEach((model) => {
|
toUpdate.forEach((model) => {
|
||||||
if (!ModelManager.instance().models.has(model.id)) {
|
if (!ModelManager.instance().models.has(model.id)) {
|
||||||
ModelManager.instance().models.set(model.id, model)
|
ModelManager.instance().models.set(model.id, model)
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
isUpdated = true
|
isUpdated = true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -75,21 +76,28 @@ const useModels = () => {
|
|||||||
|
|
||||||
const reloadData = useDebouncedCallback(() => getData(), 300)
|
const reloadData = useDebouncedCallback(() => getData(), 300)
|
||||||
|
|
||||||
|
const getModels = async (): Promise<Model[]> =>
|
||||||
|
extensionManager
|
||||||
|
.get<ModelExtension>(ExtensionTypeEnum.Model)
|
||||||
|
?.getModels() ?? []
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Try get data on mount
|
// Try get data on mount
|
||||||
reloadData()
|
if (isUpdated) {
|
||||||
|
reloadData()
|
||||||
// Listen for model updates
|
// Listen for model updates
|
||||||
events.on(ModelEvent.OnModelsUpdate, async () => reloadData())
|
events.on(ModelEvent.OnModelsUpdate, async () => reloadData())
|
||||||
return () => {
|
return () => {
|
||||||
// Remove listener on unmount
|
// Remove listener on unmount
|
||||||
events.off(ModelEvent.OnModelsUpdate, async () => {})
|
events.off(ModelEvent.OnModelsUpdate, async () => {})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, [getData, reloadData])
|
}, [getData, isUpdated, reloadData])
|
||||||
|
|
||||||
|
return {
|
||||||
|
loadDataModel: getData,
|
||||||
|
isUpdated: isUpdated,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const getModels = async (): Promise<Model[]> =>
|
|
||||||
extensionManager.get<ModelExtension>(ExtensionTypeEnum.Model)?.getModels() ??
|
|
||||||
[]
|
|
||||||
|
|
||||||
export default useModels
|
export default useModels
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user