Youshido\GraphQL\Relay\Connection\ArrayConnection::connectionFromArraySlice PHP Method

connectionFromArraySlice() public static method

public static connectionFromArraySlice ( array $data, array $args, $sliceStart, $arrayLength )
$data array
$args array
    public static function connectionFromArraySlice(array $data, array $args, $sliceStart, $arrayLength)
    {
        $after = isset($args['after']) ? $args['after'] : null;
        $before = isset($args['before']) ? $args['before'] : null;
        $first = isset($args['first']) ? $args['first'] : null;
        $last = isset($args['last']) ? $args['last'] : null;
        $sliceEnd = $sliceStart + count($data);
        $beforeOffset = ArrayConnection::cursorToOffsetWithDefault($before, $arrayLength);
        $afterOffset = ArrayConnection::cursorToOffsetWithDefault($after, -1);
        $startOffset = max($sliceStart - 1, $afterOffset, -1) + 1;
        $endOffset = min($sliceEnd, $beforeOffset, $arrayLength);
        if ($first) {
            $endOffset = min($endOffset, $startOffset + $first);
        }
        if ($last) {
            $startOffset = max($startOffset, $endOffset - $last);
        }
        $arraySliceStart = max($startOffset - $sliceStart, 0);
        $arraySliceEnd = count($data) - ($sliceEnd - $endOffset) - $arraySliceStart;
        $slice = array_slice($data, $arraySliceStart, $arraySliceEnd, true);
        $edges = array_map(['self', 'edgeForObjectWithIndex'], $slice, array_keys($slice));
        $firstEdge = array_key_exists(0, $edges) ? $edges[0] : null;
        $lastEdge = count($edges) > 0 ? $edges[count($edges) - 1] : null;
        $lowerBound = $after ? $afterOffset + 1 : 0;
        $upperBound = $before ? $beforeOffset : $arrayLength;
        return ['edges' => $edges, 'pageInfo' => ['startCursor' => $firstEdge ? $firstEdge['cursor'] : null, 'endCursor' => $lastEdge ? $lastEdge['cursor'] : null, 'hasPreviousPage' => $last ? $startOffset > $lowerBound : false, 'hasNextPage' => $first ? $endOffset < $upperBound : false]];
    }