Basic structure of a react SDK and start of an implementation.
This commit is contained in:
commit
c42733ec95
15 changed files with 407 additions and 0 deletions
15
src/MatrixClientPeg.js
Normal file
15
src/MatrixClientPeg.js
Normal file
|
@ -0,0 +1,15 @@
|
|||
// A thing that holds your Matrix Client
|
||||
var Matrix = require("matrix-js-sdk");
|
||||
|
||||
var matrixClient = null;
|
||||
|
||||
module.exports = {
|
||||
get: function() {
|
||||
return matrixClient;
|
||||
},
|
||||
|
||||
replaceUsingUrl: function(hs_url) {
|
||||
matrixClient = Matrix.createClient(hs_url);
|
||||
}
|
||||
};
|
||||
|
1
src/dispatcher.js
Normal file
1
src/dispatcher.js
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = new require("flux").Dispatcher();
|
1
src/index.js
Normal file
1
src/index.js
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports.MatrixChat = require("./pages/MatrixChat");
|
31
src/molecules/HomeServerTextBox.js
Normal file
31
src/molecules/HomeServerTextBox.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
var React = require('react');
|
||||
|
||||
var MatrixClientPeg = require("../MatrixClientPeg.js");
|
||||
|
||||
module.exports = React.createClass({
|
||||
getDefaultProps: function() {
|
||||
return {
|
||||
default_url: 'https://matrix.org/'
|
||||
};
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
return {
|
||||
hs_url: this.props.default_url
|
||||
}
|
||||
},
|
||||
|
||||
hsChanged: function(ev) {
|
||||
this.state.hs_url = ev.target.value;
|
||||
MatrixClientPeg.replaceUsingUrl(this.state.hs_url);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
return (
|
||||
<div className="HomeServerTextBox">
|
||||
Home Server URL:
|
||||
<input type="text" value={this.state.hs_url} onChange={this.hsChanged} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
12
src/molecules/Message.js
Normal file
12
src/molecules/Message.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
var React = require('react');
|
||||
|
||||
module.exports = React.createClass({
|
||||
render: function() {
|
||||
return (
|
||||
<div>
|
||||
{this.props.event.content.body}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
26
src/organisms/MessageSection.js
Normal file
26
src/organisms/MessageSection.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
var React = require('react');
|
||||
var Message = require('../molecules/Message');
|
||||
|
||||
module.exports = React.createClass({
|
||||
getInitialState: function() {
|
||||
return {
|
||||
messages: [ { foo: "bar"} ]
|
||||
}
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var messageItems = this.state.messages.map(function(ev) {
|
||||
return (
|
||||
<Message ev={ev} />
|
||||
);
|
||||
});
|
||||
return (
|
||||
<div>
|
||||
<ul className="message-list" ref="messageList">
|
||||
{messageItems}
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
13
src/organisms/ThreadSection.js
Normal file
13
src/organisms/ThreadSection.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
var React = require('react');
|
||||
|
||||
module.exports = React.createClass({
|
||||
render: function() {
|
||||
return (
|
||||
<div>
|
||||
<ul>
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
26
src/pages/MatrixChat.js
Normal file
26
src/pages/MatrixChat.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
var React = require('react');
|
||||
|
||||
var ThreadSection = require('../organisms/ThreadSection');
|
||||
var MessageSection = require('../organisms/MessageSection');
|
||||
|
||||
var Login = require('../templates/Login');
|
||||
|
||||
var mxCli = require("../MatrixClientPeg").get();
|
||||
|
||||
module.exports = React.createClass({
|
||||
render: function() {
|
||||
if (mxCli && mxCli.credentials) {
|
||||
return (
|
||||
<div>
|
||||
<ThreadSection />
|
||||
<MessageSection />
|
||||
</div>
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
<Login />
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
38
src/templates/Login.js
Normal file
38
src/templates/Login.js
Normal file
|
@ -0,0 +1,38 @@
|
|||
var React = require('react');
|
||||
var MatrixClientPeg = require("../MatrixClientPeg");
|
||||
|
||||
var HomeServerTextBox = require("../molecules/HomeServerTextBox");
|
||||
var Loader = require("react-loader");
|
||||
|
||||
module.exports = React.createClass({
|
||||
getInitialState: function() {
|
||||
return {
|
||||
step: 'choose_hs'
|
||||
};
|
||||
},
|
||||
|
||||
setStep: function(step) {
|
||||
this.setState({ step: step });
|
||||
},
|
||||
|
||||
onHSChosen: function(ev) {
|
||||
this.setStep("fetch_stages");
|
||||
},
|
||||
|
||||
render: function() {
|
||||
switch (this.state.step) {
|
||||
case 'choose_hs':
|
||||
return (
|
||||
<div>
|
||||
<div>Please log in:</div>
|
||||
<HomeServerTextBox />
|
||||
<button onClick={this.onHSChosen}>Continue</button>
|
||||
</div>
|
||||
);
|
||||
case 'fetch_stages':
|
||||
return (
|
||||
<Loader />
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue