load ext in context of item
This commit is contained in:
@@ -10,7 +10,21 @@ class ContextualExtensionsMenu {
|
|||||||
|
|
||||||
controller($scope, modelManager, extensionManager) {
|
controller($scope, modelManager, extensionManager) {
|
||||||
'ngInject';
|
'ngInject';
|
||||||
$scope.extensions = extensionManager.extensionsInContextOfItem($scope.item);
|
|
||||||
|
$scope.extensions = _.map(extensionManager.extensionsInContextOfItem($scope.item), function(ext){
|
||||||
|
return _.cloneDeep(ext);
|
||||||
|
});
|
||||||
|
|
||||||
|
for(var ext of $scope.extensions) {
|
||||||
|
ext.loading = true;
|
||||||
|
extensionManager.loadExtensionInContextOfItem(ext, $scope.item, function(scopedExtension) {
|
||||||
|
ext.loading = false;
|
||||||
|
if(scopedExtension) {
|
||||||
|
_.merge(ext, scopedExtension);
|
||||||
|
ext.actions = scopedExtension.actions;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
$scope.executeAction = function(action, extension) {
|
$scope.executeAction = function(action, extension) {
|
||||||
action.running = true;
|
action.running = true;
|
||||||
|
|||||||
@@ -71,6 +71,25 @@ class ExtensionManager {
|
|||||||
this.apiController.sync(null);
|
this.apiController.sync(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Loads an extension in the context of a certain item. The server then has the chance to respond with actions that are
|
||||||
|
relevant just to this item. The response extension is not saved, just displayed as a one-time thing.
|
||||||
|
*/
|
||||||
|
loadExtensionInContextOfItem(extension, item, callback) {
|
||||||
|
this.Restangular.oneUrl(extension.url, extension.url).customGET("", {content_type: item.content_type, item_uuid: item.uuid}).then(function(response){
|
||||||
|
var scopedExtension = new Extension(response.plain());
|
||||||
|
scopedExtension.url = extension.url;
|
||||||
|
callback(scopedExtension);
|
||||||
|
}.bind(this))
|
||||||
|
.catch(function(response){
|
||||||
|
console.log("Error reloading extension", response);
|
||||||
|
callback(null);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Registers new extension and saves it to user's account
|
||||||
|
*/
|
||||||
retrieveExtensionFromServer(url, callback) {
|
retrieveExtensionFromServer(url, callback) {
|
||||||
this.Restangular.oneUrl(url, url).get().then(function(response){
|
this.Restangular.oneUrl(url, url).get().then(function(response){
|
||||||
var ext = this.handleExtensionLoadExternalResponseItem(url, response.plain());
|
var ext = this.handleExtensionLoadExternalResponseItem(url, response.plain());
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
padding-top: 12px;
|
padding-top: 12px;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
> .name {
|
> .name {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
@@ -23,6 +24,14 @@
|
|||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
> .loading {
|
||||||
|
position: absolute;
|
||||||
|
height: 15px;
|
||||||
|
width: 15px;
|
||||||
|
right: 10px;
|
||||||
|
top: 20px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
.access
|
.access
|
||||||
Can access your data
|
Can access your data
|
||||||
%strong {{accessTypeForExtension(extension)}}
|
%strong {{accessTypeForExtension(extension)}}
|
||||||
|
.spinner.loading{"ng-if" => "extension.loading"}
|
||||||
%ul
|
%ul
|
||||||
%li.action{"ng-repeat" => "action in extension.actionsWithContextForItem(item)", "ng-click" => "executeAction(action, extension)"}
|
%li.action{"ng-repeat" => "action in extension.actionsWithContextForItem(item)", "ng-click" => "executeAction(action, extension)"}
|
||||||
.name {{action.label}}
|
.name {{action.label}}
|
||||||
|
|||||||
Reference in New Issue
Block a user