import React from 'react' import {connect} from 'react-redux' import LoadingIndicator from 'components/loading-indicator/small' class Indicator extends React.Component { constructor(props) { super(props); this.state = { displayMessages: 0, }; } isLoading(props) { return (props.receivedLoading || props.filteredLoading || props.notExportedLoading); } componentDidMount() { this.timeoutTimer = setInterval( () => this.tickMessages(), 1000 ); } componentWillUnmount() { clearInterval(this.timeoutTimer); } componentDidUpdate(prevProps) { if (!this.isLoading(this.props) && this.isLoading(this.props) != this.isLoading(prevProps)) { // Stop timer this.setState({displayMessages: 0}); } } tickMessages() { this.setState((prevState, props) => ({ displayMessages: prevState.displayMessages + 1 })); } render() { if (!this.isLoading(this.props)) { return null; } return (
{this.state.displayMessages >= 5 &&

> Still loading routes, please be patient.

} {this.state.displayMessages >= 10 &&

> This seems to take a while...

} {this.state.displayMessages >= 20 &&

> This usually only happens when there are really many routes!
  Please stand by a bit longer.

} {this.state.displayMessages >= 30 &&

> This is taking really long...

} {this.state.displayMessages >= 40 &&

> I heared there will be cake if you keep on waiting just a bit longer!

} {this.state.displayMessages >= 60 &&

> I guess the cake was a lie.

}
); } } export default connect( (state) => ({ receivedLoading: state.routes.receivedLoading, filteredLoading: state.routes.filteredLoading, notExportedLoading: state.routes.notExportedLoading, }) )(Indicator);