mozaik-ext-travis
Version:
Mozaik travis widgets
100 lines (82 loc) • 3.52 kB
JSX
import React, { Component, PropTypes } from 'react';
import { ListenerMixin } from 'reflux';
import reactMixin from 'react-mixin';
import moment from 'moment';
import Mozaik from 'mozaik/browser';
class Repository extends Component {
constructor(props) {
super(props);
this.state = {
repository: null
};
}
getApiRequest() {
let { owner, repository } = this.props;
return {
id: `travis.repository.${ owner }.${ repository }`,
params: { owner, repository }
};
}
onApiData(repository) {
this.setState({
repository: repository
});
}
render() {
var cssClasses = '';
var infoNode = null;
if (this.state.repository) {
var statusClass = '';
if (this.state.repository.last_build_state === 'passed') {
statusClass = 'fa fa-check txt--success';
} else if (this.state.repository.last_build_state === 'started') {
statusClass = 'fa fa-play-circle-o';
}
infoNode = (
<div>
<div className="travis__repository__description">{this.state.repository.description}</div>
<ul className="list list--compact">
<li className="list__item">
<i className={statusClass} /> last build
<span className="prop__value">{this.state.repository.last_build_state}</span>
</li>
<li className="list__item">
<i className="fa fa-clock-o" />
last build <span className="prop__value">{moment(this.state.repository.last_build_started_at).fromNow()}</span>
in <span className="count">{this.state.repository.last_build_duration}s</span>
</li>
<li className="list__item">
<i className="fa fa-code" /> language:
<span className="prop__value">{this.state.repository.github_language}</span>
</li>
</ul>
</div>
);
cssClasses = `travis__repository--${this.state.repository.last_build_state}`;
}
return (
<div className={cssClasses}>
<div className="widget__header">
<span className="travis__repository__slug">
<span className="widget__header__subject">{this.state.repository ? this.state.repository.slug : ''}</span>
</span>
<span className="widget__header__count">
{this.state.repository ? `#${this.state.repository.last_build_number}` : ''}
</span>
<i className="fa fa-bug" />
</div>
<div className="widget__body">
{infoNode}
</div>
</div>
);
}
}
Repository.displayName = 'Repository';
Repository.propTypes = {
owner: PropTypes.string.isRequired,
repository: PropTypes.string.isRequired
};
reactMixin(Repository.prototype, ListenerMixin);
reactMixin(Repository.prototype, Mozaik.Mixin.ApiConsumer);
export default Repository;