UNPKG

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
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); }); }; } }; });