1 define([], function () {
4 function ListFilteringService(FilterNodeWrapperService, RequestBuilderService){
9 var getNodePathInStructure = function (filterRootNode,node) {
11 findNodeInStructure = function (currentParentStructure){
12 if(currentParentStructure.children.length && currentParentStructure.type !== 'leaf'){
13 if(!(currentParentStructure.children.some(function(element){ return element === node; }))){
14 currentParentStructure.children.forEach(function(child,index){
15 checkHasSearchedNode(child,node);
22 checkHasSearchedNode = function (currentParent) {
23 if(currentParent === node){
26 if(currentParent.actElemStructure){
27 findNodeInStructure(currentParent.actElemStructure);
29 findNodeInStructure(currentParent);
33 getIndexOfSearchedNode = function (parentNodeStructure) {
34 parentNodeStructure.children.forEach(function(elem,index){
36 checkHasSearchedNode(elem,node);
38 node.searchedPath.push(index);
41 if(parentNodeStructure.children[node.searchedPath[iterator]] !== node){
42 getSearchedPath(parentNodeStructure.children[node.searchedPath[iterator]]);
45 getSearchedPath = function(parentNode){
47 if(parentNode.actElemStructure){
48 getIndexOfSearchedNode(parentNode.actElemStructure);
50 getIndexOfSearchedNode(parentNode);
54 if(filterRootNode !== node){
55 getSearchedPath(filterRootNode);
59 clearFilterNodes = function(node) {
60 node.referenceNode.filterNodes.forEach(function(filterNode){
65 loadFilterNodes = function (node) {
66 var fillFuc = function(fillNods, prop, filVal){
67 fillNods.forEach(function(filterNode){
68 filterNode.fill(prop, filVal[prop]);
72 if(node.referenceNode.filters[node.currentFilter].filteredValues){
73 node.referenceNode.filters[node.currentFilter].filteredValues.forEach(function(item){
74 for (var prop in item) {
75 fillFuc(node.referenceNode.filterNodes, prop, item);
81 getFilterResult = function(element, filterValue, node){
82 for (var i in filterValue){
83 if(!filterValue[i].filterType) {
87 if(!filterValue[i].hasOwnProperty('value') && !filterValue[i].hasOwnProperty('selectboxBitsValue') && !filterValue[i].hasOwnProperty('bitsValue') &&
88 !filterValue[i].hasOwnProperty('filterRangeFrom') && !filterValue[i].hasOwnProperty('filterRangeTo') && element[i]){
89 getFilterResult(element[i],filterValue[i]);
91 if(filterValue[i].selectboxBitsValue && filterValue[i].selectboxBitsValue.length){
92 filterResult = filterValue[i].getResult(element,filterValue[i].selectboxBitsValue,i);
94 if((filterValue[i].filterRangeFrom && filterValue[i].filterRangeFrom !== '') || (filterValue[i].filterRangeTo && filterValue[i].filterRangeTo !== '')){
95 filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element,filterValue[i].filterRangeFrom,filterValue[i].filterRangeTo,i);
96 }else if(filterValue[i].bitsValue && filterValue[i].bitsValue !== ''){
97 filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element,filterValue[i].bitsValue,i);
99 filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element,filterValue[i].value,i);
106 getActElementFilter = function (node) {
109 node.actElemIndex = 0;
110 if(node.filteredListData && node.filteredListData.length){
111 actData = node.filteredListData[node.actElemIndex];
113 actData = node.listData[node.actElemIndex];
116 node.actElemStructure.clear();
117 for (var prop in actData) {
118 node.actElemStructure.fillListElement(prop, actData[prop]);
122 var listFiltering = {};
124 listFiltering.removeEmptyFilters = function (node) {
125 if(node.referenceNode && node.referenceNode.filters){
126 var wasDeleted = false;
127 node.referenceNode.filters = node.referenceNode.filters.filter(function(filter){
128 if(filter.filteredValues && filter.filteredValues.length){
137 listFiltering.switchFilter(node,0,true);
142 listFiltering.showListFilterWin = function (filterRootNode,node) {
143 if(!node.searchedPath.length){
144 getNodePathInStructure(filterRootNode,node);
147 if(!node.referenceNode){
148 node.referenceNode = filterRootNode;
149 node.searchedPath.forEach(function(elem){
150 node.referenceNode = node.referenceNode.children[elem];
154 if(!node.referenceNode.filterNodes.length){
155 FilterNodeWrapperService.init(node);
156 node.referenceNode.filterNodes = node.getNewFilterElement();
159 if(!(node.referenceNode.filters && node.referenceNode.filters.length)){
160 node.referenceNode.filters.push({name : 'Filter 1 name', active : 1});
162 listFiltering.getFilterData(node);
163 listFiltering.removeEmptyFilters(node);
167 listFiltering.createNewFilter = function (node) {
168 node.referenceNode.filters.push({name : 'Filter ' + (node.referenceNode.filters.length+1) + ' name', active : 1});
170 listFiltering.switchFilter(node,node.referenceNode.filters.length-1);
173 listFiltering.getFilterData = function (node) {
174 node.referenceNode.filters[node.currentFilter].filteredValues = node.referenceNode.filterNodes.map(function(element){
175 var requestData = {};
176 element.buildRequest(RequestBuilderService, requestData);
178 }).filter(function(item){
179 return $.isEmptyObject(item) === false;
183 listFiltering.switchFilter = function (node,showedFilter,fromRemoveEmptyFilters) {
184 if(node.referenceNode.filters.length){
185 if(!fromRemoveEmptyFilters){
186 listFiltering.getFilterData(node);
188 clearFilterNodes(node);
189 node.currentFilter = showedFilter;
190 loadFilterNodes(node);
192 node.currentFilter = 0;
196 listFiltering.applyFilter = function (node) {
197 listFiltering.getFilterData(node);
198 listFiltering.removeEmptyFilters(node);
200 node.filteredListData = node.listData.slice().filter(function(element){
201 return node.referenceNode.filters.filter(function(fil){
202 return fil.active === 1;
203 }).some(function(filter){
204 return filter.filteredValues.every(function(filterValue){
206 getFilterResult(element,filterValue,node);
212 getActElementFilter(node);
213 // console.info('applyFilter node',node,'node.referenceNode.filterNodes',node.referenceNode.filterNodes,'node.referenceNode.filters',node.referenceNode.filters);
216 listFiltering.clearFilterData = function (node, changeAct, filterForClear, removeFilters) {
219 if(node.referenceNode.filters.length === 1){
220 node.referenceNode.filters = [];
221 node.referenceNode.filters.push({name : 'Filter 1 name', active : 1});
222 clearFilterNodes(node);
224 node.referenceNode.filters.splice(filterForClear,1);
225 node.currentFilter = 0;
226 clearFilterNodes(node);
227 loadFilterNodes(node);
231 node.referenceNode.filters = [];
232 clearFilterNodes(node);
233 node.currentFilter = 0;
235 node.referenceNode.filters.forEach(function(filter){
238 listFiltering.getFilterData(node);
239 listFiltering.removeEmptyFilters(node);
241 node.filteredListData = [];
245 getActElementFilter(node);
250 return listFiltering;
253 ListFilteringService.$inject=['FilterNodeWrapperService', 'RequestBuilderService'];
255 return ListFilteringService;