From dc4e0971a6d12a0e9706f33ea94c7e7da64b0567 Mon Sep 17 00:00:00 2001 From: Jarrod Flesch Date: Thu, 1 Dec 2022 08:17:00 -0500 Subject: [PATCH] chore: simplifies logic to decouple pagination and limit --- src/collections/operations/find.ts | 9 ++-- src/collections/operations/findVersions.ts | 3 +- .../operations/helpers/findDocs.ts | 44 ------------------- src/globals/operations/findVersions.ts | 3 +- 4 files changed, 8 insertions(+), 51 deletions(-) delete mode 100644 src/collections/operations/helpers/findDocs.ts diff --git a/src/collections/operations/find.ts b/src/collections/operations/find.ts index 3ba04c4a7f..a7bbd79d4e 100644 --- a/src/collections/operations/find.ts +++ b/src/collections/operations/find.ts @@ -10,7 +10,6 @@ import { buildSortParam } from '../../mongoose/buildSortParam'; import replaceWithDraftIfAvailable from '../../versions/drafts/replaceWithDraftIfAvailable'; import { AccessResult } from '../../config/types'; import { afterRead } from '../../fields/hooks/afterRead'; -import { findDocs } from './helpers/findDocs'; export type Arguments = { collection: Collection @@ -137,9 +136,9 @@ async function find(incomingArgs: Arguments): Promis locale, }); - const paginatedDocs = await findDocs(Model, query, { + const fallbackLimit = pagination ? 10 : 0; + const paginatedDocs = await Model.paginate(query, { page: page || 1, - limit: limit || 10, sort: { [sortProperty]: sortOrder, }, @@ -148,6 +147,10 @@ async function find(incomingArgs: Arguments): Promis useEstimatedCount, pagination, useCustomCountFn: pagination ? undefined : () => Promise.resolve(1), + options: { + // limit must be set here to avoid being ignored when paginate is false + limit: typeof limit === 'number' ? limit : fallbackLimit, + }, }); let result: PaginatedDocs = { diff --git a/src/collections/operations/findVersions.ts b/src/collections/operations/findVersions.ts index 9005f49c23..ce4e279e3c 100644 --- a/src/collections/operations/findVersions.ts +++ b/src/collections/operations/findVersions.ts @@ -10,7 +10,6 @@ import { PaginatedDocs } from '../../mongoose/types'; import { TypeWithVersion } from '../../versions/types'; import { afterRead } from '../../fields/hooks/afterRead'; import { buildVersionCollectionFields } from '../../versions/buildCollectionFields'; -import { findDocs } from './helpers/findDocs'; export type Arguments = { collection: Collection @@ -99,7 +98,7 @@ async function findVersions = any>(args: Arguments) locale, }); - const paginatedDocs = await findDocs(VersionsModel, query, { + const paginatedDocs = await VersionsModel.paginate(query, { page: page || 1, limit: limit || 10, sort: { diff --git a/src/collections/operations/helpers/findDocs.ts b/src/collections/operations/helpers/findDocs.ts deleted file mode 100644 index 4bb0a19d64..0000000000 --- a/src/collections/operations/helpers/findDocs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { PaginatedDocs } from '../../../mongoose/types'; -import { CollectionModel } from '../../config/types'; -import { Arguments } from '../find'; - -type FindDocsArguments = ({ - page: Arguments['page'] - limit: Arguments['limit'] - sort: { - [key: string]: string, - } -}) & ({ - pagination?: false -} | { - pagination: true - lean?: boolean - leanWithId?: boolean - useEstimatedCount?: boolean - useCustomCountFn?: (() => Promise) | undefined; -}) - -export async function findDocs(Model: CollectionModel, query: Record, args: FindDocsArguments): Promise> { - // ///////////////////////////////////// - // Model.paginate ignores limit when paginate is true - // pass limit=0 or pagination=false to skip - // ///////////////////////////////////// - if (args.limit !== 0 && args.pagination) { - return Model.paginate(query, args); - } - - const docs = await Model.find(query, undefined, args); - - return { - docs, - totalDocs: docs.length, - totalPages: 1, - page: undefined, - nextPage: null, - prevPage: null, - pagingCounter: 0, - hasNextPage: null, - hasPrevPage: null, - limit: args.limit || null, - }; -} diff --git a/src/globals/operations/findVersions.ts b/src/globals/operations/findVersions.ts index 96a883185e..6020c3dd09 100644 --- a/src/globals/operations/findVersions.ts +++ b/src/globals/operations/findVersions.ts @@ -10,7 +10,6 @@ import { TypeWithVersion } from '../../versions/types'; import { SanitizedGlobalConfig } from '../config/types'; import { afterRead } from '../../fields/hooks/afterRead'; import { buildVersionGlobalFields } from '../../versions/buildGlobalFields'; -import { findDocs } from '../../collections/operations/helpers/findDocs'; export type Arguments = { globalConfig: SanitizedGlobalConfig @@ -97,7 +96,7 @@ async function findVersions = any>(args: Arguments) locale, }); - const paginatedDocs = await findDocs(VersionsModel, query, { + const paginatedDocs = await VersionsModel.paginate(query, { page: page || 1, limit: limit || 10, sort: {