diff --git a/README.md b/README.md index 2b38265713..ae1cd17c9a 100644 --- a/README.md +++ b/README.md @@ -25,9 +25,14 @@ You can use matrix-react-sdk directly, but to do this you would have to provide How to customise the SDK ======================== -The SDK uses the 'atomic' design pattern as seen at http://patternlab.io to +The SDK formerly used the 'atomic' design pattern as seen at http://patternlab.io to encourage a very modular and reusable architecture, making it easy to customise and use UI widgets independently of the rest of the SDK and your app. + +So unfortunately at the moment this document does not describe how to customize your UI! + +###This is the old description for the atomic design pattern: + In practice this means: * The UI of the app is strictly split up into a hierarchy of components. diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index 09583951fc..fca688ee15 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1181,7 +1181,7 @@ module.exports = React.createClass({ defaultIsUrl={this.props.config.default_is_url} customHsUrl={this.getCurrentHsUrl()} customIsUrl={this.getCurrentIsUrl()} - onForgotPasswordClick={this.onForgotPasswordClick} + onForgotPasswordClick={this.onForgotPasswordClick} onLoginAsGuestClick={this.props.enableGuest && this.props.config && this.props.config.default_hs_url ? this._registerAsGuest.bind(this, true) : undefined} onCancelClick={ this.state.guestCreds ? this.onReturnToGuestClick : null } /> diff --git a/src/components/structures/MessagePanel.js b/src/components/structures/MessagePanel.js index 49f4783eaa..16b4892bc0 100644 --- a/src/components/structures/MessagePanel.js +++ b/src/components/structures/MessagePanel.js @@ -85,6 +85,12 @@ module.exports = React.createClass({ // opaque readreceipt info for each userId; used by ReadReceiptMarker // to manage its animations this._readReceiptMap = {}; + + this._isMounted = true; + }, + + componentWillUnmount: function() { + this._isMounted = false; }, /* get the DOM node representing the given event */ @@ -201,6 +207,10 @@ module.exports = React.createClass({ } }, + _isUnmounting: function() { + return !this._isMounted; + }, + _getEventTiles: function() { var EventTile = sdk.getComponent('rooms.EventTile'); @@ -351,6 +361,7 @@ module.exports = React.createClass({ onWidgetLoad={this._onWidgetLoad} readReceipts={readReceipts} readReceiptMap={this._readReceiptMap} + checkUnmounting={this._isUnmounting} eventSendStatus={mxEv.status} last={last} isSelectedEvent={highlight}/> diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index ac848030af..9b8322f69e 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -210,7 +210,7 @@ module.exports = React.createClass({ MatrixClientPeg.get().removeListener("RoomState.members", this.onRoomStateMember); } - window.removeEventListener('resize', this.onResize); + window.removeEventListener('resize', this.onResize); // no need to do this as Dir & Settings are now overlays. It just burnt CPU. // console.log("Tinter.tint from RoomView.unmount"); @@ -878,7 +878,7 @@ module.exports = React.createClass({ this.setState({ uploadingRoomSettings: true, }); - + var newName = this.refs.header.getEditedName(); if (newName !== undefined) { this.refs.room_settings.setName(newName); @@ -887,7 +887,7 @@ module.exports = React.createClass({ if (newTopic !== undefined) { this.refs.room_settings.setTopic(newTopic); } - + this.refs.room_settings.save().then((results) => { var fails = results.filter(function(result) { return result.state !== "fulfilled" }); console.log("Settings saved with %s errors", fails.length); @@ -1229,7 +1229,7 @@ module.exports = React.createClass({ rightPanelCollapsed={ this.props.rightPanelCollapsed } />
-
- - {call.isMicrophoneMuted()
diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index 5c70c9da10..7db8af9312 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -116,6 +116,12 @@ module.exports = React.createClass({ */ readReceiptMap: React.PropTypes.object, + /* A function which is used to check if the parent panel is being + * unmounted, to avoid unnecessary work. Should return true if we + * are being unmounted. + */ + checkUnmounting: React.PropTypes.func, + /* the status of this event - ie, mxEvent.status. Denormalised to here so * that we can tell when it changes. */ eventSendStatus: React.PropTypes.string, @@ -261,6 +267,7 @@ module.exports = React.createClass({
This invitation was sent to {this.props.invitedEmail}, which is not associated with this account.
- You may wish to login with a different account, or add this email to your this account. + You may wish to login with a different account, or add this email to this account.
}