diff --git a/app/Http/Livewire/Datatable.php b/app/Http/Livewire/Datatable.php index 1fd97a4..811ded1 100644 --- a/app/Http/Livewire/Datatable.php +++ b/app/Http/Livewire/Datatable.php @@ -10,7 +10,7 @@ use Illuminate\Support\Str; class Datatable extends Component { - use WithPagination, Traits\WithSort; + use WithPagination, Traits\WithSort, Traits\Alert; /** * Query string settings. @@ -55,14 +55,14 @@ class Datatable extends Component public $route_edit; /** - * Route for deleting a record (if null, link is omitted) + * True if delete functionality is enabled. */ - public $route_delete; + public $delete_enabled; /** - * Route for restoring a record (if null, link is omitted) + * True if restore functionality is enabled. */ - public $route_restore; + public $restore_enabled; /** * How many records should be displayed on one page. @@ -71,7 +71,7 @@ class Datatable extends Component public function mount(string $model, array $columns, array $sort_columns = [], $default_sort = '', - $route_create = null, $route_edit = null, $route_delete = null, $route_restore = null) + $route_create = null, $route_edit = null, $delete_enabled = false, $restore_enabled = false) { $this->model = app()->make($model); $this->default_sort = $default_sort; @@ -79,12 +79,54 @@ class Datatable extends Component $this->sort_columns = $sort_columns; $this->route_create = $route_create; $this->route_edit = $route_edit; - $this->route_delete = $route_delete; - $this->route_restore = $route_restore; + $this->delete_enabled = (bool) $delete_enabled; + $this->restore_enabled = (bool) $restore_enabled; $this->setTrashedColumns(); } + /** + * Delete an record + */ + public function delete($id) + { + if (!$this->delete_enabled) { + return; + } + + $record = $this->model->find($id); + + if (!$record) { + $this->danger('Record not found'); + return; + } + + $record->delete(); + + $this->info(__("Record #:id was deleted.", [ 'id' => $record->id ])); + } + + /** + * Restore a delted record + */ + public function restore($id) + { + if (!$this->restore_enabled) { + return; + } + + $record = $this->model->withTrashed()->find($id); + + if (!$record) { + $this->danger('Record not found'); + return; + } + + $record->restore(); + + $this->info(__("Record #:id was restored.", [ 'id' => $record->id ])); + } + /** * Render the datatable */ diff --git a/resources/views/livewire/datatable.blade.php b/resources/views/livewire/datatable.blade.php index 8980bbf..e75c96f 100644 --- a/resources/views/livewire/datatable.blade.php +++ b/resources/views/livewire/datatable.blade.php @@ -1,12 +1,12 @@
- @if ($route_create || $route_restore) + @if ($route_create || $restore_enabled)
@if ($route_create) {{ __('New') }} @endif - @if ($route_restore) + @if ($restore_enabled) {{ __('Show deleted records') }} @endif
@@ -28,7 +28,7 @@ @endforeach - @if($route_delete || $route_edit) + @if($delete_enabled || $route_edit) {{ __('Actions') }} @endif @@ -40,7 +40,7 @@ {{ Arr::get($item, $key) }} @endforeach - @if (!$trashed && ($route_edit || $route_delete)) + @if (!$trashed && ($route_edit || $delete_enabled)) @if($route_edit) @@ -48,19 +48,13 @@ @endif - @if($route_delete) - - - - - + @if ($delete_enabled) + @endif - @elseif ($trashed && $route_restore) + @elseif ($trashed && $restore_enabled) - - - + @endif