Use card data from CardService so we don't need to store objects twice
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
@@ -135,7 +135,6 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
|
|||||||
var header = $('.section-header.card-description');
|
var header = $('.section-header.card-description');
|
||||||
header.find('.save-indicator.unsaved').hide();
|
header.find('.save-indicator.unsaved').hide();
|
||||||
header.find('.save-indicator.saved').fadeIn(250).fadeOut(1000);
|
header.find('.save-indicator.saved').fadeIn(250).fadeOut(1000);
|
||||||
StackService.updateCard($scope.status.edit);
|
|
||||||
});
|
});
|
||||||
$('#markdown input[type=checkbox]').removeAttr('disabled');
|
$('#markdown input[type=checkbox]').removeAttr('disabled');
|
||||||
|
|
||||||
@@ -178,7 +177,6 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
|
|||||||
var header = $('.section-header.card-description');
|
var header = $('.section-header.card-description');
|
||||||
header.find('.save-indicator.unsaved').hide();
|
header.find('.save-indicator.unsaved').hide();
|
||||||
header.find('.save-indicator.saved').fadeIn(250).fadeOut(1000);
|
header.find('.save-indicator.saved').fadeIn(250).fadeOut(1000);
|
||||||
StackService.updateCard($scope.status.edit);
|
|
||||||
$scope.status.saving = false;
|
$scope.status.saving = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -187,7 +185,6 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
|
|||||||
// handle rename to update information on the board as well
|
// handle rename to update information on the board as well
|
||||||
$scope.cardRename = function (card) {
|
$scope.cardRename = function (card) {
|
||||||
CardService.rename(card).then(function (data) {
|
CardService.rename(card).then(function (data) {
|
||||||
StackService.updateCard(card);
|
|
||||||
$scope.status.renameCard = false;
|
$scope.status.renameCard = false;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -197,19 +194,16 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
|
|||||||
var header = $('.section-content.card-description');
|
var header = $('.section-content.card-description');
|
||||||
header.find('.save-indicator.unsaved').hide();
|
header.find('.save-indicator.unsaved').hide();
|
||||||
header.find('.save-indicator.saved').fadeIn(500).fadeOut(1000);
|
header.find('.save-indicator.saved').fadeIn(500).fadeOut(1000);
|
||||||
StackService.updateCard(card);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.labelAssign = function (element, model) {
|
$scope.labelAssign = function (element, model) {
|
||||||
CardService.assignLabel($scope.cardId, element.id).then(function (data) {
|
CardService.assignLabel($scope.cardId, element.id).then(function (data) {
|
||||||
StackService.updateCard(CardService.getCurrent());
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.labelRemove = function (element, model) {
|
$scope.labelRemove = function (element, model) {
|
||||||
CardService.removeLabel($scope.cardId, element.id).then(function (data) {
|
CardService.removeLabel($scope.cardId, element.id).then(function (data) {
|
||||||
StackService.updateCard(CardService.getCurrent());
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -224,7 +218,6 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
|
|||||||
newDate.year(duedate.year());
|
newDate.year(duedate.year());
|
||||||
element.duedate = newDate.toISOString();
|
element.duedate = newDate.toISOString();
|
||||||
CardService.update(element);
|
CardService.update(element);
|
||||||
StackService.updateCard(element);
|
|
||||||
};
|
};
|
||||||
$scope.setDuedateTime = function (time) {
|
$scope.setDuedateTime = function (time) {
|
||||||
var element = CardService.getCurrent();
|
var element = CardService.getCurrent();
|
||||||
@@ -236,14 +229,12 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
|
|||||||
newDate.minute(time.minute());
|
newDate.minute(time.minute());
|
||||||
element.duedate = newDate.toISOString();
|
element.duedate = newDate.toISOString();
|
||||||
CardService.update(element);
|
CardService.update(element);
|
||||||
StackService.updateCard(element);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.resetDuedate = function () {
|
$scope.resetDuedate = function () {
|
||||||
var element = CardService.getCurrent();
|
var element = CardService.getCurrent();
|
||||||
element.duedate = null;
|
element.duedate = null;
|
||||||
CardService.update(element);
|
CardService.update(element);
|
||||||
StackService.updateCard(element);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -267,14 +258,12 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
|
|||||||
|
|
||||||
$scope.addAssignedUser = function(item) {
|
$scope.addAssignedUser = function(item) {
|
||||||
CardService.assignUser(CardService.getCurrent(), item.uid).then(function (data) {
|
CardService.assignUser(CardService.getCurrent(), item.uid).then(function (data) {
|
||||||
StackService.updateCard(CardService.getCurrent());
|
|
||||||
});
|
});
|
||||||
$scope.status.showAssignUser = false;
|
$scope.status.showAssignUser = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.removeAssignedUser = function(uid) {
|
$scope.removeAssignedUser = function(uid) {
|
||||||
CardService.unassignUser(CardService.getCurrent(), uid).then(function (data) {
|
CardService.unassignUser(CardService.getCurrent(), uid).then(function (data) {
|
||||||
StackService.updateCard(CardService.getCurrent());
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -163,6 +163,10 @@ app.factory('ApiService', function ($http, $q) {
|
|||||||
return this.data;
|
return this.data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ApiService.prototype.get = function (id) {
|
||||||
|
return this.data[id];
|
||||||
|
};
|
||||||
|
|
||||||
ApiService.prototype.getName = function () {
|
ApiService.prototype.getName = function () {
|
||||||
var funcNameRegex = /function (.{1,})\(/;
|
var funcNameRegex = /function (.{1,})\(/;
|
||||||
var results = (funcNameRegex).exec((this).constructor.toString());
|
var results = (funcNameRegex).exec((this).constructor.toString());
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
import app from '../app/App.js';
|
import app from '../app/App.js';
|
||||||
|
|
||||||
app.factory('StackService', function (ApiService, $http, $q) {
|
app.factory('StackService', function (ApiService, CardService, $http, $q) {
|
||||||
var StackService = function ($http, ep, $q) {
|
var StackService = function ($http, ep, $q) {
|
||||||
ApiService.call(this, $http, ep, $q);
|
ApiService.call(this, $http, ep, $q);
|
||||||
};
|
};
|
||||||
@@ -32,6 +32,12 @@ app.factory('StackService', function (ApiService, $http, $q) {
|
|||||||
$http.get(this.baseUrl + '/' + boardId).then(function (response) {
|
$http.get(this.baseUrl + '/' + boardId).then(function (response) {
|
||||||
self.clear();
|
self.clear();
|
||||||
self.addAll(response.data);
|
self.addAll(response.data);
|
||||||
|
// When loading a stack add cards to the CardService so we can fetch
|
||||||
|
// information from there. That way we don't need to refresh the whole
|
||||||
|
// stack data during digest if some value changes
|
||||||
|
angular.forEach(response.data, function (entity) {
|
||||||
|
CardService.addAll(entity.cards);
|
||||||
|
});
|
||||||
deferred.resolve(self.data);
|
deferred.resolve(self.data);
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
deferred.reject('Error while loading stacks');
|
deferred.reject('Error while loading stacks');
|
||||||
@@ -45,6 +51,9 @@ app.factory('StackService', function (ApiService, $http, $q) {
|
|||||||
$http.get(this.baseUrl + '/' + boardId + '/archived').then(function (response) {
|
$http.get(this.baseUrl + '/' + boardId + '/archived').then(function (response) {
|
||||||
self.clear();
|
self.clear();
|
||||||
self.addAll(response.data);
|
self.addAll(response.data);
|
||||||
|
angular.forEach(response.data, function (entity) {
|
||||||
|
CardService.addAll(entity.cards);
|
||||||
|
});
|
||||||
deferred.resolve(self.data);
|
deferred.resolve(self.data);
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
deferred.reject('Error while loading stacks');
|
deferred.reject('Error while loading stacks');
|
||||||
@@ -119,7 +128,7 @@ app.factory('StackService', function (ApiService, $http, $q) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// FIXME: Should not sure popup but proper undo mechanism
|
// FIXME: Should not show popup but proper undo mechanism
|
||||||
StackService.prototype.delete = function (id) {
|
StackService.prototype.delete = function (id) {
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|||||||
@@ -61,12 +61,12 @@
|
|||||||
data-as-sortable-item
|
data-as-sortable-item
|
||||||
ng-click="$event.stopPropagation()"
|
ng-click="$event.stopPropagation()"
|
||||||
ui-sref="board.card({boardId: id, cardId: c.id})"
|
ui-sref="board.card({boardId: id, cardId: c.id})"
|
||||||
ng-class="{'archived': c.archived, 'has-labels': c.labels.length>0, 'current': c.id == params.cardId }">
|
ng-class="{'archived': cardservice.get(c.id).archived, 'has-labels': cardservice.get(c.id).labels.length>0, 'current': cardservice.get(c.id).id == params.cardId }">
|
||||||
<div data-as-sortable-item-handle>
|
<div data-as-sortable-item-handle>
|
||||||
<div class="card-upper">
|
<div class="card-upper">
|
||||||
<h4>{{ c.title }}</h4>
|
<h4>{{ cardservice.get(c.id).title }}</h4>
|
||||||
<ul class="labels">
|
<ul class="labels">
|
||||||
<li ng-repeat="label in c.labels"
|
<li ng-repeat="label in cardservice.get(c.id).labels"
|
||||||
ng-style="labelStyle(label.color)" title="{{ label.title }}">
|
ng-style="labelStyle(label.color)" title="{{ label.title }}">
|
||||||
<span>{{ label.title }}</span>
|
<span>{{ label.title }}</span>
|
||||||
</li>
|
</li>
|
||||||
@@ -75,17 +75,21 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-controls">
|
<div class="card-controls">
|
||||||
<i class="icon icon-filetype-text" ng-if="c.description" title="{{ c.description }}"></i>
|
<i class="icon icon-filetype-text" ng-if="cardservice.get(c.id).description" title="{{ cardservice.get(c.id).description }}"></i>
|
||||||
<span class="due" ng-if="c.duedate" ng-class="{'overdue': c.overdue == 3, 'now': c.overdue == 2, 'next': c.overdue == 1 }" title="{{ c.duedate }}">
|
<span class="due" ng-if="cardservice.get(c.id).duedate" ng-class="{'overdue': cardservice.get(c.id).overdue == 3, 'now': cardservice.get(c.id).overdue == 2, 'next': cardservice.get(c.id).overdue == 1 }" title="{{ cardservice.get(c.id).duedate }}">
|
||||||
<i class="icon icon-badge"></i>
|
<i class="icon icon-badge"></i>
|
||||||
<span data-timestamp="{{ c.duedate | dateToTimestamp }}" class="live-relative-timestamp">{{ c.duedate | relativeDateFilterString }}</span>
|
<span data-timestamp="{{ cardservice.get(c.id).duedate | dateToTimestamp }}" class="live-relative-timestamp">{{ cardservice.get(c.id).duedate | relativeDateFilterString }}</span>
|
||||||
</span>
|
</span>
|
||||||
<div class="card-tasks" ng-if="getCheckboxes(c.description)[1] > 0">
|
<div class="card-tasks" ng-if="getCheckboxes(cardservice.get(c.id).description)[1] > 0">
|
||||||
<i class="icon icon-checkmark"></i>
|
<i class="icon icon-checkmark"></i>
|
||||||
<span>{{ getCheckboxes(c.description)[0] }}/{{ getCheckboxes(c.description)[1] }}</span>
|
<span>{{ getCheckboxes(cardservice.get(c.id).description)[0] }}/{{ getCheckboxes(cardservice.get(c.id).description)[1] }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="card-files" ng-if="attachmentCount(cardservice.get(c.id).attachments) > 0">
|
||||||
|
<i class="icon icon-files-dark"></i>
|
||||||
|
<span>{{ attachmentCount(cardservice.get(c.id).attachments) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-assigned-users">
|
<div class="card-assigned-users">
|
||||||
<div class="assigned-user" ng-repeat="user in c.assignedUsers | limitTo: 3">
|
<div class="assigned-user" ng-repeat="user in cardservice.get(c.id).assignedUsers | limitTo: 3">
|
||||||
<avatar data-user="{{ user.participant.uid }}" data-displayname="{{ user.participant.displayname }}" data-tooltip></avatar>
|
<avatar data-user="{{ user.participant.uid }}" data-displayname="{{ user.participant.displayname }}" data-tooltip></avatar>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user