diff --git a/src/ApiResourceDataTable.php b/src/ApiResourceDataTable.php new file mode 100644 index 00000000..3df4776c --- /dev/null +++ b/src/ApiResourceDataTable.php @@ -0,0 +1,44 @@ +|array $source + * @return ApiResourceDataTable|DataTableAbstract + */ + public static function create($source) + { + return parent::create($source); + } + + /** + * CollectionEngine constructor. + * + * @param \Illuminate\Http\Resources\Json\AnonymousResourceCollection $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())); + } +} diff --git a/src/CollectionDataTable.php b/src/CollectionDataTable.php index cd501428..3d2a9c84 100644 --- a/src/CollectionDataTable.php +++ b/src/CollectionDataTable.php @@ -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; @@ -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 $source + * @param AnonymousResourceCollection|array|\Illuminate\Support\Collection $source * @return static */ public static function create($source) diff --git a/src/DataTables.php b/src/DataTables.php index 2997f73a..7acb032a 100644 --- a/src/DataTables.php +++ b/src/DataTables.php @@ -137,6 +137,17 @@ public function collection($collection): CollectionDataTable return CollectionDataTable::create($collection); } + /** + * DataTables using Collection. + * + * @param \Illuminate\Http\Resources\Json\AnonymousResourceCollection|array $resource + * @return ApiResourceDataTable|DataTableAbstract + */ + public function resource($resource) + { + return ApiResourceDataTable::create($resource); + } + /** * Get html builder instance. * diff --git a/src/config/datatables.php b/src/config/datatables.php index bd479178..b6ed653a 100644 --- a/src/config/datatables.php +++ b/src/config/datatables.php @@ -48,6 +48,7 @@ 'eloquent' => Yajra\DataTables\EloquentDataTable::class, 'query' => Yajra\DataTables\QueryDataTable::class, 'collection' => Yajra\DataTables\CollectionDataTable::class, + 'resource' => Yajra\DataTables\ApiResourceDataTable::class, ], /*