|
123 | 123 | specificHtml = renderTextInput(parameter, name);
|
124 | 124 | break;
|
125 | 125 | case dateRange:
|
126 |
| - specificHtml = renderDateRange(); |
| 126 | + specificHtml = renderDateRange(parameter); |
127 | 127 | break;
|
128 | 128 | case multiCheckBoxes:
|
129 | 129 | specificHtml = renderMultiSelect(parameter, name);
|
|
150 | 150 | }
|
151 | 151 |
|
152 | 152 | function renderTextInput(parameter, name){
|
153 |
| - return '<input style="margin: 5px 0" class="form-control" placeholder="'+ (parameter.placeholder || name) + '">'; |
| 153 | + var value = ''; |
| 154 | + if (filterModal.selectedFilterParameters[parameter.attributeName]){ |
| 155 | + value = filterModal.selectedFilterParameters[parameter.attributeName].values[0].value |
| 156 | + } |
| 157 | + |
| 158 | + return '<input style="margin: 5px 0" class="form-control text-input-js" value="'+value+'" placeholder="'+ (parameter.placeholder || name) + '">'; |
154 | 159 | }
|
155 | 160 |
|
156 |
| - function renderDateRange(){ |
| 161 | + function renderDateRange(parameter){ |
| 162 | + |
| 163 | + var value = ''; |
| 164 | + if (filterModal.selectedFilterParameters[parameter.attributeName]){ |
| 165 | + value = filterModal.selectedFilterParameters[parameter.attributeName].values[0].value |
| 166 | + } |
| 167 | + |
157 | 168 | return '<div id="daterange" style="float: left; margin: 5px 0;" class="selectbox active">' +
|
158 | 169 | '<i class="fa fa-calendar"></i>' +
|
159 |
| - '<input type="text" data-time-picker="true" name="'+dateRangeName+'" style="width: 170px; margin-left: 5px;">' + |
| 170 | + '<input type="text" data-time-picker="true" value="'+value+'" name="'+dateRangeName+'" style="width: 170px; margin-left: 5px;">' + |
160 | 171 | '</div>';
|
161 | 172 | }
|
162 | 173 |
|
|
218 | 229 | function renderRateRangeIfNeeded(){
|
219 | 230 | var dateRangeElement = $('input[name="'+dateRangeName+'"]');
|
220 | 231 | if (dateRangeElement.length >0 ) {
|
221 |
| - var dateRange = dateRangeElement.daterangepicker( |
222 |
| - { |
223 |
| - format: filterModal.settings.dateFormat, |
224 |
| - startDate: moment().subtract(7, 'days').format(filterModal.settings.dateFormat), |
225 |
| - endDate: moment().format(filterModal.settings.dateFormat) |
226 |
| - }, |
227 |
| - function (start, end, label) { |
228 |
| - console.log('change'); |
229 |
| - } |
230 |
| - ); |
231 |
| - |
232 |
| - if (filterModal.startTime){ |
233 |
| - dateRange.data('daterangepicker').setStartDate(filterModal.startTime); |
234 |
| - } |
235 |
| - |
236 |
| - if (filterModal.endTime){ |
237 |
| - dateRange.data('daterangepicker').setEndDate(filterModal.endTime); |
| 232 | + function cb(start, end) { |
| 233 | + $('input[name="'+dateRangeName+'"]').html(start.format(filterModal.settings.dateFormat) + ' - ' + end.format(filterModal.settings.dateFormat)); |
238 | 234 | }
|
| 235 | + cb(moment().subtract(29, 'days'), moment().add(1, 'days')); |
| 236 | + |
| 237 | + dateRangeElement.daterangepicker({ |
| 238 | + format: filterModal.settings.dateFormat, |
| 239 | + ranges: { |
| 240 | + 'Today': [moment(), moment().add(1, 'days')], |
| 241 | + 'Yesterday': [moment().subtract(1, 'days'), moment()], |
| 242 | + 'Last 7 Days': [moment().subtract(6, 'days'), moment().add(1, 'days')], |
| 243 | + 'Last 30 Days': [moment().subtract(29, 'days'), moment().add(1, 'days')], |
| 244 | + 'This Month': [moment().startOf('month'), moment().endOf('month')], |
| 245 | + 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')], |
| 246 | + 'Last 3 Months': [moment().subtract(3, 'month').startOf('month'), moment().add(1, 'days')] |
| 247 | + } |
| 248 | + }, cb); |
239 | 249 | }
|
240 | 250 | }
|
241 | 251 |
|
|
244 | 254 |
|
245 | 255 | //should not render filter if is already selected
|
246 | 256 | function shouldNotRenderParameter(parameter){
|
| 257 | + if ($.inArray(parameter.type, [dateRange, textType]) > -1){ |
| 258 | + return false |
| 259 | + } |
| 260 | + |
247 | 261 | return undefined != filterModal.selectedFilterParameters[parameter.attributeName];
|
248 | 262 | }
|
249 | 263 |
|
|
262 | 276 | showMoreModelName = calcShowMoreModelName(selectedParameter.attributeHumaneName);
|
263 | 277 | selectedValue = (1 < selectedParameter.values.length) ? '(' + selectedParameter.values.length + ')' : selectedParameter.values[0].name;
|
264 | 278 |
|
265 |
| - html += '<div class="selectbox pull-left active" data-attribute="'+ serverName +'" ' + |
266 |
| - 'style="padding: 10px; margin-right: 10px; margin-bottom: 10px; ;border: 1px solid '+filterModal.settings.borderColor+'">' + |
267 |
| - '<a data-toggle="modal" data-target="#'+showMoreModelName+'">'+ humanParameterName + ': '+ selectedValue +'</a>' + |
268 |
| - '<button type="button" class="close remove-filter" aria-label="Close" style="padding: 0 10px 0 15px; line-height: 0.75">' + |
269 |
| - '<span aria-hidden="true">×</span></button>' + |
270 |
| - '</div>'; |
271 |
| - |
272 | 279 | parameter = filterModal.filters[serverName];
|
273 |
| - filteredOptions = filterOptionsByDateAndRelatedToFilters(parameter); |
274 |
| - html += showMoreHiddenPopUpHtml(parameter.name, showMoreModelName, parameter, filteredOptions); |
| 280 | + // errors on date range |
| 281 | + if (parameter) { |
| 282 | + |
| 283 | + html += '<div class="selectbox pull-left active" data-attribute="'+ serverName +'" ' + |
| 284 | + 'style="padding: 10px; margin-right: 10px; margin-bottom: 10px; ;border: 1px solid '+filterModal.settings.borderColor+'">' + |
| 285 | + '<a data-toggle="modal" data-target="#'+showMoreModelName+'">'+ humanParameterName + ': '+ selectedValue +'</a>' + |
| 286 | + '<button type="button" class="close remove-filter" aria-label="Close" style="padding: 0 10px 0 15px; line-height: 0.75">' + |
| 287 | + '<span aria-hidden="true">×</span></button>' + |
| 288 | + '</div>'; |
| 289 | + |
| 290 | + filteredOptions = filterOptionsByDateAndRelatedToFilters(parameter); |
| 291 | + html += showMoreHiddenPopUpHtml(parameter.name, showMoreModelName, parameter, filteredOptions); |
| 292 | + } |
275 | 293 | });
|
276 | 294 |
|
277 | 295 | return html
|
|
391 | 409 | htmlForParameterOptions(parameter, filteredOptions) +
|
392 | 410 | '</div>' +
|
393 | 411 | '<div class="modal-footer">' +
|
394 |
| - '<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>' + |
| 412 | + '<button type="button" class="btn btn-default multi-popup-close-js" data-dismiss="modal">Close</button>' + |
395 | 413 | '<button type="button" class="btn btn-primary multi-popup-save-changes-js">Apply Changes</button>' +
|
396 | 414 | '</div>' +
|
397 | 415 | '</div><!-- /.modal-content -->'+
|
|
469 | 487 | bindMultiPopup();
|
470 | 488 | bindSingleClick();
|
471 | 489 | bindRemoveSelectedFilter();
|
| 490 | + bindMultiPopupClose(); |
472 | 491 | bindMultiSelectFromMain();
|
473 | 492 | bindChangeDate();
|
| 493 | + bindInputChange(); |
474 | 494 | bindExpandCollapse();
|
475 | 495 | bindBackButton();
|
476 | 496 | bindEnterButton();
|
477 | 497 |
|
478 | 498 | }
|
479 | 499 |
|
| 500 | + function bindInputChange(){ |
| 501 | + $('.text-input-js').keyup(function(){ |
| 502 | + addInputSelectedToDataModal($(this).closest('.select-parameter-box')) |
| 503 | + }) |
| 504 | + } |
| 505 | + |
480 | 506 | function bindMultiPopup(){
|
481 | 507 | $('.multi-popup-save-changes-js').on('click', function () {
|
482 | 508 | var popup = $(this).closest('.modal'),
|
|
486 | 512 | result = addMultiSelectedToDataModal(popup);
|
487 | 513 |
|
488 | 514 | if (0 < result.checked.length) {
|
489 |
| - //close the popup |
490 |
| - popup.modal('toggle'); |
| 515 | + popup.modal('hide'); |
| 516 | + $('body').removeClass('modal-open'); |
| 517 | + $('.modal-backdrop').remove(); |
491 | 518 |
|
492 | 519 | setTimeout(function(){
|
493 | 520 | //refresh the filter
|
|
500 | 527 | })
|
501 | 528 | }
|
502 | 529 |
|
| 530 | + function bindMultiPopupClose(){ |
| 531 | + $('.multi-popup-close-js').on('click', function () { |
| 532 | + var popup = $(this).closest('.modal'); |
| 533 | + |
| 534 | + //close the popup |
| 535 | + popup.modal('hide'); |
| 536 | + $('body').removeClass('modal-open'); |
| 537 | + $('.modal-backdrop').remove(); |
| 538 | + |
| 539 | + }) |
| 540 | + } |
| 541 | + |
503 | 542 | function bindMultiSelectFromMain(){
|
504 | 543 |
|
505 | 544 | $('.multi-apply-main-js').on('click', function () {
|
|
589 | 628 |
|
590 | 629 | $.each([textType, dateRange], function(_, inputType) {
|
591 | 630 | $('.select-parameter-box.' + inputType).each(function (_, selectBox) {
|
| 631 | + |
| 632 | + //TODO replace this with genericCollect |
592 | 633 | var serverParameterName = getAttributeBackendName(selectBox),
|
593 | 634 | humanParameterName = getAttributeHumanName(selectBox),
|
594 | 635 | searchFor = getSearchParameter(inputType);
|
|
612 | 653 | return $.extend(DoNotSaveThisInTheSelectedFiltered, filterModal.selectedFilterParameters)
|
613 | 654 | }
|
614 | 655 |
|
| 656 | + |
| 657 | + function genericCollect(selectBox, inputType) { |
| 658 | + var tempValues = [], |
| 659 | + DoNotSaveThisInTheSelectedFiltered = {}; |
| 660 | + |
| 661 | + var serverParameterName = getAttributeBackendName(selectBox), |
| 662 | + humanParameterName = getAttributeHumanName(selectBox), |
| 663 | + searchFor = getSearchParameter(inputType); |
| 664 | + |
| 665 | + //TODO - find a better way to collect the data |
| 666 | + $(selectBox).find(searchFor).each(function (_, inputElement) { |
| 667 | + var value = $(inputElement).val(); |
| 668 | + if (value) { |
| 669 | + tempValues.push({value: value}); // TODO pass also name here |
| 670 | + } |
| 671 | + }); |
| 672 | + if (0 < tempValues.length) { |
| 673 | + DoNotSaveThisInTheSelectedFiltered[serverParameterName] = {attributeHumaneName: humanParameterName, values: tempValues}; |
| 674 | + } |
| 675 | + |
| 676 | + return {value: DoNotSaveThisInTheSelectedFiltered[serverParameterName], serverParameterName: serverParameterName} |
| 677 | + } |
| 678 | + |
| 679 | + |
| 680 | + function addInputSelectedToDataModal(selectBox){ |
| 681 | + var data = genericCollect(selectBox, textType); |
| 682 | + filterModal.selectedFilterParameters[data.serverParameterName] = data.value |
| 683 | + } |
| 684 | + |
615 | 685 | function bindSingleClick(){
|
616 | 686 | $('.single-filter-js').on('click', function(){
|
617 | 687 | var selectBox = $(this).closest('.select-parameter-box');
|
|
638 | 708 |
|
639 | 709 | function bindChangeDate(){
|
640 | 710 | $('.applyBtn').on('click',function(){
|
| 711 | + |
641 | 712 | filterModal.startTime = $('input[name=daterangepicker_start]').last().val();
|
642 | 713 | filterModal.endTime = $('input[name=daterangepicker_end]').last().val();
|
643 | 714 |
|
644 | 715 | //re render with dates filter
|
645 | 716 | filterModal.that.renderFilter();
|
646 |
| - }) |
| 717 | + }); |
| 718 | + |
| 719 | + $('#daterange').on('apply.daterangepicker', function(ev, picker) { |
| 720 | + addDateSelectedToDataModal($(this).closest('.select-parameter-box')); |
| 721 | + }); |
| 722 | + |
647 | 723 | }
|
648 | 724 |
|
649 | 725 | function bindExpandCollapse(){
|
|
792 | 868 | return {checked: optionsResult.checked}
|
793 | 869 | }
|
794 | 870 |
|
| 871 | + function addDateSelectedToDataModal(selectBox){ |
| 872 | + var data = genericCollect(selectBox, dateRange); |
| 873 | + filterModal.selectedFilterParameters[data.serverParameterName] = data.value |
| 874 | + } |
| 875 | + |
795 | 876 | function resetShowSingleFilterIfNeeded(){
|
796 | 877 | filterModal.status = null;
|
797 | 878 | filterModal.singleFilterToShow = null;
|
|
0 commit comments