graphql-cursor

    1.0.9 • Public • Published

    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, ... } } }
    );

    Install

    npm i graphql-cursor

    DownloadsWeekly Downloads

    11

    Version

    1.0.9

    License

    MIT

    Unpacked Size

    16.5 kB

    Total Files

    7

    Last publish

    Collaborators

    • avatar