type QueryParam = string | (string | null)[] | null | undefined; type QueryRecord = Record; /** * Собирает query для применения фильтра: непустые значения `filterValue` склеивает в строку * категорий `key_value,...`, добавляет duration/added, сохраняет sort и сбрасывает page. * @param params.currentQuery - текущий query роута * @param params.filterValue - выбранные категории (ключ → значение) * @param params.durationValue - выбранная длительность * @param params.addedValue - выбранный период добавления */ export function buildFilterQuery(params: { currentQuery: QueryRecord; filterValue: Record; durationValue: string; addedValue: string; }): QueryRecord { const { currentQuery, filterValue, durationValue, addedValue } = params; const oldQuery = { ...currentQuery }; delete oldQuery['page']; const mainFiltersValue = { ...(durationValue ? { duration: durationValue } : {}), ...(addedValue ? { added: addedValue } : {}), }; const preserved = { ...mainFiltersValue, ...(oldQuery.sort ? { sort: oldQuery.sort } : {}), ...(oldQuery.page ? { page: oldQuery.page } : {}), }; const categories = Object.entries(filterValue) .filter(([, value]) => typeof value === 'string' && value.length > 0) .map(([key, value]) => `${key}_${value}`); return { ...preserved, categories: categories.length ? categories.join(',') : undefined, }; }