Skip to content

Commit

Permalink
Merge pull request #2870 from hpacleb/fix-anonymous-resource-collection
Browse files Browse the repository at this point in the history
Fix anonymous resource collection
  • Loading branch information
yajra authored Oct 10, 2022
2 parents 0a7cabc + 2d8b0a4 commit a35fae2
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 1 deletion.
44 changes: 44 additions & 0 deletions src/ApiResourceDataTable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

namespace Yajra\DataTables;

use Illuminate\Http\Resources\Json\AnonymousResourceCollection;

class ApiResourceDataTable extends CollectionDataTable
{
/**
* Can the DataTable engine be created with these parameters.
*
* @param mixed $source
* @return bool
*/
public static function canCreate($source)
{
return $source instanceof AnonymousResourceCollection;
}

/**
* Factory method, create and return an instance for the DataTable engine.
*
* @param \Illuminate\Http\Resources\Json\AnonymousResourceCollection<array-key, array>|array $source
* @return ApiResourceDataTable|DataTableAbstract
*/
public static function create($source)
{
return parent::create($source);
}

/**
* CollectionEngine constructor.
*
* @param \Illuminate\Http\Resources\Json\AnonymousResourceCollection<array-key, array> $collection
*/
public function __construct(AnonymousResourceCollection $collection)
{
$this->request = app('datatables.request');
$this->config = app('datatables.config');
$this->collection = collect($collection);
$this->original = collect($collection);
$this->columns = array_keys($this->serialize(collect($collection)->first()));
}
}
3 changes: 2 additions & 1 deletion src/CollectionDataTable.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Exception;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
Expand Down Expand Up @@ -72,7 +73,7 @@ public static function canCreate($source)
/**
* Factory method, create and return an instance for the DataTable engine.
*
* @param array|\Illuminate\Support\Collection<array-key, array> $source
* @param AnonymousResourceCollection|array|\Illuminate\Support\Collection<array-key, array> $source
* @return static
*/
public static function create($source)
Expand Down
11 changes: 11 additions & 0 deletions src/DataTables.php
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,17 @@ public function collection($collection): CollectionDataTable
return CollectionDataTable::create($collection);
}

/**
* DataTables using Collection.
*
* @param \Illuminate\Http\Resources\Json\AnonymousResourceCollection<array-key, array>|array $resource
* @return ApiResourceDataTable|DataTableAbstract
*/
public function resource($resource)
{
return ApiResourceDataTable::create($resource);
}

/**
* Get html builder instance.
*
Expand Down
1 change: 1 addition & 0 deletions src/config/datatables.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
'eloquent' => Yajra\DataTables\EloquentDataTable::class,
'query' => Yajra\DataTables\QueryDataTable::class,
'collection' => Yajra\DataTables\CollectionDataTable::class,
'resource' => Yajra\DataTables\ApiResourceDataTable::class,
],

/*
Expand Down

0 comments on commit a35fae2

Please sign in to comment.