From 58161598c39183e249928e092ce823ac63e5b18e Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Tue, 16 Jan 2024 23:46:24 +0700 Subject: [PATCH] Add loader stating model on select dropdown --- web/containers/DropdownListSidebar/index.tsx | 60 ++++++++++++++++++-- 1 file changed, 55 insertions(+), 5 deletions(-) diff --git a/web/containers/DropdownListSidebar/index.tsx b/web/containers/DropdownListSidebar/index.tsx index 3786037cb..28841eadb 100644 --- a/web/containers/DropdownListSidebar/index.tsx +++ b/web/containers/DropdownListSidebar/index.tsx @@ -1,4 +1,5 @@ import { useCallback, useEffect } from 'react' +import { useCallback, useEffect, useRef, useState } from 'react' import { InferenceEngine, Model } from '@janhq/core' import { @@ -48,7 +49,7 @@ export default function DropdownListSidebar() { const threadStates = useAtomValue(threadStatesAtom) const [selectedModel, setSelectedModel] = useAtom(selectedModelAtom) const setThreadModelParams = useSetAtom(setThreadModelParamsAtom) - const { activeModel, startModel } = useActiveModel() + const { activeModel, startModel, stateModel } = useActiveModel() const [serverEnabled, setServerEnabled] = useAtom(serverEnabledAtom) const { setMainViewState } = useMainViewState() @@ -67,7 +68,6 @@ export default function DropdownListSidebar() { }, []) const { recommendedModel, downloadedModels } = useRecommendedModel() - const [first, setfirst] = useState(false) const selectedName = downloadedModels.filter((x) => x.id === selectedModel?.id)[0]?.name ?? '' @@ -80,8 +80,12 @@ export default function DropdownListSidebar() { return 4096 } + const selectedRef = useRef(null) + useEffect(() => { setSelectedModel(recommendedModel) + setSelected(activeModel || recommendedModel) + setSelectedModel(activeModel || recommendedModel) if (activeThread) { const finishInit = threadStates[activeThread.id].isFinishInit ?? true @@ -110,6 +114,33 @@ export default function DropdownListSidebar() { threadStates, ]) + const [loader, setLoader] = useState(0) + + // This is fake loader please fix this when we have realtime percentage when load model + useEffect(() => { + if (stateModel.loading) { + if (loader === 24) { + setTimeout(() => { + setLoader(loader + 1) + }, 250) + } else if (loader === 50) { + setTimeout(() => { + setLoader(loader + 1) + }, 250) + } else if (loader === 78) { + setTimeout(() => { + setLoader(loader + 1) + }, 250) + } else if (loader === 99) { + setLoader(99) + } else { + setLoader(loader + 1) + } + } else { + setLoader(0) + } + }, [stateModel.loading, loader]) + const onValueSelected = useCallback( (modelId: string) => { const model = downloadedModels.find((m) => m.id === modelId) @@ -150,14 +181,29 @@ export default function DropdownListSidebar() { <> - + {selectedName} - +
Local @@ -191,10 +237,14 @@ export default function DropdownListSidebar() { {downloadedModels.map((x, i) => ( { + x.id === selected?.id && console.log('huhft') + }} > -
+
{x.name}