Bug 1111011-loop panel should close on 'Start a Conversation' click, r=MattN a=lsblakk
--- a/browser/components/loop/content/js/panel.js
+++ b/browser/components/loop/content/js/panel.js
@@ -691,17 +691,17 @@ loop.panel = (function(_, mozL10n) {
);
}
});
/**
* Room list.
*/
var RoomList = React.createClass({displayName: 'RoomList',
- mixins: [Backbone.Events],
+ mixins: [Backbone.Events, sharedMixins.WindowCloseMixin],
propTypes: {
store: React.PropTypes.instanceOf(loop.store.RoomStore).isRequired,
dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired,
userDisplayName: React.PropTypes.string.isRequired // for room creation
},
getInitialState: function() {
@@ -733,16 +733,18 @@ loop.panel = (function(_, mozL10n) {
return mozL10n.get("rooms_list_current_conversations", {num: numRooms});
},
_hasPendingOperation: function() {
return this.state.pendingCreation || this.state.pendingInitialRetrieval;
},
handleCreateButtonClick: function() {
+ this.closeWindow();
+
this.props.dispatcher.dispatch(new sharedActions.CreateRoom({
nameTemplate: mozL10n.get("rooms_default_room_name_template"),
roomOwner: this.props.userDisplayName
}));
},
render: function() {
if (this.state.error) {
--- a/browser/components/loop/content/js/panel.jsx
+++ b/browser/components/loop/content/js/panel.jsx
@@ -691,17 +691,17 @@ loop.panel = (function(_, mozL10n) {
);
}
});
/**
* Room list.
*/
var RoomList = React.createClass({
- mixins: [Backbone.Events],
+ mixins: [Backbone.Events, sharedMixins.WindowCloseMixin],
propTypes: {
store: React.PropTypes.instanceOf(loop.store.RoomStore).isRequired,
dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired,
userDisplayName: React.PropTypes.string.isRequired // for room creation
},
getInitialState: function() {
@@ -733,16 +733,18 @@ loop.panel = (function(_, mozL10n) {
return mozL10n.get("rooms_list_current_conversations", {num: numRooms});
},
_hasPendingOperation: function() {
return this.state.pendingCreation || this.state.pendingInitialRetrieval;
},
handleCreateButtonClick: function() {
+ this.closeWindow();
+
this.props.dispatcher.dispatch(new sharedActions.CreateRoom({
nameTemplate: mozL10n.get("rooms_default_room_name_template"),
roomOwner: this.props.userDisplayName
}));
},
render: function() {
if (this.state.error) {
--- a/browser/components/loop/test/desktop-local/panel_test.js
+++ b/browser/components/loop/test/desktop-local/panel_test.js
@@ -892,78 +892,83 @@ describe("loop.panel", function() {
expect(
roomEntry.getDOMNode().querySelector(".edit-in-place").textContent)
.eql("New room name");
});
});
});
describe("loop.panel.RoomList", function() {
- var roomStore, dispatcher, fakeEmail;
+ var roomStore, dispatcher, fakeEmail, dispatch;
beforeEach(function() {
fakeEmail = "fakeEmail@example.com";
dispatcher = new loop.Dispatcher();
roomStore = new loop.store.RoomStore(dispatcher, {
mozLoop: navigator.mozLoop
});
roomStore.setStoreState({
pendingCreation: false,
pendingInitialRetrieval: false,
rooms: [],
error: undefined
});
+ dispatch = sandbox.stub(dispatcher, "dispatch");
});
function createTestComponent() {
return TestUtils.renderIntoDocument(loop.panel.RoomList({
store: roomStore,
dispatcher: dispatcher,
userDisplayName: fakeEmail
}));
}
it("should dispatch a GetAllRooms action on mount", function() {
- var dispatch = sandbox.stub(dispatcher, "dispatch");
-
createTestComponent();
sinon.assert.calledOnce(dispatch);
sinon.assert.calledWithExactly(dispatch, new sharedActions.GetAllRooms());
});
it("should dispatch a CreateRoom action when clicking on the Start a " +
"conversation button",
function() {
navigator.mozLoop.userProfile = {email: fakeEmail};
- var dispatch = sandbox.stub(dispatcher, "dispatch");
var view = createTestComponent();
TestUtils.Simulate.click(view.getDOMNode().querySelector("button"));
sinon.assert.calledWith(dispatch, new sharedActions.CreateRoom({
nameTemplate: "fakeText",
roomOwner: fakeEmail
}));
});
+ it("should close the panel when 'Start a Conversation' is clicked",
+ function() {
+ var view = createTestComponent();
+
+ TestUtils.Simulate.click(view.getDOMNode().querySelector("button"));
+
+ sinon.assert.calledOnce(fakeWindow.close);
+ });
+
it("should disable the create button when a creation operation is ongoing",
function() {
- var dispatch = sandbox.stub(dispatcher, "dispatch");
roomStore.setStoreState({pendingCreation: true});
var view = createTestComponent();
var buttonNode = view.getDOMNode().querySelector("button[disabled]");
expect(buttonNode).to.not.equal(null);
});
it("should disable the create button when a list retrieval operation is pending",
function() {
- var dispatch = sandbox.stub(dispatcher, "dispatch");
roomStore.setStoreState({pendingInitialRetrieval: true});
var view = createTestComponent();
var buttonNode = view.getDOMNode().querySelector("button[disabled]");
expect(buttonNode).to.not.equal(null);
});
});