* refactor: use AnyEntity instead of any * refactor: remove any and brand company type * refactor: add typename for user and people * bugfix: await company to be created before displaying it * feature: await deletion before removing the lines * refactor: remove default tyep for filters * refactor: remove default type AnyEntity * refactor: remove USers from filterable types * refactor: do not depend on Filter types in Table * Add tests --------- Co-authored-by: Charles Bochet <charles@twenty.com>
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
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<SelectedFilterType<ValueType, WhereTemplateType>>,
|
|
): BoolExpType<WhereTemplateType> => {
|
|
const where = filters.reduce((acc, filter) => {
|
|
return { ...acc, ...filter.operand.whereTemplate(filter.value) };
|
|
}, {} as BoolExpType<WhereTemplateType>);
|
|
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 = <OrderByTemplate>(
|
|
sorts: Array<SelectedSortType<OrderByTemplate>>,
|
|
): 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[];
|
|
};
|