api로 받아온 Paginator 를 livewire 에서 사용하기

Updated on

if (!function_exists('makeLengthAwarePaginator')) {
    function makeLengthAwarePaginator(
        array|null $lengthAwarePaginatorArray,
    ): LengthAwarePaginator|null {
        if($lengthAwarePaginatorArray === null) {
            return null;
        }
        $perPage = $lengthAwarePaginatorArray['per_page'] ?? $lengthAwarePaginatorArray['meta']['per_page'];
        $page = Paginator::resolveCurrentPage(default: 1);
        $path = Paginator::resolveCurrentPath();

        $items = $lengthAwarePaginatorArray['data'] ?? [];

        $items = $items instanceof Collection ? $items : Collection::make($items);

        $paginator = new LengthAwarePaginator(
            $items->forPage(1, $perPage),
            $lengthAwarePaginatorArray['total'] ?? $lengthAwarePaginatorArray['meta']['total'],
            $perPage,
            $page,
            []
        );

        if (!blank($path)) {
            $paginator = $paginator->setPath($path);
        }

        return $paginator;
    }
}

보통 laravel pagination 은

array:3 [▶
  "data" => array:7 [▶]
  "links" => array:4 [▶]
  "meta" => array:8 [▶]
]

이 형태로 반환되는데, 이 형태로 반환된 값을 기반으로 다시 LengthAwarePaginator 로 만들어서 사용하는 방법이다.