Merge pull request #1560 from payloadcms/roadmap/#1401-decouple-pagination-args

Roadmap/#1401 decouple pagination args
This commit is contained in:
Jarrod Flesch
2022-12-01 16:34:22 -05:00
committed by GitHub
8 changed files with 66 additions and 24 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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',
});

View File

@@ -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

View File

@@ -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
}

View File

@@ -0,0 +1,3 @@
export function isNumber(value: unknown): boolean {
return !Number.isNaN(Number(value));
}