mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-02-15 04:32:13 +00:00
Update settings-general.tsx
This commit is contained in:
parent
8f63bc5f15
commit
952b10fb06
1 changed files with 28 additions and 7 deletions
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue