Skip to content

Commit de45db9

Browse files
committed
fix: fallback limit-skip-logic when used last and before args without sorting
Related graphql-compose/graphql-compose-mongoose#120 Related #7
1 parent 149ff15 commit de45db9

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

src/__tests__/github-issues/graphql-compose-mongoose-120-test.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ describe('check last/before args', () => {
1111
sort: sortOptions,
1212
});
1313

14-
it('should use defaultLimit option', async () => {
14+
it('with sort arg', async () => {
1515
const res1 = await defaultResolver.resolve({
1616
args: {
1717
last: 2,
@@ -36,4 +36,28 @@ describe('check last/before args', () => {
3636
{ cursor: 'eyJpZCI6MTN9', node: { age: 45, gender: 'f', id: 13, name: 'user13' } },
3737
]);
3838
});
39+
40+
it('without sort arg', async () => {
41+
const res1 = await defaultResolver.resolve({
42+
args: {
43+
last: 2,
44+
before: '',
45+
},
46+
});
47+
expect(res1.edges).toEqual([
48+
{ cursor: 'MTM=', node: { age: 45, gender: 'm', id: 14, name: 'user14' } },
49+
{ cursor: 'MTQ=', node: { age: 45, gender: 'f', id: 13, name: 'user13' } },
50+
]);
51+
52+
const res2 = await defaultResolver.resolve({
53+
args: {
54+
last: 2,
55+
before: 'MTM=',
56+
},
57+
});
58+
expect(res2.edges).toEqual([
59+
{ cursor: 'MTE=', node: { age: 47, gender: 'f', id: 12, name: 'user12' } },
60+
{ cursor: 'MTI=', node: { age: 45, gender: 'm', id: 15, name: 'user15' } },
61+
]);
62+
});
3963
});

src/connectionResolver.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,9 @@ export function prepareConnectionResolver(
152152
description: 'Sort argument for data ordering',
153153
},
154154
},
155-
// eslint-disable-next-line
156-
resolve: async /* :: <TContext> */(
157-
resolveParams/* : $Shape<ConnectionResolveParams<TContext>> */
158-
) => {
155+
async resolve /* :: <TContext> */(
156+
resolveParams /* : $Shape<ConnectionResolveParams<TContext>> */
157+
) {
159158
let countPromise;
160159
let findManyPromise;
161160
const { projection = {}, args, rawQuery } = resolveParams;
@@ -381,7 +380,9 @@ export function prepareLimitSkipFallback(
381380
newSkip = skip + afterSkip;
382381
}
383382
} else if (beforeSkip) {
384-
newSkip = skip - beforeSkip;
383+
// just simple backward listing (without after arg)
384+
// so we simple take previous records reducing skip by limit value
385+
newSkip = beforeSkip - limit;
385386
if (newSkip < 0) {
386387
newSkip = 0;
387388
newLimit = limit;

0 commit comments

Comments
 (0)