mirror of
https://github.com/apache/superset.git
synced 2026-04-20 16:44:46 +00:00
* Carapal react mockup This is really just a mock up written in React to try different components. It could become scaffolding to build a prototype, or not. * Merging in Alanna's theme tweaks for SQL lab * Tweak the display of the alert message in navbar * Sketching the middleware refresh for Queries * Adjustments * Implement timer sync. * CTAS * Refactor the queries to be stored as a dict. (#994) * Download csv endpoint. (#992) * CSV download engdpoint. * Use lower case booleans. * Replcate loop with the object lookup by key. * First changes for the sync * Address comments * Fix query deletions. Update only the queries from the store. * Sync queries using tmp_id. * simplify * Fix the tests in the carapal. (#1023) * Sync queries using tmp_id. * Fix the unit tests * Bux fixes. Pass 2. * Tweakin' & linting * Adding alpha label to the SQL LAb navbar entry * Fixing the python unit tests
62 lines
1.4 KiB
JavaScript
62 lines
1.4 KiB
JavaScript
import React from 'react';
|
|
import { now, fDuration } from '../../modules/dates';
|
|
|
|
import { STATE_BSSTYLE_MAP } from '../common.js';
|
|
|
|
class Timer extends React.Component {
|
|
constructor(props) {
|
|
super(props);
|
|
this.state = {
|
|
clockStr: '',
|
|
};
|
|
}
|
|
componentWillMount() {
|
|
this.startTimer();
|
|
}
|
|
componentWillUnmount() {
|
|
this.stopTimer();
|
|
}
|
|
startTimer() {
|
|
if (!(this.timer)) {
|
|
this.timer = setInterval(this.stopwatch.bind(this), 30);
|
|
}
|
|
}
|
|
stopTimer() {
|
|
clearInterval(this.timer);
|
|
this.timer = null;
|
|
}
|
|
stopwatch() {
|
|
if (this.props && this.props.query) {
|
|
const since = (this.props.query.endDttm) ? this.props.query.endDttm : now();
|
|
const clockStr = fDuration(this.props.query.startDttm, since);
|
|
this.setState({ clockStr });
|
|
if (this.props.query.state !== 'running') {
|
|
this.stopTimer();
|
|
}
|
|
}
|
|
}
|
|
render() {
|
|
if (this.props.query && this.props.query.state === 'running') {
|
|
this.startTimer();
|
|
}
|
|
let timerSpan = null;
|
|
if (this.props && this.props.query) {
|
|
const bsStyle = STATE_BSSTYLE_MAP[this.props.query.state];
|
|
timerSpan = (
|
|
<span className={'inlineBlock m-r-5 label label-' + bsStyle}>
|
|
{this.state.clockStr}
|
|
</span>
|
|
);
|
|
}
|
|
return timerSpan;
|
|
}
|
|
}
|
|
Timer.propTypes = {
|
|
query: React.PropTypes.object,
|
|
};
|
|
Timer.defaultProps = {
|
|
query: null,
|
|
};
|
|
|
|
export default Timer;
|