(function () { "use strict" angular.module('shared') .service('resourceSelectionHelper', [ function resourceSelectionHelperService() { var service = this; service.isActivityDisabled = isActivityDisabled; service.handleResourceSelection = handleResourceSelection; service.initResourceInfo = initResourceInfo; var activityTypesByName = { READ : 'read', LISTEN : 'listen', QUIZ : 'quiz', WORKSHEET : 'worksheet', FORMATIVE_WORKSHEET : 'formative_worksheet' }; var activitySelectionMetadata; var activities; var resources; function initResourceInfo(activitiesToReference, resourcesToCopy) { activities = activitiesToReference; resources = resourcesToCopy; activitySelectionMetadata = {}; if (!isSingleResourceAssigment()) { activities.forEach(function (activityObj) { initActivitySelectionMetadata(activityObj); }); resources.forEach(function (resource) { if (resource.activities) { resource.activities.forEach(function (activityType) { var displayType = getActivityDisplayType(activityType); activitySelectionMetadata[displayType].selectedResourcesWithActivity++; }) } }); } } function isSingleResourceAssigment() { return resources.length === 1; } function initActivitySelectionMetadata(activityObj) { var displayType = getActivityDisplayType(activityObj.activity_name); if (!activitySelectionMetadata[displayType]) { activitySelectionMetadata[displayType] = { selectedResourcesWithActivity: 0, selectedStatusWhenDeactivated: null, activity: activityObj }; } } function isActivityDisabled(activity) { if (isSingleResourceAssigment()) { return false; } return !hasSelectedResources(activity.activity_name); } function handleResourceSelection(resource) { resource.activities.forEach(function (activity) { var displayType = getActivityDisplayType(activity); var metadata = activitySelectionMetadata[displayType] if (resource.selected) { metadata.selectedResourcesWithActivity++; if (hasSelectedResources(activity) && metadata.selectedStatusWhenDeactivated !== null){ metadata.activity.selected = metadata.selectedStatusWhenDeactivated; metadata.selectedStatusWhenDeactivated = null; } } else { metadata.selectedResourcesWithActivity--; if (!hasSelectedResources(activity) && metadata.selectedStatusWhenDeactivated === null) { metadata.selectedStatusWhenDeactivated = metadata.activity.selected; metadata.activity.selected = false; } } }) } function hasSelectedResources(activityName) { var displayType = getActivityDisplayType(activityName); var metadata = activitySelectionMetadata[displayType]; return metadata.selectedResourcesWithActivity > 0; } function getActivityDisplayType(activity) { if (activity === activityTypesByName.FORMATIVE_WORKSHEET) { return activityTypesByName.QUIZ; } return activity; } } ]); })();