Skip to content

Commit a35fae2

Browse files
authored
Merge pull request #2870 from hpacleb/fix-anonymous-resource-collection
Fix anonymous resource collection
2 parents 0a7cabc + 2d8b0a4 commit a35fae2

File tree

4 files changed

+58
-1
lines changed

4 files changed

+58
-1
lines changed

src/ApiResourceDataTable.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace Yajra\DataTables;
4+
5+
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
6+
7+
class ApiResourceDataTable extends CollectionDataTable
8+
{
9+
/**
10+
* Can the DataTable engine be created with these parameters.
11+
*
12+
* @param mixed $source
13+
* @return bool
14+
*/
15+
public static function canCreate($source)
16+
{
17+
return $source instanceof AnonymousResourceCollection;
18+
}
19+
20+
/**
21+
* Factory method, create and return an instance for the DataTable engine.
22+
*
23+
* @param \Illuminate\Http\Resources\Json\AnonymousResourceCollection<array-key, array>|array $source
24+
* @return ApiResourceDataTable|DataTableAbstract
25+
*/
26+
public static function create($source)
27+
{
28+
return parent::create($source);
29+
}
30+
31+
/**
32+
* CollectionEngine constructor.
33+
*
34+
* @param \Illuminate\Http\Resources\Json\AnonymousResourceCollection<array-key, array> $collection
35+
*/
36+
public function __construct(AnonymousResourceCollection $collection)
37+
{
38+
$this->request = app('datatables.request');
39+
$this->config = app('datatables.config');
40+
$this->collection = collect($collection);
41+
$this->original = collect($collection);
42+
$this->columns = array_keys($this->serialize(collect($collection)->first()));
43+
}
44+
}

src/CollectionDataTable.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Exception;
77
use Illuminate\Contracts\Support\Arrayable;
88
use Illuminate\Http\JsonResponse;
9+
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
910
use Illuminate\Support\Arr;
1011
use Illuminate\Support\Collection;
1112
use Illuminate\Support\Str;
@@ -72,7 +73,7 @@ public static function canCreate($source)
7273
/**
7374
* Factory method, create and return an instance for the DataTable engine.
7475
*
75-
* @param array|\Illuminate\Support\Collection<array-key, array> $source
76+
* @param AnonymousResourceCollection|array|\Illuminate\Support\Collection<array-key, array> $source
7677
* @return static
7778
*/
7879
public static function create($source)

src/DataTables.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,17 @@ public function collection($collection): CollectionDataTable
137137
return CollectionDataTable::create($collection);
138138
}
139139

140+
/**
141+
* DataTables using Collection.
142+
*
143+
* @param \Illuminate\Http\Resources\Json\AnonymousResourceCollection<array-key, array>|array $resource
144+
* @return ApiResourceDataTable|DataTableAbstract
145+
*/
146+
public function resource($resource)
147+
{
148+
return ApiResourceDataTable::create($resource);
149+
}
150+
140151
/**
141152
* Get html builder instance.
142153
*

src/config/datatables.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
'eloquent' => Yajra\DataTables\EloquentDataTable::class,
4949
'query' => Yajra\DataTables\QueryDataTable::class,
5050
'collection' => Yajra\DataTables\CollectionDataTable::class,
51+
'resource' => Yajra\DataTables\ApiResourceDataTable::class,
5152
],
5253

5354
/*

0 commit comments

Comments
 (0)