64 lines
1.5 KiB
JavaScript
64 lines
1.5 KiB
JavaScript
import React from 'react';
|
|
import { bindActionCreators } from 'redux';
|
|
import { connect } from 'react-redux';
|
|
import * as Actions from '../actions';
|
|
|
|
const $ = require('jquery');
|
|
const QUERY_UPDATE_FREQ = 1000;
|
|
const QUERY_UPDATE_BUFFER_MS = 5000;
|
|
|
|
class QueryAutoRefresh extends React.Component {
|
|
componentWillMount() {
|
|
this.startTimer();
|
|
}
|
|
componentWillUnmount() {
|
|
this.stopTimer();
|
|
}
|
|
startTimer() {
|
|
if (!(this.timer)) {
|
|
this.timer = setInterval(this.stopwatch.bind(this), QUERY_UPDATE_FREQ);
|
|
}
|
|
}
|
|
stopTimer() {
|
|
clearInterval(this.timer);
|
|
this.timer = null;
|
|
}
|
|
stopwatch() {
|
|
const url = '/caravel/queries/' + (this.props.queriesLastUpdate - QUERY_UPDATE_BUFFER_MS);
|
|
// No updates in case of failure.
|
|
$.getJSON(url, (data) => {
|
|
if (Object.keys(data).length > 0) {
|
|
this.props.actions.refreshQueries(data);
|
|
}
|
|
this.props.actions.setNetworkStatus(true);
|
|
})
|
|
.fail(() => {
|
|
this.props.actions.setNetworkStatus(false);
|
|
});
|
|
}
|
|
render() {
|
|
return null;
|
|
}
|
|
}
|
|
QueryAutoRefresh.propTypes = {
|
|
actions: React.PropTypes.object,
|
|
queriesLastUpdate: React.PropTypes.number,
|
|
};
|
|
QueryAutoRefresh.defaultProps = {
|
|
// queries: null,
|
|
};
|
|
|
|
function mapStateToProps(state) {
|
|
return {
|
|
queriesLastUpdate: state.queriesLastUpdate,
|
|
};
|
|
}
|
|
|
|
function mapDispatchToProps(dispatch) {
|
|
return {
|
|
actions: bindActionCreators(Actions, dispatch),
|
|
};
|
|
}
|
|
|
|
export default connect(mapStateToProps, mapDispatchToProps)(QueryAutoRefresh);
|