diaspora/app/assets/javascripts/app/views/contact_view.js
cmrd Senya 923fb8a763
Refactor app.views.AspectMembership
in order to support adding new aspect to a dropdown without full
page reload
2016-08-08 17:21:14 +03:00

80 lines
2.5 KiB
JavaScript

// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.views.Contact = app.views.Base.extend({
templateName: 'contact',
subviews: {
".aspect_membership_dropdown": "AspectMembershipView"
},
events: {
"click .contact_add-to-aspect" : "addContactToAspect",
"click .contact_remove-from-aspect" : "removeContactFromAspect"
},
tooltipSelector: '.contact_add-to-aspect, .contact_remove-from-aspect',
initialize: function() {
this.AspectMembershipView = new app.views.AspectMembership(
{person: _.extend(this.model.get("person"), {contact: this.model})}
);
},
presenter: function() {
return _.extend(this.defaultPresenter(), {
person_id : this.model.get('person_id'),
person : this.model.get('person'),
in_aspect: (app.aspect && this.model.inAspect(app.aspect.get('id'))) ? 'in_aspect' : '',
});
},
addContactToAspect: function(){
var self = this;
// do we create the first aspect membership for this person?
var startSharing = this.model.aspectMemberships.length === 0;
this.model.aspectMemberships.create({
"person_id": this.model.get("person_id"),
"aspect_id": app.aspect.get("id")
},{
success: function(){
app.events.trigger("aspect_membership:create", {
membership: {
aspectId: app.aspect.get("id"),
personId: self.model.get("person_id")
},
startSharing: startSharing
});
self.render();
},
error: function(){
var msg = Diaspora.I18n.t("contacts.error_add", { "name": self.model.get("person").name });
app.flashMessages.error(msg);
}
});
},
removeContactFromAspect: function(){
var self = this;
// do we destroy the last aspect membership for this person?
var stopSharing = this.model.aspectMemberships.length <= 1;
this.model.aspectMemberships
.find(function(membership){ return membership.get("aspect").id === app.aspect.id; })
.destroy({
success: function(){
app.events.trigger("aspect_membership:destroy", {
membership: {
aspectId: app.aspect.get("id"),
personId: self.model.get("person_id")
},
stopSharing: stopSharing
});
self.render();
},
error: function(){
var msg = Diaspora.I18n.t("contacts.error_remove", { "name": self.model.get("person").name });
app.flashMessages.error(msg);
}
});
}
});
// @license-end