Merge pull request #1560 from payloadcms/roadmap/#1401-decouple-pagination-args
Roadmap/#1401 decouple pagination args
This commit is contained in:
@@ -136,29 +136,33 @@ async function find<T extends TypeWithID = any>(incomingArgs: Arguments): Promis
|
||||
locale,
|
||||
});
|
||||
|
||||
const optionsToExecute = {
|
||||
const usePagination = pagination && limit !== 0;
|
||||
const limitToUse = limit ?? (usePagination ? 10 : 0);
|
||||
const paginatedDocs = await Model.paginate(query, {
|
||||
page: page || 1,
|
||||
limit: limit || 10,
|
||||
sort: {
|
||||
[sortProperty]: sortOrder,
|
||||
},
|
||||
limit: limitToUse,
|
||||
lean: true,
|
||||
leanWithId: true,
|
||||
useEstimatedCount,
|
||||
pagination,
|
||||
pagination: usePagination,
|
||||
useCustomCountFn: pagination ? undefined : () => Promise.resolve(1),
|
||||
};
|
||||
options: {
|
||||
// limit must also be set here, it's ignored when pagination is false
|
||||
limit: limitToUse,
|
||||
},
|
||||
});
|
||||
|
||||
const paginatedDocs = await Model.paginate(query, optionsToExecute);
|
||||
|
||||
let result = {
|
||||
let result: PaginatedDocs<T> = {
|
||||
...paginatedDocs,
|
||||
docs: paginatedDocs.docs.map((doc) => {
|
||||
const sanitizedDoc = JSON.parse(JSON.stringify(doc));
|
||||
sanitizedDoc.id = sanitizedDoc._id;
|
||||
return sanitizeInternalFields(sanitizedDoc);
|
||||
}),
|
||||
} as PaginatedDocs<T>;
|
||||
};
|
||||
|
||||
// /////////////////////////////////////
|
||||
// Replace documents with drafts if available
|
||||
|
||||
@@ -98,18 +98,16 @@ async function findVersions<T extends TypeWithVersion<T> = any>(args: Arguments)
|
||||
locale,
|
||||
});
|
||||
|
||||
const optionsToExecute = {
|
||||
const paginatedDocs = await VersionsModel.paginate(query, {
|
||||
page: page || 1,
|
||||
limit: limit || 10,
|
||||
limit: limit ?? 10,
|
||||
sort: {
|
||||
[sortProperty]: sortOrder,
|
||||
},
|
||||
lean: true,
|
||||
leanWithId: true,
|
||||
useEstimatedCount,
|
||||
};
|
||||
|
||||
const paginatedDocs = await VersionsModel.paginate(query, optionsToExecute);
|
||||
});
|
||||
|
||||
// /////////////////////////////////////
|
||||
// beforeRead - Collection
|
||||
|
||||
@@ -5,6 +5,7 @@ import { TypeWithID } from '../config/types';
|
||||
import { PaginatedDocs } from '../../mongoose/types';
|
||||
import find from '../operations/find';
|
||||
import { Where } from '../../types';
|
||||
import { isNumber } from '../../utilities/isNumber';
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export default async function findHandler<T extends TypeWithID = any>(req: PayloadRequest, res: Response, next: NextFunction): Promise<Response<PaginatedDocs<T>> | void> {
|
||||
@@ -24,9 +25,9 @@ export default async function findHandler<T extends TypeWithID = any>(req: Paylo
|
||||
collection: req.collection,
|
||||
where: req.query.where as Where, // This is a little shady
|
||||
page,
|
||||
limit: Number(req.query.limit),
|
||||
limit: isNumber(req.query.limit) ? Number(req.query.limit) : undefined,
|
||||
sort: req.query.sort as string,
|
||||
depth: Number(req.query.depth),
|
||||
depth: isNumber(req.query.depth) ? Number(req.query.depth) : undefined,
|
||||
draft: req.query.draft === 'true',
|
||||
});
|
||||
|
||||
|
||||
@@ -96,18 +96,16 @@ async function findVersions<T extends TypeWithVersion<T> = any>(args: Arguments)
|
||||
locale,
|
||||
});
|
||||
|
||||
const optionsToExecute = {
|
||||
const paginatedDocs = await VersionsModel.paginate(query, {
|
||||
page: page || 1,
|
||||
limit: limit || 10,
|
||||
limit: limit ?? 10,
|
||||
sort: {
|
||||
[sortProperty]: sortOrder,
|
||||
},
|
||||
lean: true,
|
||||
leanWithId: true,
|
||||
useEstimatedCount,
|
||||
};
|
||||
|
||||
const paginatedDocs = await VersionsModel.paginate(query, optionsToExecute);
|
||||
});
|
||||
|
||||
// /////////////////////////////////////
|
||||
// afterRead - Fields
|
||||
|
||||
@@ -3,10 +3,10 @@ export type PaginatedDocs<T = any> = {
|
||||
totalDocs: number
|
||||
limit: number
|
||||
totalPages: number
|
||||
page: number
|
||||
page?: number
|
||||
pagingCounter: number
|
||||
hasPrevPage: boolean
|
||||
hasNextPage: boolean
|
||||
prevPage: number | null
|
||||
nextPage: number | null
|
||||
prevPage?: number | null | undefined
|
||||
nextPage?: number | null | undefined
|
||||
}
|
||||
|
||||
3
src/utilities/isNumber.ts
Normal file
3
src/utilities/isNumber.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export function isNumber(value: unknown): boolean {
|
||||
return !Number.isNaN(Number(value));
|
||||
}
|
||||
Reference in New Issue
Block a user