Skip to content

Commit a9cda1d

Browse files
committed
Add ApiResourceDataTable
1 parent 9e96d1f commit a9cda1d

File tree

3 files changed

+75
-0
lines changed

3 files changed

+75
-0
lines changed

src/ApiResourceDataTable.php

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

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)