Uecko_ERP/packages/rdx-criteria/src/critera.ts
2025-11-16 20:29:07 +01:00

58 lines
1.6 KiB
TypeScript

import { Criteria as BaseCriteria, Filters, type FiltersPrimitives, Order } from "./codelytv";
import { INITIAL_PAGE_INDEX, INITIAL_PAGE_SIZE } from "./defaults";
export class Criteria extends BaseCriteria {
/**
* Creates a new Criteria instance.
*
* @param quickSearch - 'Quicksearch' field.
* @param filters - The filters to apply.
* @param order - The order to apply.
* @param pageSize - The size of the page.
* @param pageNumber - The number of the page.
*
*/
protected constructor(
public readonly filters: Filters,
public readonly order: Order,
public readonly pageSize: number,
public readonly pageNumber: number,
public readonly quickSearch?: string //Texto libre para búsqueda rápida
) {
super(filters, order, pageSize, pageNumber);
}
static fromPrimitives(
filters: FiltersPrimitives[],
orderBy: string | null,
orderType: string | null,
pageSize: number | null,
pageNumber: number | null,
quickSearch?: string | null
): Criteria {
return new Criteria(
Filters.fromPrimitives(filters),
Order.fromPrimitives(orderBy, orderType),
pageSize ?? INITIAL_PAGE_SIZE,
pageNumber ?? INITIAL_PAGE_INDEX,
quickSearch ?? undefined
);
}
toPrimitives() {
return {
q: this.quickSearch ?? "",
filters: this.filters.toPrimitives(),
orderBy: this.order.orderBy.value,
orderType: this.order.orderType.value,
pageSize: this.pageSize,
pageNumber: this.pageNumber,
};
}
toJSON() {
return this.toPrimitives();
}
}