Fix constraining logic of stored client metadata
By the time the constraining function was called, the stored values were still of type string and were not converted to the correct type yet.
This commit is contained in:
@@ -9,15 +9,12 @@
|
||||
import { useEffect, useMemo } from 'react';
|
||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||
import { requestUpdateServerMetadata } from '@/modules/metadata/services/MetadataUpdater.ts';
|
||||
import { jsonSaveParse } from '@/lib/HelperFunctions.ts';
|
||||
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||
import { MetadataMigrationSettings } from '@/modules/migration/Migration.types.ts';
|
||||
import { MetadataThemeSettings } from '@/modules/theme/AppTheme.types.ts';
|
||||
import { SERVER_SETTINGS_METADATA_DEFAULT } from '@/modules/settings/Settings.constants.ts';
|
||||
import { MetadataServerSettingKeys, MetadataServerSettings } from '@/modules/settings/Settings.types.ts';
|
||||
import { convertFromGqlMeta } from '@/modules/metadata/services/MetadataConverter.ts';
|
||||
import { getMetadataFrom } from '@/modules/metadata/services/MetadataReader.ts';
|
||||
import { AllowedMetadataValueTypes, AppMetadataKeys, Metadata } from '@/modules/metadata/Metadata.types.ts';
|
||||
import { AllowedMetadataValueTypes, Metadata } from '@/modules/metadata/Metadata.types.ts';
|
||||
|
||||
export const convertSettingsToMetadata = (
|
||||
settings: Partial<MetadataServerSettings>,
|
||||
@@ -30,37 +27,11 @@ export const convertSettingsToMetadata = (
|
||||
sourceLanguages: JSON.stringify(settings.sourceLanguages),
|
||||
});
|
||||
|
||||
export const convertMetadataToSettings = (
|
||||
metadata: Partial<Metadata<AppMetadataKeys, AllowedMetadataValueTypes>>,
|
||||
): MetadataServerSettings =>
|
||||
({
|
||||
...SERVER_SETTINGS_METADATA_DEFAULT,
|
||||
...(metadata as unknown as MetadataServerSettings),
|
||||
devices:
|
||||
jsonSaveParse<string[]>((metadata.devices as string) ?? '') ?? SERVER_SETTINGS_METADATA_DEFAULT.devices,
|
||||
customThemes:
|
||||
jsonSaveParse<MetadataThemeSettings['customThemes']>((metadata.customThemes as string) ?? '') ??
|
||||
SERVER_SETTINGS_METADATA_DEFAULT.customThemes,
|
||||
migrateSortSettings:
|
||||
jsonSaveParse<MetadataMigrationSettings['migrateSortSettings']>(
|
||||
(metadata.migrateSortSettings as string) ?? '',
|
||||
) ?? SERVER_SETTINGS_METADATA_DEFAULT.migrateSortSettings,
|
||||
extensionLanguages:
|
||||
jsonSaveParse<string[]>((metadata.extensionLanguages as string) ?? '') ??
|
||||
SERVER_SETTINGS_METADATA_DEFAULT.extensionLanguages,
|
||||
sourceLanguages:
|
||||
jsonSaveParse<string[]>((metadata.sourceLanguages as string) ?? '') ??
|
||||
SERVER_SETTINGS_METADATA_DEFAULT.sourceLanguages,
|
||||
}) satisfies MetadataServerSettings;
|
||||
|
||||
const getMetadataServerSettingsWithDefaultFallback = (
|
||||
meta?: Metadata,
|
||||
defaultSettings: MetadataServerSettings = SERVER_SETTINGS_METADATA_DEFAULT,
|
||||
useEffectFn?: typeof useEffect,
|
||||
): MetadataServerSettings =>
|
||||
convertMetadataToSettings(
|
||||
getMetadataFrom('global', { meta }, convertSettingsToMetadata(defaultSettings), undefined, useEffectFn),
|
||||
);
|
||||
): MetadataServerSettings => getMetadataFrom('global', { meta }, defaultSettings, undefined, useEffectFn);
|
||||
|
||||
export const useMetadataServerSettings = (): {
|
||||
metadata?: Metadata;
|
||||
|
||||
Reference in New Issue
Block a user