diff --git a/package.json b/package.json index 6dd7780..a91799c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "axp-ts", - "version": "1.10.0", + "version": "1.11.0", "description": "TypeScript helper library", "author": "AntoXa PRO ", "homepage": "https://antoxahub.ru/antoxa/axp-ts", diff --git a/src/requests/find-filter.ts b/src/requests/find-filter.ts index 85e49bf..3e53517 100644 --- a/src/requests/find-filter.ts +++ b/src/requests/find-filter.ts @@ -1,4 +1,4 @@ -import type { TPagination } from './pagination' +import type { TPaginationQuery } from './pagination' import { z } from 'zod' import { isEqual } from '../utils' @@ -19,26 +19,30 @@ export const querySchema = cFieldsSchema export type TQuery = z.infer /** - * Объект для преобразования фильтра в URL. + * Класс для работы с запросами (для удобства). */ export type TFindFilter = { - obj?: Omit - pagination?: TPagination + obj: Omit + pagination: TPaginationQuery sort?: string } +/** + * Класс для работы с запросами (для удобства). + */ export class FindFilter implements TFindFilter { - obj?: Omit - pagination?: TPagination + obj: Omit + pagination: TPaginationQuery sort?: string constructor(query?: T) { + // Copy fiends. let queryCopy: T = Object.assign({}, query) // Pagination. - this.setPagination(queryCopy) - if (this.pagination) { - // Delete pagination props. + this.pagination = new Pagination(queryCopy).getQuery() + // Delete pagination fields. + if (this.pagination as TPaginationQuery) { const paginationKeys = Object.keys(this.pagination) as [keyof T] for (const key of paginationKeys) { if (queryCopy[key]) delete queryCopy[key] @@ -48,15 +52,15 @@ export class FindFilter implements TFindFilter { // Sort. if (queryCopy.sort) { this.sort = queryCopy.sort - queryCopy.sort = undefined + delete queryCopy.sort } // Obj. this.obj = queryCopy } - setPagination(pagination?: Partial) { - this.pagination = new Pagination(pagination).toObject() + setPagination(pagination?: TPaginationQuery) { + this.pagination = new Pagination(pagination).getQuery() } toObject(): TFindFilter { diff --git a/src/requests/pagination.ts b/src/requests/pagination.ts index 6303498..8b88251 100644 --- a/src/requests/pagination.ts +++ b/src/requests/pagination.ts @@ -1,6 +1,9 @@ import { z } from 'zod' import { cFieldsSchema, fieldSchema } from '../forms' +/** + * Модель данных для пагинайи. + */ export const paginationSchema = cFieldsSchema .pick({ page: true, @@ -17,10 +20,16 @@ export const paginationSchema = cFieldsSchema label: 'Кол-во всех страниц' }) }) - .describe('Пагинация') + .describe('Данные пагинации') +/** + * Модель данных для пагинайи. + */ export type TPagination = z.infer +/** + * Модель данных для пагинайи для запросе. + */ export const paginationQuerySchema = paginationSchema .pick({ page: true, @@ -29,19 +38,25 @@ export const paginationQuerySchema = paginationSchema .partial() .describe('Параметры разбиения на страницы') +/** + * Модель данных для пагинайи для запросе. + */ export type TPaginationQuery = z.infer -// Константы. +// +// Переделать. +// const DEFAULTS = { page: 1, limit: 10, maxLimit: 100 } - export type TPaginationParseArg = number | string | undefined - export type TPaginationArguments = { page?: TPaginationParseArg limit?: TPaginationParseArg total?: number } +/** + * @todo Переделать логику. + */ export class Pagination implements TPagination { /** * Максимальный лимит элементов. @@ -121,4 +136,8 @@ export class Pagination implements TPagination { pages: this.pages } } + + getQuery(): TPaginationQuery { + return { page: this.page, limit: this.limit } + } }