Skip to content

Commit d17464b

Browse files
authored
Migrate Filter Code Appropriately (rappasoft#2146)
* Migrate Filter Code Appropriately * Fix styling * Test Fixes * Fix styling --------- Co-authored-by: lrljoe <[email protected]>
1 parent 4125285 commit d17464b

26 files changed

+474
-391
lines changed

phpunit.xml.dist

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@
99
failOnEmptyTestSuite="false"
1010
beStrictAboutOutputDuringTests="true" >
1111
<testsuites>
12-
<testsuite name="Laravel Livewire Tables Unit and Visuals Test Suite">
13-
<directory>tests/Unit</directory>
14-
<directory>tests/Visuals</directory>
15-
</testsuite>
1612
<testsuite name="Laravel Livewire Tables Unit Test Suite">
1713
<directory>tests/Unit</directory>
1814
</testsuite>

src/Traits/Configuration/FilterConfiguration.php

Lines changed: 0 additions & 54 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
@@ -26,56 +24,4 @@ public function setFiltersDisabled(): self
2624

2725
return $this;
2826
}
29-
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);
47-
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-
}
8127
}
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 Livewire\Attributes\Computed;
6+
use Rappasoft\LaravelLivewireTables\DataTransferObjects\FilterGenericData;
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: 93 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,103 @@
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+
#[Locked]
14+
public string $filterLayout = 'popover';
15+
16+
// Entangled in JS
17+
public bool $filterSlideDownDefaultVisible = false;
18+
19+
protected array $filterPopoverAttributes = ['class' => '', 'default-width' => true, 'default-colors' => true, 'default-styling' => true];
20+
21+
protected array $filterSlidedownWrapperAttributes = ['class' => '', 'default-colors' => true, 'default-styling' => true];
22+
23+
protected ?Closure $filterSlidedownRowCallback;
24+
25+
/**
26+
* Used to set attributes for the Filter Popover
27+
*/
28+
public function setFilterPopoverAttributes(array $filterPopoverAttributes): self
29+
{
30+
$this->filterPopoverAttributes = array_merge($this->filterPopoverAttributes, $filterPopoverAttributes);
31+
32+
return $this;
33+
}
34+
35+
/**
36+
* Used to set attributes for the Filter Slidedown Wrapper
37+
*/
38+
public function setFilterSlidedownWrapperAttributes(array $filterSlidedownWrapperAttributes): self
39+
{
40+
$this->filterSlidedownWrapperAttributes = array_merge($this->filterSlidedownWrapperAttributes, $filterSlidedownWrapperAttributes);
41+
42+
return $this;
43+
}
44+
45+
/**
46+
* Set a list of attributes to override on the th sort button elements
47+
*/
48+
public function setFilterSlidedownRowAttributes(Closure $callback): self
49+
{
50+
$this->filterSlidedownRowCallback = $callback;
51+
52+
return $this;
53+
}
54+
55+
public function setFilterLayout(string $type): self
56+
{
57+
if (! in_array($type, ['popover', 'slide-down'], true)) {
58+
throw new DataTableConfigurationException('Invalid filter layout type');
59+
}
60+
61+
$this->filterLayout = $type;
62+
63+
return $this;
64+
}
65+
66+
public function setFilterLayoutPopover(): self
67+
{
68+
$this->setFilterLayout('popover');
69+
70+
return $this;
71+
}
72+
73+
public function setFilterLayoutSlideDown(): self
74+
{
75+
$this->setFilterLayout('slide-down');
76+
77+
return $this;
78+
}
79+
80+
public function setFilterSlideDownDefaultStatus(bool $status): self
81+
{
82+
$this->filterSlideDownDefaultVisible = $status;
83+
84+
return $this;
85+
}
86+
87+
public function setFilterSlideDownDefaultStatusDisabled(): self
88+
{
89+
$this->setFilterSlideDownDefaultStatus(false);
90+
91+
return $this;
92+
}
93+
94+
public function setFilterSlideDownDefaultStatusEnabled(): self
95+
{
96+
$this->setFilterSlideDownDefaultStatus(true);
97+
98+
return $this;
99+
}
100+
11101
/**
12102
* Used to get attributes for the Filter Popover
13103
*
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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+
}

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

Lines changed: 2 additions & 2 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;
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
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+
}

0 commit comments

Comments
 (0)