import { getMultipleQuery } from '../runtime'; import type { ISelectItem } from '../types'; import type { RouteLocationNormalized, RouteLocationNormalizedLoaded } from 'vue-router'; /** * Формирует объект параметров запроса фильтра видео из query текущего маршрута. * @param route - текущий маршрут * @param selectDurationItems - элементы выбора длительности * @param selectAddedItems - элементы выбора даты добавления */ export function useGetVideosFilterRequest(route: RouteLocationNormalized | RouteLocationNormalizedLoaded, selectDurationItems: ISelectItem[], selectAddedItems: ISelectItem[]) { // Распарсим categories из query, если есть const rawCategories = route.query.categories ? (typeof route.query.categories === 'string' ? route.query.categories.split(',') : route.query.categories.flatMap(cat => cat?.split(','))) : []; // Преобразуем из формата 'key_value' в просто 'value' const parsedCategories = rawCategories .map(cat => { const parts = cat?.split('_'); if (parts && parts?.length > 1) { return parts?.slice(1).join('_'); } return cat; }); const durationQuery = getMultipleQuery(route, selectDurationItems, 'min_duration', 'max_duration'); const addedQuery = getMultipleQuery(route, selectAddedItems, 'min_added', 'max_added'); return { ...(parsedCategories.length > 0 ? { categories: parsedCategories } : {}), 'categories_filter_use_and': true, ...durationQuery, ...addedQuery, }; }