Yo uso first after y last before para hacer paginación. hasNextPage y hasPreviousPage son muy útiles.

Pero lo que necesito también es total count para poder calcular y mostrar cosas como page 5 of 343 pages en el cliente.

Desafortunadamente, eso no es parte de pageInfo a pesar de que tengo la información en el sitio del servidor.

¿Puede incluir un campo total en el pageInfo y extender connectionFromArray para incluir el total arrayLength como connectionFromArraySlice ya lo hace?

Gracias

9
Christine 10 dic. 2015 a las 05:06

3 respuestas

La mejor respuesta

pageInfo está diseñado para representar información sobre la página específica, mientras que el número total de elementos es realmente una propiedad de la conexión en sí. Recomendamos agregar un campo count a la conexión. Puede consultarlo con:

fragment on TodoList {
  tasks(first: 10) {
    count # <-- total number of tasks
    edges { ... }
    pageInfo { ... }
}

La retransmisión admite campos arbitrarios en una conexión, por lo que puede nombrar esto count, totalCount, etc.

12
Joe Savona 10 dic. 2015 a las 02:20

Gracias @ Joe Savona

Él tiene toda la razón. Como me llevó un momento descubrir cómo agregar realmente la propiedad a la conexión en el sitio del servidor, pensé que también lo compartiría aquí:

var {connectionType: postsConnection} = connectionDefinitions({
  name: 'post',
  nodeType: qlPost,
  connectionFields: () => ({
    totalCount: {
      type: GraphQLInt,
      resolve: (connection) => connection.totalCount,
      description: `A count of the total number of objects in this connection, ignoring pagination.
This allows a client to fetch the first five objects by passing "5" as the
argument to "first", then fetch the total count so it could display "5 of 83",
for example.`
    }
  })
});

Espero que ayude a las demás.

Salud

9
Chris 25 jul. 2016 a las 09:14

Utilicé el campo personalizado totalCount en la conexión durante un tiempo, pero introdujo una complejidad que no vi al principio (al actualizar las conexiones después de una mutación, debe consultarlo con los mismos argumentos si desea que se actualice automáticamente )

Por lo tanto, volví a tener un campo count al lado de cada una de mis conexiones. En su ejemplo, eso significa:

fragment on TodoList {
  taskCount
  tasks {
    edges { ... }
  }
}

Y creé un pequeño ayudante que lo crea para mí: https://github.com/ rea-app / relay-connection-count

1
maxaggedon 8 ago. 2018 a las 18:14