116 lines
3.9 KiB
JavaScript
116 lines
3.9 KiB
JavaScript
angular.module("umbraco").controller("MemberManager.Dialogs.Member.ExportController",
|
|
function ($scope, memberExtResource) {
|
|
|
|
$scope.defaultButton = null;
|
|
$scope.subButtons = [];
|
|
|
|
var dialogOptions = $scope.$parent.dialogOptions;
|
|
|
|
$scope.filterData = dialogOptions.filterData;
|
|
$scope.columns = dialogOptions.columns;
|
|
//$scope.memberType = dialogOptions.filterData.memberType;
|
|
$scope.totalItems = dialogOptions.totalItems;
|
|
$scope.memberTypes = dialogOptions.memberTypes;
|
|
$scope.format = "Excel";
|
|
|
|
$scope.allColumnsSelected = false;
|
|
|
|
function init() {
|
|
var buttons = {
|
|
defaultButton: createButtonDefinition("E"),
|
|
subButtons: []
|
|
};
|
|
|
|
$scope.defaultButton = buttons.defaultButton;
|
|
$scope.subButtons = buttons.subButtons;
|
|
|
|
memberExtResource.getMemberColumns(dialogOptions.filterData.memberType).then(function (data) {
|
|
// We use this to preserve the original filter data.
|
|
$scope.columnList = setSelected(data, $scope.columns);
|
|
$scope.allColumnsSelected = $scope.allSelected($scope.columnList);
|
|
});
|
|
|
|
}
|
|
|
|
function createButtonDefinition(ch) {
|
|
switch (ch) {
|
|
case "E":
|
|
//export action
|
|
return {
|
|
letter: ch,
|
|
labelKey: "memberManager_export",
|
|
label: "Export",
|
|
handler: $scope.export,
|
|
hotKey: "ctrl+e",
|
|
hotKeyWhenHidden: true,
|
|
alias: "export"
|
|
};
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Loop through a list of select options and set selected for values that appear in a filter list
|
|
setSelected = function (list, filter) {
|
|
// Convert string arrays to a select item object.
|
|
list = _.map(list, function (item) {
|
|
if (typeof item === "string") {
|
|
let value = item;
|
|
item = {
|
|
id: value.replace(" ", "_"),
|
|
name: value,
|
|
alias: value,
|
|
selected: false
|
|
};
|
|
}
|
|
return item;
|
|
});
|
|
|
|
if (filter) {
|
|
for (var i = 0; i < filter.length; i++) {
|
|
for (var j = 0; j < list.length; j++) {
|
|
if (list[j].id === filter[i].replace(" ", "_")) {
|
|
list[j].selected = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return list;
|
|
};
|
|
|
|
processColumnList = function (list) {
|
|
var filteredList = _.filter(list, function (i) {
|
|
return i.selected;
|
|
});
|
|
|
|
return _.map(filteredList, function (item) {
|
|
return item.alias;
|
|
});
|
|
};
|
|
|
|
// Methods to manage select/deselect all in checkbox lists.
|
|
$scope.selectAll = function (selectionList) {
|
|
_.each(selectionList, function (item) { item.selected = $scope.allColumnsSelected; });
|
|
};
|
|
|
|
$scope.allSelected = function (selectionList) {
|
|
return _.filter(selectionList, function (item) { return item.selected; }).length === selectionList.length;
|
|
};
|
|
|
|
$scope.export = function () {
|
|
$scope.submit(processColumnList($scope.columnList));
|
|
};
|
|
|
|
// this method is called for all action buttons and then we proxy based on the btn definition
|
|
$scope.performAction = function (btn) {
|
|
|
|
if (!btn || !angular.isFunction(btn.handler)) {
|
|
throw "btn.handler must be a function reference";
|
|
}
|
|
|
|
btn.handler.apply(this);
|
|
};
|
|
|
|
init();
|
|
}); |