diff --git a/.gitignore b/.gitignore index 906ff24..2b68c6a 100644 --- a/.gitignore +++ b/.gitignore @@ -133,4 +133,7 @@ data/ # Test Database prisma/*.db -prisma/*.db-journal \ No newline at end of file +prisma/*.db-journal + +# JetBrains IDE +.idea diff --git a/src/cursor.ts b/src/cursor.ts index 9c8bd3a..384878d 100644 --- a/src/cursor.ts +++ b/src/cursor.ts @@ -31,8 +31,7 @@ export const paginateWithCursor = async ( model.findMany({ ...query, cursor, - skip: 1, - take: limit === null ? undefined : -limit - 1, + take: limit === null ? undefined : -limit - 2, }), model.findMany({ ...query, @@ -42,6 +41,15 @@ export const paginateWithCursor = async ( }), ]); + if ( + JSON.stringify(parseCursor(getCursor(results[results.length - 1]))) === + JSON.stringify(cursor) + ) { + results.pop(); + } else if (limit !== null && results.length === limit + 2) { + results.shift(); + } + if (limit !== null && results.length > limit) { hasPreviousPage = Boolean(results.shift()); } @@ -54,8 +62,7 @@ export const paginateWithCursor = async ( model.findMany({ ...query, cursor, - skip: 1, - take: limit === null ? undefined : limit + 1, + take: limit === null ? undefined : limit + 2, }), model.findMany({ ...query, @@ -65,6 +72,15 @@ export const paginateWithCursor = async ( }), ]); + if ( + JSON.stringify(parseCursor(getCursor(results[0]))) === + JSON.stringify(cursor) + ) { + results.shift(); + } else if (limit !== null && results.length === limit + 2) { + results.pop(); + } + hasPreviousPage = Boolean(previousResult.length); if (limit !== null && results.length > limit) { hasNextPage = Boolean(results.pop());