(function () { "use strict"; angular.module("enrDetailsPaneModule") .directive("detailsReferendumsList", [function () { return { templateUrl: "Scripts/EnrAngular/EnrDetailsPane/detailsReferendumsList.html", scope: { }, controller: "detailsReferendumsListController", restrict: "E" }; }]) .controller("detailsReferendumsListController", ["$scope","$filter", "detailsViewModeManager", "enrModeManager", "mapSelectedRegion", "detailsData", "participationCalculator", "regionsJsonParser", function ($scope,$filter, detailsViewModeManager, enrModeManager, mapSelectedRegion, detailsData, participationCalculator, regionsJsonParser) { // Visibility Handling var determineVisibility = function () { var isVisible = enrModeManager.isReferendumsMode() && mapSelectedRegion.isAnyRegionSelected() && participationCalculator.isReferendumsRegionParticipatingFromDetailedJson(detailsData.getData()); return isVisible ? "" : "hidden"; }; $scope.componentVisible = determineVisibility(); $scope.$on(detailsViewModeManager.modeChangeEventName, function () { $scope.componentVisible = determineVisibility(); }); $scope.$on(enrModeManager.modeChangeEventName, function () { $scope.componentVisible = determineVisibility(); }); $scope.$on(mapSelectedRegion.regionChangeEventName, function () { $scope.componentVisible = determineVisibility(); }); $scope.$on(detailsData.dataChangedEventName, function () { $scope.componentVisible = determineVisibility(); }); function sortReferendums(data) { return $filter('orderBy')(data, 'order'); } function getOrdrerNumber(referendum) { var order = 99; //if (referendum.REFERENDUM_TYPE_NAME == "Ratification Of State Constitutional Amendment") // order = 0; //else if (referendum.REFERENDUM_TYPE_NAME == "Local Public Question") // order = 1; //else if (referendum.REFERENDUM_TYPE_NAME == "Court Of Appeals Judge Retention") // order = 2; return order; } // Data Population $scope.$on(detailsData.dataChangedEventName, function () { if (determineVisibility() === "") { // Get the flat list of referendums from the Json var flatReferendumData = regionsJsonParser.getReferendumsDetailJsonAsArray(detailsData.getData()); // Create a 2D array of the referendums, organized by referendum type. var formattedReferendumData = []; for (var i = 0; i < flatReferendumData.length; i++) { var sortOrder = getOrdrerNumber(flatReferendumData[i]); // Start a new category if necessary var isNewReferendumCategory = formattedReferendumData.length === 0 || flatReferendumData[i].REFERENDUM_TYPE_NAME !== formattedReferendumData[formattedReferendumData.length - 1].referendumCategoryName; if (isNewReferendumCategory) { formattedReferendumData.push({ referendumCategoryName: flatReferendumData[i].REFERENDUM_TYPE_NAME, referendums: [], order: sortOrder }); } formattedReferendumData[formattedReferendumData.length - 1].referendums.push(flatReferendumData[i]); } // Bind Data $scope.referendumData = sortReferendums(formattedReferendumData); } }); }]); }());