From 48630b3a04707394f26a305ae2f212b44d6867bb Mon Sep 17 00:00:00 2001 From: Steffen van Bergerem Date: Mon, 28 Aug 2017 00:23:39 +0200 Subject: [PATCH] Fix conversation recipient prefill on contacts page Use the already available contacts data for the prefill --- app/assets/javascripts/app/pages/contacts.js | 10 +++++++++- app/controllers/conversations_controller.rb | 4 ---- app/views/conversations/new.html.haml | 3 +-- .../conversations_controller_spec.rb | 5 ----- spec/javascripts/app/pages/contacts_spec.js | 19 +++++++++++-------- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/app/assets/javascripts/app/pages/contacts.js b/app/assets/javascripts/app/pages/contacts.js index f9bd2db27..64c17422d 100644 --- a/app/assets/javascripts/app/pages/contacts.js +++ b/app/assets/javascripts/app/pages/contacts.js @@ -80,7 +80,15 @@ app.pages.Contacts = Backbone.View.extend({ showMessageModal: function(){ $("#conversationModal").on("modal:loaded", function() { - new app.views.ConversationsForm({prefill: gon.conversationPrefill}); + var people = app.contacts.filter(function(contact) { + return contact.inAspect(app.aspect.get("id")); + }).map(function(contact) { + return _.extend({ + avatar: contact.person.get("profile").avatar.small, + handle: contact.person.get("diaspora_id") + }, contact.person.attributes); + }); + new app.views.ConversationsForm({prefill: people}); }); app.helpers.showModal("#conversationModal"); }, diff --git a/app/controllers/conversations_controller.rb b/app/controllers/conversations_controller.rb index 87cb28ded..7694cef79 100644 --- a/app/controllers/conversations_controller.rb +++ b/app/controllers/conversations_controller.rb @@ -103,10 +103,6 @@ class ConversationsController < ApplicationController render :layout => true else - if params[:aspect_id] - gon.push conversation_prefill: current_user.aspects - .find(params[:aspect_id]).contacts.map {|c| c.person.as_json } - end render :layout => false end end diff --git a/app/views/conversations/new.html.haml b/app/views/conversations/new.html.haml index e66a929dd..e43e714c4 100644 --- a/app/views/conversations/new.html.haml +++ b/app/views/conversations/new.html.haml @@ -1,2 +1 @@ -= include_gon camel_case: true -= render 'conversations/new' += render "conversations/new" diff --git a/spec/controllers/conversations_controller_spec.rb b/spec/controllers/conversations_controller_spec.rb index 1d4206722..a2d2e1d49 100644 --- a/spec/controllers/conversations_controller_spec.rb +++ b/spec/controllers/conversations_controller_spec.rb @@ -20,11 +20,6 @@ describe ConversationsController, :type => :controller do get :new, params: {modal: true} expect(response).to be_success end - - it "assigns a set of contacts if passed an aspect id" do - get :new, params: {aspect_id: alice.aspects.first.id, modal: true} - expect(controller.gon.conversation_prefill).to eq(alice.aspects.first.contacts.map {|c| c.person.as_json }) - end end context "mobile" do diff --git a/spec/javascripts/app/pages/contacts_spec.js b/spec/javascripts/app/pages/contacts_spec.js index a1be4be48..8ac9c19bb 100644 --- a/spec/javascripts/app/pages/contacts_spec.js +++ b/spec/javascripts/app/pages/contacts_spec.js @@ -290,17 +290,20 @@ describe("app.pages.Contacts", function(){ }); it("initializes app.views.ConversationsForm with correct parameters when modal is loaded", function() { - gon.conversationPrefill = [ - {id: 1, name: "diaspora user", handle: "diaspora-user@pod.tld"}, - {id: 2, name: "other diaspora user", handle: "other-diaspora-user@pod.tld"}, - {id: 3, name: "user@pod.tld", handle: "user@pod.tld"} - ]; - spyOn(app.views.ConversationsForm.prototype, "initialize"); + app.aspect = new app.models.Aspect(app.contacts.first().get("aspect_memberships")[0].aspect); this.view.showMessageModal(); $("#conversationModal").trigger("modal:loaded"); - expect(app.views.ConversationsForm.prototype.initialize) - .toHaveBeenCalledWith({prefill: gon.conversationPrefill}); + expect(app.views.ConversationsForm.prototype.initialize).toHaveBeenCalled(); + + var prefill = app.views.ConversationsForm.prototype.initialize.calls.mostRecent().args[0].prefill; + var people = app.contacts.filter(function(contact) { return contact.inAspect(app.aspect.get("id")); }); + expect(prefill.length).toBe(people.length); + + var person = app.contacts.first().person; + expect(prefill[0].handle).toBe(person.get("diaspora_id")); + expect(prefill[0].name).toBe(person.get("name")); + expect(prefill[0].avatar).toBe(person.get("profile").avatar.small); }); }); });