2
0

page_info.go 768 B

123456789101112131415161718192021222324252627282930
  1. package helper
  2. import (
  3. "github.com/gshopify/service-wrapper/interfaces"
  4. "github.com/gshopify/service-wrapper/model"
  5. "gshopper.com/gshopify/products/graphql/generated"
  6. )
  7. func NewPageInfo[T interfaces.Node](src []T, namespace model.Gid, first T, last T) *generated.PageInfo {
  8. var (
  9. size = len(src)
  10. info = &generated.PageInfo{}
  11. )
  12. if size == 0 {
  13. return info
  14. }
  15. if c, err := model.NewSimpleCursor(src[0].GetID(), namespace); err == nil {
  16. info.StartCursor = c.String()
  17. }
  18. if c, err := model.NewSimpleCursor(src[size-1].GetID(), namespace); err == nil {
  19. info.EndCursor = c.String()
  20. }
  21. info.HasPreviousPage = first.GetID() != src[0].GetID()
  22. info.HasNextPage = info.StartCursor == info.EndCursor || last.GetID() != src[size-1].GetID()
  23. return info
  24. }