refactor(webui): use central language selection
This commit is contained in:
@@ -5,7 +5,7 @@ import { Card } from "@govoplan/core-webui";
|
|||||||
import { FormField } from "@govoplan/core-webui";
|
import { FormField } from "@govoplan/core-webui";
|
||||||
import { ToggleSwitch } 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 { 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";
|
const DELTA_KEY = "admin:system-settings";
|
||||||
|
|
||||||
@@ -112,10 +112,8 @@ export default function SystemSettingsPanel({ settings, canWrite, canAccessMaint
|
|||||||
{setBusy(false);}
|
{setBusy(false);}
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleLanguage(code: string, checked: boolean) {
|
function setEnabledLanguages(selected: string[]) {
|
||||||
const enabled = new Set(draft.enabled_language_codes);
|
const enabled = new Set(selected);
|
||||||
if (checked) enabled.add(code);
|
|
||||||
else enabled.delete(code);
|
|
||||||
const nextEnabled = draft.available_languages.map((item) => item.code).filter((item) => enabled.has(item));
|
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);
|
const defaultLocale = nextEnabled.includes(draft.default_locale) ? draft.default_locale : (nextEnabled[0] ?? draft.default_locale);
|
||||||
setDraft({ ...draft, enabled_language_codes: nextEnabled, default_locale: defaultLocale });
|
setDraft({ ...draft, enabled_language_codes: nextEnabled, default_locale: defaultLocale });
|
||||||
@@ -159,18 +157,11 @@ export default function SystemSettingsPanel({ settings, canWrite, canAccessMaint
|
|||||||
</FormField>
|
</FormField>
|
||||||
</Card>
|
</Card>
|
||||||
<Card title="i18n:govoplan-admin.language_packages">
|
<Card title="i18n:govoplan-admin.language_packages">
|
||||||
<div className="settings-list">
|
<AdminSelectionList
|
||||||
{draft.available_languages.map((item) => (
|
options={draft.available_languages.map((item) => ({ id: item.code, label: item.code.toUpperCase(), description: languageOptionLabel(item), disabled: !canWrite || busy || item.code === draft.default_locale }))}
|
||||||
<label className="admin-inline-check" key={item.code}>
|
selected={draft.enabled_language_codes}
|
||||||
<input
|
onChange={setEnabledLanguages}
|
||||||
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>
|
|
||||||
<div className="form-grid">
|
<div className="form-grid">
|
||||||
<FormField label="i18n:govoplan-admin.language_code">
|
<FormField label="i18n:govoplan-admin.language_code">
|
||||||
<input value={packageDraft.code} disabled={!canWrite || busy} placeholder="fr" onChange={(event) => setPackageDraft({ ...packageDraft, code: event.target.value })} />
|
<input value={packageDraft.code} disabled={!canWrite || busy} placeholder="fr" onChange={(event) => setPackageDraft({ ...packageDraft, code: event.target.value })} />
|
||||||
|
|||||||
Reference in New Issue
Block a user