cm-admin 3.0.9 → 3.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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)
|