import type { ProxyFontsParams } from '$entities/Font/api'; import type { FilterManager } from '../filterManager/filterManager.svelte'; /** * Maps filter manager to proxy API parameters. * * 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 { 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 { // 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, }; }