import { BasicTableSettings } from '@@/datatables/types'; import { TableState } from '@@/datatables/useTableState'; import { PaginationQuery, PaginationQueryParams, withPaginationQueryParams, } from './pagination.types'; import { SearchQuery, SearchQueryParams } from './search.types'; import { SortOptions, SortQuery, SortQueryParams, withSortQuery, } from './sort.types'; export type BaseQueryOptions = SearchQuery & SortQuery & PaginationQuery; /** * Utility function to transform a TableState (base form) to a query options object * Used to unify backend pagination common cases * * @param tableState TableState {search, sortBy: {id:string, desc:bool }, page, pageSize} * @param sortOptions SortOptions (generated from columns) * @returns BaseQuery {search, sort, order, page, pageLimit} */ export function queryOptionsFromTableState( tableState: TableState & { page: number }, sortOptions: T ): BaseQueryOptions { return { // search/filter search: tableState.search, // sorting ...withSortQuery(tableState.sortBy, sortOptions), // pagination page: tableState.page, pageLimit: tableState.pageSize, }; } export type BaseQueryParams = SearchQueryParams & SortQueryParams & PaginationQueryParams; /** * * @param query BaseQueryOptions * @returns BaseQueryParams {search, sort, order, start, limit} */ export function queryParamsFromQueryOptions( query: BaseQueryOptions ): BaseQueryParams { return { // search/filter search: query.search, // sorting sort: query.sort, order: query.order, // paginattion ...withPaginationQueryParams(query), }; }