From 305c7c3045e595d069205e96dc597d8408962110 Mon Sep 17 00:00:00 2001 From: pxpm Date: Fri, 13 Dec 2024 10:32:16 +0000 Subject: [PATCH 1/2] update filter stub --- .../Commands/Views/FilterBackpackCommand.php | 17 ++++ src/Console/stubs/filter.stub | 85 ++++++++++--------- 2 files changed, 61 insertions(+), 41 deletions(-) diff --git a/src/Console/Commands/Views/FilterBackpackCommand.php b/src/Console/Commands/Views/FilterBackpackCommand.php index 6fe60c9..5fe576c 100644 --- a/src/Console/Commands/Views/FilterBackpackCommand.php +++ b/src/Console/Commands/Views/FilterBackpackCommand.php @@ -2,6 +2,8 @@ namespace Backpack\Generators\Console\Commands\Views; +use Illuminate\Support\Str; + class FilterBackpackCommand extends PublishOrCreateViewBackpackCommand { /** @@ -45,4 +47,19 @@ class FilterBackpackCommand extends PublishOrCreateViewBackpackCommand * @var string */ protected $stub = 'filter.stub'; + + /** + * Build the class with the given name. + * + * @param string $name + * @return string + */ + protected function buildClass($name) + { + $name = Str::of($name)->camel()->ucfirst()->value(); + $stub = $this->files->get($this->getStub()); + $stub = str_replace('__FILTER_NAME__', $name, $stub); + + return $stub; + } } diff --git a/src/Console/stubs/filter.stub b/src/Console/stubs/filter.stub index 633cb93..9bc5a37 100644 --- a/src/Console/stubs/filter.stub +++ b/src/Console/stubs/filter.stub @@ -1,64 +1,67 @@ -{{-- Simple Backpack CRUD filter --}} -{{-- ########################################### --}} -{{-- Extra CSS and JS for this particular filter --}} +@push('after_scripts') +@bassetBlock('__FILTER_NAME__-filter.js') + +@endBassetBlock @endpush {{-- End of Extra CSS and JS --}} {{-- ########################################## --}} From e0c9f21749775464909e4ca291a4d026d26e8049 Mon Sep 17 00:00:00 2001 From: pxpm Date: Mon, 22 Dec 2025 11:01:55 +0000 Subject: [PATCH 2/2] update filter stub --- src/Console/stubs/filter.stub | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Console/stubs/filter.stub b/src/Console/stubs/filter.stub index 9bc5a37..133ea5d 100644 --- a/src/Console/stubs/filter.stub +++ b/src/Console/stubs/filter.stub @@ -18,11 +18,17 @@ let filterKey = filter.getAttribute('filter-key'); let filterAnchor = filter.querySelector('a'); let filterDebounce = filter.getAttribute('filter-debounce'); - let navBarId = filterNavbar.getAttribute('id'); let shouldUpdateUrl = true; + // prevent duplicate event bindings when the filter view re-renders + if (filter.getAttribute('data-filter-initialized') === 'true') { + return; + } + filter.setAttribute('data-filter-initialized', 'true'); + filterAnchor.addEventListener('click', async function(e) { e.preventDefault(); + shouldUpdateUrl = true; // get the filter value let filterValue = filter.classList.contains('active') ? true : false; @@ -43,20 +49,18 @@ document.dispatchEvent(new CustomEvent('backpack:filter:changed', { detail: { - filterName: filterName, - filterValue: filterValue, + filterName: filterName, + filterValue: filterValue, shouldUpdateUrl: shouldUpdateUrl, debounce: filterDebounce, - + componentId: filterNavbar.getAttribute('data-component-id'), } })); }); // clear filter event (used here and by the Remove all filters button) filter.addEventListener('backpack:filter:clear', function(e) { - if(e.detail && e.detail.clearAllFilters) { - shouldUpdateUrl = false - } + shouldUpdateUrl = !(e.detail && e.detail.clearAllFilters); filter.classList.remove('active'); }); };