Beispiel #1
0
        public static Connection <TSource> ToConnection <TSource, TParent>(
            IEnumerable <TSource> slice,
            IResolveConnectionContext <TParent> context,
            int sliceStartIndex,
            int totalCount,
            bool strictCheck = true
            )
        {
            var sliceList = slice as IList <TSource> ?? slice.ToList();

            var metrics = ArraySliceMetrics.Create(
                sliceList,
                context,
                sliceStartIndex,
                totalCount,
                strictCheck
                );

            var edges = metrics.Slice.Select((item, i) => new Edge <TSource>
            {
                Node   = item,
                Cursor = OffsetToCursor(metrics.StartOffset + i)
            })
                        .ToList();

            var firstEdge = edges.FirstOrDefault();
            var lastEdge  = edges.LastOrDefault();

            return(new Connection <TSource>
            {
                Edges = edges,
                TotalCount = totalCount,
                PageInfo = new PageInfo
                {
                    StartCursor = firstEdge?.Cursor,
                    EndCursor = lastEdge?.Cursor,
                    HasPreviousPage = metrics.HasPrevious,
                    HasNextPage = metrics.HasNext,
                }
            });
        }