|
31 | 31 | };
|
32 | 32 |
|
33 | 33 | $.fn.bootstrapFilter = function(options) {
|
| 34 | + var filterHtml; |
34 | 35 |
|
35 | 36 | // first thing, make sure we have all of our dependencies
|
36 | 37 | libraryDependenciesValidations();
|
|
57 | 58 | filterModal.decryptField = settings.encodeInUrl == 'value' ? 'name': 'value';
|
58 | 59 |
|
59 | 60 | decryptUrlIntoSelectedFilters();
|
60 |
| - this.html(buildHtml(settings)).hide().fadeIn(); |
| 61 | + filterHtml = buildHtml(settings); |
| 62 | + this.html(filterHtml).hide().fadeIn(); |
61 | 63 | renderDateRangeIfNeeded();
|
62 | 64 | bindFilterClicks();
|
63 | 65 | populateModal();
|
|
171 | 173 | if (filterModal.selectedFilterParameters[parameter.attributeName]){
|
172 | 174 | value = filterModal.selectedFilterParameters[parameter.attributeName].values[0].value
|
173 | 175 | }
|
174 |
| - |
| 176 | + // todo support prefilled text input |
175 | 177 | return '<input style="margin: 5px 0" class="form-control text-input-js" value="'+value+'" placeholder="'+ (parameter.placeholder || name) + '">';
|
176 | 178 | }
|
177 | 179 |
|
|
182 | 184 | value = filterModal.selectedFilterParameters[parameter.attributeName].values[0].value
|
183 | 185 | }
|
184 | 186 |
|
| 187 | + // todo support prefilled date Range input |
185 | 188 | return '<div id="daterange" style="float: left; margin: 5px 0;" class="selectbox active">' +
|
186 | 189 | '<input type="text" data-time-picker="true" value="'+value+'" name="'+dateRangeName+'" class="filters-date-range-picker">' +
|
187 | 190 | '</div>';
|
|
302 | 305 | populateSelectedFiltersFromDefaultValues();
|
303 | 306 |
|
304 | 307 | $.each(filterModal.selectedFilterParameters, function(serverName, selectedParameter){
|
| 308 | + // skip on not supported input selected filters |
| 309 | + if (!existsInArray(selectedParameter.type, [single, multiCheckBoxes])){ |
| 310 | + return true; |
| 311 | + } |
| 312 | + |
305 | 313 | humanParameterName = selectedParameter.attributeHumaneName;
|
306 | 314 | showMoreModelName = calcShowMoreModelName(selectedParameter.attributeHumaneName);
|
307 | 315 | selectedValue = (1 < selectedParameter.values.length) ? '(' + selectedParameter.values.length + ')' : selectedParameter.values[0]['name'];
|
|
490 | 498 | return filterInputBox + shiftSelectMultiMessage + checkBoxesHtml;
|
491 | 499 | }
|
492 | 500 |
|
493 |
| - function relateToRender(filterParameter){ |
| 501 | + function relateToRender(filterParameter, dataType){ |
494 | 502 | var relatedTo = '';
|
| 503 | + // if not relevant here |
| 504 | + if (existsInArray(dataType, [textType])) { |
| 505 | + return '' |
| 506 | + } |
| 507 | + |
495 | 508 | if (filterParameter.relatedTo){
|
496 | 509 | relatedTo += ' (';
|
497 | 510 | $.each(filterParameter.relatedTo, function(paramServerName, parameterData){
|
|
979 | 992 | $.each(data.relatedData, function(key, value){
|
980 | 993 | key = removeFiltersPrefix(key);
|
981 | 994 | if (!filterModal.selectedFilterParameters[key]) {
|
982 |
| - values = value.split(','); |
983 | 995 | selectedData = filterModal.filterParametersByKeyValue[key];
|
984 |
| - filterModal.selectedFilterParameters[key] = {values: [], |
| 996 | + values = getSelectedValues(value, selectedData.type); |
| 997 | + filterModal.selectedFilterParameters[key] = { |
| 998 | + values: [], |
985 | 999 | attributeHumaneName: selectedData.name,
|
986 |
| - type: selectedData.type}; |
| 1000 | + type: selectedData.type |
| 1001 | + }; |
987 | 1002 | $.each(values, function (_, selectedFilterValue) {
|
988 | 1003 | selectedFilterValue = decodeURIComponent(selectedFilterValue);
|
989 | 1004 | // possible bug here
|
990 |
| - selectedFilterValue = selectedFilterValue.replace("/", ""); |
991 |
| - if (selectedData.options[selectedFilterValue]) { |
| 1005 | + selectedFilterValue = selectedFilterValue.replace('/', ''); |
| 1006 | + // todo - support isValidInput for text input |
| 1007 | + if (isValidInput(selectedData.options, selectedFilterValue, selectedData.type)) { |
992 | 1008 |
|
993 |
| - selectedValue = selectedData.options[selectedFilterValue][filterModal.decryptField]; |
994 |
| - tempRelatedTo = relateToRender(selectedData.options[selectedFilterValue]); |
| 1009 | + selectedValue = getSelectedValueByType(filterModal.decryptField, selectedData.options, selectedFilterValue, selectedData.type); |
| 1010 | + tempRelatedTo = relateToRender(selectedData.options[selectedFilterValue], selectedData.type); |
995 | 1011 | if (filterModal.decryptField == 'value'){
|
996 | 1012 | name = selectedFilterValue + tempRelatedTo;
|
997 | 1013 | tempValue = selectedValue;
|
|
1009 | 1025 |
|
1010 | 1026 | }
|
1011 | 1027 |
|
| 1028 | + function getSelectedValues(value, dataType){ |
| 1029 | + if (existsInArray(dataType, [textType])){ |
| 1030 | + // for input, no need to seaprate. |
| 1031 | + // for example for id_number "123,52314" is one value not two |
| 1032 | + return [value] |
| 1033 | + }else{ |
| 1034 | + return value.split(','); |
| 1035 | + } |
| 1036 | + } |
| 1037 | + |
| 1038 | + |
| 1039 | + function getSelectedValueByType(decryptField, options, selectedFilterValue, dataType){ |
| 1040 | + if (existsInArray(dataType, [textType])){ |
| 1041 | + return selectedFilterValue |
| 1042 | + }else{ |
| 1043 | + return options[selectedFilterValue][decryptField] |
| 1044 | + } |
| 1045 | + } |
| 1046 | + |
| 1047 | + |
| 1048 | + function isValidInput(options, value, dataType){ |
| 1049 | + if (existsInArray(dataType, [textType])){ |
| 1050 | + return true |
| 1051 | + }else{ |
| 1052 | + return options[value] |
| 1053 | + } |
| 1054 | + } |
| 1055 | + |
1012 | 1056 |
|
1013 | 1057 | function removeFiltersPrefix(fullString){
|
1014 | 1058 | return fullString.substr(backofficeFiltersUrlPrefix.length);
|
|
0 commit comments