Skip to content

Commit 6ec3f27

Browse files
committed
Migrate Filter Code Appropriately
1 parent 4125285 commit 6ec3f27

24 files changed

+455
-375
lines changed

src/Traits/Configuration/FilterConfiguration.php

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
namespace Rappasoft\LaravelLivewireTables\Traits\Configuration;
44

5-
use Rappasoft\LaravelLivewireTables\DataTransferObjects\FilterGenericData;
6-
75
trait FilterConfiguration
86
{
97
public function setFiltersStatus(bool $status): self
@@ -27,55 +25,5 @@ public function setFiltersDisabled(): self
2725
return $this;
2826
}
2927

30-
public function setFiltersVisibilityStatus(bool $status): self
31-
{
32-
$this->filtersVisibilityStatus = $status;
33-
34-
return $this;
35-
}
36-
37-
public function setFiltersVisibilityEnabled(): self
38-
{
39-
$this->setFiltersVisibilityStatus(true);
40-
41-
return $this;
42-
}
43-
44-
public function setFiltersVisibilityDisabled(): self
45-
{
46-
$this->setFiltersVisibilityStatus(false);
4728

48-
return $this;
49-
}
50-
51-
public function setFilterPillsStatus(bool $status): self
52-
{
53-
$this->filterPillsStatus = $status;
54-
55-
return $this;
56-
}
57-
58-
public function setFilterPillsEnabled(): self
59-
{
60-
$this->setFilterPillsStatus(true);
61-
62-
return $this;
63-
}
64-
65-
public function setFilterPillsDisabled(): self
66-
{
67-
$this->setFilterPillsStatus(false);
68-
69-
return $this;
70-
}
71-
72-
public function generateFilterGenericData(): array
73-
{
74-
return (new FilterGenericData($this->getTableName(), $this->getFilterLayout(), $this->isTailwind(), $this->isBootstrap4(), $this->isBootstrap5()))->toArray();
75-
}
76-
77-
public function setFilterGenericData(array $filterGenericData = []): void
78-
{
79-
$this->filterGenericData = $filterGenericData;
80-
}
8129
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace Rappasoft\LaravelLivewireTables\Traits\Core\Filters;
4+
5+
trait HandlesFilterTraits
6+
{
7+
use ManagesFilters,
8+
HasFilterGenericData,
9+
HasFilterMenuStyling,
10+
HasFilterPillsStyling,
11+
HasFilterQueryString,
12+
HasFiltersVisibility;
13+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace Rappasoft\LaravelLivewireTables\Traits\Core\Filters;
4+
5+
use Rappasoft\LaravelLivewireTables\DataTransferObjects\FilterGenericData;
6+
use Livewire\Attributes\Computed;
7+
8+
trait HasFilterGenericData
9+
{
10+
public array $filterGenericData = [];
11+
12+
public function generateFilterGenericData(): array
13+
{
14+
return (new FilterGenericData($this->getTableName(), $this->getFilterLayout(), $this->isTailwind(), $this->isBootstrap4(), $this->isBootstrap5()))->toArray();
15+
}
16+
17+
public function setFilterGenericData(array $filterGenericData = []): void
18+
{
19+
$this->filterGenericData = $filterGenericData;
20+
}
21+
22+
public function hasFilterGenericData(): bool
23+
{
24+
return ! empty($this->filterGenericData);
25+
}
26+
27+
#[Computed]
28+
public function getFilterGenericData(): array
29+
{
30+
if (! $this->hasFilterGenericData()) {
31+
$this->setFilterGenericData($this->generateFilterGenericData());
32+
}
33+
34+
return $this->filterGenericData;
35+
}
36+
}

src/Traits/Styling/Helpers/FilterMenuStylingHelpers.php renamed to src/Traits/Core/Filters/HasFilterMenuStyling.php

Lines changed: 96 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,106 @@
11
<?php
22

3-
namespace Rappasoft\LaravelLivewireTables\Traits\Styling\Helpers;
3+
namespace Rappasoft\LaravelLivewireTables\Traits\Core\Filters;
44

5+
use Closure;
56
use Illuminate\Support\Arr;
6-
use Livewire\Attributes\Computed;
7+
use Livewire\Attributes\{Computed, Locked};
8+
use Rappasoft\LaravelLivewireTables\Exceptions\DataTableConfigurationException;
79
use Rappasoft\LaravelLivewireTables\Views\Filter;
810

9-
trait FilterMenuStylingHelpers
11+
trait HasFilterMenuStyling
1012
{
13+
14+
#[Locked]
15+
public string $filterLayout = 'popover';
16+
17+
// Entangled in JS
18+
public bool $filterSlideDownDefaultVisible = false;
19+
20+
protected array $filterPopoverAttributes = ['class' => '', 'default-width' => true, 'default-colors' => true, 'default-styling' => true];
21+
22+
protected array $filterSlidedownWrapperAttributes = ['class' => '', 'default-colors' => true, 'default-styling' => true];
23+
24+
protected ?Closure $filterSlidedownRowCallback;
25+
26+
27+
/**
28+
* Used to set attributes for the Filter Popover
29+
*/
30+
public function setFilterPopoverAttributes(array $filterPopoverAttributes): self
31+
{
32+
$this->filterPopoverAttributes = array_merge($this->filterPopoverAttributes, $filterPopoverAttributes);
33+
34+
return $this;
35+
}
36+
1137
/**
38+
* Used to set attributes for the Filter Slidedown Wrapper
39+
*/
40+
public function setFilterSlidedownWrapperAttributes(array $filterSlidedownWrapperAttributes): self
41+
{
42+
$this->filterSlidedownWrapperAttributes = array_merge($this->filterSlidedownWrapperAttributes, $filterSlidedownWrapperAttributes);
43+
44+
return $this;
45+
}
46+
47+
/**
48+
* Set a list of attributes to override on the th sort button elements
49+
*/
50+
public function setFilterSlidedownRowAttributes(Closure $callback): self
51+
{
52+
$this->filterSlidedownRowCallback = $callback;
53+
54+
return $this;
55+
}
56+
57+
public function setFilterLayout(string $type): self
58+
{
59+
if (! in_array($type, ['popover', 'slide-down'], true)) {
60+
throw new DataTableConfigurationException('Invalid filter layout type');
61+
}
62+
63+
$this->filterLayout = $type;
64+
65+
return $this;
66+
}
67+
68+
public function setFilterLayoutPopover(): self
69+
{
70+
$this->setFilterLayout('popover');
71+
72+
return $this;
73+
}
74+
75+
public function setFilterLayoutSlideDown(): self
76+
{
77+
$this->setFilterLayout('slide-down');
78+
79+
return $this;
80+
}
81+
82+
public function setFilterSlideDownDefaultStatus(bool $status): self
83+
{
84+
$this->filterSlideDownDefaultVisible = $status;
85+
86+
return $this;
87+
}
88+
89+
public function setFilterSlideDownDefaultStatusDisabled(): self
90+
{
91+
$this->setFilterSlideDownDefaultStatus(false);
92+
93+
return $this;
94+
}
95+
96+
public function setFilterSlideDownDefaultStatusEnabled(): self
97+
{
98+
$this->setFilterSlideDownDefaultStatus(true);
99+
100+
return $this;
101+
}
102+
103+
/**
12104
* Used to get attributes for the Filter Popover
13105
*
14106
* @return array<mixed>
@@ -119,4 +211,5 @@ public function getFiltersByRow(): array
119211

120212
return $orderedFilters;
121213
}
214+
122215
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
namespace Rappasoft\LaravelLivewireTables\Traits\Core\Filters;
4+
5+
use Livewire\Attributes\{Computed, Locked};
6+
use Rappasoft\LaravelLivewireTables\Views\Filter;
7+
8+
trait HasFilterPillsStyling
9+
{
10+
#[Locked]
11+
public bool $filterPillsStatus = true;
12+
13+
public function setFilterPillsStatus(bool $status): self
14+
{
15+
$this->filterPillsStatus = $status;
16+
17+
return $this;
18+
}
19+
20+
public function setFilterPillsEnabled(): self
21+
{
22+
$this->setFilterPillsStatus(true);
23+
24+
return $this;
25+
}
26+
27+
public function setFilterPillsDisabled(): self
28+
{
29+
$this->setFilterPillsStatus(false);
30+
31+
return $this;
32+
}
33+
34+
#[Computed]
35+
public function showFilterPillsSection(): bool
36+
{
37+
return $this->filtersAreEnabled() && $this->filterPillsAreEnabled() && $this->hasAppliedVisibleFiltersForPills();
38+
}
39+
40+
public function getFilterPillsStatus(): bool
41+
{
42+
return $this->filterPillsStatus;
43+
}
44+
45+
public function filterPillsAreEnabled(): bool
46+
{
47+
return $this->getFilterPillsStatus() === true;
48+
}
49+
50+
public function filterPillsAreDisabled(): bool
51+
{
52+
return $this->getFilterPillsStatus() === false;
53+
}
54+
55+
public function hasAppliedVisibleFiltersForPills(): bool
56+
{
57+
return collect($this->getAppliedFiltersWithValues())
58+
->map(fn ($_item, $key) => $this->getFilterByKey($key))
59+
->reject(fn (Filter $filter) => $filter->isHiddenFromPills())
60+
->count() > 0;
61+
}
62+
63+
}

src/Traits/Core/QueryStrings/HasQueryStringForFilter.php renamed to src/Traits/Core/Filters/HasFilterQueryString.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<?php
22

3-
namespace Rappasoft\LaravelLivewireTables\Traits\Core\QueryStrings;
3+
namespace Rappasoft\LaravelLivewireTables\Traits\Core\Filters;
44

55
use Livewire\Attributes\Locked;
66

7-
trait HasQueryStringForFilter
7+
trait HasFilterQueryString
88
{
99
#[Locked]
1010
public ?bool $queryStringStatusForFilter;
@@ -81,4 +81,4 @@ public function setQueryStringAliasForFilter(string $alias): self
8181

8282
return $this;
8383
}
84-
}
84+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
3+
namespace Rappasoft\LaravelLivewireTables\Traits\Core\Filters;
4+
5+
use Illuminate\Support\Collection;
6+
use Livewire\Attributes\Locked;
7+
use Rappasoft\LaravelLivewireTables\Views\Filter;
8+
9+
trait HasFiltersVisibility
10+
{
11+
public function getFiltersVisibilityStatus(): bool
12+
{
13+
return $this->filtersVisibilityStatus;
14+
}
15+
16+
public function filtersVisibilityIsEnabled(): bool
17+
{
18+
return $this->getFiltersVisibilityStatus() === true;
19+
}
20+
21+
public function filtersVisibilityIsDisabled(): bool
22+
{
23+
return $this->getFiltersVisibilityStatus() === false;
24+
}
25+
26+
public function hasVisibleFilters(): bool
27+
{
28+
return $this->getFilters()
29+
->reject(fn (Filter $filter) => $filter->isHiddenFromMenus())
30+
->count() > 0;
31+
}
32+
33+
/**
34+
* Get whether filter has a configured slide down row.
35+
*/
36+
public function getVisibleFilters(): Collection
37+
{
38+
return $this->getFilters()->reject(fn (Filter $filter) => $filter->isHiddenFromMenus());
39+
}
40+
41+
#[Locked]
42+
public bool $filtersVisibilityStatus = true;
43+
44+
public function setFiltersVisibilityStatus(bool $status): self
45+
{
46+
$this->filtersVisibilityStatus = $status;
47+
48+
return $this;
49+
}
50+
51+
public function setFiltersVisibilityEnabled(): self
52+
{
53+
$this->setFiltersVisibilityStatus(true);
54+
55+
return $this;
56+
}
57+
58+
public function setFiltersVisibilityDisabled(): self
59+
{
60+
$this->setFiltersVisibilityStatus(false);
61+
62+
return $this;
63+
}
64+
65+
}

0 commit comments

Comments
 (0)