zettapi_client
Version:
Admin panel and client-side CRUD operations in angular to use with zettapi_server rest api to get started quickly in any CMS project.
95 lines (89 loc) • 3.33 kB
JavaScript
app.directive('entityModal', function () {
return {
restrict: 'E',
scope: {
entity: "@",
item: "=?",
lookup: "=?",
view: "@?",
clone: "@?",
onOpen: "&?"
},
transclude: true,
templateUrl: "directives/entity/entity.modal.html",
controller: function ($scope, $modal, $rootScope, $interpolate, zapi) {
//defaults
$scope.item = $scope.item || {};
$scope.view = $scope.view ? true : false;
$scope.clone = $scope.clone ? true : false;
$scope.visible = false;
//validate
var isAdmin = $rootScope.login && $rootScope.login.role && $rootScope.login.role.admin;
var entityObj = zapi.entityMap[$scope.entity];
if (!entityObj) return;
//assign template
var idField = entityObj.id || "_id";
var size = typeof entityObj.modal === 'string' ? entityObj.modal : 'lg';
if ($scope.view) {
$scope.icon = 'fa-eye';
$scope.text = $interpolate("{{'global.view' | translate}}")($scope);
$scope.color = 'primary';
$scope.visible = entityObj.view && (entityObj.view.admin && isAdmin || !entityObj.view.admin);
}
else if ($scope.clone) {
$scope.icon = 'fa-clone';
$scope.text = $interpolate("{{'global.clone' | translate}}")($scope);
$scope.color = 'info';
$scope.visible = entityObj.edit && (entityObj.edit.admin && isAdmin || !entityObj.edit.admin);
}
else if ($scope.item && $scope.item[idField]) {
$scope.icon = 'fa-pencil';
$scope.text = $interpolate("{{'global.edit' | translate}}")($scope);
$scope.color = 'primary';
$scope.visible = entityObj.edit && (entityObj.edit.admin && isAdmin || !entityObj.edit.admin);
}
else {
$scope.icon = 'fa-plus';
$scope.text = $interpolate("{{'global.add' | translate}}")($scope);
$scope.color = 'primary';
$scope.visible = entityObj.edit && (entityObj.edit.admin && isAdmin || !entityObj.edit.admin);
}
$scope.openModal = function () {
var state, item;
if ($scope.view) {
state = "view";
item = angular.copy($scope.item);
}
else if ($scope.clone) {
state = "clone";
if (typeof entityObj.clone === 'function') item = entityObj.clone(angular.copy($scope.item));
else {
item = angular.copy($scope.item);
delete item._id;
}
}
else if ($scope.item && $scope.item[idField]) {
state = "edit";
item = angular.copy($scope.item);
}
else {
state = "new";
if (typeof entityObj.blank === 'function') item = entityObj.blank();
else item = {};
}
var next = typeof $scope.onOpen === 'function' ? $scope.onOpen() : function (item, cb, state) { return cb(null, item); };
next(item, function (err, item) {
if (err) return swal("Não foi possível abrir esta janela", err, "warning");
var lookup = /*$lookup.get() ||*/ $scope.lookup;
var data = {
item: item,
entity: entityObj,
lookup: lookup,
view: $scope.view
};
$modal.open($scope.entity, size, data);
});
};
}
};
});