Khan/genqlient

Support for pagination when using relay pattern

Open

#357 ouverte le 3 oct. 2024

Voir sur GitHub
 (3 commentaires) (0 réactions) (0 assignés)Go (141 forks)github user discovery
enhancementhelp wantedneeds design

Métriques du dépôt

Stars
 (1 310 stars)
Métriques de merge PR
 (Métriques PR en attente)

Description

Describe the solution you'd like i would like the generated file to expose a function such as:

func queryPaged(
	ctx context.Context,
	client graphql.Client,
	pageSize int,
	pf func(T) error,
) error {
	var cursor *string
	resp, err := query(ctx, client, pageSize, cursor)
	if err != nil {
		return nil
	}

	for _, edge := range resp.X.Edges {
		if err := pf(edge.GetNode()); err != nil {
			return err
		}
	}
	return nil
}

The issue I have is that this needs to be generated as the "X" is the query endpoint so it's not fixed. One possibility is to add a generic method to the root query that returns the node inside "data", Then we can write a generic pager with interfaces and generics.

Describe alternatives you've considered Writing a pager function for every query, but that sort of defeats the purpose of the generator.

Additional context The relay connection paging pattern is described here: https://relay.dev/graphql/connections.htm and here: https://graphql.org/learn/pagination/.

Guide contributeur