cm-admin 3.0.9 → 3.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/app/assets/javascripts/cm_admin/filters.js +143 -61
- data/app/assets/stylesheets/cm_admin/base/filters.scss +5 -2
- data/app/assets/stylesheets/cm_admin/base/form.scss +6 -6
- data/app/assets/stylesheets/cm_admin/components/_dropdown-popup.scss +23 -94
- data/app/assets/stylesheets/cm_admin/components/_status-tag.scss +2 -1
- data/app/assets/stylesheets/cm_admin/helpers/_variable.scss +1 -0
- data/lib/cm_admin/version.rb +1 -1
- data/lib/cm_admin/view_helpers/filter_helper.rb +22 -17
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff19f67d38436ec27a855939e767014dd4f5141ab77bab65a008214335bbc173
|
4
|
+
data.tar.gz: '085404b4f42517231f0afdf48ea0616a3333eb4a1492d82234bbdaebeb75c8fa'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a11b38ef299303693933134bea4bdbe55136f49890839e2628ef7fb9c7a4615913b492560a8bb5b2d09642aa914138604ae78349c19cabdf0dcd6cffd08ad25
|
7
|
+
data.tar.gz: 5cd4341e3125c9627bfb0dab6ad8a42acbbaeb91e27324c48bdccca80e0c30039b20178fffb689e549d482c4f5a977a9ccf2a2906c13e0c15f2508ff822758bd
|
data/Gemfile.lock
CHANGED
@@ -3,14 +3,16 @@ var currentRequest = null;
|
|
3
3
|
var CmFilter = {
|
4
4
|
// Generate or remove elements of the dropdown based on the search value.
|
5
5
|
dropdown_search: function(element) {
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
var
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
if(element.val()) {
|
7
|
+
var filter = element.val().toUpperCase();
|
8
|
+
var dropdownElements = element.parents(':nth(1)').find('.list-area').children();
|
9
|
+
for (var i = 0; i < dropdownElements.length; i++) {
|
10
|
+
var txtValue = $(dropdownElements[i]).children().text();
|
11
|
+
if (txtValue.toUpperCase().indexOf(filter) > -1) {
|
12
|
+
$(dropdownElements[i]).css('display', 'flex');
|
13
|
+
} else {
|
14
|
+
$(dropdownElements[i]).css('display', 'none');
|
15
|
+
}
|
14
16
|
}
|
15
17
|
}
|
16
18
|
}
|
@@ -63,6 +65,21 @@ var getFilteredData = function(filterType, filterValue, filterColumn=null, sortD
|
|
63
65
|
var availableParams = searchParams + '&' + filterParams
|
64
66
|
var queryString = getParamsAsObject(availableParams)
|
65
67
|
}
|
68
|
+
|
69
|
+
if (filterColumn) {
|
70
|
+
const filterChip = $(`[data-db-column="${filterColumn}"]`);
|
71
|
+
const filterName = filterChip.find('.filter-name');
|
72
|
+
|
73
|
+
if (isValueEmpty(filterValue)) {
|
74
|
+
if (!filterName.data('appended')) {
|
75
|
+
filterName.html(`${filterName.text()} is `);
|
76
|
+
filterName.data('appended', true);
|
77
|
+
}
|
78
|
+
} else {
|
79
|
+
filterName.html(filterName.text().replace(/\s*is $/, ''));
|
80
|
+
filterName.data('appended', false);
|
81
|
+
}
|
82
|
+
}
|
66
83
|
|
67
84
|
return currentRequest = $.ajax(url, {
|
68
85
|
type: 'GET',
|
@@ -100,6 +117,10 @@ var getFilteredData = function(filterType, filterValue, filterColumn=null, sortD
|
|
100
117
|
});
|
101
118
|
}
|
102
119
|
|
120
|
+
const isValueEmpty = function(value) {
|
121
|
+
return value !== undefined && value !== null && value !== '' && (!Array.isArray(value) || value.length !== 0);
|
122
|
+
}
|
123
|
+
|
103
124
|
$(document).on('change', '[data-behaviour="filter"]', function(e) {
|
104
125
|
var filterType = $(this).data('filter-type')
|
105
126
|
var filterColumn = $(this).data('db-column')
|
@@ -206,8 +227,6 @@ $(document).on('click', '[data-behaviour="filter-input"]', function(e) {
|
|
206
227
|
|
207
228
|
if (filterType == 'range') {
|
208
229
|
filterElement.parent().toggleClass('hidden')
|
209
|
-
} else if (filterType == 'multi_select') {
|
210
|
-
$(this).parent().children(':last').toggleClass('hidden')
|
211
230
|
} else if (filterType == 'date') {
|
212
231
|
filterElement.click()
|
213
232
|
}
|
@@ -219,12 +238,12 @@ $(document).on('click', '.clear-btn', function(e) {
|
|
219
238
|
})
|
220
239
|
|
221
240
|
var unhideClearFilterBtn = function(filterValue) {
|
222
|
-
if (filterValue) {
|
241
|
+
if (isValueEmpty(filterValue)) {
|
223
242
|
$('.clear-btn').removeClass('hidden')
|
224
243
|
}
|
225
244
|
}
|
226
245
|
|
227
|
-
$(document).on('click', '[data-behaviour="select-option"]
|
246
|
+
$(document).on('click', '[data-behaviour="select-option"] [data-behaviour="multi-select-filter-checkbox"]', function(e) {
|
228
247
|
$(this).prop('checked', !$(this).prop('checked'));
|
229
248
|
})
|
230
249
|
// Selecting options for single and multi select filters
|
@@ -255,9 +274,11 @@ $(document).on('click', '[data-behaviour="select-option"]', function(e) {
|
|
255
274
|
}
|
256
275
|
else if (filterType == 'multi_select') {
|
257
276
|
var parentChip = $(this).parent().siblings(':first')
|
258
|
-
var checkboxElement = $(this).find('
|
277
|
+
var checkboxElement = $(this).find('[data-behaviour="multi-select-filter-checkbox"]')
|
259
278
|
checkboxElement.prop('checked', !checkboxElement.prop('checked'))
|
260
|
-
var checkedCount = $(this).parent().find('
|
279
|
+
var checkedCount = $(this).parent().find('[data-behaviour="multi-select-filter-checkbox"]').filter(':checked').length
|
280
|
+
var filterValue = []
|
281
|
+
var filterValueText = []
|
261
282
|
if (checkboxElement.prop('checked')) {
|
262
283
|
var chip = $('<div class="chip"></div>')
|
263
284
|
var firstSpan = $('<span></span>').text($(this).text())
|
@@ -272,53 +293,42 @@ $(document).on('click', '[data-behaviour="select-option"]', function(e) {
|
|
272
293
|
}
|
273
294
|
}
|
274
295
|
}
|
296
|
+
$(this).parent().find('[data-behaviour="multi-select-filter-checkbox"]').filter(':checked').each(function() {
|
297
|
+
filterValue.push($(this).parent().data('value'))
|
298
|
+
filterValueText.push($(this).parent().text())
|
299
|
+
})
|
275
300
|
|
276
301
|
if (checkedCount > 0) {
|
277
|
-
parentChip.addClass('
|
302
|
+
parentChip.addClass('active')
|
278
303
|
$(this).parents(':nth(1)').children(':last').addClass('active')
|
279
304
|
} else {
|
280
|
-
parentChip.
|
305
|
+
parentChip.removeClass('active')
|
281
306
|
$(this).parents(':nth(1)').children(':last').removeClass('active')
|
282
307
|
}
|
283
|
-
|
284
|
-
});
|
285
|
-
|
286
|
-
// Apply button for multi select filters
|
287
|
-
$(document).on('click', '.apply-area', function(e) {
|
288
|
-
var filterInputElement = $(this).parents(':nth(3)').children(':first')
|
289
|
-
var filterType = filterInputElement.data('filter-type')
|
290
|
-
var filterColumn = filterInputElement.data('db-column')
|
291
|
-
var filterValue = []
|
292
|
-
var filterValueText = []
|
293
|
-
|
294
|
-
var selectFilterElement = $('[data-behaviour="select-option"][data-filter-type=' + filterType + '][data-db-column=' + filterColumn + ']')
|
295
|
-
var checkedElements = selectFilterElement.find('.cm-checkbox').filter(':checked')
|
296
|
-
|
297
|
-
if (checkedElements.length > 0) {
|
298
|
-
for(var i = 0; i < checkedElements.length; i++) {
|
299
|
-
filterValue.push($(checkedElements[i]).parent().data('value'))
|
300
|
-
filterValueText.push($(checkedElements[i]).parent().text())
|
301
|
-
}
|
302
|
-
|
308
|
+
// Truncate filter value logic
|
303
309
|
var truncatedFilterValue = filterValueText[0]
|
304
310
|
if (filterValue.length > 1) {
|
305
|
-
truncatedFilterValue += ' + ' + (filterValue.length - 1)
|
311
|
+
truncatedFilterValue += ' + ' + (filterValue.length - 1);
|
312
|
+
}
|
313
|
+
// Update the filter input element with the truncated value
|
314
|
+
var filterInputElement = $(this).parents(':nth(4)').children(':first')
|
315
|
+
if (filterValue.length > 0) {
|
316
|
+
filterInputElement.children(':nth(1)').text(truncatedFilterValue)
|
317
|
+
filterInputElement.children(':last').removeClass('hidden')
|
318
|
+
} else {
|
319
|
+
filterInputElement.children(':nth(1)').text('')
|
320
|
+
filterInputElement.children(':last').addClass('hidden')
|
306
321
|
}
|
307
|
-
|
308
|
-
filterInputElement.children(':nth(1)').text(truncatedFilterValue)
|
309
|
-
filterInputElement.children(':last').removeClass('hidden')
|
310
|
-
selectFilterElement.parents(':nth(3)').addClass('hidden')
|
311
|
-
|
312
322
|
// Clear the search value post selection and regenerate the dropdown elements.
|
313
|
-
var searchInputElement = $(this).
|
323
|
+
var searchInputElement = $(this).parents(':nth(1)').children(':first').children(':last')
|
314
324
|
searchInputElement.val('')
|
315
325
|
CmFilter.dropdown_search(searchInputElement)
|
316
|
-
|
317
326
|
unhideClearFilterBtn(filterValue)
|
318
327
|
getFilteredData(filterType, filterValue, filterColumn)
|
319
328
|
}
|
320
329
|
});
|
321
330
|
|
331
|
+
|
322
332
|
// Remove single applied filter.
|
323
333
|
$(document).on('click', '.filter-chip-remove', function(e) {
|
324
334
|
var url = window.location.pathname
|
@@ -338,26 +348,30 @@ $(document).on('click', '.filter-chip-remove', function(e) {
|
|
338
348
|
});
|
339
349
|
|
340
350
|
$(document).on('click', '[data-behaviour="selected-chip"]', function(e) {
|
341
|
-
var filterType = $(this).parents(':nth(5)').find('.filter-chip').data('filter-type')
|
342
|
-
var filterColumn = $(this).parents(':nth(5)').find('.filter-chip').data('db-column')
|
343
|
-
var filterValue =
|
344
|
-
var
|
345
|
-
$(
|
346
|
-
|
347
|
-
for(var i = 0; i < selectElement.length; i++) {
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
351
|
+
var filterType = $(this).parents(':nth(5)').find('.filter-chip').data('filter-type');
|
352
|
+
var filterColumn = $(this).parents(':nth(5)').find('.filter-chip').data('db-column');
|
353
|
+
var filterValue = [];
|
354
|
+
var filterValueText = $(this).siblings().text();
|
355
|
+
var selectElement = $('[data-behaviour="select-option"][data-filter-type=' + filterType + '][data-db-column=' + filterColumn + ']');
|
356
|
+
$(this).parent().remove();
|
357
|
+
for (var i = 0; i < selectElement.length; i++) {
|
358
|
+
if ($(selectElement[i]).text() == filterValueText) {
|
359
|
+
var checkboxElement = $(selectElement[i]).find('[data-behaviour="multi-select-filter-checkbox"]');
|
360
|
+
checkboxElement.prop('checked', false); // Uncheck the box
|
361
|
+
break;
|
362
|
+
}
|
353
363
|
}
|
354
|
-
|
355
|
-
|
364
|
+
selectElement.find('[data-behaviour="multi-select-filter-checkbox"]').filter(':checked').each(function() {
|
365
|
+
filterValue.push($(this).parent().data('value'));
|
366
|
+
});
|
367
|
+
var checkedCount = selectElement.find('[data-behaviour="multi-select-filter-checkbox"]').filter(':checked').length;
|
356
368
|
if (checkedCount < 1) {
|
357
|
-
|
358
|
-
|
369
|
+
selectElement.parent().siblings(':first').removeClass('active');
|
370
|
+
selectElement.parent().siblings(':last').removeClass('active');
|
359
371
|
}
|
360
|
-
|
372
|
+
unhideClearFilterBtn(filterValue);
|
373
|
+
getFilteredData(filterType, filterValue, filterColumn);
|
374
|
+
});
|
361
375
|
|
362
376
|
$(document).on("change", '[data-behaviour="sort-column"], [data-behaviour="sort-direction"]', function (e) {
|
363
377
|
getFilteredData(null, null, null, true);
|
@@ -381,3 +395,71 @@ $(document).on("click", '[data-behaviour="reset-sort"]', function (e) {
|
|
381
395
|
}
|
382
396
|
});
|
383
397
|
});
|
398
|
+
|
399
|
+
$(document).on(
|
400
|
+
"click",
|
401
|
+
'[data-behaviour="multi-select-filter-apply"]',
|
402
|
+
function (e) {
|
403
|
+
$(this).parent();
|
404
|
+
$(this).closest('[data-behaviour="multi-select-filter-dropdown"]').removeClass('show');
|
405
|
+
$(this).closest('[data-behaviour="multi-select-filter-wrapper"]').find('[data-behaviour="filter-input"]').removeClass('show');
|
406
|
+
}
|
407
|
+
);
|
408
|
+
|
409
|
+
$(document).on(
|
410
|
+
"click",
|
411
|
+
'[data-behaviour="multi-select-filter-clear"]',
|
412
|
+
function (e) {
|
413
|
+
const dropdown = $(this).closest('[data-behaviour="multi-select-filter-dropdown"]');
|
414
|
+
|
415
|
+
const filterInputElement = $(this).parents(':nth(4)').children(':first')
|
416
|
+
filterInputElement.children(':nth(1)').text('')
|
417
|
+
|
418
|
+
const checkboxes = dropdown.find('[data-behaviour="multi-select-filter-checkbox"]:checked');
|
419
|
+
checkboxes.each(function() {
|
420
|
+
this.checked = false;
|
421
|
+
});
|
422
|
+
|
423
|
+
const chips = dropdown.find('.chip');
|
424
|
+
chips.each(function() {
|
425
|
+
$(this).remove();
|
426
|
+
});
|
427
|
+
|
428
|
+
const chipsArea = dropdown.find('[data-behaviour="multi-select-filter-chips-area"]');
|
429
|
+
chipsArea.removeClass('active');
|
430
|
+
|
431
|
+
const filter_element = dropdown.prev();
|
432
|
+
const db_column = filter_element.attr('data-db-column');
|
433
|
+
getFilteredData(filter_element.attr('data-filter-type'), [], db_column);
|
434
|
+
}
|
435
|
+
);
|
436
|
+
|
437
|
+
const initializeFilterLabels = function(filterParams) {
|
438
|
+
Object.keys(filterParams).forEach(filterType => {
|
439
|
+
const filterObj = filterParams[filterType];
|
440
|
+
Object.keys(filterObj).forEach(filterColumn => {
|
441
|
+
const filterChip = $(`[data-db-column="${filterColumn}"]`);
|
442
|
+
const filterName = filterChip.find('.filter-name');
|
443
|
+
|
444
|
+
// Append "is" to indicate active filter
|
445
|
+
if (filterName.length && !filterName.text().endsWith('is')) {
|
446
|
+
filterName.html(`${filterName.text()} is `);
|
447
|
+
filterName.data('appended', true);
|
448
|
+
}
|
449
|
+
});
|
450
|
+
});
|
451
|
+
};
|
452
|
+
|
453
|
+
$(document).ready(function() {
|
454
|
+
const initialFilterParams = getParamsAsObject(window.location.search);
|
455
|
+
initializeFilterLabels(initialFilterParams.filters || {});
|
456
|
+
});
|
457
|
+
|
458
|
+
$(document).ready(function() {
|
459
|
+
const chipsAreas = document.querySelectorAll('[data-behaviour="multi-select-filter-chips-area"]');
|
460
|
+
chipsAreas.forEach(function(chipsArea) {
|
461
|
+
chipsArea.classList.add('active');
|
462
|
+
});
|
463
|
+
});
|
464
|
+
|
465
|
+
|
@@ -4,6 +4,7 @@
|
|
4
4
|
z-index: 1;
|
5
5
|
&__inner {
|
6
6
|
@include flex(row, flex-start, center, wrap);
|
7
|
+
gap: 8px;
|
7
8
|
.filter-chips-wrapper {
|
8
9
|
.filter-chip {
|
9
10
|
margin-left: 16px;
|
@@ -76,7 +77,8 @@
|
|
76
77
|
&:focus {
|
77
78
|
border-color: $brand-color !important;
|
78
79
|
outline: 0 !important;
|
79
|
-
box-shadow:
|
80
|
+
box-shadow:
|
81
|
+
inset 0 1px 1px rgba(0, 0, 0, 0.075),
|
80
82
|
0 0 8px rgba(102, 175, 233, 0.6) !important;
|
81
83
|
}
|
82
84
|
}
|
@@ -94,7 +96,8 @@
|
|
94
96
|
&:focus {
|
95
97
|
border-color: $brand-color;
|
96
98
|
outline: 0;
|
97
|
-
box-shadow:
|
99
|
+
box-shadow:
|
100
|
+
inset 0 1px 1px rgba(0, 0, 0, 0.075),
|
98
101
|
0 0 8px rgba(102, 175, 233, 0.6);
|
99
102
|
}
|
100
103
|
.select2-selection__rendered {
|
@@ -61,18 +61,18 @@
|
|
61
61
|
}
|
62
62
|
|
63
63
|
//upload attachment style
|
64
|
-
[data-section="destroy-attachment"] {
|
65
|
-
margin-top: 4px;
|
66
|
-
}
|
67
64
|
[data-section="image-preview"] {
|
68
65
|
[data-section="destroy-attachment"] {
|
69
66
|
background-color: $grey-lightest-clr;
|
70
67
|
mix-blend-mode: multiply;
|
71
68
|
padding: 8px;
|
72
69
|
margin-bottom: 5px;
|
73
|
-
|
74
|
-
|
75
|
-
|
70
|
+
display: flex;
|
71
|
+
justify-content: space-between;
|
72
|
+
align-items: center;
|
73
|
+
.btn-link {
|
74
|
+
width: 125px;
|
75
|
+
justify-content: start !important;
|
76
76
|
}
|
77
77
|
}
|
78
78
|
}
|
@@ -2,48 +2,34 @@
|
|
2
2
|
|
3
3
|
.dropdown-popup {
|
4
4
|
border: none !important;
|
5
|
-
|
6
|
-
position: absolute;
|
7
|
-
min-width: 256px;
|
8
|
-
height: 56px;
|
9
|
-
padding: 8px;
|
10
|
-
background: $white;
|
11
|
-
border: 1px solid $grey-lighter-clr;
|
12
|
-
box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.16);
|
13
|
-
border-radius: $radius-4;
|
14
|
-
}
|
5
|
+
|
15
6
|
.popup-inner {
|
16
7
|
position: relative;
|
17
8
|
min-width: 240px;
|
18
9
|
margin: 0 auto;
|
19
10
|
background-color: $white;
|
20
|
-
border: 1px solid
|
11
|
+
border: 1px solid $dropdown-border-clr;
|
21
12
|
box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.16);
|
22
13
|
border-radius: $radius-4;
|
14
|
+
|
23
15
|
.search-area {
|
24
16
|
input {
|
25
|
-
|
26
|
-
min-height: 40px;
|
27
|
-
padding: 9px 16px;
|
28
|
-
font-size: $t4-text;
|
17
|
+
@extend .form-control;
|
29
18
|
border: none;
|
30
|
-
border-radius: 4px 4px 0 0;
|
31
19
|
&::placeholder {
|
32
|
-
|
33
|
-
}
|
34
|
-
&:focus {
|
35
|
-
outline: none;
|
36
|
-
border: 1px solid $brand-color;
|
20
|
+
font-size: $t4-text;
|
37
21
|
}
|
38
22
|
}
|
39
23
|
}
|
40
|
-
|
41
|
-
|
42
|
-
flex
|
43
|
-
|
24
|
+
|
25
|
+
.chips-area {
|
26
|
+
@include flex($wrap: wrap);
|
27
|
+
&.active {
|
28
|
+
padding: 8px 16px;
|
29
|
+
border-bottom: 1px solid $dropdown-border-clr;
|
30
|
+
}
|
44
31
|
.chip {
|
45
|
-
|
46
|
-
align-items: center;
|
32
|
+
@extend .d-inline-flex, .align-items-center;
|
47
33
|
margin: 2px;
|
48
34
|
padding: 0 4px;
|
49
35
|
background: $grey-lighter-clr;
|
@@ -54,26 +40,18 @@
|
|
54
40
|
}
|
55
41
|
span:nth-child(2) {
|
56
42
|
@include font($size: 10px, $color: $ink-lightest-clr);
|
57
|
-
margin
|
43
|
+
margin: 4px 0 0 4px;
|
58
44
|
cursor: pointer;
|
59
45
|
}
|
60
46
|
}
|
61
|
-
input {
|
62
|
-
border: none;
|
63
|
-
font-size: $t4-text;
|
64
|
-
margin: 2px;
|
65
|
-
&:focus {
|
66
|
-
outline: 3px auto rgba(47, 128, 237, 0.3);
|
67
|
-
}
|
68
|
-
}
|
69
47
|
}
|
48
|
+
|
70
49
|
.list-area {
|
71
50
|
max-height: 240px;
|
72
51
|
overflow-y: auto;
|
73
|
-
border-top: 1px solid
|
52
|
+
border-top: 1px solid $dropdown-border-clr;
|
74
53
|
.list-item {
|
75
|
-
|
76
|
-
align-items: center;
|
54
|
+
@include flex($align: center);
|
77
55
|
padding: 9px 16px;
|
78
56
|
@include font($size: $t4-text, $color: $primary-text-clr);
|
79
57
|
line-height: 22px;
|
@@ -88,65 +66,16 @@
|
|
88
66
|
}
|
89
67
|
}
|
90
68
|
.selected {
|
91
|
-
color: $brand-color;
|
92
|
-
}
|
93
|
-
}
|
94
|
-
.apply-area {
|
95
|
-
@include font($size: $t4-text, $color: $ink-lightest-clr, $weight: 600);
|
96
|
-
line-height: 22px;
|
97
|
-
text-align: center;
|
98
|
-
padding: 9px 16px;
|
99
|
-
box-shadow: inset 0px 1px 0px rgba(148, 151, 155, 0.15);
|
100
|
-
cursor: not-allowed;
|
101
|
-
&.active {
|
102
|
-
cursor: pointer;
|
103
69
|
color: $blue-regular-clr;
|
104
70
|
}
|
105
71
|
}
|
106
|
-
}
|
107
|
-
}
|
108
|
-
|
109
|
-
.applied-select {
|
110
|
-
margin-left: 20rem;
|
111
|
-
}
|
112
72
|
|
113
|
-
.
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
border-radius: $radius-4;
|
120
|
-
z-index: 1;
|
121
|
-
.column-option {
|
122
|
-
.option-title {
|
123
|
-
@include font($size: $t6-text, $color: $ink-lightest-clr, $weight: 600);
|
124
|
-
line-height: 16px;
|
125
|
-
text-transform: uppercase;
|
126
|
-
margin: 0;
|
127
|
-
padding: 18px 16px 9px;
|
128
|
-
}
|
129
|
-
.option-action {
|
130
|
-
padding: 9px 16px;
|
131
|
-
cursor: pointer;
|
132
|
-
@include transition-linear;
|
133
|
-
&:hover {
|
134
|
-
background-color: $grey-lighter-clr;
|
135
|
-
}
|
136
|
-
.action-icon {
|
137
|
-
font-size: $t4-text;
|
138
|
-
}
|
139
|
-
.action-name {
|
140
|
-
@include font($size: $t4-text, $color: $primary-text-clr);
|
141
|
-
line-height: 22px;
|
142
|
-
margin-left: 8px;
|
143
|
-
}
|
144
|
-
}
|
145
|
-
.cannot-sort {
|
146
|
-
@include font($size: $t6-text, $color: $ink-lightest-clr);
|
147
|
-
line-height: 16px;
|
148
|
-
margin-bottom: 9px;
|
149
|
-
padding: 0 16px;
|
73
|
+
.popup-footer {
|
74
|
+
display: grid;
|
75
|
+
grid-template-columns: 50px 1fr;
|
76
|
+
grid-gap: 8px;
|
77
|
+
padding: 8px 16px;
|
78
|
+
background-color: $grey-lightest-clr;
|
150
79
|
}
|
151
80
|
}
|
152
81
|
}
|
data/lib/cm_admin/version.rb
CHANGED
@@ -27,7 +27,7 @@ module CmAdmin
|
|
27
27
|
concat(content_tag(:div, class: 'popup-base') do
|
28
28
|
concat(content_tag(:div, class: 'popup-inner') do
|
29
29
|
concat(content_tag(:div, class: 'search-area') do
|
30
|
-
concat tag.input placeholder: 'Search
|
30
|
+
concat tag.input placeholder: 'Search', data: { behaviour: 'dropdown-filter-search' }
|
31
31
|
end)
|
32
32
|
concat(content_tag(:div, class: 'list-area') do
|
33
33
|
filters.each do |filter|
|
@@ -67,14 +67,14 @@ module CmAdmin
|
|
67
67
|
|
68
68
|
def filter_chip(value, filter)
|
69
69
|
data_hash = { behaviour: 'filter-input', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}" }
|
70
|
-
data_hash.merge!(bs_toggle: 'dropdown') if filter.filter_type.to_s
|
70
|
+
data_hash.merge!(bs_toggle: 'dropdown', bs_auto_close: 'outside') if ['single_select', 'multi_select'].include?(filter.filter_type.to_s)
|
71
71
|
|
72
72
|
if value && filter.filter_type.to_s.eql?('multi_select')
|
73
73
|
truncated_value = value[0]
|
74
|
-
truncated_value += " + #{value.size - 1}
|
74
|
+
truncated_value += " + #{value.size - 1}" if value.size > 1
|
75
75
|
end
|
76
76
|
concat(content_tag(:div, class: "filter-chip #{filter.filter_type.to_s.eql?('single_select') ? 'dropdown' : ''}", data: data_hash) do
|
77
|
-
concat tag.span "#{filter.display_name}
|
77
|
+
concat tag.span "#{filter.display_name} ", class: 'filter-name'
|
78
78
|
concat tag.span "#{filter.filter_type.to_s.eql?('multi_select') ? truncated_value : value}"
|
79
79
|
concat(content_tag(:div, class: "filter-chip-remove #{value ? '' : 'hidden'}") do
|
80
80
|
tag.i class: 'fa fa-times bolder'
|
@@ -84,7 +84,7 @@ module CmAdmin
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def add_search_filter(filter)
|
87
|
-
tag.div class: 'filter-search
|
87
|
+
tag.div class: 'filter-search' do
|
88
88
|
concat(content_tag(:div, class: 'input-group input-group-sm') do
|
89
89
|
concat(content_tag(:span, class: 'input-group-text') do
|
90
90
|
tag.i class: 'fa fa-search'
|
@@ -97,7 +97,7 @@ module CmAdmin
|
|
97
97
|
def add_range_filter(filter)
|
98
98
|
value = params.dig(:filters, :range, :"#{filter.db_column_name}")
|
99
99
|
is_active = value || filter.active_by_default
|
100
|
-
concat(content_tag(:div, class: "position-relative
|
100
|
+
concat(content_tag(:div, class: "position-relative #{is_active ? '' : 'hidden'}") do
|
101
101
|
concat filter_chip(value, filter)
|
102
102
|
|
103
103
|
concat(content_tag(:div, class: 'position-absolute mt-2 range-container hidden') do
|
@@ -111,7 +111,7 @@ module CmAdmin
|
|
111
111
|
def add_date_filter(filter)
|
112
112
|
value = params.dig(:filters, :date, :"#{filter.db_column_name}")
|
113
113
|
is_active = value || filter.active_by_default
|
114
|
-
concat(content_tag(:div, class: "position-relative
|
114
|
+
concat(content_tag(:div, class: "position-relative #{is_active ? '' : 'hidden'}") do
|
115
115
|
concat filter_chip(value, filter)
|
116
116
|
|
117
117
|
concat(content_tag(:div, class: 'date-filter-wrapper w-100') do
|
@@ -131,7 +131,7 @@ module CmAdmin
|
|
131
131
|
else
|
132
132
|
[]
|
133
133
|
end
|
134
|
-
concat(content_tag(:div, class: "position-relative
|
134
|
+
concat(content_tag(:div, class: "position-relative #{is_active ? '' : 'hidden'}") do
|
135
135
|
selected_value_text = if value && select_options[0].class == Array
|
136
136
|
select_options.map { |collection| collection[0] if collection[1].to_s.eql?(value) }.compact.join(', ')
|
137
137
|
else
|
@@ -143,7 +143,7 @@ module CmAdmin
|
|
143
143
|
concat(content_tag(:div, class: 'popup-base') do
|
144
144
|
concat(content_tag(:div, class: 'popup-inner') do
|
145
145
|
concat(content_tag(:div, class: 'search-area') do
|
146
|
-
concat tag.input placeholder: "
|
146
|
+
concat tag.input placeholder: "Search", data: { behaviour: 'dropdown-filter-search' }
|
147
147
|
end)
|
148
148
|
concat(content_tag(:div, class: 'list-area') do
|
149
149
|
select_options.each do |val|
|
@@ -184,13 +184,13 @@ module CmAdmin
|
|
184
184
|
value_mapped_text = value
|
185
185
|
end
|
186
186
|
|
187
|
-
concat(content_tag(:div, class: "position-relative
|
187
|
+
concat(content_tag(:div, class: "position-relative #{is_active ? '' : 'hidden'}", data: { behaviour: 'multi-select-filter-wrapper' }) do
|
188
188
|
concat filter_chip(value_mapped_text, filter)
|
189
189
|
|
190
|
-
concat(content_tag(:div, class: '
|
190
|
+
concat(content_tag(:div, class: 'dropdown-menu dropdown-popup', data: { behaviour: 'multi-select-filter-dropdown' }) do
|
191
191
|
concat(content_tag(:div, class: 'popup-base') do
|
192
192
|
concat(content_tag(:div, class: 'popup-inner') do
|
193
|
-
concat(content_tag(:div, class:
|
193
|
+
concat(content_tag(:div, class: 'chips-area', data: { behaviour: 'multi-select-filter-chips-area' }) do
|
194
194
|
if value_mapped_text
|
195
195
|
value_mapped_text.each do |val|
|
196
196
|
concat(content_tag(:div, class: 'chip') do
|
@@ -201,7 +201,9 @@ module CmAdmin
|
|
201
201
|
end)
|
202
202
|
end
|
203
203
|
end
|
204
|
-
|
204
|
+
end)
|
205
|
+
concat(content_tag(:div, class: 'search-area') do
|
206
|
+
concat tag.input placeholder: "Search", data: { behaviour: 'dropdown-filter-search' }
|
205
207
|
end)
|
206
208
|
concat(content_tag(:div, class: 'list-area') do
|
207
209
|
select_options.each do |val|
|
@@ -211,13 +213,16 @@ module CmAdmin
|
|
211
213
|
elsif val.class.eql?(String)
|
212
214
|
filter_value = filter_text = val
|
213
215
|
end
|
214
|
-
concat(content_tag(:div, class: "
|
215
|
-
concat tag.input class: '
|
216
|
-
concat tag.label filter_text.to_s.titleize, class: 'pointer'
|
216
|
+
concat(content_tag(:div, class: "list-item pointer", data: { behaviour: 'select-option', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}", value: filter_value }) do
|
217
|
+
concat tag.input class: 'form-check-input m-0 pointer', type: 'checkbox', checked: value ? value.include?(filter_value.to_s) : false, data: { behaviour: 'multi-select-filter-checkbox', value: filter_value }
|
218
|
+
concat tag.label filter_text.to_s.titleize, class: 'form-check-label pointer'
|
217
219
|
end)
|
218
220
|
end
|
219
221
|
end)
|
220
|
-
concat
|
222
|
+
concat(content_tag(:div, class: 'popup-footer') do
|
223
|
+
concat tag.button 'Clear', class: 'btn-ghost', data: { behaviour: 'multi-select-filter-clear' }
|
224
|
+
concat tag.button 'Apply', class: 'btn-primary', data: { behaviour: 'multi-select-filter-apply' }
|
225
|
+
end)
|
221
226
|
end)
|
222
227
|
end)
|
223
228
|
end)
|