JSFiddle - React, Tailwind, and code Playground
by pleinx
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js"></script>
<script src="https://npmcdn.com/react@latest/dist/react-with-addons.js"></script>
<script src="https://npmcdn.com/react-dom@latest/dist/react-dom.js"></script>
<script src="https://facebook.github.io/react/js/jsfiddle-integration-babel.js"></script>
<div id="login_panel"></div>
SCSS
.component-login {
width: 300px;
padding: 10px;
border: 1px solid #ccc;
margin: 10px;
input {
width: 95%;
margin-bottom: 10px;
padding: 5px;
border-radius: 5px;
border: 1px solid #ccc;
}
h3 {
margin: 0 0 10px;
}
.component-error {
display: inline-block;
margin: 10px 0;
}
}
Babel + JSX
const DB = {
userLogins: [
{
user: 'yoda',
pass: '1234'
},
]
};
class LoginPanel extends React.Component {
constructor() {
super();
this.state = {
loggedIn: false,
error: false,
account: {}
};
}
isLoggedIn() {
return this.state.loggedIn;
}
hasError() {
return this.state.error;
}
renderHeadline() {
if(this.hasError()) {
return <div>UngĂĽltiger Login!</div>;
}
let {user} = this.state.account;
return (this.isLoggedIn() ? `Hey, ${user}!` : `Anmelden`);
}
renderLoginForm() {
// TODO add onEnter
return (
<div>
<input type="text" ref="user" placeholder="Ihr Benutzername..." />
<input type="text" ref="pass" placeholder="Ihr Passwort..." />
</div>
);
}
renderLoginLogoutButton() {
let label = (this.isLoggedIn() ? 'Logout' : 'Login');
// TODO Add Button
return null;
}
renderHiddenContent() {
return <div>Yoda: Good, the dark side is!</div>;
}
render() {
return (
<div className="component-login">
<h3>{this.renderHeadline()}</h3>
{(!this.isLoggedIn() ? this.renderLoginForm() : this.renderHiddenContent())}
{this.renderLoginLogoutButton()}
</div>
);
}
onSubmit() {
if(this.isLoggedIn()) {
// user wants to logout
this.setState({loggedIn: false, error: false, account: {}});
return;
}
// get the input values
let user = this.refs.user.value;
let pass = this.refs.pass.value;
// check is user valid
let userData = DB.userLogins.find((account) => {
return (account.user === user && account.pass === pass);
});
if(typeof userData === 'object') {
// TODO bugfix
this.setState({loggedIn: true, account: userData});
}
else {
this.setState({error: true});
}
}
}
ReactDOM.render(
<LoginPanel/>,
document.getElementById('login_panel')
);