Created
June 17, 2020 03:22
-
-
Save ariel-devsar/c2f33c381d19e6495066fca48d817cf8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| '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