Skip to content

Commit 92f8c35

Browse files
committed
use key in favor of changing names
1 parent 5ccf325 commit 92f8c35

File tree

12 files changed

+123
-112
lines changed

12 files changed

+123
-112
lines changed

src/app/Library/CrudPanel/CrudFilter.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Backpack\CRUD\app\Library\CrudPanel;
44

55
use Symfony\Component\HttpFoundation\ParameterBag;
6+
use Illuminate\Support\Str;
67

78
class CrudFilter
89
{
@@ -21,6 +22,9 @@ class CrudFilter
2122

2223
public function __construct($options, $values, $logic, $fallbackLogic)
2324
{
25+
//we use the key in filters for properties, js functions etc. We leave the name untouched for beeing sent in request.
26+
$options['key'] = Str::camel($options['key']);
27+
2428
// if filter exists
2529
if ($this->crud()->hasFilterWhere('name', $options['name'])) {
2630
$properties = get_object_vars($this->crud()->firstFilterWhere('name', $options['name']));

src/app/Library/CrudPanel/Traits/Filters.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Backpack\CRUD\app\Library\CrudPanel\CrudFilter;
66
use Illuminate\Support\Collection;
7+
use Illuminate\Support\Str;
78
use Symfony\Component\HttpFoundation\ParameterBag;
89

910
trait Filters
@@ -80,6 +81,9 @@ protected function addFilterToCollection($options, $values = false, $filterLogic
8081
abort(500, "Sorry, you can't have two filters with the same name.");
8182
}
8283

84+
//we use the key in filters for properties, js functions etc. We leave the name untouched for beeing sent in request.
85+
$options['key'] = Str::camel($options['name']);
86+
8387
// add a new filter to the interface
8488
$filter = new CrudFilter($options, $values, $filterLogic, $fallbackLogic);
8589
$this->setOperationSetting('filters', $this->filters()->push($filter));

src/resources/views/crud/filters/date.blade.php

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{{-- Date Range Backpack CRUD filter --}}
2-
32
<li filter-name="{{ $filter->name }}"
4-
filter-type="{{ $filter->type }}"
3+
filter-type="{{ $filter->type }}"
4+
filter-key="{{ $filter->key }}"
55
class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
66
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ $filter->label }} <span class="caret"></span></a>
77
<div class="dropdown-menu p-0">
@@ -11,13 +11,13 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
1111
<span class="input-group-text"><i class="la la-calendar"></i></span>
1212
</div>
1313
<input class="form-control pull-right"
14-
id="datepicker-{{ $filter->name }}"
14+
id="datepicker-{{ $filter->key }}"
1515
type="text"
1616
@if ($filter->currentValue)
1717
value="{{ $filter->currentValue }}"
1818
@endif
1919
>
20-
<div class="input-group-append datepicker-{{ $filter->name }}-clear-button">
20+
<div class="input-group-append datepicker-{{ $filter->key }}-clear-button">
2121
<a class="input-group-text" href=""><i class="la la-times"></i></a>
2222
</div>
2323
</div>
@@ -50,7 +50,7 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
5050
<script src="{{ asset('packages/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js') }}"></script>
5151
<script>
5252
jQuery(document).ready(function($) {
53-
var dateInput = $('#datepicker-{{ $filter->name }}').datepicker({
53+
var dateInput = $('#datepicker-{{ $filter->key }}').datepicker({
5454
autoclose: true,
5555
format: 'yyyy-mm-dd',
5656
todayHighlight: true
@@ -65,8 +65,6 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
6565
var value = d.getFullYear() + "-" + ("0"+(d.getMonth()+1)).slice(-2) + "-" + ("0" + d.getDate()).slice(-2);
6666
}
6767
68-
// console.log(value);
69-
7068
var parameter = '{{ $filter->name }}';
7169
7270
// behaviour for ajax table
@@ -83,22 +81,22 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
8381
8482
// mark this filter as active in the navbar-filters
8583
if (URI(new_url).hasQuery('{{ $filter->name }}', true)) {
86-
$('li[filter-name={{ $filter->name }}]').removeClass('active').addClass('active');
84+
$('li[filter-key={{ $filter->key }}]').removeClass('active').addClass('active');
8785
}
8886
});
8987
90-
$('li[filter-name={{ $filter->name }}]').on('filter:clear', function(e) {
88+
$('li[filter-key={{ $filter->key }}]').on('filter:clear', function(e) {
9189
// console.log('date filter cleared');
92-
$('li[filter-name={{ $filter->name }}]').removeClass('active');
93-
$('#datepicker-{{ $filter->name }}').datepicker('update', '');
94-
$('#datepicker-{{ $filter->name }}').trigger('changeDate');
90+
$('li[filter-key={{ $filter->key }}]').removeClass('active');
91+
$('#datepicker-{{ $filter->key }}').datepicker('update', '');
92+
$('#datepicker-{{ $filter->key }}').trigger('changeDate');
9593
});
9694
9795
// datepicker clear button
98-
$(".datepicker-{{ $filter->name }}-clear-button").click(function(e) {
96+
$(".datepicker-{{ $filter->key }}-clear-button").click(function(e) {
9997
e.preventDefault();
10098
101-
$('li[filter-name={{ $filter->name }}]').trigger('filter:clear');
99+
$('li[filter-key={{ $filter->key }}]').trigger('filter:clear');
102100
})
103101
});
104102
</script>

src/resources/views/crud/filters/date_range.blade.php

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{{-- Date Range Backpack CRUD filter --}}
2-
32
<li filter-name="{{ $filter->name }}"
4-
filter-type="{{ $filter->type }}"
3+
filter-type="{{ $filter->type }}"
4+
filter-key="{{ $filter->key }}"
55
class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
66
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ $filter->label }} <span class="caret"></span></a>
77
<div class="dropdown-menu p-0">
@@ -11,7 +11,7 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
1111
<span class="input-group-text"><i class="la la-calendar"></i></span>
1212
</div>
1313
<input class="form-control pull-right"
14-
id="daterangepicker-{{ $filter->name }}"
14+
id="daterangepicker-{{ $filter->key }}"
1515
type="text"
1616
@if ($filter->currentValue)
1717
@php
@@ -26,7 +26,7 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
2626
placeholder="{{ $date_range }}"
2727
@endif
2828
>
29-
<div class="input-group-append daterangepicker-{{ $filter->name }}-clear-button">
29+
<div class="input-group-append daterangepicker-{{ $filter->key }}-clear-button">
3030
<a class="input-group-text" href=""><i class="la la-times"></i></a>
3131
</div>
3232
</div>
@@ -62,7 +62,7 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
6262
<script type="text/javascript" src="{{ asset('packages/bootstrap-daterangepicker/daterangepicker.js') }}"></script>
6363
<script>
6464
65-
function applyDateRangeFilter{{$filter->name}}(start, end) {
65+
function applyDateRangeFilter{{$filter->key}}(start, end) {
6666
if (start && end) {
6767
var dates = {
6868
'from': start.format('YYYY-MM-DD'),
@@ -89,16 +89,16 @@ function applyDateRangeFilter{{$filter->name}}(start, end) {
8989
9090
// mark this filter as active in the navbar-filters
9191
if (URI(new_url).hasQuery('{{ $filter->name }}', true)) {
92-
$('li[filter-name={{ $filter->name }}]').removeClass('active').addClass('active');
92+
$('li[filter-key={{ $filter->key }}]').removeClass('active').addClass('active');
9393
}
9494
else
9595
{
96-
$('li[filter-name={{ $filter->name }}]').trigger('filter:clear');
96+
$('li[filter-key={{ $filter->key }}]').trigger('filter:clear');
9797
}
9898
}
9999
100100
jQuery(document).ready(function($) {
101-
var dateRangeInput = $('#daterangepicker-{{ $filter->name }}').daterangepicker({
101+
var dateRangeInput = $('#daterangepicker-{{ $filter->key }}').daterangepicker({
102102
timePicker: false,
103103
ranges: {
104104
'Today': [moment().startOf('day'), moment().endOf('day')],
@@ -117,24 +117,24 @@ function applyDateRangeFilter{{$filter->name}}(start, end) {
117117
});
118118
119119
dateRangeInput.on('apply.daterangepicker', function(ev, picker) {
120-
applyDateRangeFilter{{$filter->name}}(picker.startDate, picker.endDate);
120+
applyDateRangeFilter{{$filter->key}}(picker.startDate, picker.endDate);
121121
});
122122
123-
$('li[filter-name={{ $filter->name }}]').on('hide.bs.dropdown', function () {
123+
$('li[filter-key={{ $filter->key }}]').on('hide.bs.dropdown', function () {
124124
if($('.daterangepicker').is(':visible'))
125125
return false;
126126
});
127127
128-
$('li[filter-name={{ $filter->name }}]').on('filter:clear', function(e) {
128+
$('li[filter-key={{ $filter->key }}]').on('filter:clear', function(e) {
129129
// console.log('daterangepicker filter cleared');
130130
//if triggered by remove filters click just remove active class,no need to send ajax
131-
$('li[filter-name={{ $filter->name }}]').removeClass('active');
131+
$('li[filter-key={{ $filter->key }}]').removeClass('active');
132132
});
133133
134134
// datepicker clear button
135-
$(".daterangepicker-{{ $filter->name }}-clear-button").click(function(e) {
135+
$(".daterangepicker-{{ $filter->key }}-clear-button").click(function(e) {
136136
e.preventDefault();
137-
applyDateRangeFilter{{$filter->name}}(null, null);
137+
applyDateRangeFilter{{$filter->key}}(null, null);
138138
})
139139
});
140140
</script>

src/resources/views/crud/filters/dropdown.blade.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{{-- Dropdown Backpack CRUD filter --}}
2-
32
<li filter-name="{{ $filter->name }}"
4-
filter-type="{{ $filter->type }}"
3+
filter-type="{{ $filter->type }}"
4+
filter-key="{{ $filter->key }}"
55
class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
66
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ $filter->label }} <span class="caret"></span></a>
77
<ul class="dropdown-menu">
@@ -41,7 +41,7 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
4141
@push('crud_list_scripts')
4242
<script>
4343
jQuery(document).ready(function($) {
44-
$("li.dropdown[filter-name={{ $filter->name }}] .dropdown-menu a").click(function(e) {
44+
$("li.dropdown[filter-key={{ $filter->key }}] .dropdown-menu a").click(function(e) {
4545
e.preventDefault();
4646
4747
var value = $(this).attr('dropdownkey');
@@ -62,21 +62,21 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
6262
// mark this filter as active in the navbar-filters
6363
// mark dropdown items active accordingly
6464
if (URI(new_url).hasQuery('{{ $filter->name }}', true)) {
65-
$("li[filter-name={{ $filter->name }}]").removeClass('active').addClass('active');
66-
$("li[filter-name={{ $filter->name }}] .dropdown-menu a").removeClass('active');
65+
$("li[filter-key={{ $filter->key }}]").removeClass('active').addClass('active');
66+
$("li[filter-key={{ $filter->key }}] .dropdown-menu a").removeClass('active');
6767
$(this).addClass('active');
6868
}
6969
else
7070
{
71-
$("li[filter-name={{ $filter->name }}]").trigger("filter:clear");
71+
$("li[filter-key={{ $filter->key }}]").trigger("filter:clear");
7272
}
7373
});
7474
7575
// clear filter event (used here and by the Remove all filters button)
76-
$("li[filter-name={{ $filter->name }}]").on('filter:clear', function(e) {
76+
$("li[filter-key={{ $filter->key }}]").on('filter:clear', function(e) {
7777
// console.log('dropdown filter cleared');
78-
$("li[filter-name={{ $filter->name }}]").removeClass('active');
79-
$("li[filter-name={{ $filter->name }}] .dropdown-menu a").removeClass('active');
78+
$("li[filter-key={{ $filter->key }}]").removeClass('active');
79+
$("li[filter-key={{ $filter->key }}] .dropdown-menu a").removeClass('active');
8080
});
8181
});
8282
</script>

src/resources/views/crud/filters/example.blade.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{{-- Example Backpack CRUD filter --}}
2-
32
<li filter-name="{{ $filter->name }}"
4-
filter-type="{{ $filter->type }}"
3+
filter-type="{{ $filter->type }}"
4+
filter-key="{{ $filter->key }}"
55
class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
66
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ $filter->label }} <span class="caret"></span></a>
77
<div class="dropdown-menu padding-10">
@@ -64,18 +64,18 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
6464
6565
// mark this filter as active in the navbar-filters
6666
if (URI(new_url).hasQuery('{{ $filter->name }}', true)) {
67-
$("li[filter-name={{ $filter->name }}]").removeClass('active').addClass('active');
67+
$("li[filter-key={{ $filter->key }}]").removeClass('active').addClass('active');
6868
}
6969
else
7070
{
71-
$("li[filter-name={{ $filter->name }}]").trigger("filter:clear");
71+
$("li[filter-key={{ $filter->key }}]").trigger("filter:clear");
7272
}
7373
});
7474
7575
// clear filter event (used here and by the Remove all filters button)
76-
$("li[filter-name={{ $filter->name }}]").on('filter:clear', function(e) {
76+
$("li[filter-key={{ $filter->key }}]").on('filter:clear', function(e) {
7777
// console.log('dropdown filter cleared');
78-
$("li[filter-name={{ $filter->name }}]").removeClass('active');
78+
$("li[filter-key={{ $filter->key }}]").removeClass('active');
7979
});
8080
});
8181
</script>

src/resources/views/crud/filters/range.blade.php

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{{-- Example Backpack CRUD filter --}}
22
<li filter-name="{{ $filter->name }}"
3-
filter-type="{{ $filter->type }}"
3+
filter-type="{{ $filter->type }}"
4+
filter-key="{{ $filter->key }}"
45
class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
56
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ $filter->label }} <span class="caret"></span></a>
67
<div class="dropdown-menu p-0">
@@ -38,7 +39,7 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
3839
placeholder = "max value"
3940
@endif
4041
>
41-
<div class="input-group-append range-filter-{{ $filter->name }}-clear-button">
42+
<div class="input-group-append range-filter-{{ $filter->key }}-clear-button">
4243
<a class="input-group-text" href=""><i class="la la-times"></i></a>
4344
</div>
4445
</div>
@@ -74,10 +75,10 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
7475
@push('crud_list_scripts')
7576
<script>
7677
jQuery(document).ready(function($) {
77-
$("li[filter-name={{ $filter->name }}] .from, li[filter-name={{ $filter->name }}] .to").change(function(e) {
78+
$("li[filter-key={{ $filter->key }}] .from, li[filter-key={{ $filter->key }}] .to").change(function(e) {
7879
e.preventDefault();
79-
var from = $("li[filter-name={{ $filter->name }}] .from").val();
80-
var to = $("li[filter-name={{ $filter->name }}] .to").val();
80+
var from = $("li[filter-key={{ $filter->key }}] .from").val();
81+
var to = $("li[filter-key={{ $filter->key }}] .to").val();
8182
if (from || to) {
8283
var range = {
8384
'from': from,
@@ -104,22 +105,22 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
104105
105106
// mark this filter as active in the navbar-filters
106107
if (URI(new_url).hasQuery('{{ $filter->name }}', true)) {
107-
$('li[filter-name={{ $filter->name }}]').removeClass('active').addClass('active');
108+
$('li[filter-key={{ $filter->key }}]').removeClass('active').addClass('active');
108109
}
109110
});
110111
111-
$('li[filter-name={{ $filter->name }}]').on('filter:clear', function(e) {
112-
$('li[filter-name={{ $filter->name }}]').removeClass('active');
113-
$("li[filter-name={{ $filter->name }}] .from").val("");
114-
$("li[filter-name={{ $filter->name }}] .to").val("");
115-
$("li[filter-name={{ $filter->name }}] .to").trigger('change');
112+
$('li[filter-key={{ $filter->key }}]').on('filter:clear', function(e) {
113+
$('li[filter-key={{ $filter->key }}]').removeClass('active');
114+
$("li[filter-key={{ $filter->key }}] .from").val("");
115+
$("li[filter-key={{ $filter->key }}] .to").val("");
116+
$("li[filter-key={{ $filter->key }}] .to").trigger('change');
116117
});
117118
118119
// range clear button
119-
$(".range-filter-{{ $filter->name }}-clear-button").click(function(e) {
120+
$(".range-filter-{{ $filter->key }}-clear-button").click(function(e) {
120121
e.preventDefault();
121122
122-
$('li[filter-name={{ $filter->name }}]').trigger('filter:clear');
123+
$('li[filter-name={{ $filter->key }}]').trigger('filter:clear');
123124
})
124125
125126
});

src/resources/views/crud/filters/select2.blade.php

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{{-- Select2 Backpack CRUD filter --}}
2-
32
<li filter-name="{{ $filter->name }}"
4-
filter-type="{{ $filter->type }}"
3+
filter-type="{{ $filter->type }}"
4+
filter-key="{{ $filter->key }}"
55
class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
66
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ $filter->label }} <span class="caret"></span></a>
77
<div class="dropdown-menu p-0">
88
<div class="form-group backpack-filter mb-0">
9-
<select id="filter_{{ $filter->name }}" name="filter_{{ $filter->name }}" class="form-control input-sm select2" data-filter-type="select2" data-filter-name="{{ $filter->name }}" placeholder="{{ $filter->placeholder }}">
9+
<select id="filter_{{ $filter->key }}" name="filter_{{ $filter->key }}" data-filter-key="{{ $filter->key }}" class="form-control input-sm select2" data-filter-type="select2" data-filter-name="{{ $filter->name }}" placeholder="{{ $filter->placeholder }}">
1010
<option value="">-</option>
1111
@if (is_array($filter->values) && count($filter->values))
1212
@foreach($filter->values as $key => $value)
@@ -75,6 +75,7 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
7575
// trigger select2 for each untriggered select2 box
7676
$('select[data-filter-type=select2]').not('[data-filter-enabled]').each(function () {
7777
var filterName = $(this).attr('data-filter-name');
78+
var filter_key = $(this).attr('data-filter-key');
7879
var element = $(this);
7980
8081
$(this).attr('data-filter-enabled', 'true');
@@ -105,25 +106,25 @@ class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
105106
106107
// mark this filter as active in the navbar-filters
107108
if (URI(new_url).hasQuery(parameter, true)) {
108-
$("li[filter-name="+parameter+"]").removeClass('active').addClass('active');
109+
$("li[filter-key="+filter_key+"]").removeClass('active').addClass('active');
109110
}
110111
else
111112
{
112-
$("li[filter-name="+parameter+"]").removeClass("active");
113-
$("li[filter-name="+parameter+"]").find('.dropdown-menu').removeClass("show");
113+
$("li[filter-key="+filter_key+"]").removeClass("active");
114+
$("li[filter-key="+filter_key+"]").find('.dropdown-menu').removeClass("show");
114115
}
115116
});
116117
117118
// when the dropdown is opened, autofocus on the select2
118-
$("li[filter-name="+filterName+"]").on('shown.bs.dropdown', function () {
119-
$('select[data-filter-name='+filterName+']').select2('open');
119+
$("li[filter-key="+filter_key+"]").on('shown.bs.dropdown', function () {
120+
$('select[data-filter-key='+filter_key+']').select2('open');
120121
});
121122
122123
// clear filter event (used here and by the Remove all filters button)
123-
$("li[filter-name="+filterName+"]").on('filter:clear', function(e) {
124+
$("li[filter-key="+filter_key+"]").on('filter:clear', function(e) {
124125
// console.log('select2 filter cleared');
125-
$("li[filter-name="+filterName+"]").removeClass('active');
126-
$('#filter_'+filterName).val(null).trigger('change');
126+
$("li[filter-key="+filter_key+"]").removeClass('active');
127+
$('#filter_'+filter_key).val(null).trigger('change');
127128
});
128129
});
129130
});

0 commit comments

Comments
 (0)