refactor(webui): use central language selection

This commit is contained in:
2026-07-21 12:34:39 +02:00
parent f0ff4ee51d
commit fcf93f438d

View File

@@ -5,7 +5,7 @@ import { Card } from "@govoplan/core-webui";
import { FormField } from "@govoplan/core-webui";
import { ToggleSwitch } from "@govoplan/core-webui";
import { fetchSystemSettingsDelta, updateSystemSettings, type LanguagePackage, type PrivacyRetentionLimitPermissions, type PrivacyRetentionPolicy, type SystemSettingsDeltaSections, type SystemSettingsItem } from "../../api/admin";
import { AdminPageLayout, adminErrorMessage, useDeltaWatermarks, useUnsavedDraftGuard } from "@govoplan/core-webui";
import { AdminPageLayout, AdminSelectionList, adminErrorMessage, useDeltaWatermarks, useUnsavedDraftGuard } from "@govoplan/core-webui";
const DELTA_KEY = "admin:system-settings";
@@ -112,10 +112,8 @@ export default function SystemSettingsPanel({ settings, canWrite, canAccessMaint
{setBusy(false);}
}
function toggleLanguage(code: string, checked: boolean) {
const enabled = new Set(draft.enabled_language_codes);
if (checked) enabled.add(code);
else enabled.delete(code);
function setEnabledLanguages(selected: string[]) {
const enabled = new Set(selected);
const nextEnabled = draft.available_languages.map((item) => item.code).filter((item) => enabled.has(item));
const defaultLocale = nextEnabled.includes(draft.default_locale) ? draft.default_locale : (nextEnabled[0] ?? draft.default_locale);
setDraft({ ...draft, enabled_language_codes: nextEnabled, default_locale: defaultLocale });
@@ -159,18 +157,11 @@ export default function SystemSettingsPanel({ settings, canWrite, canAccessMaint
</FormField>
</Card>
<Card title="i18n:govoplan-admin.language_packages">
<div className="settings-list">
{draft.available_languages.map((item) => (
<label className="admin-inline-check" key={item.code}>
<input
type="checkbox"
checked={draft.enabled_language_codes.includes(item.code)}
disabled={!canWrite || busy || item.code === draft.default_locale}
onChange={(event) => toggleLanguage(item.code, event.target.checked)} />
<span><strong>{item.code.toUpperCase()}</strong> {languageOptionLabel(item)}</span>
</label>
))}
</div>
<AdminSelectionList
options={draft.available_languages.map((item) => ({ id: item.code, label: item.code.toUpperCase(), description: languageOptionLabel(item), disabled: !canWrite || busy || item.code === draft.default_locale }))}
selected={draft.enabled_language_codes}
onChange={setEnabledLanguages}
/>
<div className="form-grid">
<FormField label="i18n:govoplan-admin.language_code">
<input value={packageDraft.code} disabled={!canWrite || busy} placeholder="fr" onChange={(event) => setPackageDraft({ ...packageDraft, code: event.target.value })} />