У каждого ребра должен быть курсор, и он обычно должен быть предоставлен сервером.Это означает, что подписка или мутация, возвращающая узел, который может быть частью ребра, также должны обеспечивать курсор.
Для этого есть два основных подхода.Если соединение может быть отсортировано только одним способом (таким образом гарантируется, что один и тот же узел всегда имеет один и тот же курсор), вы можете просто вернуть весь тип ребра:
type PostEdge {
node: Post!
cursor: String!
}
type MyMutationPayload {
edge: PostEdge!
}
type Mutation {
newPost(input: NewPostInput!): MyMutationPayload!
}
Если соединение можно отсортироватьнесколькими способами (например, по названию, дате публикации, автору), затем курсор меняется в зависимости от параметра сортировки, что означает, что вы не можете вернуть само ребро, но вместо этого вы можете вернуть необходимую информацию для построения ребер в клиентском модуле обновления:
enum PostSort {
NEWEST_FIRST
AUTHOR_AZ
TITLE_AZ
}
type PostCursors {
sortKey: PostSort!
cursor: String!
}
type MyMutationPayload {
node: Post!
cursors: [PostCursors!]!
}
type Mutation {
newPost(input: NewPostInput!): MyMutationPayload!
}