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]);
- }
+ filterResult,
+ service = {
+ applyFilter: applyFilter,
+ clearFilterData: clearFilterData,
+ createNewFilter: createNewFilter,
+ getFilterData: getFilterData,
+ removeEmptyFilters: removeEmptyFilters,
+ showListFilterWin: showListFilterWin,
+ switchFilter: switchFilter
};
- var listFiltering = {};
+ return service;
- listFiltering.removeEmptyFilters = function (node) {
- if(node.referenceNode && node.referenceNode.filters){
+ // TODO: add service's description
+ function removeEmptyFilters(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){
+ node.referenceNode.filters = node.referenceNode.filters.filter(function (filter){
+ if (filter.filteredValues && filter.filteredValues.length){
return true;
- }else{
+ } else {
wasDeleted = true;
return false;
}
});
- if(wasDeleted){
- listFiltering.switchFilter(node,0,true);
+ if (wasDeleted){
+ switchFilter(node, 0, true);
}
}
- };
+ }
- listFiltering.showListFilterWin = function (filterRootNode,node) {
- if(!node.searchedPath.length){
- getNodePathInStructure(filterRootNode,node);
+ // TODO: add service's description
+ function showListFilterWin(filterRootNode, node) {
+ if (!node.searchedPath.length){
+ getNodePathInStructure(filterRootNode, node);
}
- if(!node.referenceNode){
+ if (!node.referenceNode){
node.referenceNode = filterRootNode;
- node.searchedPath.forEach(function(elem){
+ node.searchedPath.forEach(function (elem){
node.referenceNode = node.referenceNode.children[elem];
});
}
- if(!node.referenceNode.filterNodes.length){
+ 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);
+ if (!(node.referenceNode.filters && node.referenceNode.filters.length)){
+ node.referenceNode.filters.push({ name: 'Filter 1 name', active: 1 });
+ } else {
+ getFilterData(node);
+ 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;
+ // TODO: add service's description
+ function createNewFilter(node) {
+ node.referenceNode.filters.push({
+ name: 'Filter ' + (node.referenceNode.filters.length + 1) + ' name',
+ active: 1
});
- };
- listFiltering.switchFilter = function (node,showedFilter,fromRemoveEmptyFilters) {
- if(node.referenceNode.filters.length){
- if(!fromRemoveEmptyFilters){
- listFiltering.getFilterData(node);
+ switchFilter(node, node.referenceNode.filters.length - 1);
+ }
+
+ // TODO: add service's description
+ function getFilterData(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;
+ });
+ }
+
+ // TODO: add service's description
+ function switchFilter(node, showedFilter, fromRemoveEmptyFilters) {
+ if (node.referenceNode.filters.length){
+ if (!fromRemoveEmptyFilters){
+ getFilterData(node);
}
clearFilterNodes(node);
node.currentFilter = showedFilter;
loadFilterNodes(node);
- }else{
+ } else {
node.currentFilter = 0;
}
- };
+ }
- listFiltering.applyFilter = function (node) {
- listFiltering.getFilterData(node);
- listFiltering.removeEmptyFilters(node);
+ // TODO: add service's description
+ function applyFilter(node) {
+ getFilterData(node);
+ removeEmptyFilters(node);
- node.filteredListData = node.listData.slice().filter(function(element){
- return node.referenceNode.filters.filter(function(fil){
+ 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){
+ }).some(function (filter){
+ return filter.filteredValues.every(function (filterValue){
filterResult = null;
- getFilterResult(element,filterValue,node);
+ 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);
- };
+ // node.referenceNode.filterNodes, 'node.referenceNode.filters', node.referenceNode.filters);
+ }
- listFiltering.clearFilterData = function (node, changeAct, filterForClear, removeFilters) {
- if(filterForClear){
+ // TODO: add service's description
+ function clearFilterData(node, changeAct, filterForClear, removeFilters) {
+ if (filterForClear){
filterForClear--;
- if(node.referenceNode.filters.length === 1){
+ if (node.referenceNode.filters.length === 1){
node.referenceNode.filters = [];
- node.referenceNode.filters.push({name : 'Filter 1 name', active : 1});
+ node.referenceNode.filters.push({ name: 'Filter 1 name', active: 1 });
clearFilterNodes(node);
- }else{
- node.referenceNode.filters.splice(filterForClear,1);
+ } else {
+ node.referenceNode.filters.splice(filterForClear, 1);
node.currentFilter = 0;
clearFilterNodes(node);
loadFilterNodes(node);
}
- }else{
- if(removeFilters){
+ } else {
+ if (removeFilters){
node.referenceNode.filters = [];
clearFilterNodes(node);
node.currentFilter = 0;
- }else{
- node.referenceNode.filters.forEach(function(filter){
+ } else {
+ node.referenceNode.filters.forEach(function (filter){
filter.active = 2;
});
- listFiltering.getFilterData(node);
- listFiltering.removeEmptyFilters(node);
+ getFilterData(node);
+ removeEmptyFilters(node);
}
node.filteredListData = [];
}
- if(changeAct){
+ if (changeAct){
getActElementFilter(node);
}
- };
+ }
+
+ // TODO: add function's description
+ function getNodePathInStructure(filterRootNode, node) {
+ var iterator = -1;
+
+ if (filterRootNode !== node){
+ getSearchedPath(filterRootNode);
+ }
+
+ // TODO: add function's description
+ function getSearchedPath(parentNode){
+ iterator++;
+ if (parentNode.actElemStructure){
+ getIndexOfSearchedNode(parentNode.actElemStructure);
+ } else {
+ getIndexOfSearchedNode(parentNode);
+ }
+ }
+
+ // TODO: add function's description
+ function findNodeInStructure(currentParentStructure){
+ if (currentParentStructure.children.length && currentParentStructure.type !== 'leaf'){
+ if (!(currentParentStructure.children.some(function (element){ return element === node; }))){
+ currentParentStructure.children.forEach(function (child){
+ checkHasSearchedNode(child, node);
+ });
+ } else {
+ wasFound = true;
+ }
+ }
+ }
+
+ // TODO: add function's description
+ function getIndexOfSearchedNode(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]]);
+ }
+ }
+
+ // TODO: add function's description
+ function checkHasSearchedNode(currentParent) {
+ if (currentParent === node){
+ wasFound = true;
+ } else {
+ if (currentParent.actElemStructure){
+ findNodeInStructure(currentParent.actElemStructure);
+ } else {
+ findNodeInStructure(currentParent);
+ }
+ }
+ }
+ }
+
+ // TODO: add function's description
+ function clearFilterNodes(node) {
+ node.referenceNode.filterNodes.forEach(function (filterNode){
+ filterNode.clear();
+ });
+ }
+
+ // TODO: add function's description
+ function loadFilterNodes(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){
+ Object.keys(item).forEach(function (prop) {
+ fillFuc(node.referenceNode.filterNodes, prop, item);
+ });
+ });
+ }
+ }
+
+ // TODO: add function's description
+ function getFilterResult(element, filterValue){
+ for (var i in filterValue){
+ if(!filterValue[i].filterType) {
+ continue;
+ }
+
+ if (!filterValue[i].hasOwnProperty('value') && !filterValue[i].hasOwnProperty('selectboxBitsValue') &&
+ !filterValue[i].hasOwnProperty('bitsValue') && !filterValue[i].hasOwnProperty('filterRangeFrom') &&
+ !filterValue[i].hasOwnProperty('filterRangeTo') && element[i]){
+ 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);
+ }
+ }
+ }
+ }
+ }
+
+ // TODO: add function's description
+ function getActElementFilter(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();
+ Object.keys(actData).forEach(function (prop) {
+ node.actElemStructure.fillListElement(prop, actData[prop]);
+ });
+ }
- return listFiltering;
}
- ListFilteringService.$inject=['FilterNodeWrapperService', 'RequestBuilderService'];
+ ListFilteringService.$inject = ['FilterNodeWrapperService', 'RequestBuilderService'];
return ListFilteringService;
-});
\ No newline at end of file
+});