2026-01-29 14:40:31 +03:00
|
|
|
import type { ProxyFontsParams } from '$entities/Font/api';
|
2026-01-13 20:08:46 +03:00
|
|
|
import type { FilterManager } from '../filterManager/filterManager.svelte';
|
|
|
|
|
|
2026-01-18 15:55:07 +03:00
|
|
|
/**
|
2026-01-29 14:40:31 +03:00
|
|
|
* Maps filter manager to proxy API parameters.
|
2026-01-18 15:55:07 +03:00
|
|
|
*
|
2026-01-29 14:40:31 +03:00
|
|
|
* 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' }
|
|
|
|
|
* ```
|
2026-01-18 15:55:07 +03:00
|
|
|
*/
|
2026-01-29 14:40:31 +03:00
|
|
|
export function mapManagerToParams(manager: FilterManager): Partial<ProxyFontsParams> {
|
|
|
|
|
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);
|
|
|
|
|
|
2026-01-13 20:08:46 +03:00
|
|
|
return {
|
2026-01-29 14:40:31 +03:00
|
|
|
// 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,
|
2026-01-13 20:08:46 +03:00
|
|
|
};
|
|
|
|
|
}
|