diff --git a/src/Column.php b/src/Column.php index 5208b0f68ff526826967110f93f71d0aa59cf6eb..5f46adc3ec5927fe3636f12a08ca92690cb73ac9 100644 --- a/src/Column.php +++ b/src/Column.php @@ -107,12 +107,12 @@ class Column /** * Make a callback function. * - * @param $columns Array|string The (comma separated) columns that should be retrieved from the database. - * Is being translated directly into the `.sql`. - * @param $callback Closure|string A callback that defines how the retrieved columns are processed. - * @param $params Array Optional additional parameters that are passed to the given Closure. - * @param $callbackName string Optional string that defines the 'name' of the column. - * Leave empty to let livewire autogenerate a distinct value. + * @param $columns Array|string The (comma separated) columns that should be retrieved from the database. + * Is being translated directly into the `.sql`. + * @param $callback Closure|string A callback that defines how the retrieved columns are processed. + * @param $params Array Optional additional parameters that are passed to the given Closure. + * @param $callbackName string Optional string that defines the 'name' of the column. + * Leave empty to let livewire autogenerate a distinct value. */ public static function callback( array|string $columns, diff --git a/src/Http/Controllers/FileExportController.php b/src/Http/Controllers/FileExportController.php index 0f8500c15f44053ad5c9bd7864ce8d1fbbb975fa..0d581e4fca66ed4bde59f547d0ba342ef6de4a48 100644 --- a/src/Http/Controllers/FileExportController.php +++ b/src/Http/Controllers/FileExportController.php @@ -5,20 +5,20 @@ namespace Mediconesystems\LivewireDatatables\Http\Controllers; use Illuminate\Support\Facades\Response; use Illuminate\Support\Facades\Storage; - class FileExportController - { - public function handle($filename) - { - $response = Response::make(Storage::disk(config('livewire-datatables.file_export.disk') ?: config('filesystems.default')) - ->get('datatables/' . $filename), 200, [ - 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'Content-Disposition' => 'inline; filename="' . $filename . '"', - 'X-Vapor-Base64-Encode' => 'True', - ]); +class FileExportController +{ + public function handle($filename) + { + $response = Response::make(Storage::disk(config('livewire-datatables.file_export.disk') ?: config('filesystems.default')) + ->get('datatables/' . $filename), 200, [ + 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'Content-Disposition' => 'inline; filename="' . $filename . '"', + 'X-Vapor-Base64-Encode' => 'True', + ]); - Storage::disk(config('livewire-datatables.file_export.disk') ?: config('filesystems.default')) + Storage::disk(config('livewire-datatables.file_export.disk') ?: config('filesystems.default')) ->delete('datatables/' . $filename); - return $response; - } - } + return $response; + } +} diff --git a/src/Http/Livewire/LivewireDatatable.php b/src/Http/Livewire/LivewireDatatable.php index 35047fd7b3c15d71e6ab4dc93189f5f8d96868b9..02eca5c62d5babc11fe0a15117dfdcfbf874c322 100644 --- a/src/Http/Livewire/LivewireDatatable.php +++ b/src/Http/Livewire/LivewireDatatable.php @@ -374,6 +374,7 @@ class LivewireDatatable extends Component if (strpos($select, '.id') != false) { $second = '0'; } + return 'COALESCE(' . $this->tablePrefix . $select . ', \'' . $second . '\')'; })->join(', ') . ')') : $selects->first(); @@ -402,7 +403,7 @@ class LivewireDatatable extends Component ->reject(function ($column) use ($export) { return $column->scope || $column->type === 'label' || ($export && $column->preventExport); })->map(function ($column) { - if ($column->select && !Str::contains($column->name, '.')) { + if ($column->select && ! Str::contains($column->name, '.')) { return $column; } @@ -421,7 +422,7 @@ class LivewireDatatable extends Component return $column; })->when($withAlias, function ($columns) { return $columns->map(function ($column) { - if (!$column->select) { + if (! $column->select) { return null; } if ($column->select instanceof Expression) { @@ -460,7 +461,7 @@ class LivewireDatatable extends Component $relations = explode('.', Str::before($additional ?: $column->name, ':')); $aggregate = Str::after($additional ?: $column->name, ':'); - if (!method_exists($this->query->getModel(), $relations[0])) { + if (! method_exists($this->query->getModel(), $relations[0])) { return $additional ?: $column->name; } @@ -510,7 +511,7 @@ class LivewireDatatable extends Component public function getSessionStoredSort() { - if (!$this->persistSort) { + if (! $this->persistSort) { return; } @@ -520,7 +521,7 @@ class LivewireDatatable extends Component public function getSessionStoredPerPage() { - if (!$this->persistPerPage) { + if (! $this->persistPerPage) { return; } @@ -529,7 +530,7 @@ class LivewireDatatable extends Component public function setSessionStoredSort() { - if (!$this->persistSort) { + if (! $this->persistSort) { return; } @@ -541,7 +542,7 @@ class LivewireDatatable extends Component public function setSessionStoredFilters() { - if (!$this->persistFilters) { + if (! $this->persistFilters) { return; } @@ -561,7 +562,7 @@ class LivewireDatatable extends Component public function setSessionStoredHidden() { - if (!$this->persistHiddenColumns) { + if (! $this->persistHiddenColumns) { return; } @@ -572,7 +573,7 @@ class LivewireDatatable extends Component public function initialiseSearch() { - if (!$this->persistSearch) { + if (! $this->persistSearch) { return; } @@ -593,7 +594,7 @@ class LivewireDatatable extends Component public function initialiseHiddenColumns() { - if (!$this->persistHiddenColumns) { + if (! $this->persistHiddenColumns) { return; } @@ -610,7 +611,7 @@ class LivewireDatatable extends Component { $this->getSessionStoredPerPage(); - if (!$this->perPage) { + if (! $this->perPage) { $this->perPage = $this->perPage ?? config('livewire-datatables.default_per_page', 10); } } @@ -626,7 +627,7 @@ class LivewireDatatable extends Component public function initialiseDefaultFilters() { - if (!$this->defaultFilters || !is_array($this->defaultFilters) || count($this->defaultFilters) === 0) { + if (! $this->defaultFilters || ! is_array($this->defaultFilters) || count($this->defaultFilters) === 0) { return; } @@ -675,25 +676,25 @@ class LivewireDatatable extends Component public function initialiseFilters() { - if (!$this->persistFilters) { + if (! $this->persistFilters) { return; } $filters = session()->get($this->sessionStorageKey() . '_filter'); - if (!empty($filters['text'])) { + if (! empty($filters['text'])) { $this->activeTextFilters = $filters['text']; } - if (!empty($filters['boolean'])) { + if (! empty($filters['boolean'])) { $this->activeBooleanFilters = $filters['boolean']; } - if (!empty($filters['select'])) { + if (! empty($filters['select'])) { $this->activeSelectFilters = $filters['select']; } - if (!empty($filters['date'])) { + if (! empty($filters['date'])) { $this->activeDateFilters = $filters['date']; } @@ -705,7 +706,7 @@ class LivewireDatatable extends Component $this->activeTimeFilters = $filters['time']; } - if (!empty($filters['number'])) { + if (! empty($filters['number'])) { $this->activeNumberFilters = $filters['number']; } @@ -815,13 +816,13 @@ class LivewireDatatable extends Component */ public function sort($index, $direction = null) { - if (!in_array($direction, [null, 'asc', 'desc'])) { + if (! in_array($direction, [null, 'asc', 'desc'])) { throw new \Exception("Invalid direction $direction given in sort() method. Allowed values: asc, desc."); } if ($this->sort === (int) $index) { if ($direction === null) { // toggle direction - $this->direction = !$this->direction; + $this->direction = ! $this->direction; } else { $this->direction = $direction === 'asc' ? true : false; } @@ -845,11 +846,11 @@ class LivewireDatatable extends Component $this->initialiseSort(); } - if (!$this->columns[$index]['hidden']) { + if (! $this->columns[$index]['hidden']) { unset($this->activeSelectFilters[$index]); } - $this->columns[$index]['hidden'] = !$this->columns[$index]['hidden']; + $this->columns[$index]['hidden'] = ! $this->columns[$index]['hidden']; $this->setSessionStoredHidden(); } @@ -905,7 +906,7 @@ class LivewireDatatable extends Component public function isGroupHidden($group) { foreach ($this->columns as $column) { - if ($column['group'] === $group && !$column['hidden']) { + if ($column['group'] === $group && ! $column['hidden']) { return false; } } @@ -1007,7 +1008,7 @@ class LivewireDatatable extends Component public function clearEmptyNumberFilter($index) { - if ((!isset($this->activeNumberFilters[$index]['start']) || $this->activeNumberFilters[$index]['start'] == '') && (!isset($this->activeNumberFilters[$index]['end']) || $this->activeNumberFilters[$index]['end'] == '')) { + if ((! isset($this->activeNumberFilters[$index]['start']) || $this->activeNumberFilters[$index]['start'] == '') && (! isset($this->activeNumberFilters[$index]['end']) || $this->activeNumberFilters[$index]['end'] == '')) { $this->removeNumberFilter($index); } $this->setPage(1); @@ -1094,7 +1095,7 @@ class LivewireDatatable extends Component public function addScopeSelectFilter($query, $index, $value) { - if (!isset($this->freshColumns[$index]['scopeFilter'])) { + if (! isset($this->freshColumns[$index]['scopeFilter'])) { return; } @@ -1103,7 +1104,7 @@ class LivewireDatatable extends Component public function addScopeNumberFilter($query, $index, $value) { - if (!isset($this->freshColumns[$index]['scopeFilter'])) { + if (! isset($this->freshColumns[$index]['scopeFilter'])) { return; } @@ -1231,7 +1232,7 @@ class LivewireDatatable extends Component public function columnIsAggregateRelation($column) { - if (!$this->columnIsRelation($column)) { + if (! $this->columnIsRelation($column)) { return; } $relation = $this->builder()->getRelation(Str::before($column['name'], '.')); @@ -1286,7 +1287,7 @@ class LivewireDatatable extends Component public function addComplexQuery() { - if (!$this->complexQuery) { + if (! $this->complexQuery) { return $this; } @@ -1328,7 +1329,7 @@ class LivewireDatatable extends Component collect($rules)->each(function ($rule) use ($query, $logic) { if ($rule['type'] === 'rule' && isset($rule['content']['column'])) { $query->where(function ($query) use ($rule) { - if (!$this->addScopeSelectFilter($query, $rule['content']['column'], $rule['content']['value'])) { + if (! $this->addScopeSelectFilter($query, $rule['content']['column'], $rule['content']['value'])) { if ($this->columnIsAggregateRelation($this->freshColumns[$rule['content']['column']])) { $query = $this->addAggregateFilter($query, $rule['content']['column'], $this->complexValue($rule), $this->complexOperator($rule['content']['operand'])); } else { @@ -1370,7 +1371,7 @@ class LivewireDatatable extends Component public function addGlobalSearch() { - if (!$this->search) { + if (! $this->search) { return $this; } @@ -1427,7 +1428,7 @@ class LivewireDatatable extends Component if ($this->columnIsAggregateRelation($this->freshColumns[$index])) { $this->addAggregateFilter($query, $index, $activeSelectFilter); } else { - if (!$this->addScopeSelectFilter($query, $index, $value)) { + if (! $this->addScopeSelectFilter($query, $index, $value)) { if ($this->freshColumns[$index]['type'] === 'json') { $query->where(function ($query) use ($value, $index) { foreach ($this->getColumnFilterStatement($index) as $column) { @@ -1492,7 +1493,7 @@ class LivewireDatatable extends Component public function addTextFilters() { - if (!count($this->activeTextFilters)) { + if (! count($this->activeTextFilters)) { return $this; } @@ -1523,7 +1524,7 @@ class LivewireDatatable extends Component public function addNumberFilters() { - if (!count($this->activeNumberFilters)) { + if (! count($this->activeNumberFilters)) { return $this; } $this->query->where(function ($query) { @@ -1552,13 +1553,13 @@ class LivewireDatatable extends Component public function addDateRangeFilter() { - if (!count($this->activeDateFilters)) { + if (! count($this->activeDateFilters)) { return $this; } $this->query->where(function ($query) { foreach ($this->activeDateFilters as $index => $filter) { - if (!((isset($filter['start']) && $filter['start'] != '') || (isset($filter['end']) && $filter['end'] != ''))) { + if (! ((isset($filter['start']) && $filter['start'] != '') || (isset($filter['end']) && $filter['end'] != ''))) { break; } $query->whereBetween($this->getColumnFilterStatement($index)[0], [ @@ -1594,7 +1595,7 @@ class LivewireDatatable extends Component public function addTimeRangeFilter() { - if (!count($this->activeTimeFilters)) { + if (! count($this->activeTimeFilters)) { return $this; } @@ -1662,7 +1663,7 @@ class LivewireDatatable extends Component { $paginatedCollection->collect()->map(function ($row, $i) use ($export) { foreach ($row as $name => $value) { - if ($this->search && !config('livewire-datatables.suppress_search_highlights') && $this->searchableColumns()->firstWhere('name', $name)) { + if ($this->search && ! config('livewire-datatables.suppress_search_highlights') && $this->searchableColumns()->firstWhere('name', $name)) { $row->$name = $this->highlight($row->$name, $this->search); } if ($export && isset($this->export_callbacks[$name])) { @@ -1702,7 +1703,7 @@ class LivewireDatatable extends Component */ public function highlightStringWithCurrentSearchTerm(string $originalString) { - if (!$this->search) { + if (! $this->search) { return $originalString; } else { return static::highlightString($originalString, $this->search); @@ -1905,7 +1906,7 @@ class LivewireDatatable extends Component public function massActionOptionHandler() { - if (!$this->massActionOption) { + if (! $this->massActionOption) { return; } @@ -1929,7 +1930,7 @@ class LivewireDatatable extends Component return $datatableExport->download(); } - if (!count($this->selected)) { + if (! count($this->selected)) { $this->massActionOption = null; return; @@ -1944,7 +1945,7 @@ class LivewireDatatable extends Component private function searchOrFilterActive() { - return !empty($this->search) || $this->getActiveFiltersProperty(); + return ! empty($this->search) || $this->getActiveFiltersProperty(); } private function setVisibleSelected() diff --git a/tests/ColumnSetTest.php b/tests/ColumnSetTest.php index 14130cf061fb3032ccd6f53d04df08ae070fae5c..890ed36f132c73ac98e4fcea2953696dc9ee2165 100644 --- a/tests/ColumnSetTest.php +++ b/tests/ColumnSetTest.php @@ -24,6 +24,7 @@ class ColumnSetTest extends TestCase /** * @test + * * @dataProvider fieldDataProvider */ public function it_can_correctly_populate_the_columns_from_the_model($name, $index, $column) diff --git a/tests/ColumnTest.php b/tests/ColumnTest.php index 20b772b6ccf490ec60dd697b2d2b95dd57e5140c..81e60a35a6ab21f0b3f9a71b7dc2a1495cd70301 100644 --- a/tests/ColumnTest.php +++ b/tests/ColumnTest.php @@ -38,6 +38,7 @@ class ColumnTest extends TestCase /** * @test + * * @dataProvider settersDataProvider */ public function it_sets_properties_and_parameters($method, $value, $attribute)