Evan
Evan

Reputation: 6545

Implementing `startCursor` and `endCursor` in Relay

We have a graphql server not written in javascript, which we're trying to conform to the relay specification. startCursor and endCursor show up in a few examples but not in any official docs; based on my reading of https://github.com/facebook/relay/issues/372 those fields are basically deprecated, but they do show up in some code still. Do we have to implement them:

Upvotes: 6

Views: 1453

Answers (2)

Dmitry Minkovsky
Dmitry Minkovsky

Reputation: 38173

to be spec compliant?

As you point out, these fields don't appear in the spec, so they must not be required to conform to the spec. I conclude this because I think that's the only conclusion any serious authors of a spec should want you to draw from the absence of something from their spec.

to work with existing clients?

This, of course, is a different, more practical question :). The only client that I am aware of that uses the Connection spec is Relay, and Relay Modern requires these fields. Since these values are used by the PaginationContainer, the Relay Modern compiler requires them on any field marked with the @connection directive:

[END_CURSOR, HAS_NEXT_PAGE, HAS_PREV_PAGE, START_CURSOR].forEach(
  fieldName => {
    const pageInfoField = pageInfoType.getFields()[fieldName];
    invariant(
      pageInfoField &&
        SchemaUtils.getNullableType(pageInfoField.type) instanceof
          GraphQLScalarType,
      'RelayConnectionTransform: Expected type `%s` to have an ' +
        '%s field for which the type is an scalar in document `%s`.',
      pageInfo.type,
      fieldName,
      definitionName,
    );
  }
);

I never remember which of endCursor and startCursor corresponds to which pagination direction. Since they are not documented in the spec, you can look to graphql-relay-js for this information:

startCursor: {
  type: GraphQLString,
  description: 'When paginating backwards, the cursor to continue.'
},
endCursor: {
  type: GraphQLString,
  description: 'When paginating forwards, the cursor to continue.'
},

Upvotes: 3

Greg Hurrell
Greg Hurrell

Reputation: 5457

No, they're not deprecated, and they do show up in the docs. What that issue says is that you don't have to implement them if you don't want to use them directly in your app, because Relay is going to query the cursor for each edge in a connection automatically, and will use that when making requests during pagination.

Upvotes: 2

Related Questions