Home Reference Source

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;