Save selected extension languages on the server
This commit is contained in:
@@ -8,4 +8,5 @@
|
|||||||
|
|
||||||
export type MetadataBrowseSettings = {
|
export type MetadataBrowseSettings = {
|
||||||
hideLibraryEntries: boolean;
|
hideLibraryEntries: boolean;
|
||||||
|
extensionLanguages: string[];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { Link, useLocation, useNavigate } from 'react-router-dom';
|
import { Link, useLocation, useNavigate } from 'react-router-dom';
|
||||||
import { CustomTooltip } from '@/modules/core/components/CustomTooltip.tsx';
|
import { CustomTooltip } from '@/modules/core/components/CustomTooltip.tsx';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { extensionDefaultLangs } from '@/modules/core/utils/Languages.ts';
|
|
||||||
import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
|
import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
|
||||||
import { AppbarSearch } from '@/modules/core/components/AppbarSearch.tsx';
|
import { AppbarSearch } from '@/modules/core/components/AppbarSearch.tsx';
|
||||||
import { LoadingPlaceholder } from '@/modules/core/components/placeholder/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/modules/core/components/placeholder/LoadingPlaceholder.tsx';
|
||||||
@@ -48,6 +47,11 @@ import { AppRoutes } from '@/modules/core/AppRoute.constants.ts';
|
|||||||
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
||||||
import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx';
|
import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx';
|
||||||
import { ExtensionOptions } from '@/modules/extension/components/ExtensionOptions';
|
import { ExtensionOptions } from '@/modules/extension/components/ExtensionOptions';
|
||||||
|
import {
|
||||||
|
createUpdateMetadataServerSettings,
|
||||||
|
useMetadataServerSettings,
|
||||||
|
} from '@/modules/settings/services/ServerSettingsMetadata.ts';
|
||||||
|
import { MetadataBrowseSettings } from '@/modules/browse/Browse.types.ts';
|
||||||
|
|
||||||
const LANGUAGE = 0;
|
const LANGUAGE = 0;
|
||||||
const EXTENSIONS = 1;
|
const EXTENSIONS = 1;
|
||||||
@@ -125,7 +129,13 @@ export function Extensions({ tabsMenuHeight }: { tabsMenuHeight: number }) {
|
|||||||
const [fetchExtensions, { data, loading: areExtensionsLoading, error: extensionsError }] =
|
const [fetchExtensions, { data, loading: areExtensionsLoading, error: extensionsError }] =
|
||||||
requestManager.useExtensionListFetch();
|
requestManager.useExtensionListFetch();
|
||||||
|
|
||||||
const [shownLangs, setShownLangs] = useLocalStorage<string[]>('shownExtensionLangs', extensionDefaultLangs());
|
const {
|
||||||
|
settings: { extensionLanguages: shownLangs },
|
||||||
|
} = useMetadataServerSettings();
|
||||||
|
const updateMetadataServerSettings = createUpdateMetadataServerSettings<
|
||||||
|
keyof Pick<MetadataBrowseSettings, 'extensionLanguages'>
|
||||||
|
>((e) => makeToast(t('global.error.label.failed_to_save_changes'), 'error', getErrorMessage(e)));
|
||||||
|
|
||||||
const [showNsfw] = useLocalStorage<boolean>('showNsfw', true);
|
const [showNsfw] = useLocalStorage<boolean>('showNsfw', true);
|
||||||
const [query] = useQueryParam('query', StringParam);
|
const [query] = useQueryParam('query', StringParam);
|
||||||
|
|
||||||
@@ -219,7 +229,13 @@ export function Extensions({ tabsMenuHeight }: { tabsMenuHeight: number }) {
|
|||||||
</IconButton>
|
</IconButton>
|
||||||
</CustomTooltip>
|
</CustomTooltip>
|
||||||
|
|
||||||
<LangSelect shownLangs={shownLangs} setShownLangs={setShownLangs} allLangs={allLangs} />
|
<LangSelect
|
||||||
|
shownLangs={shownLangs}
|
||||||
|
setShownLangs={(languages: string[]) =>
|
||||||
|
updateMetadataServerSettings('extensionLanguages', languages)
|
||||||
|
}
|
||||||
|
allLangs={allLangs}
|
||||||
|
/>
|
||||||
</>,
|
</>,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ const APP_METADATA_OBJECT: Record<AppMetadataKeys, undefined> = {
|
|||||||
downloaded: undefined,
|
downloaded: undefined,
|
||||||
unread: undefined,
|
unread: undefined,
|
||||||
showChapterNumber: undefined,
|
showChapterNumber: undefined,
|
||||||
|
extensionLanguages: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const VALID_APP_METADATA_KEYS = Object.keys(APP_METADATA_OBJECT);
|
export const VALID_APP_METADATA_KEYS = Object.keys(APP_METADATA_OBJECT);
|
||||||
@@ -134,6 +135,7 @@ export const GLOBAL_METADATA_KEYS: AppMetadataKeys[] = [
|
|||||||
|
|
||||||
// browse
|
// browse
|
||||||
'hideLibraryEntries',
|
'hideLibraryEntries',
|
||||||
|
'extensionLanguages',
|
||||||
|
|
||||||
// history
|
// history
|
||||||
'hideHistory',
|
'hideHistory',
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { DEFAULT_DEVICE } from '@/modules/device/services/Device.ts';
|
|||||||
import { DEFAULT_SORT_SETTINGS } from '@/modules/migration/Migration.constants.ts';
|
import { DEFAULT_SORT_SETTINGS } from '@/modules/migration/Migration.constants.ts';
|
||||||
import { MetadataServerSettings } from '@/modules/settings/Settings.types.ts';
|
import { MetadataServerSettings } from '@/modules/settings/Settings.types.ts';
|
||||||
import { GridLayout } from '@/modules/core/Core.types.ts';
|
import { GridLayout } from '@/modules/core/Core.types.ts';
|
||||||
|
import { extensionDefaultLangs } from '@/modules/core/utils/Languages.ts';
|
||||||
|
|
||||||
export const SERVER_SETTINGS_METADATA_DEFAULT: MetadataServerSettings = {
|
export const SERVER_SETTINGS_METADATA_DEFAULT: MetadataServerSettings = {
|
||||||
// downloads
|
// downloads
|
||||||
@@ -40,6 +41,7 @@ export const SERVER_SETTINGS_METADATA_DEFAULT: MetadataServerSettings = {
|
|||||||
|
|
||||||
// browse
|
// browse
|
||||||
hideLibraryEntries: false,
|
hideLibraryEntries: false,
|
||||||
|
extensionLanguages: extensionDefaultLangs(),
|
||||||
|
|
||||||
// history
|
// history
|
||||||
hideHistory: false,
|
hideHistory: false,
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ export const convertSettingsToMetadata = (
|
|||||||
devices: JSON.stringify(settings.devices),
|
devices: JSON.stringify(settings.devices),
|
||||||
customThemes: JSON.stringify(settings.customThemes),
|
customThemes: JSON.stringify(settings.customThemes),
|
||||||
migrateSortSettings: JSON.stringify(settings.migrateSortSettings),
|
migrateSortSettings: JSON.stringify(settings.migrateSortSettings),
|
||||||
|
extensionLanguages: JSON.stringify(settings.extensionLanguages),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const convertMetadataToSettings = (
|
export const convertMetadataToSettings = (
|
||||||
@@ -43,6 +44,9 @@ export const convertMetadataToSettings = (
|
|||||||
jsonSaveParse<MetadataMigrationSettings['migrateSortSettings']>(
|
jsonSaveParse<MetadataMigrationSettings['migrateSortSettings']>(
|
||||||
(metadata.migrateSortSettings as string) ?? '',
|
(metadata.migrateSortSettings as string) ?? '',
|
||||||
) ?? SERVER_SETTINGS_METADATA_DEFAULT.migrateSortSettings,
|
) ?? SERVER_SETTINGS_METADATA_DEFAULT.migrateSortSettings,
|
||||||
|
extensionLanguages:
|
||||||
|
jsonSaveParse<string[]>((metadata.extensionLanguages as string) ?? '') ??
|
||||||
|
SERVER_SETTINGS_METADATA_DEFAULT.extensionLanguages,
|
||||||
}) satisfies MetadataServerSettings;
|
}) satisfies MetadataServerSettings;
|
||||||
|
|
||||||
const getMetadataServerSettingsWithDefaultFallback = (
|
const getMetadataServerSettingsWithDefaultFallback = (
|
||||||
|
|||||||
Reference in New Issue
Block a user