diff --git a/src/features/GetFonts/lib/mapper/mapManagerToParams.ts b/src/features/GetFonts/lib/mapper/mapManagerToParams.ts index 637a052..93a9a59 100644 --- a/src/features/GetFonts/lib/mapper/mapManagerToParams.ts +++ b/src/features/GetFonts/lib/mapper/mapManagerToParams.ts @@ -1,18 +1,56 @@ -import type { FontshareParams } from '$entities/Font'; +import type { ProxyFontsParams } from '$entities/Font/api'; import type { FilterManager } from '../filterManager/filterManager.svelte'; /** - * Maps filter manager to fontshare params. + * Maps filter manager to proxy API parameters. * - * @param manager - Filter manager instance. - * @returns - Partial fontshare params. + * Transforms UI filter state into proxy API query parameters. + * Handles conversion from filter groups to API-specific parameters. + * + * @param manager - Filter manager instance with reactive state + * @returns - Partial proxy API parameters ready for API call + * + * @example + * ```ts + * // Example filter manager state: + * // { + * // queryValue: 'roboto', + * // providers: ['google'], + * // categories: ['sans-serif'], + * // subsets: ['latin'] + * // } + * + * const params = mapManagerToParams(manager); + * // Returns: { provider: 'google', category: 'sans-serif', subset: 'latin', q: 'roboto' } + * ``` */ -export function mapManagerToParams(manager: FilterManager): Partial { +export function mapManagerToParams(manager: FilterManager): Partial { + const providers = manager.getGroup('providers')?.instance.selectedProperties.map(p => p.value); + const categories = manager.getGroup('categories')?.instance.selectedProperties.map(p => + p.value + ); + const subsets = manager.getGroup('subsets')?.instance.selectedProperties.map(p => p.value); + return { - q: manager.debouncedQueryValue, - // Map groups to specific API keys - categories: manager.getGroup('categories')?.instance.selectedProperties.map(p => p.value) - ?? [], - tags: manager.getGroup('tags')?.instance.selectedProperties.map(p => p.value) ?? [], + // Search query (debounced) + q: manager.debouncedQueryValue || undefined, + + // Provider filter (single value - proxy API doesn't support array) + // Use first provider if multiple selected, or undefined if none/all selected + provider: providers && providers.length === 1 + ? (providers[0] as 'google' | 'fontshare') + : undefined, + + // Category filter (single value - proxy API doesn't support array) + // Use first category if multiple selected, or undefined if none/all selected + category: categories && categories.length === 1 + ? (categories[0] as ProxyFontsParams['category']) + : undefined, + + // Subset filter (single value - proxy API doesn't support array) + // Use first subset if multiple selected, or undefined if none/all selected + subset: subsets && subsets.length === 1 + ? (subsets[0] as ProxyFontsParams['subset']) + : undefined, }; }