fix: image upload button does not work - refresh models list persist current selected engine (#4768)

This commit is contained in:
Louis 2025-03-03 11:37:58 +07:00 committed by GitHub
parent 45f957475d
commit 889ab953e0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 30 additions and 27 deletions

View File

@ -477,20 +477,23 @@ export const useRefreshModelList = (engine: string) => {
const [refreshingModels, setRefreshingModels] = useState(false) const [refreshingModels, setRefreshingModels] = useState(false)
const { mutate: fetchRemoteModels } = useGetRemoteModels(engine) const { mutate: fetchRemoteModels } = useGetRemoteModels(engine)
const refreshModels = useCallback(() => { const refreshModels = useCallback(
setRefreshingModels(true) (engine: string) => {
fetchRemoteModels() setRefreshingModels(true)
.then((remoteModelList) => fetchRemoteModels()
Promise.all( .then((remoteModelList) =>
remoteModelList?.data?.map((model: { id?: string }) => Promise.all(
model?.id remoteModelList?.data?.map((model: { id?: string }) =>
? addRemoteEngineModel(model.id, engine).catch(() => {}) model?.id
: {} ? addRemoteEngineModel(model.id, engine).catch(() => {})
) ?? [] : {}
) ?? []
)
) )
) .finally(() => setRefreshingModels(false))
.finally(() => setRefreshingModels(false)) },
}, [fetchRemoteModels]) [fetchRemoteModels]
)
return { refreshingModels, refreshModels } return { refreshingModels, refreshModels }
} }

View File

@ -6,15 +6,15 @@ import Spinner from '@/containers/Loader/Spinner'
import { useRefreshModelList } from '@/hooks/useEngineManagement' import { useRefreshModelList } from '@/hooks/useEngineManagement'
function RemoteModelRefresh({ id }: { id: string }) { function RemoteModelRefresh({ engine }: { engine: string }) {
const { refreshingModels, refreshModels } = useRefreshModelList(id) const { refreshingModels, refreshModels } = useRefreshModelList(engine)
return ( return (
<Button <Button
theme={'ghost'} theme={'ghost'}
variant={'outline'} variant={'outline'}
className="h-7 px-2" className="h-7 px-2"
onClick={() => refreshModels()} onClick={() => refreshModels(engine)}
> >
{refreshingModels ? ( {refreshingModels ? (
<Spinner size={16} strokeWidth={2} className="mr-2" /> <Spinner size={16} strokeWidth={2} className="mr-2" />

View File

@ -158,7 +158,7 @@ const ModelPage = ({ model, onGoBack }: Props) => {
)} )}
<th className="w-[120px]"> <th className="w-[120px]">
{model.type === 'cloud' && ( {model.type === 'cloud' && (
<RemoteModelRefresh id={model.id} /> <RemoteModelRefresh engine={model.id} />
)} )}
</th> </th>
</tr> </tr>

View File

@ -368,10 +368,10 @@ const HubScreen = () => {
{hubBannerOption === 'upload' && ( {hubBannerOption === 'upload' && (
<div <div
className={`mx-2 mb-2 flex h-[172px] cursor-pointer items-center justify-center rounded-md border`} className={`mx-2 mb-2 flex h-[172px] cursor-pointer items-center justify-center rounded-md border`}
{...getRootProps()}
onClick={() => { onClick={() => {
imageInputRef.current?.click() imageInputRef.current?.click()
}} }}
{...getRootProps()}
> >
<div className="flex flex-col items-center justify-center"> <div className="flex flex-col items-center justify-center">
<div className="mx-auto inline-flex h-10 w-10 items-center justify-center rounded-full bg-gray-200"> <div className="mx-auto inline-flex h-10 w-10 items-center justify-center rounded-full bg-gray-200">

View File

@ -52,25 +52,25 @@ import { showScrollBarAtom } from '@/helpers/atoms/Setting.atom'
import { threadsAtom } from '@/helpers/atoms/Thread.atom' import { threadsAtom } from '@/helpers/atoms/Thread.atom'
const RemoteEngineSettings = ({ const RemoteEngineSettings = ({
engine: name, engine: engineName,
}: { }: {
engine: InferenceEngine engine: InferenceEngine
}) => { }) => {
const { engines, mutate } = useGetEngines() const { engines, mutate } = useGetEngines()
const downloadedModels = useAtomValue(downloadedModelsAtom) const downloadedModels = useAtomValue(downloadedModelsAtom)
const [showApiKey, setShowApiKey] = useState(false) const [showApiKey, setShowApiKey] = useState(false)
const remoteModels = downloadedModels.filter((e) => e.engine === name) const remoteModels = downloadedModels.filter((e) => e.engine === engineName)
const [isActiveAdvanceSetting, setisActiveAdvanceSetting] = useState(false) const [isActiveAdvanceSetting, setisActiveAdvanceSetting] = useState(false)
const setSelectedModel = useSetAtom(selectedModelAtom) const setSelectedModel = useSetAtom(selectedModelAtom)
const customEngineLogo = getLogoEngine(name) const customEngineLogo = getLogoEngine(engineName)
const threads = useAtomValue(threadsAtom) const threads = useAtomValue(threadsAtom)
const { refreshingModels, refreshModels } = useRefreshModelList(name) const { refreshingModels, refreshModels } = useRefreshModelList(engineName)
const showScrollBar = useAtomValue(showScrollBarAtom) const showScrollBar = useAtomValue(showScrollBarAtom)
const engine = const engine =
engines && engines &&
Object.entries(engines) Object.entries(engines)
.filter(([key]) => key === name) .filter(([key]) => key === engineName)
.flatMap(([_, engineArray]) => engineArray as EngineConfig)[0] .flatMap(([_, engineArray]) => engineArray as EngineConfig)[0]
const debounceRef = useRef<NodeJS.Timeout | null>(null) const debounceRef = useRef<NodeJS.Timeout | null>(null)
@ -92,12 +92,12 @@ const RemoteEngineSettings = ({
debounceRef.current = setTimeout(async () => { debounceRef.current = setTimeout(async () => {
const updatedEngine = { ...engine } const updatedEngine = { ...engine }
set(updatedEngine, field, value) set(updatedEngine, field, value)
await updateEngine(name, updatedEngine) await updateEngine(engineName, updatedEngine)
mutate() mutate()
events.emit(EngineEvent.OnEngineUpdate, {}) events.emit(EngineEvent.OnEngineUpdate, {})
}, 300) }, 300)
}, },
[engine, name, mutate] [engine, engineName, mutate]
) )
const [data, setData] = useState({ const [data, setData] = useState({
@ -237,7 +237,7 @@ const RemoteEngineSettings = ({
<Button <Button
theme={'ghost'} theme={'ghost'}
variant={'outline'} variant={'outline'}
onClick={() => refreshModels()} onClick={() => refreshModels(engineName)}
> >
{refreshingModels ? ( {refreshingModels ? (
<Spinner size={16} strokeWidth={2} className="mr-2" /> <Spinner size={16} strokeWidth={2} className="mr-2" />
@ -246,7 +246,7 @@ const RemoteEngineSettings = ({
)} )}
Refresh Refresh
</Button> </Button>
<ModalAddModel engine={name} /> <ModalAddModel engine={engineName} />
</div> </div>
</div> </div>