diff --git a/resources/views/components/tools/filter-pills.blade.php b/resources/views/components/tools/filter-pills.blade.php index 7e2f1edd6..d046e891c 100644 --- a/resources/views/components/tools/filter-pills.blade.php +++ b/resources/views/components/tools/filter-pills.blade.php @@ -22,7 +22,7 @@ @if ($filterPillData->hasCustomPillBlade) @include($filterPillData->getCustomPillBlade(), ['filter' => $this->getFilterByKey($filterKey), 'filterPillData' => $filterPillData]) @else - + @endif @endtableloop diff --git a/resources/views/includes/filter-pill.blade.php b/resources/views/includes/filter-pill.blade.php new file mode 100644 index 000000000..922dbcf56 --- /dev/null +++ b/resources/views/includes/filter-pill.blade.php @@ -0,0 +1,22 @@ +@aware(['tableName','isTailwind','isBootstrap4','isBootstrap5']) + +
merge($filterPillsItemAttributes) + ->class([ + 'inline-flex items-center px-2.5 py-0.5 rounded-full leading-4' => $isTailwind && ($filterPillsItemAttributes['default-styling'] ?? true), + 'text-xs font-medium capitalize' => $isTailwind && ($filterPillsItemAttributes['default-text'] ?? ($filterPillsItemAttributes['default-styling'] ?? true)), + 'bg-indigo-100 text-indigo-800 dark:bg-indigo-200 dark:text-indigo-900' => $isTailwind && ($filterPillsItemAttributes['default-colors'] ?? true), + 'badge badge-pill badge-info d-inline-flex align-items-center' => $isBootstrap4 && ($filterPillsItemAttributes['default-styling'] ?? true), + 'badge rounded-pill bg-info d-inline-flex align-items-center' => $isBootstrap5 && ($filterPillsItemAttributes['default-styling'] ?? true), + ]) + ->except(['default', 'default-styling', 'default-colors']) +}} +> +merge($pillTitleDisplayDataArray) }}> + +merge($pillDisplayDataArray) }}> + + + +
diff --git a/src/DataTransferObjects/Filters/FilterPillData.php b/src/DataTransferObjects/Filters/FilterPillData.php index 1aa32c6fa..7dcaffc5d 100644 --- a/src/DataTransferObjects/Filters/FilterPillData.php +++ b/src/DataTransferObjects/Filters/FilterPillData.php @@ -6,27 +6,29 @@ class FilterPillData { + public string $separatedValues = ''; + public function __construct( + protected string $filterKey, protected string $filterPillTitle, - protected string $filterSelectName, protected string|array|null $filterPillValue, protected string $separator, public bool $isAnExternalLivewireFilter, public bool $hasCustomPillBlade, protected ?string $customPillBlade, protected array $filterPillsItemAttributes, - protected ?string $separatedValues, protected bool $renderPillsAsHtml, protected bool $watchForEvents, - protected array $customResetButtonAttributes, ) {} + protected array $customResetButtonAttributes, + protected bool $renderPillsTitleAsHtml) {} - public static function make(string $filterPillTitle, string $filterSelectName, string|array|null $filterPillValue, string $separator = ', ', bool $isAnExternalLivewireFilter = false, bool $hasCustomPillBlade = false, ?string $customPillBlade = null, array $filterPillsItemAttributes = [], ?string $separatedValues = null, bool $renderPillsAsHtml = false, bool $watchForEvents = false, array $customResetButtonAttributes = []): FilterPillData + public static function make(string $filterKey, string $filterPillTitle, string|array|null $filterPillValue, string $separator = ', ', bool $isAnExternalLivewireFilter = false, bool $hasCustomPillBlade = false, ?string $customPillBlade = null, array $filterPillsItemAttributes = [], bool $renderPillsAsHtml = false, bool $watchForEvents = false, array $customResetButtonAttributes = [], bool $renderPillsTitleAsHtml = false): FilterPillData { if ($isAnExternalLivewireFilter) { $watchForEvents = true; } - return new self($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, $separatedValues, $renderPillsAsHtml, $watchForEvents, $customResetButtonAttributes); + return new self($filterKey, $filterPillTitle, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, $renderPillsAsHtml, $watchForEvents, $customResetButtonAttributes, $renderPillsTitleAsHtml); } public function getTitle(): string @@ -34,114 +36,117 @@ public function getTitle(): string return $this->filterPillTitle; } - public function getSelectName(): string + public function getPillValue(): array|string|null { - return $this->filterSelectName; + return $this->filterPillValue; } - public function getPillValue(): array|string|null + public function getHasCustomPillBlade(): bool { - return $this->filterPillValue; + return $this->hasCustomPillBlade ?? false; } - public function isPillValueAnArray(): bool + public function getCustomPillBlade(): ?string { - return ! is_null($this->filterPillValue) && is_array($this->filterPillValue); + return $this->customPillBlade; } - public function getSeparatedPillValue(): array|string|null + public function getCustomResetButtonAttributes(): array { - if ($this->isPillValueAnArray()) { - return implode($this->getSeparator(), $this->getPillValue()); - } else { - return $this->getPillValue(); - } + return $this->customResetButtonAttributes ?? []; } - public function getValueFromPillData(): array|string|null + public function getIsAnExternalLivewireFilter(): int { - if ($this->isPillValueAnArray()) { - return implode($this->getSeparator(), $this->getPillValue()); - } else { - return $this->getPillValue(); - } + return intval($this->isAnExternalLivewireFilter ?? false); } - public function getHasCustomPillBlade(): bool + public function getSeparator(): string { - return $this->hasCustomPillBlade ?? false; + return $this->separator ?? ', '; } - public function getCustomPillBlade(): ?string + public function shouldUsePillsAsHtml(): int { - return $this->customPillBlade; + return intval($this->renderPillsAsHtml ?? false); } - public function getIsAnExternalLivewireFilter(): int + public function shouldUsePillsTitleAsHtml(): int { - return intval($this->isAnExternalLivewireFilter ?? false); + return intval($this->renderPillsTitleAsHtml ?? false); } - public function getSeparator(): string + public function shouldWatchForEvents(): int { - return $this->separator ?? ', '; + return intval($this->watchForEvents ?? false); } - public function getSeparatedValues(): string + public function isPillValueAnArray(): bool { - return $this->separatedValues ?? $this->getSeparatedPillValue(); + return ! is_null($this->filterPillValue) && is_array($this->filterPillValue); } - public function getFilterPillsItemAttributes(): array + public function getSeparatedPillValue(): ?string { - return array_merge(['default' => true, 'default-colors' => true, 'default-styling' => true, 'default-text' => true], $this->filterPillsItemAttributes); + if ($this->isPillValueAnArray()) { + return implode($this->getSeparator(), $this->getPillValue()); + } else { + return $this->getPillValue(); + } } - public function shouldUsePillsAsHtml(): int + public function getSafeSeparatedPillValue(): ?string { - return intval($this->renderPillsAsHtml ?? false); + $string = $this->getSeparatedPillValue(); + + return htmlentities($string, ENT_QUOTES, 'UTF-8'); + } - public function shouldWatchForEvents(): int + public function getFilterPillsItemAttributes(): array { - return intval($this->watchForEvents ?? false); + return array_merge(['default' => true, 'default-colors' => true, 'default-styling' => true, 'default-text' => true], $this->filterPillsItemAttributes); } - public function getFilterPillDisplayData(): ComponentAttributeBag + public function getFilterPillDisplayDataArray(): array { + $array = []; if ($this->getIsAnExternalLivewireFilter()) { - return $this->getExternalFilterPillDisplayData(); + return $this->getExternalFilterPillDisplayDataArray($array); } - return $this->getInternalFilterPillDisplayData(); + return $this->getInternalFilterPillDisplayDataArray($array); } - public function getInternalFilterPillDisplayData(): ComponentAttributeBag + public function getExternalFilterPillDisplayDataArray(array $array = []): array { - return new ComponentAttributeBag([ - 'x-data' => "{ internalDisplayString: ''}", - 'x-init' => "internalDisplayString = updatePillValues('".$this->getSeparatedValues()."');", - $this->shouldUsePillsAsHtml() ? 'x-html' : 'x-text' => 'internalDisplayString', - ]); + $array[$this->shouldUsePillsAsHtml() ? 'x-html' : 'x-text'] = 'displayString'; + + return $array; } - public function getExternalFilterPillDisplayData(): ComponentAttributeBag + public function getInternalFilterPillDisplayDataArray(array $array = []): array { - return new ComponentAttributeBag([ - $this->shouldUsePillsAsHtml() ? 'x-html' : 'x-text' => 'displayString', - ]); + + $array['x-data'] = "{ internalDisplayString: ''}"; + $array['x-init'] = 'internalDisplayString = updatePillValues('.json_encode($this->getSafeSeparatedPillValue()).')'; + $array[$this->shouldUsePillsAsHtml() ? 'x-html' : 'x-text'] = 'internalDisplayString'; + + return $array; } - public function getPillSetupData(string $filterKey = '', bool $shouldWatch = false): array + public function getFilterTitleDisplayDataArray(array $array = []): array { - $array = array_merge(['filterKey' => $filterKey, 'watchForEvents' => $shouldWatch], $this->toArray()); + $array[$this->shouldUsePillsTitleAsHtml() ? 'x-html' : 'x-text'] = "localFilterTitle + ': '"; return $array; } - public function getCustomResetButtonAttributes(): array + public function getPillSetupData(string $filterKey = '', bool $shouldWatch = false): array { - return $this->customResetButtonAttributes ?? []; + $array = array_merge(['filterKey' => $filterKey, 'watchForEvents' => $shouldWatch], $this->toArray()); + + return $array; } public function getCalculatedCustomResetButtonAttributes(string $filterKey, array $filterPillsResetFilterButtonAttributes): array @@ -163,16 +168,17 @@ public function getCalculatedCustomResetButtonAttributes(string $filterKey, arra public function toArray(): array { return [ + 'filterKey' => $this->filterKey, 'filterPillTitle' => $this->getTitle(), - 'filterSelectName' => $this->getSelectName(), 'filterPillValue' => $this->getPillValue(), 'isAnExternalLivewireFilter' => $this->getIsAnExternalLivewireFilter(), 'hasCustomPillBlade' => $this->getHasCustomPillBlade(), 'customPillBlade' => $this->getCustomPillBlade(), 'separator' => $this->getSeparator(), + 'separatedValues' => $this->getSafeSeparatedPillValue(), 'filterPillsItemAttributes' => $this->getFilterPillsItemAttributes(), - 'separatedValues' => $this->getSeparatedValues(), 'renderPillsAsHtml' => $this->shouldUsePillsAsHtml(), + 'renderPillsTitleAsHtml' => $this->shouldUsePillsTitleAsHtml(), 'watchForEvents' => $this->shouldWatchForEvents(), ]; } diff --git a/src/LaravelLivewireTablesServiceProvider.php b/src/LaravelLivewireTablesServiceProvider.php index 2fa063768..9d5c64803 100644 --- a/src/LaravelLivewireTablesServiceProvider.php +++ b/src/LaravelLivewireTablesServiceProvider.php @@ -43,6 +43,7 @@ public function boot(): void $this->addBladeLoopDirective(); $this->loadViewsFrom(__DIR__.'/../resources/views', 'livewire-tables'); + Blade::componentNamespace('Rappasoft\\LaravelLivewireTables\\View\\Components', 'livewire-tables'); $this->consoleCommands(); diff --git a/src/Traits/Filters/HandlesPillsData.php b/src/Traits/Filters/HandlesPillsData.php index 84dd1e642..47302988e 100644 --- a/src/Traits/Filters/HandlesPillsData.php +++ b/src/Traits/Filters/HandlesPillsData.php @@ -10,40 +10,21 @@ public function getPillDataForFilter(): array { $filters = []; - foreach ($this->getAppliedFiltersWithValuesForPills() as $filterSelectName => $value) { - if (! is_null($filter = $this->getFilterByKey($filterSelectName))) { - if ($filter->isEmpty($value)) { - continue; - } - $customPillBlade = null; - $isAnExternalLivewireFilter = (method_exists($filter, 'isAnExternalLivewireFilter') && $filter->isAnExternalLivewireFilter()); - $separator = method_exists($filter, 'getPillsSeparator') ? $filter->getPillsSeparator() : ', '; - $separatedValues = null; - - // dd($value); - - if ($hasCustomPillBlade = $filter->hasCustomPillBlade()) { - $customPillBlade = $filter->getCustomPillBlade(); - } - - if (is_array($value) && ! empty($value)) { - $separatedValues = implode($separator, $filter->getFilterPillValue($value)); - } - + foreach ($this->getAppliedFiltersWithValuesForPills() as $filterKey => $value) { + if (! is_null($filter = $this->getFilterByKey($filterKey))) { $filters[$filter->getKey()] = FilterPillData::make( - customPillBlade: $customPillBlade, + filterKey: $filter->getKey(), + customPillBlade: $filter->getCustomPillBlade() ?? null, filterPillsItemAttributes: array_merge($this->getFilterPillsItemAttributes(), ($filter->hasPillAttributes() ? $filter->getPillAttributes() : [])), filterPillTitle: $filter->getFilterPillTitle(), filterPillValue: $filter->getFilterPillValue($value), - filterSelectName: $filterSelectName, - - hasCustomPillBlade: $hasCustomPillBlade, - isAnExternalLivewireFilter: $isAnExternalLivewireFilter, - separatedValues: $separatedValues, + hasCustomPillBlade: $filter->hasCustomPillBlade(), + isAnExternalLivewireFilter: (method_exists($filter, 'isAnExternalLivewireFilter') && $filter->isAnExternalLivewireFilter()), separator: method_exists($filter, 'getPillsSeparator') ? $filter->getPillsSeparator() : ', ', renderPillsAsHtml: $filter->getPillsAreHtml() ?? false, + renderPillsTitleAsHtml: $filter->getFilterPillTitleAsHtml() ?? false, customResetButtonAttributes: $filter->getPillResetButtonAttributes(), ); diff --git a/src/View/Components/FilterPill.php b/src/View/Components/FilterPill.php new file mode 100644 index 000000000..6ec3f574e --- /dev/null +++ b/src/View/Components/FilterPill.php @@ -0,0 +1,28 @@ +shouldWatch = $this->filterPillData->shouldWatchForEvents() ?? 0; + } + + public function render(): null|string|\Illuminate\Support\HtmlString|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View + { + return view('livewire-tables::includes.filter-pill') + ->with([ + 'filterPillsItemAttributes' => $this->filterPillData->getFilterPillsItemAttributes(), + 'pillDisplayDataArray' => $this->filterPillData->getFilterPillDisplayDataArray(), + 'pillTitleDisplayDataArray' => $this->filterPillData->getFilterTitleDisplayDataArray(), + 'setupData' => $this->filterPillData->getPillSetupData($this->filterKey, $this->shouldWatch), + ]); + + } +} diff --git a/src/Views/Filters/Traits/Styling/HandlesFilterPillsAttributes.php b/src/Views/Filters/Traits/Styling/HandlesFilterPillsAttributes.php index 257faf3c0..ca8837012 100644 --- a/src/Views/Filters/Traits/Styling/HandlesFilterPillsAttributes.php +++ b/src/Views/Filters/Traits/Styling/HandlesFilterPillsAttributes.php @@ -20,6 +20,8 @@ trait HandlesFilterPillsAttributes */ protected array $pillResetButtonAttributes = []; + protected bool $pillTitleAsHtml = false; + public function getPillAttributesBag(): ComponentAttributeBag { return new ComponentAttributeBag($this->getPillAttributes()); @@ -82,4 +84,16 @@ public function getFilterPillResetButtonAttributesMerged(array $resetFilterButto $this->getPillResetButtonAttributes() ); } + + public function setFilterPillTitleAsHtml(bool $pillTitleAsHtml): self + { + $this->pillTitleAsHtml = $pillTitleAsHtml; + + return $this; + } + + public function getFilterPillTitleAsHtml(): bool + { + return $this->pillTitleAsHtml; + } } diff --git a/tests/Unit/DataTransferObjects/FilterPillDataTest.php b/tests/Unit/DataTransferObjects/FilterPillDataTest.php index 70727c012..7ad346de0 100644 --- a/tests/Unit/DataTransferObjects/FilterPillDataTest.php +++ b/tests/Unit/DataTransferObjects/FilterPillDataTest.php @@ -10,19 +10,21 @@ final class FilterPillDataTest extends TestCase { public function test_check_all_default_dto_elements() { + $filterKey = 'filterSelectName'; $filterPillTitle = 'filterPillTitle'; - $filterSelectName = 'filterSelectName'; + $filterKey = 'filterSelectName'; $filterPillValue = 'filterPillValue'; $separator = ' , '; $isAnExternalLivewireFilter = 0; $renderPillsAsHtml = 0; + $renderPillsTitleAsHtml = 0; $watchForEvents = 0; $hasCustomPillBlade = false; $customPillBlade = null; $filterPillsItemAttributes = ['default' => true, 'default-colors' => true, 'default-styling' => true, 'default-text' => true]; $defaultData = [ 'filterPillTitle' => $filterPillTitle, - 'filterSelectName' => $filterSelectName, + 'filterKey' => $filterKey, 'filterPillValue' => $filterPillValue, 'isAnExternalLivewireFilter' => $isAnExternalLivewireFilter, 'hasCustomPillBlade' => $hasCustomPillBlade, @@ -30,14 +32,15 @@ public function test_check_all_default_dto_elements() 'separator' => $separator, 'filterPillsItemAttributes' => $filterPillsItemAttributes, 'renderPillsAsHtml' => $renderPillsAsHtml, + 'renderPillsTitleAsHtml' => $renderPillsTitleAsHtml, 'watchForEvents' => $watchForEvents, 'separatedValues' => 'filterPillValue', ]; + ksort($defaultData); - $dto = FilterPillData::make($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes); + $dto = FilterPillData::make($filterKey, $filterPillTitle, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, false, false, [], false); $dtoArray = $dto->toArray(); - ksort($defaultData); ksort($dtoArray); $this->assertSame($defaultData, $dtoArray); @@ -46,73 +49,60 @@ public function test_check_all_default_dto_elements() public function test_can_get_filter_title() { $filterPillTitle = 'filterPillTitle'; - $filterSelectName = 'filterSelectName'; + $filterKey = 'filterSelectName'; $filterPillValue = 'filterPillValue'; $separator = ' , '; $isAnExternalLivewireFilter = false; $hasCustomPillBlade = true; $customPillBlade = 'test-blade'; $filterPillsItemAttributes = ['default' => true, 'default-colors' => true, 'default-styling' => true]; - $dto = FilterPillData::make($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes); - $this->assertSame($dto->getTitle(), $filterPillTitle); - } + $dto = FilterPillData::make($filterKey, $filterPillTitle, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, false, false, [], false); - public function test_can_get_filter_select_name() - { - $filterPillTitle = 'filterPillTitle'; - $filterSelectName = 'filterSelectName'; - $filterPillValue = 'filterPillValue'; - $separator = ' , '; - $isAnExternalLivewireFilter = false; - $hasCustomPillBlade = true; - $customPillBlade = 'test-blade'; - $filterPillsItemAttributes = ['default' => true, 'default-colors' => true, 'default-styling' => true]; - $dto = FilterPillData::make($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes); - $this->assertSame($dto->getSelectName(), $filterSelectName); + $this->assertSame($dto->getTitle(), $filterPillTitle); } public function test_can_get_filter_value() { $filterPillTitle = 'filterPillTitle'; - $filterSelectName = 'filterSelectName'; + $filterKey = 'filterSelectName'; $filterPillValue = 'filterPillValue'; $separator = ' , '; $isAnExternalLivewireFilter = false; $hasCustomPillBlade = true; $customPillBlade = 'test-blade'; $filterPillsItemAttributes = ['default' => true, 'default-colors' => true, 'default-styling' => true]; - $dto = FilterPillData::make($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes); + $dto = FilterPillData::make($filterKey, $filterPillTitle, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, false, false, [], false); $this->assertSame($dto->getPillValue(), $filterPillValue); } public function test_can_get_filter_value_is_an_array() { $filterPillTitle = 'filterPillTitle'; - $filterSelectName = 'filterSelectName'; + $filterKey = 'filterSelectName'; $filterPillValue = 'filterPillValue'; $separator = ' , '; $isAnExternalLivewireFilter = false; $hasCustomPillBlade = true; $customPillBlade = 'test-blade'; $filterPillsItemAttributes = ['default' => true, 'default-colors' => true, 'default-styling' => true]; - $dto = FilterPillData::make($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes); + $dto = FilterPillData::make($filterKey, $filterPillTitle, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, false, false, [], false); $this->assertFalse($dto->isPillValueAnArray()); $filterPillValue = ['test123', 'test345']; - $dto = FilterPillData::make($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes); + $dto = FilterPillData::make($filterKey, $filterPillTitle, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, false, false, [], false); $this->assertTrue($dto->isPillValueAnArray()); } public function test_can_get_separated_pill_value() { $filterPillTitle = 'filterPillTitle'; - $filterSelectName = 'filterSelectName'; + $filterKey = 'filterSelectName'; $filterPillValue = ['test123', 'test345']; $separator = ' , '; $isAnExternalLivewireFilter = false; $hasCustomPillBlade = true; $customPillBlade = 'test-blade'; $filterPillsItemAttributes = ['default' => true, 'default-colors' => true, 'default-styling' => true]; - $dto = FilterPillData::make($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes); + $dto = FilterPillData::make($filterKey, $filterPillTitle, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, false, false, [], false); $this->assertTrue($dto->isPillValueAnArray()); $this->assertSame($dto->getSeparatedPillValue(), 'test123 , test345'); @@ -121,14 +111,14 @@ public function test_can_get_separated_pill_value() public function test_can_check_if_has_custom_pill_blade() { $filterPillTitle = 'filterPillTitle'; - $filterSelectName = 'filterSelectName'; + $filterKey = 'filterSelectName'; $filterPillValue = 'filterPillValue'; $separator = ' , '; $isAnExternalLivewireFilter = false; $hasCustomPillBlade = true; $customPillBlade = 'test-blade'; $filterPillsItemAttributes = ['default' => true, 'default-colors' => true, 'default-styling' => true]; - $dto = FilterPillData::make($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes); + $dto = FilterPillData::make($filterKey, $filterPillTitle, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, false, false, [], false); $this->assertTrue($dto->getHasCustomPillBlade()); $this->assertTrue($dto->hasCustomPillBlade); } @@ -136,29 +126,32 @@ public function test_can_check_if_has_custom_pill_blade() public function test_can_get_custom_pill_blade() { $filterPillTitle = 'filterPillTitle'; - $filterSelectName = 'filterSelectName'; + $filterKey = 'filterSelectName'; $filterPillValue = 'filterPillValue'; $separator = ' , '; $isAnExternalLivewireFilter = false; $hasCustomPillBlade = true; $customPillBlade = 'test-blade'; $filterPillsItemAttributes = ['default' => true, 'default-colors' => true, 'default-styling' => true]; - $dto = FilterPillData::make($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes); + $dto = FilterPillData::make($filterKey, $filterPillTitle, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, false, false, [], false); $this->assertSame($dto->getCustomPillBlade(), $customPillBlade); } public function test_can_get_filter_pill_display_data_html() { $filterPillTitle = 'filterPillTitle'; - $filterSelectName = 'filterSelectName'; + $filterKey = 'filterSelectName'; $filterPillValue = 'filterPillValue'; $separator = ' , '; $isAnExternalLivewireFilter = true; $hasCustomPillBlade = true; $customPillBlade = 'test-blade'; $filterPillsItemAttributes = ['default' => true, 'default-colors' => true, 'default-styling' => true]; - $dto = FilterPillData::make($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, '', true, false, []); - $displayData = $dto->getExternalFilterPillDisplayData(); + $renderPillsAsHtml = true; + $renderPillsTitleAsHtml = false; + + $dto = FilterPillData::make($filterKey, $filterPillTitle, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, $renderPillsAsHtml, false, [], $renderPillsTitleAsHtml); + $displayData = new ComponentAttributeBag($dto->getExternalFilterPillDisplayDataArray()); $bag = new ComponentAttributeBag(['x-html' => 'displayString']); $this->assertSame($displayData->getAttributes(), $bag->getAttributes()); @@ -166,16 +159,21 @@ public function test_can_get_filter_pill_display_data_html() public function test_can_get_filter_pill_display_data_non_html() { + $filterKey = 'filterSelectName'; + $filterPillTitle = 'filterPillTitle'; - $filterSelectName = 'filterSelectName'; $filterPillValue = 'filterPillValue'; $separator = ' , '; $isAnExternalLivewireFilter = false; $hasCustomPillBlade = true; $customPillBlade = 'test-blade'; + $renderPillsAsHtml = false; + $renderPillsTitleAsHtml = false; + $filterPillsItemAttributes = ['default' => true, 'default-colors' => true, 'default-styling' => true]; - $dto = FilterPillData::make($filterPillTitle, $filterSelectName, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes); - $displayData = $dto->getExternalFilterPillDisplayData(); + + $dto = FilterPillData::make($filterKey, $filterPillTitle, $filterPillValue, $separator, $isAnExternalLivewireFilter, $hasCustomPillBlade, $customPillBlade, $filterPillsItemAttributes, $renderPillsAsHtml, false, [], $renderPillsTitleAsHtml); + $displayData = new ComponentAttributeBag($dto->getExternalFilterPillDisplayDataArray()); $bag = new ComponentAttributeBag(['x-text' => 'displayString']); $this->assertSame($displayData->getAttributes(), $bag->getAttributes()); diff --git a/tests/Visuals/FilterVisualsTest.php b/tests/Visuals/FilterVisualsTest.php index 2580896de..429c6b2d9 100644 --- a/tests/Visuals/FilterVisualsTest.php +++ b/tests/Visuals/FilterVisualsTest.php @@ -103,6 +103,7 @@ public function test_filters_with_invalid_key_dont_error(): void ->assertDontSee('Applied Filters'); } + /* Temporary Removal public function test_filters_pills_separator_is_customisable(): void { Livewire::test(new class extends PetsTable @@ -161,7 +162,7 @@ public function filters(): array 'American Shorthair,', 'Maine Coon', ]); - } + }*/ public function test_filters_popover_menu_is_customisable(): void {