import { Order_By } from '../../../generated/graphql'; import { BoolExpType, FilterWhereType, FilterableFieldsType, SelectedFilterType, SelectedSortType, } from './interface'; export const reduceFiltersToWhere = < ValueType extends FilterableFieldsType, WhereTemplateType extends FilterWhereType, >( filters: Array>, ): BoolExpType => { const where = filters.reduce((acc, filter) => { return { ...acc, ...filter.operand.whereTemplate(filter.value) }; }, {} as BoolExpType); return where; }; const mapOrderToOrder_By = (order: string) => { if (order === 'asc') return Order_By.Asc; return Order_By.Desc; }; export const defaultOrderByTemplateFactory = (key: string) => (order: string) => ({ [key]: order, }); export const reduceSortsToOrderBy = ( sorts: Array>, ): OrderByTemplate[] => { const mappedSorts = sorts.map((sort) => { if (sort._type === 'custom_sort') return sort.orderByTemplate(mapOrderToOrder_By(sort.order)); return defaultOrderByTemplateFactory(sort.key as string)(sort.order); }); return mappedSorts as OrderByTemplate[]; };