Something starting to resemble a Matrix Client
This commit is contained in:
parent
2f6a123118
commit
125fa78bc6
|
@ -0,0 +1,6 @@
|
||||||
|
.mx_RoomHeader {
|
||||||
|
background-color: #eee;
|
||||||
|
font-weight: bold;
|
||||||
|
height: 1em;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
|
@ -5,6 +5,17 @@
|
||||||
margin-top: 1px;
|
margin-top: 1px;
|
||||||
margin-bottom: 1px;
|
margin-bottom: 1px;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
border: 2px solid white;
|
||||||
|
transition: background-color 0.1s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomTile.selected {
|
||||||
|
border: 2px inset #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomTile:hover {
|
||||||
|
background-color: #aad;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomTile_name {
|
.mx_RoomTile_name {
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
.mx_RoomList {
|
||||||
|
display: table-row;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_RoomList ul {
|
.mx_RoomList ul {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
.mx_RoomView {
|
||||||
|
display: table-cell;
|
||||||
|
padding-left: 5px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomView ul {
|
||||||
|
padding: 0px;
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
.mx_MatrixChat_leftPanel {
|
||||||
|
display: table-cell;
|
||||||
|
}
|
|
@ -18,10 +18,11 @@
|
||||||
"start": "parallelshell 'npm run start:js' 'npm run start:css'"
|
"start": "parallelshell 'npm run start:js' 'npm run start:css'"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"react-loader": "^1.4.0",
|
"classnames": "^2.1.2",
|
||||||
"flux": "^2.0.3",
|
"flux": "^2.0.3",
|
||||||
"matrix-js-sdk": "0.0.4",
|
"matrix-js-sdk": "0.0.4",
|
||||||
"react": "^0.13.0"
|
"react": "^0.13.0",
|
||||||
|
"react-loader": "^1.4.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"catw": "^1.0.1",
|
"catw": "^1.0.1",
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
var React = require('react');
|
||||||
|
|
||||||
|
var mxCliPeg = require("../MatrixClientPeg");
|
||||||
|
|
||||||
|
var dis = require("../dispatcher");
|
||||||
|
|
||||||
|
module.exports = React.createClass({
|
||||||
|
onClick: function() {
|
||||||
|
dis.dispatch({
|
||||||
|
action: 'logout'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
render: function() {
|
||||||
|
return (
|
||||||
|
<button className="mx_LogoutButton" onClick={this.onClick}>Sign out</button>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,14 @@
|
||||||
|
var React = require('react');
|
||||||
|
|
||||||
|
var LogoutButton = require("../atoms/LogoutButton");
|
||||||
|
|
||||||
|
module.exports = React.createClass({
|
||||||
|
render: function() {
|
||||||
|
return (
|
||||||
|
<div className="mx_MatrixToolbar">
|
||||||
|
<LogoutButton />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
var React = require('react');
|
||||||
|
|
||||||
|
module.exports = React.createClass({
|
||||||
|
render: function() {
|
||||||
|
//{this.props.mxEvent.getContent().body}
|
||||||
|
return (
|
||||||
|
<div className="mx_MessageTile">
|
||||||
|
{JSON.stringify(this.props.mxEvent.getContent())}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
|
@ -3,8 +3,8 @@ var React = require('react');
|
||||||
module.exports = React.createClass({
|
module.exports = React.createClass({
|
||||||
render: function() {
|
render: function() {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div className="mx_RoomHeader">
|
||||||
{this.props.event.content.body}
|
{this.props.room.name}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
},
|
},
|
|
@ -1,9 +1,23 @@
|
||||||
var React = require('react');
|
var React = require('react');
|
||||||
|
var classNames = require('classnames');
|
||||||
|
|
||||||
|
var dis = require("../dispatcher");
|
||||||
|
|
||||||
module.exports = React.createClass({
|
module.exports = React.createClass({
|
||||||
|
onClick: function() {
|
||||||
|
dis.dispatch({
|
||||||
|
action: 'view_room',
|
||||||
|
room_id: this.props.room.roomId
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
render: function() {
|
render: function() {
|
||||||
|
var classes = classNames({
|
||||||
|
'mx_RoomTile': true,
|
||||||
|
'selected': this.props.selected
|
||||||
|
});
|
||||||
return (
|
return (
|
||||||
<div className="mx_RoomTile">
|
<div className={classes} onClick={this.onClick}>
|
||||||
<div className="mx_RoomTile_name">{this.props.room.name}</div>
|
<div className="mx_RoomTile_name">{this.props.room.name}</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -12,9 +12,11 @@ module.exports = React.createClass({
|
||||||
},
|
},
|
||||||
|
|
||||||
makeRoomTiles: function() {
|
makeRoomTiles: function() {
|
||||||
|
var that = this;
|
||||||
return this.state.roomList.map(function(room) {
|
return this.state.roomList.map(function(room) {
|
||||||
|
var selected = room.roomId == that.props.selectedRoom;
|
||||||
return (
|
return (
|
||||||
<RoomTile room={room} key={room.roomId} />
|
<RoomTile room={room} key={room.roomId} selected={selected} />
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,23 +1,30 @@
|
||||||
var React = require('react');
|
var React = require('react');
|
||||||
var Message = require('../molecules/Message');
|
var MessageTile = require('../molecules/MessageTile');
|
||||||
|
var RoomHeader = require('../molecules/RoomHeader');
|
||||||
|
|
||||||
|
var MatrixClientPeg = require("../MatrixClientPeg");
|
||||||
|
|
||||||
module.exports = React.createClass({
|
module.exports = React.createClass({
|
||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
return {
|
return {
|
||||||
messages: [ { foo: "bar"} ]
|
room: MatrixClientPeg.get().getRoom(this.props.room_id)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
render: function() {
|
getMessageTiles: function() {
|
||||||
/*var messageItems = this.state.messages.map(function(ev) {
|
return this.state.room.timeline.map(function(mxEv) {
|
||||||
return (
|
return (
|
||||||
<Message ev={ev} />
|
<MessageTile mxEvent={mxEv} key={mxEv.getId()} />
|
||||||
);
|
);
|
||||||
});*/
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
render: function() {
|
||||||
return (
|
return (
|
||||||
//{messageItems}
|
<div className="mx_RoomView">
|
||||||
<div>
|
<RoomHeader room={this.state.room} />
|
||||||
<ul className="message-list" ref="messageList">
|
<ul>
|
||||||
|
{this.getMessageTiles()}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -2,13 +2,14 @@ var React = require('react');
|
||||||
|
|
||||||
var RoomList = require('../organisms/RoomList');
|
var RoomList = require('../organisms/RoomList');
|
||||||
var RoomView = require('../organisms/RoomView');
|
var RoomView = require('../organisms/RoomView');
|
||||||
|
var MatrixToolbar = require('../molecules/MatrixToolbar');
|
||||||
var Loader = require("react-loader");
|
var Loader = require("react-loader");
|
||||||
|
|
||||||
var Login = require('../templates/Login');
|
var Login = require('../templates/Login');
|
||||||
|
|
||||||
var mxCliPeg = require("../MatrixClientPeg");
|
var mxCliPeg = require("../MatrixClientPeg");
|
||||||
|
|
||||||
//var dis = require("../dispatcher");
|
var dis = require("../dispatcher");
|
||||||
|
|
||||||
module.exports = React.createClass({
|
module.exports = React.createClass({
|
||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
|
@ -19,11 +20,28 @@ module.exports = React.createClass({
|
||||||
},
|
},
|
||||||
|
|
||||||
componentDidMount: function() {
|
componentDidMount: function() {
|
||||||
|
this.dispatcherRef = dis.register(this.onAction);
|
||||||
if (this.state.logged_in) {
|
if (this.state.logged_in) {
|
||||||
this.startMatrixClient();
|
this.startMatrixClient();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
componentWillUnmount: function() {
|
||||||
|
dis.unregister(this.dispatcherRef);
|
||||||
|
},
|
||||||
|
|
||||||
|
onAction: function(payload) {
|
||||||
|
switch (payload.action) {
|
||||||
|
case 'logout':
|
||||||
|
mxCliPeg.replace(null);
|
||||||
|
this.setState({
|
||||||
|
logged_in: false,
|
||||||
|
ready: false
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
onLoggedIn: function() {
|
onLoggedIn: function() {
|
||||||
this.setState({logged_in: true});
|
this.setState({logged_in: true});
|
||||||
this.startMatrixClient();
|
this.startMatrixClient();
|
||||||
|
@ -33,7 +51,11 @@ module.exports = React.createClass({
|
||||||
var cli = mxCliPeg.get();
|
var cli = mxCliPeg.get();
|
||||||
var that = this;
|
var that = this;
|
||||||
cli.on('syncComplete', function() {
|
cli.on('syncComplete', function() {
|
||||||
that.setState({ready: true});
|
var firstRoom = null;
|
||||||
|
if (cli.getRooms() && cli.getRooms().length) {
|
||||||
|
firstRoom = cli.getRooms()[0].roomId;
|
||||||
|
}
|
||||||
|
that.setState({ready: true, currentRoom: firstRoom});
|
||||||
});
|
});
|
||||||
cli.startClient();
|
cli.startClient();
|
||||||
},
|
},
|
||||||
|
@ -42,8 +64,11 @@ module.exports = React.createClass({
|
||||||
if (this.state.logged_in && this.state.ready) {
|
if (this.state.logged_in && this.state.ready) {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<RoomList />
|
<div className="mx_MatrixChat_leftPanel">
|
||||||
<RoomView />
|
<MatrixToolbar />
|
||||||
|
<RoomList selectedRoom={this.state.currentRoom} />
|
||||||
|
</div>
|
||||||
|
<RoomView room_id={this.state.currentRoom} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
} else if (this.state.logged_in) {
|
} else if (this.state.logged_in) {
|
||||||
|
|
|
@ -6,8 +6,6 @@ var ServerConfig = require("../molecules/ServerConfig");
|
||||||
var ProgressBar = require("../molecules/ProgressBar");
|
var ProgressBar = require("../molecules/ProgressBar");
|
||||||
var Loader = require("react-loader");
|
var Loader = require("react-loader");
|
||||||
|
|
||||||
//var dis = require("../dispatcher");
|
|
||||||
|
|
||||||
module.exports = React.createClass({
|
module.exports = React.createClass({
|
||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
return {
|
return {
|
||||||
|
|
Loading…
Reference in New Issue