application/components/common/quips.js
import React from 'react';
import _ from 'lodash';
import QUIPS from './../../data/quips';
/**
* Quip component, mostly for fun and personality.
*
* Quips are stored in data/quips.json.
*/
class Quips extends React.Component {
constructor(props) {
super(props);
this.displayName = 'Quips';
this.handleClick = this.handleClick.bind(this);
this.interval;
this.last;
}
componentWillMount() {
let key = _.random(0, QUIPS.length-1);
if (this.last) {
while (key === this.last) {
key = _.random(0, QUIPS.length-1);
}
}
const quip = QUIPS[key];
this.last = key;
this.setState({quip: quip, activeClass: ''});
if (this.props.randomize) {
this.interval = setInterval(this.onUpdate.bind(this), this.props.randomize);
}
}
onUpdate() {
let key = _.random(0, QUIPS.length-1);
while (key === this.last) {
key = _.random(0, QUIPS.length-1);
}
this.last = key;
const quip = QUIPS[key]
this.setState({activeClass: 'fader'});
setTimeout(() => {
this.setState({quip: quip, activeClass: ''});
}, 400);
}
handleClick(e) {
if (this.interval) {
clearInterval(this.interval);
this.interval = setInterval(this.onUpdate.bind(this), this.props.randomize);
}
this.onUpdate();
}
render() {
const dhanjerruz = () => {
return {
'__html': this.state.quip
};
};
return <div className={this.props.className ? this.props.className : 'quip'} onClick={this.handleClick}><span className={this.state.activeClass} dangerouslySetInnerHTML={dhanjerruz()} /></div>
}
}
export default Quips;