fix(admin): prevent model selection reset by using onSubmit instead of form action

Using form action in Next.js triggers automatic router cache revalidation,
causing the server component to re-render and remount the client component,
which resets all useState values. Switching to onSubmit with e.preventDefault()
prevents this behavior while preserving full functionality.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Sepehr Ramezani
2026-03-29 12:34:28 +02:00
parent a9f619be7f
commit 0903597759

View File

@@ -169,20 +169,6 @@ export function AdminSettingsForm({ config }: { config: Record<string, string> }
toast.error(t('admin.ai.updateFailed') + ': ' + result.error) toast.error(t('admin.ai.updateFailed') + ': ' + result.error)
} else { } else {
toast.success(t('admin.ai.updateSuccess')) toast.success(t('admin.ai.updateSuccess'))
setTagsProvider(tagsProv)
setEmbeddingsProvider(embedProv)
if (tagsModel) setSelectedTagsModel(tagsModel)
if (embedModel) setSelectedEmbeddingModel(embedModel)
// Refresh models after save if Ollama is selected
if (tagsProv === 'ollama') {
const url = data.OLLAMA_BASE_URL_TAGS || config.OLLAMA_BASE_URL || 'http://localhost:11434'
fetchOllamaModels('tags', url)
}
if (embedProv === 'ollama') {
const url = data.OLLAMA_BASE_URL_EMBEDDING || config.OLLAMA_BASE_URL || 'http://localhost:11434'
fetchOllamaModels('embeddings', url)
}
} }
} catch (error: any) { } catch (error: any) {
setIsSaving(false) setIsSaving(false)
@@ -235,7 +221,7 @@ export function AdminSettingsForm({ config }: { config: Record<string, string> }
<CardTitle>{t('admin.security.title')}</CardTitle> <CardTitle>{t('admin.security.title')}</CardTitle>
<CardDescription>{t('admin.security.description')}</CardDescription> <CardDescription>{t('admin.security.description')}</CardDescription>
</CardHeader> </CardHeader>
<form action={handleSaveSecurity}> <form onSubmit={(e) => { e.preventDefault(); handleSaveSecurity(new FormData(e.currentTarget)) }}>
<CardContent className="space-y-4"> <CardContent className="space-y-4">
<div className="flex items-center space-x-2"> <div className="flex items-center space-x-2">
<Checkbox <Checkbox
@@ -265,7 +251,7 @@ export function AdminSettingsForm({ config }: { config: Record<string, string> }
<CardTitle>{t('admin.ai.title')}</CardTitle> <CardTitle>{t('admin.ai.title')}</CardTitle>
<CardDescription>{t('admin.ai.description')}</CardDescription> <CardDescription>{t('admin.ai.description')}</CardDescription>
</CardHeader> </CardHeader>
<form action={handleSaveAI}> <form onSubmit={(e) => { e.preventDefault(); handleSaveAI(new FormData(e.currentTarget)) }}>
<CardContent className="space-y-6"> <CardContent className="space-y-6">
<div className="space-y-4 p-4 border rounded-lg bg-primary/5 dark:bg-primary/10"> <div className="space-y-4 p-4 border rounded-lg bg-primary/5 dark:bg-primary/10">
<h3 className="text-base font-semibold flex items-center gap-2"> <h3 className="text-base font-semibold flex items-center gap-2">
@@ -561,7 +547,7 @@ export function AdminSettingsForm({ config }: { config: Record<string, string> }
<CardTitle>{t('admin.smtp.title')}</CardTitle> <CardTitle>{t('admin.smtp.title')}</CardTitle>
<CardDescription>{t('admin.smtp.description')}</CardDescription> <CardDescription>{t('admin.smtp.description')}</CardDescription>
</CardHeader> </CardHeader>
<form action={handleSaveSMTP}> <form onSubmit={(e) => { e.preventDefault(); handleSaveSMTP(new FormData(e.currentTarget)) }}>
<CardContent className="space-y-4"> <CardContent className="space-y-4">
<div className="grid grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">
<div className="space-y-2"> <div className="space-y-2">