mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 21:00:42 +02:00
109 lines
3.1 KiB
JavaScript
109 lines
3.1 KiB
JavaScript
/** @jsx React.DOM */
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/* global loop:true, React */
|
|
|
|
var loop = loop || {};
|
|
loop.roomViews = (function(mozL10n) {
|
|
"use strict";
|
|
|
|
/**
|
|
* Root object, by default set to window.
|
|
* @type {DOMWindow|Object}
|
|
*/
|
|
var rootObject = window;
|
|
|
|
/**
|
|
* Sets a new root object. This is useful for testing native DOM events so we
|
|
* can fake them.
|
|
*
|
|
* @param {Object}
|
|
*/
|
|
function setRootObject(obj) {
|
|
rootObject = obj;
|
|
}
|
|
|
|
var EmptyRoomView = React.createClass({displayName: 'EmptyRoomView',
|
|
mixins: [Backbone.Events],
|
|
|
|
propTypes: {
|
|
mozLoop:
|
|
React.PropTypes.object.isRequired,
|
|
localRoomStore:
|
|
React.PropTypes.instanceOf(loop.store.LocalRoomStore).isRequired,
|
|
},
|
|
|
|
getInitialState: function() {
|
|
return this.props.localRoomStore.getStoreState();
|
|
},
|
|
|
|
componentWillMount: function() {
|
|
this.listenTo(this.props.localRoomStore, "change",
|
|
this._onLocalRoomStoreChanged);
|
|
},
|
|
|
|
componentDidMount: function() {
|
|
// XXXremoveMe (just the conditional itself) in patch 2 for bug 1074686,
|
|
// once the addCallback stuff lands
|
|
if (this.props.mozLoop.rooms && this.props.mozLoop.rooms.addCallback) {
|
|
this.props.mozLoop.rooms.addCallback(
|
|
this.state.localRoomId,
|
|
"RoomCreationError", this.onCreationError);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Attached to the "RoomCreationError" with mozLoop.rooms.addCallback,
|
|
* which is fired mozLoop.rooms.createRoom from the panel encounters an
|
|
* error while attempting to create the room for this view.
|
|
*
|
|
* @param {Error} err - JS Error object with info about the problem
|
|
*/
|
|
onCreationError: function(err) {
|
|
// XXX put up a user friendly error instead of this
|
|
rootObject.console.error("EmptyRoomView creation error: ", err);
|
|
},
|
|
|
|
/**
|
|
* Handles a "change" event on the localRoomStore, and updates this.state
|
|
* to match the store.
|
|
*
|
|
* @private
|
|
*/
|
|
_onLocalRoomStoreChanged: function() {
|
|
this.setState(this.props.localRoomStore.getStoreState());
|
|
},
|
|
|
|
componentWillUnmount: function() {
|
|
this.stopListening(this.props.localRoomStore);
|
|
|
|
// XXXremoveMe (just the conditional itself) in patch 2 for bug 1074686,
|
|
// once the addCallback stuff lands
|
|
if (this.props.mozLoop.rooms && this.props.mozLoop.rooms.removeCallback) {
|
|
this.props.mozLoop.rooms.removeCallback(
|
|
this.state.localRoomId,
|
|
"RoomCreationError", this.onCreationError);
|
|
}
|
|
},
|
|
|
|
render: function() {
|
|
// XXX switch this to use the document title mixin once bug 1081079 lands
|
|
if (this.state.serverData && this.state.serverData.roomName) {
|
|
rootObject.document.title = this.state.serverData.roomName;
|
|
}
|
|
|
|
return (
|
|
React.DOM.div({className: "goat"})
|
|
);
|
|
}
|
|
});
|
|
|
|
return {
|
|
setRootObject: setRootObject,
|
|
EmptyRoomView: EmptyRoomView
|
|
};
|
|
|
|
})(document.mozL10n || navigator.mozL10n);;
|