--- /dev/null
+define([], function () {
+ 'use strict';
+
+ function ListFilteringService(FilterNodeWrapperService, RequestBuilderService){
+ var wasFound,
+ filterResult;
+
+
+ var getNodePathInStructure = function (filterRootNode,node) {
+ var iterator = -1,
+ findNodeInStructure = function (currentParentStructure){
+ if(currentParentStructure.children.length && currentParentStructure.type !== 'leaf'){
+ if(!(currentParentStructure.children.some(function(element){ return element === node; }))){
+ currentParentStructure.children.forEach(function(child,index){
+ checkHasSearchedNode(child,node);
+ });
+ }else{
+ wasFound = true;
+ }
+ }
+ },
+ checkHasSearchedNode = function (currentParent) {
+ if(currentParent === node){
+ wasFound = true;
+ }else{
+ if(currentParent.actElemStructure){
+ findNodeInStructure(currentParent.actElemStructure);
+ }else{
+ findNodeInStructure(currentParent);
+ }
+ }
+ },
+ getIndexOfSearchedNode = function (parentNodeStructure) {
+ parentNodeStructure.children.forEach(function(elem,index){
+ wasFound = false;
+ checkHasSearchedNode(elem,node);
+ if(wasFound){
+ node.searchedPath.push(index);
+ }
+ });
+ if(parentNodeStructure.children[node.searchedPath[iterator]] !== node){
+ getSearchedPath(parentNodeStructure.children[node.searchedPath[iterator]]);
+ }
+ },
+ getSearchedPath = function(parentNode){
+ iterator++;
+ if(parentNode.actElemStructure){
+ getIndexOfSearchedNode(parentNode.actElemStructure);
+ }else{
+ getIndexOfSearchedNode(parentNode);
+ }
+ };
+
+ if(filterRootNode !== node){
+ getSearchedPath(filterRootNode);
+ }
+ },
+
+ clearFilterNodes = function(node) {
+ node.referenceNode.filterNodes.forEach(function(filterNode){
+ filterNode.clear();
+ });
+ },
+
+ loadFilterNodes = function (node) {
+ var fillFuc = function(fillNods, prop, filVal){
+ fillNods.forEach(function(filterNode){
+ filterNode.fill(prop, filVal[prop]);
+ });
+ };
+
+ if(node.referenceNode.filters[node.currentFilter].filteredValues){
+ node.referenceNode.filters[node.currentFilter].filteredValues.forEach(function(item){
+ for (var prop in item) {
+ fillFuc(node.referenceNode.filterNodes, prop, item);
+ }
+ });
+ }
+ },
+
+ getFilterResult = function(element, filterValue, node){
+ for (var i in filterValue){
+ if(!filterValue[i].hasOwnProperty('value') && !filterValue[i].hasOwnProperty('selectboxBitsValue') && !filterValue[i].hasOwnProperty('bitsValue') &&
+ !filterValue[i].hasOwnProperty('filterRangeFrom') && !filterValue[i].hasOwnProperty('filterRangeTo')){
+ getFilterResult(element[i],filterValue[i]);
+ }else{
+ if(filterValue[i].selectboxBitsValue && filterValue[i].selectboxBitsValue.length){
+ filterResult = filterValue[i].getResult(element,filterValue[i].selectboxBitsValue,i);
+ }else{
+ if((filterValue[i].filterRangeFrom && filterValue[i].filterRangeFrom !== '') || (filterValue[i].filterRangeTo && filterValue[i].filterRangeTo !== '')){
+ filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element,filterValue[i].filterRangeFrom,filterValue[i].filterRangeTo,i);
+ }else if(filterValue[i].bitsValue && filterValue[i].bitsValue !== ''){
+ filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element,filterValue[i].bitsValue,i);
+ }else {
+ filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element,filterValue[i].value,i);
+ }
+ }
+ }
+ }
+ },
+
+ getActElementFilter = function (node) {
+ var actData = [];
+
+ node.actElemIndex = 0;
+ if(node.filteredListData && node.filteredListData.length){
+ actData = node.filteredListData[node.actElemIndex];
+ }else{
+ actData = node.listData[node.actElemIndex];
+ }
+
+ node.actElemStructure.clear();
+ for (var prop in actData) {
+ node.actElemStructure.fillListElement(prop, actData[prop]);
+ }
+ };
+
+ var listFiltering = {};
+
+ listFiltering.removeEmptyFilters = function (node) {
+ if(node.referenceNode && node.referenceNode.filters){
+ var wasDeleted = false;
+ node.referenceNode.filters = node.referenceNode.filters.filter(function(filter){
+ if(filter.filteredValues && filter.filteredValues.length){
+ return true;
+ }else{
+ wasDeleted = true;
+ return false;
+ }
+ });
+
+ if(wasDeleted){
+ listFiltering.switchFilter(node,0,true);
+ }
+ }
+ };
+
+ listFiltering.showListFilterWin = function (filterRootNode,node) {
+ if(!node.searchedPath.length){
+ getNodePathInStructure(filterRootNode,node);
+ }
+
+ if(!node.referenceNode){
+ node.referenceNode = filterRootNode;
+ node.searchedPath.forEach(function(elem){
+ node.referenceNode = node.referenceNode.children[elem];
+ });
+ }
+
+ if(!node.referenceNode.filterNodes.length){
+ FilterNodeWrapperService.init(node);
+ node.referenceNode.filterNodes = node.getNewFilterElement();
+ }
+
+ if(!(node.referenceNode.filters && node.referenceNode.filters.length)){
+ node.referenceNode.filters.push({name : 'Filter 1 name', active : 1});
+ }else{
+ listFiltering.getFilterData(node);
+ listFiltering.removeEmptyFilters(node);
+ }
+ };
+
+ listFiltering.createNewFilter = function (node) {
+ node.referenceNode.filters.push({name : 'Filter ' + (node.referenceNode.filters.length+1) + ' name', active : 1});
+
+ listFiltering.switchFilter(node,node.referenceNode.filters.length-1);
+ };
+
+ listFiltering.getFilterData = function (node) {
+ node.referenceNode.filters[node.currentFilter].filteredValues = node.referenceNode.filterNodes.map(function(element){
+ var requestData = {};
+ element.buildRequest(RequestBuilderService, requestData);
+ return requestData;
+ }).filter(function(item){
+ return $.isEmptyObject(item) === false;
+ });
+ };
+
+ listFiltering.switchFilter = function (node,showedFilter,fromRemoveEmptyFilters) {
+ if(node.referenceNode.filters.length){
+ if(!fromRemoveEmptyFilters){
+ listFiltering.getFilterData(node);
+ }
+ clearFilterNodes(node);
+ node.currentFilter = showedFilter;
+ loadFilterNodes(node);
+ }else{
+ node.currentFilter = 0;
+ }
+ };
+
+ listFiltering.applyFilter = function (node) {
+ listFiltering.getFilterData(node);
+ listFiltering.removeEmptyFilters(node);
+
+ node.filteredListData = node.listData.slice().filter(function(element){
+ return node.referenceNode.filters.filter(function(fil){
+ return fil.active === 1;
+ }).some(function(filter){
+ return filter.filteredValues.every(function(filterValue){
+ filterResult = null;
+ getFilterResult(element,filterValue,node);
+ return filterResult;
+ });
+ });
+ });
+
+ getActElementFilter(node);
+ // console.info('applyFilter node',node,'node.referenceNode.filterNodes',node.referenceNode.filterNodes,'node.referenceNode.filters',node.referenceNode.filters);
+ };
+
+ listFiltering.clearFilterData = function (node, changeAct, filterForClear, removeFilters) {
+ if(filterForClear){
+ filterForClear--;
+ if(node.referenceNode.filters.length === 1){
+ node.referenceNode.filters = [];
+ node.referenceNode.filters.push({name : 'Filter 1 name', active : 1});
+ clearFilterNodes(node);
+ }else{
+ node.referenceNode.filters.splice(filterForClear,1);
+ node.currentFilter = 0;
+ clearFilterNodes(node);
+ loadFilterNodes(node);
+ }
+ }else{
+ if(removeFilters){
+ node.referenceNode.filters = [];
+ clearFilterNodes(node);
+ node.currentFilter = 0;
+ }else{
+ node.referenceNode.filters.forEach(function(filter){
+ filter.active = 2;
+ });
+ listFiltering.getFilterData(node);
+ listFiltering.removeEmptyFilters(node);
+ }
+ node.filteredListData = [];
+ }
+
+ if(changeAct){
+ getActElementFilter(node);
+ }
+
+ };
+
+ return listFiltering;
+ }
+
+ ListFilteringService.$inject=['FilterNodeWrapperService', 'RequestBuilderService'];
+
+ return ListFilteringService;
+
+});
\ No newline at end of file