Update settings-general.tsx

This commit is contained in:
Zamitto 2024-05-22 21:02:02 -03:00 committed by GitHub
parent 8f63bc5f15
commit 952b10fb06
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -9,6 +9,11 @@ import type { UserPreferences } from "@types";
import { changeLanguage } from "i18next"; import { changeLanguage } from "i18next";
import * as languageResources from "@locales"; import * as languageResources from "@locales";
interface LanguageOption {
option: string;
nativeName: string;
}
export interface SettingsGeneralProps { export interface SettingsGeneralProps {
userPreferences: UserPreferences | null; userPreferences: UserPreferences | null;
updateUserPreferences: (values: Partial<UserPreferences>) => void; updateUserPreferences: (values: Partial<UserPreferences>) => void;
@ -27,6 +32,8 @@ export function SettingsGeneral({
language: "", language: "",
}); });
const [languageOptions, setLanguageOptions] = useState<LanguageOption[]>([]);
const [defaultDownloadsPath, setDefaultDownloadsPath] = useState(""); const [defaultDownloadsPath, setDefaultDownloadsPath] = useState("");
useEffect(() => { useEffect(() => {
@ -35,6 +42,21 @@ export function SettingsGeneral({
} }
fetchdefaultDownloadsPath(); fetchdefaultDownloadsPath();
setLanguageOptions(
Object.keys(languageResources)
.map((language) => {
return {
nativeName: ISO6391.getNativeName(language),
option: language,
};
})
.sort((a, b) => {
if (a.nativeName < b.nativeName) return -1;
if (a.nativeName > b.nativeName) return 1;
return 0;
})
);
}, []); }, []);
useEffect(updateFormWithUserPreferences, [ useEffect(updateFormWithUserPreferences, [
@ -50,9 +72,6 @@ export function SettingsGeneral({
}; };
const handleChange = (values: Partial<typeof form>) => { const handleChange = (values: Partial<typeof form>) => {
// TODO: why is the setForm needed if updateUserPreferences already changes the
// UserPreferences and useEffect(updateFormWithUserPreferences)
// does the setForm((prev) in the callback function?
setForm((prev) => ({ ...prev, ...values })); setForm((prev) => ({ ...prev, ...values }));
updateUserPreferences(values); updateUserPreferences(values);
}; };
@ -71,6 +90,8 @@ export function SettingsGeneral({
function updateFormWithUserPreferences() { function updateFormWithUserPreferences() {
if (userPreferences) { if (userPreferences) {
const parsedLanguage = userPreferences.language.split("-")[0];
setForm((prev) => ({ setForm((prev) => ({
...prev, ...prev,
downloadsPath: userPreferences.downloadsPath ?? defaultDownloadsPath, downloadsPath: userPreferences.downloadsPath ?? defaultDownloadsPath,
@ -78,7 +99,7 @@ export function SettingsGeneral({
userPreferences.downloadNotificationsEnabled, userPreferences.downloadNotificationsEnabled,
repackUpdatesNotificationsEnabled: repackUpdatesNotificationsEnabled:
userPreferences.repackUpdatesNotificationsEnabled, userPreferences.repackUpdatesNotificationsEnabled,
language: userPreferences.language, language: parsedLanguage,
})); }));
} }
} }
@ -105,9 +126,9 @@ export function SettingsGeneral({
<h3>{t("language")}</h3> <h3>{t("language")}</h3>
<> <>
<Select value={form.language} onChange={handleLanguageChange}> <Select value={form.language} onChange={handleLanguageChange}>
{Object.keys(languageResources).map((language) => ( {languageOptions.map((language) => (
<option key={language} value={language}> <option key={language.option} value={language.option}>
{ISO6391.getNativeName(language)} {language.nativeName}
</option> </option>
))} ))}
</Select> </Select>