packages/search-ui-workplace-search-connector/src/requestAdapters.ts (69 lines of code) (raw):

import type { RequestState, Filter, SortDirection, SortOption, FilterValue } from "@elastic/search-ui"; import { helpers } from "@elastic/search-ui"; function removeName(v: FilterValue) { if (helpers.isFilterValueRange(v)) { // eslint-disable-next-line const { name, ...rest } = v; return { ...rest }; } return v; } function rollup(f: Filter) { const values = f.values.map(removeName).map((v) => ({ [f.field]: v })); return { [f.type || "any"]: values }; } function adaptFilters(filters: Filter[]) { if (!filters || filters.length === 0) return {}; const all = filters.map(rollup); return { all }; } function getSort( sortDirection: SortDirection, sortField: string, sortList: SortOption[] ) { if (sortList && sortList.length) { return sortList.map((sortItem) => ({ [sortItem.field]: sortItem.direction })); } else if (sortField && sortDirection) { return { [sortField]: sortDirection }; } else { return undefined; } } export function adaptRequest(request: RequestState) { const { current, resultsPerPage, searchTerm, sortDirection, sortField, sortList } = request; const sort = getSort(sortDirection, sortField, sortList); return { query: searchTerm, ...(sort !== undefined && { sort }), page: { ...(resultsPerPage !== undefined && { size: resultsPerPage }), ...(current !== undefined && { current }) }, filters: adaptFilters(request.filters) }; }