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:
schroda
2025-06-25 00:38:01 +02:00
parent 56f01efc1e
commit cb74984659
8 changed files with 146 additions and 249 deletions

View File

@@ -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;