From 78b1c1a453a5d8e019494ced5058d6642722651a Mon Sep 17 00:00:00 2001 From: Philip Okugbe <16838612+Philipinho@users.noreply.github.com> Date: Fri, 30 Jan 2026 19:28:54 +0000 Subject: [PATCH] feat: switch to cursor pagination (#1884) * add cursor pagination function * support custom order modifier * refactor returned object * feat(db): migrate paginated endpoints to cursor-based pagination * sync * support hasPrevPage boolean * feat(client): migrate pagination from offset to cursor-based * support beforeCursor/prevCursor * wrap search results in items array for API consistency --- .../client/src/components/common/paginate.tsx | 12 +- .../components/settings/settings-queries.tsx | 22 +- .../src/ee/api-key/pages/user-api-keys.tsx | 14 +- .../ee/api-key/pages/workspace-api-keys.tsx | 14 +- .../security/components/sso-provider-list.tsx | 80 ++-- .../src/ee/security/queries/security-query.ts | 3 +- .../ee/security/services/security-service.ts | 5 +- .../features/group/components/group-list.tsx | 19 +- .../group/components/group-members.tsx | 15 +- .../src/features/page/queries/page-query.ts | 16 +- .../features/page/services/page-service.ts | 15 +- .../features/page/trash/components/trash.tsx | 14 +- .../src/features/page/types/page.types.ts | 2 +- .../components/search-spotlight-filters.tsx | 20 +- .../search/services/search-service.ts | 12 +- .../features/share/components/share-list.tsx | 15 +- .../src/features/share/queries/share-query.ts | 2 +- .../features/space/components/space-grid.tsx | 2 +- .../features/space/components/space-list.tsx | 13 +- .../space/components/space-members.tsx | 12 +- .../spaces-page/all-spaces-list.tsx | 12 +- .../components/workspace-invites-table.tsx | 15 +- .../components/workspace-members-table.tsx | 12 +- apps/client/src/hooks/use-cursor-paginate.tsx | 28 ++ .../src/hooks/use-paginate-and-search.tsx | 23 +- apps/client/src/lib/types.ts | 6 +- apps/client/src/pages/spaces/spaces.tsx | 8 +- .../src/core/comment/comment.service.ts | 8 +- .../src/core/group/services/group.service.ts | 10 +- .../page/services/page-history.service.ts | 8 +- .../src/core/page/services/page.service.ts | 49 ++- apps/server/src/core/search/search.service.ts | 14 +- .../space/services/space-member.service.ts | 12 +- .../src/core/space/services/space.service.ts | 11 +- .../services/workspace-invitation.service.ts | 11 +- .../workspace/services/workspace.service.ts | 12 +- .../database/pagination/cursor-pagination.ts | 348 ++++++++++++++++++ .../database/pagination/pagination-options.ts | 13 +- .../database/repos/comment/comment.repo.ts | 14 +- .../database/repos/group/group-user.repo.ts | 12 +- .../src/database/repos/group/group.repo.ts | 36 +- .../database/repos/page/page-history.repo.ts | 14 +- .../src/database/repos/page/page.repo.ts | 54 ++- .../src/database/repos/share/share.repo.ts | 18 +- .../database/repos/space/space-member.repo.ts | 36 +- .../src/database/repos/space/space.repo.ts | 14 +- .../src/database/repos/user/user.repo.ts | 14 +- apps/server/src/ee | 2 +- .../import/file-task.controller.ts | 12 +- 49 files changed, 792 insertions(+), 341 deletions(-) create mode 100644 apps/client/src/hooks/use-cursor-paginate.tsx create mode 100644 apps/server/src/database/pagination/cursor-pagination.ts diff --git a/apps/client/src/components/common/paginate.tsx b/apps/client/src/components/common/paginate.tsx index d8e8106f..721c2f43 100644 --- a/apps/client/src/components/common/paginate.tsx +++ b/apps/client/src/components/common/paginate.tsx @@ -2,17 +2,17 @@ import { Button, Group } from "@mantine/core"; import { useTranslation } from "react-i18next"; export interface PagePaginationProps { - currentPage: number; hasPrevPage: boolean; hasNextPage: boolean; - onPageChange: (newPage: number) => void; + onPrev: () => void; + onNext: () => void; } export default function Paginate({ - currentPage, hasPrevPage, hasNextPage, - onPageChange, + onPrev, + onNext, }: PagePaginationProps) { const { t } = useTranslation(); @@ -25,7 +25,7 @@ export default function Paginate({