1.0.9 • Published 4 years ago

graphql-cursor v1.0.9

Weekly downloads
2
License
MIT
Repository
github
Last release
4 years ago

A Relay cursor pagination plugin for mongoose schema.

Install

$ npm i graphql-cursor

Usage

You can see how to implement pagination in this example

GraphQL model/controller

// graphql-model.js

export default async (_parent, args, model) => model.paginateResult({}, args);

This will gives you the following response:

{
	"edges": [
		{ "cursor": "...", "node": { ... } },
		{ "cursor": "...", "node": { ... } },
		{ "cursor": "...", "node": { ... } },
		{ "cursor": "...", "node": { ... } },
		{ "cursor": "...", "node": { ... } }
	],
	"pageInfo": {
		"startCursor": "...",
		"endCursor": "...",
		"hasNextPage": false,
		"hasPreviousPage": false
	}
	"totalCount": 5,
}

API

model.paginateResult(query, args, options);

Query

The query is a basic mongoose query object.

model.paginateResult({ _id: "..." }, args, options);

Arguments

These are the arguments used to paginate the result. They usually are coming from the client. You can pass:

  • after - If you want all the results after a specific cursor
  • before - If you want all the results before a specific cursor
  • first - Get the first n results
  • last - Get the last n results
  • orderBy - An object that contains the field and the way to sort the results
  • filters - An object that contains filters if needed. You can give any number of filters you want as long as their keys are in the filterFields (see options below)
  • search - A string to look for among the searchFields (see options below)

orderBy:

model.paginateResult({}, { orderBy: { field: "firstName", direction: "desc" } }, options);

filters:

model.paginateResult({}, { filters: { isAdmin: true } }, { filterFields: { isAdmin: true } });

Options

Options are here to customize the way you paginate your results. Here are the different options:

  • select - A string that fetch only specific fields
  • searchFields - An array of schema field names on which you allow searching
  • sortables - An array of schema field names on which you allow sorting
  • filterFields - An object that contains whitelisted filters and how to deal with them If you give a boolean value, it means that this field is allowed (or not if false) as a filter. It will result in a basic comparison. Let's consider the example below.
model.paginateResult(
	{},
	{ filters: { isModerator: true, isAdmin: true } },
	{ filterFields: { filterFields: { isModerator: true, isAdmin: false } } }
);

In this case, GraphQL Cursor will accept two filters: isAdmin and isModerator. Name and others will be ignored. So, if the client sends the filters defined below, Mongo will search for "users that are isModerator AND not isAdmin".

model.paginateResult(
	{},
	{ filters: { isModerator: true, isAdmin: false, name: "God" } },
	{ filterFields: { filterFields: { isModerator: true, isAdmin: true, name: false, ... } } }
);
1.0.9

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago