app/modules/main/factories/TableDataStorageFactory.js
(function(){
'use strict';
function TableDataStorageFactory($log, _){
function TableDataStorageService(){
this.storage = [];
this.header = [];
this.customCells = {};
}
TableDataStorageService.prototype.addHeaderCellData = function(ops){
this.header.push(ops);
};
TableDataStorageService.prototype.addRowData = function(explicitRowId, rowArray, className){
if(!(rowArray instanceof Array)){
$log.error('`rowArray` parameter should be array');
return;
}
this.storage.push({
rowId: explicitRowId,
optionList: {
selected: false,
deleted: false,
visible: true,
className: className || false
},
data: rowArray
});
};
TableDataStorageService.prototype.getRowData = function(index){
if(!this.storage[index]){
$log.error('row is not exists at index: '+index);
return;
}
return this.storage[index].data;
};
TableDataStorageService.prototype.getRowOptions = function(index){
if(!this.storage[index]){
$log.error('row is not exists at index: '+index);
return;
}
return this.storage[index].optionList;
};
TableDataStorageService.prototype.setAllRowsSelected = function(isSelected, isPaginationEnabled){
if(typeof isSelected === 'undefined'){
$log.error('`isSelected` parameter is required');
return;
}
_.each(this.storage, function(rowData){
if(isPaginationEnabled) {
if (rowData.optionList.visible) {
rowData.optionList.selected = isSelected ? true : false;
}
}else{
rowData.optionList.selected = isSelected ? true : false;
}
});
};
TableDataStorageService.prototype.isAnyRowSelected = function(){
return _.some(this.storage, function(rowData){
return rowData.optionList.selected === true && rowData.optionList.deleted === false;
});
};
TableDataStorageService.prototype.getNumberOfSelectedRows = function(){
var res = _.countBy(this.storage, function(rowData){
return rowData.optionList.selected === true && rowData.optionList.deleted === false ? 'selected' : 'unselected';
});
return res.selected ? res.selected : 0;
};
TableDataStorageService.prototype.deleteSelectedRows = function(){
var deletedRows = [];
_.each(this.storage, function(rowData){
if(rowData.optionList.selected && rowData.optionList.deleted === false){
if(rowData.rowId){
deletedRows.push(rowData.rowId);
//Fallback when no id was specified
} else{
deletedRows.push(rowData.data);
}
rowData.optionList.deleted = true;
}
});
return deletedRows;
};
TableDataStorageService.prototype.getSelectedRows = function(){
var selectedRows = [];
_.each(this.storage, function(rowData){
if(rowData.optionList.selected && rowData.optionList.deleted === false){
if(rowData.rowId){
selectedRows.push(rowData.rowId);
//Fallback when no id was specified
} else{
selectedRows.push(rowData.data);
}
}
});
return selectedRows;
};
TableDataStorageService.prototype.getSavedRowData = function(rowData){
var rawRowData = [];
_.each(rowData.data, function(aCell){
rawRowData.push(aCell.value);
});
return rawRowData;
};
return {
getInstance: function(){
return new TableDataStorageService();
}
};
}
angular
.module('mdDataTable')
.factory('TableDataStorageFactory', TableDataStorageFactory);
}());