Skip to content

Instantly share code, notes, and snippets.

@ariel-devsar
Created June 17, 2020 03:22
Show Gist options
  • Select an option

  • Save ariel-devsar/c2f33c381d19e6495066fca48d817cf8 to your computer and use it in GitHub Desktop.

Select an option

Save ariel-devsar/c2f33c381d19e6495066fca48d817cf8 to your computer and use it in GitHub Desktop.
'use strict';
angular.module('mpList', []);
// This service is useful to mark items as selected, SelectAll, unselectAll,etc
// The service requieres that items must have a SID identifier property.
//
angular.module('mpList').factory('Selection',
function () {
var vm = {
allSelected: false, // Boolean: True if all items are selected, other case is False.
someSelected: false, // Boolean: True if at least one item is selected, False if no item is selected.
selectedCount: 0,
itemsList: {}
};
function updateListInfo(selectedCount) {
vm.allSelected = selectedCount === _.size(vm.itemsList);
vm.selectedCount = selectedCount;
vm.someSelected = vm.selectedCount > 0;
}
var init = function (items) {
reset();
//create keys out of each ID and set their value to false
angular.forEach(items, function(item){
vm.itemsList[item.sid] = false;
});
};
var selectItem = function(sid) {
// Select or deselect.
if (angular.isUndefined(vm.itemsList[sid]))
throw new Error('There was an error. This item may not be valid for selection.');
vm.itemsList[sid] = !vm.itemsList[sid];
if (vm.itemsList[sid]) {
updateListInfo(vm.selectedCount + 1);
} else {
updateListInfo(vm.selectedCount - 1);
}
};
var selectAll = function(select){
// Select or deselect all.
angular.forEach(vm.itemsList, function (val, key) {
vm.itemsList[key] = select;
});
updateListInfo((select) ? _.size(vm.itemsList) : 0);
};
var reset = function () {
vm.allSelected = false;
vm.someSelected = false;
vm.selectedCount = 0;
vm.itemsList = {};
};
var getItems = function () {
return vm.itemsList;
};
var getItemsCount = function () {
return _.size(vm.itemsList);
};
var getItemsSelected = function () {
// Array of sids selected
return _.keys(_.pickBy(vm.itemsList, function (item) {
return item;
}));
};
var getItemsSelectedCount = function () {
return vm.selectedCount;
};
var isSelected = function (sid) {
if (sid in vm.itemsList) {
return vm.itemsList[sid];
} else {
return false;
}
};
var allSelected = function () {
return vm.allSelected;
};
var someSelected = function () {
return vm.someSelected;
};
var toggleSelectAll = function(){
// Selects all if none or some items but not all are selected.
// Deselect all items if All items were selected.
selectAll(!allSelected());
};
return {
init: init,
selectItem: selectItem,
selectAll: selectAll,
reset: reset,
getItems: getItems,
getItemsCount: getItemsCount,
getItemsSelected: getItemsSelected,
getItemsSelectedCount: getItemsSelectedCount,
isSelected: isSelected,
allSelected: allSelected,
someSelected: someSelected,
toggleSelectAll: toggleSelectAll
};
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment