stack, card undo delete: refactoring

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

stack undo delete: serve cards with deleted and delete actions

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

stack, cards undo delete: codacy

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

card undo delete: 526#discussion_r204501758, refactoring

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

card, stack undo delete: code review fixes #1

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

undo card, stack delete: show deleted stacks name in deleted card listing

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>
This commit is contained in:
Manuel Arno Korfmann
2018-07-19 00:16:31 +02:00
committed by Julius Härtl
parent 95548fba54
commit 41d30d4fd4
9 changed files with 137 additions and 98 deletions

View File

@@ -42,15 +42,12 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
$scope.board = BoardService.getCurrent();
$scope.uploader = FileService.uploader;
$scope.deletedCards = {};
$scope.deletedStacks = {};
$scope.$watch(function() {
return $state.current;
}, function(currentState) {
if(currentState.name === 'board.detail') {
$scope.loadDeletedEntity(CardService, 'deletedCards');
$scope.loadDeletedEntity(StackService, 'deletedStacks');
CardService.fetchDeleted($scope.id);
StackService.fetchDeleted($scope.id);
}
});
@@ -148,16 +145,6 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
});
};
$scope.loadDeletedEntity = function(service, scopeKey) {
service.fetchDeleted($scope.id).then(function (data) {
for(i=0;i<data.length;i++) {
$scope[scopeKey][data[i].id] = data[i];
}
}, function (error) {
$scope.statusservice.setError('Error occured', error);
});
};
$scope.loadDefault = function () {
StackService.fetchAll($scope.id).then(function (data) {
$scope.statusservice.releaseWaiting();
@@ -209,47 +196,52 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
};
$scope.stackDelete = function (stack) {
$scope.stackservice.delete(stack.id).then(function() {
$scope.deletedStacks[stack.id] = stack;
});
}
$scope.stackservice.delete(stack.id);
};
$scope.stackUndoDelete = function (deletedStack) {
return StackService.undoDelete(deletedStack).then(function() {
delete $scope.deletedStacks[deletedStack.id];
});
}
return StackService.undoDelete(deletedStack);
};
$scope.cardDelete = function (card) {
CardService.delete(card.id).then(function () {
StackService.removeCard(card);
$scope.deletedCards[card.id] = card;
});
};
$scope.cardUndoDelete = function (deletedCard) {
CardService.undoDelete(deletedCard).then(function() {
delete $scope.deletedCards[deletedCard.id];
var associatedDeletedStack = $scope.deletedStacks[deletedCard.stackId];
if(associatedDeletedStack !== undefined) {
OC.dialogs.confirm(
t('deck', 'The associated stack is deleted as well, do you want to restore it as well?'),
t('deck', 'Yes'),
function(state) {
if (state) {
$scope.stackUndoDelete(associatedDeletedStack).then(function() {
StackService.addCard(deletedCard);
});
}
});
} else {
StackService.addCard(deletedCard);
}
});
var associatedDeletedStack = $scope.stackservice.deleted[deletedCard.stackId];
if(associatedDeletedStack !== undefined) {
$scope.cardAndStackUndoDelete(deletedCard, associatedDeletedStack);
} else {
$scope._cardUndoDelete(deletedCard);
}
};
$scope.cardAndStackUndoDelete = function(deletedCard, associatedDeletedStack) {
OC.dialogs.confirm(
t('deck', 'The associated stack is deleted as well, it will be restored as well.'),
t('deck', 'Restore associated stack'),
function(state) {
if (state) {
$scope._cardAndStackUndoDelete(deletedCard, associatedDeletedStack);
}
}
);
}
$scope._cardAndStackUndoDelete = function(deletedCard, associatedDeletedStack) {
$scope.stackUndoDelete(associatedDeletedStack).then(function() {
$scope._cardUndoDelete(deletedCard);
});
}
$scope._cardUndoDelete = function(deletedCard) {
CardService.undoDelete(deletedCard).then(function() {
StackService.addCard(deletedCard);
});
}
$scope.cardArchive = function (card) {
CardService.archive(card);
StackService.removeCard(card);

View File

@@ -24,15 +24,27 @@ import app from '../app/App.js';
/** global: oc_defaults */
app.factory('ApiService', function ($http, $q) {
var ApiService = function (http, endpoint) {
// Consider renaming endpoint to resource
this.endpoint = endpoint;
this.baseUrl = OC.generateUrl('/apps/deck/' + endpoint);
this.baseUrl = this.generateUrl(this.endpoint);
this.http = http;
this.q = $q;
this.data = {};
this.deleted = {};
this.id = null;
this.sorted = [];
};
ApiService.prototype.generateUrl = function(path) {
return OC.generateUrl('/apps/deck/' + path);
};
ApiService.prototype.tryAllThenDeleted = function(id) {
let object = this.data[id];
if (object === undefined) object = this.deleted[id];
return object;
};
ApiService.prototype.fetchAll = function () {
var deferred = $q.defer();
var self = this;
@@ -51,11 +63,18 @@ app.factory('ApiService', function ($http, $q) {
ApiService.prototype.fetchDeleted = function (scopeId) {
var deferred = $q.defer();
var self = this;
$http.get(this.baseUrl + '/deleted/' + scopeId).then(function (response) {
var objects = response.data;
deferred.resolve(objects);
$http.get(this.generateUrl(scopeId + '/' + this.endpoint + '/deleted')).then(function (response) {
var objects = response.data;
objects.forEach(function (obj) {
self.deleted[obj.id] = obj;
if(self.afterFetch !== undefined) {
self.afterFetch(obj);
}
});
deferred.resolve(objects);
}, function (error) {
deferred.reject('Fetching ' + self.endpoint + ' failed');
deferred.reject('Fetching ' + self.endpoint + ' failed');
});
return deferred.promise;
};
@@ -117,6 +136,7 @@ app.factory('ApiService', function ($http, $q) {
var self = this;
$http.delete(this.baseUrl + '/' + id).then(function (response) {
self.deleted[id] = self.data[id];
self.remove(id);
deferred.resolve(response.data);
@@ -134,6 +154,7 @@ app.factory('ApiService', function ($http, $q) {
promise.then(function() {
self.data[entity.id] = entity;
self.remove(entity.id, 'deleted');
});
return promise;
@@ -156,9 +177,9 @@ app.factory('ApiService', function ($http, $q) {
element.status = {};
}
};
ApiService.prototype.remove = function (id) {
if (this.data[id] !== undefined) {
delete this.data[id];
ApiService.prototype.remove = function (id, collection = 'data') {
if (this[collection][id] !== undefined) {
delete this[collection][id];
}
};
ApiService.prototype.addAll = function (entities) {

View File

@@ -28,6 +28,10 @@ app.factory('StackService', function (ApiService, CardService, $http, $q) {
};
StackService.prototype = angular.copy(ApiService.prototype);
StackService.prototype.afterFetch = function(stack) {
CardService.addAll(stack.cards);
};
StackService.prototype.fetchAll = function (boardId) {
var deferred = $q.defer();
var self = this;