UNPKG

terriajs

Version:

Geospatial data visualization platform.

57 lines (44 loc) 1.74 kB
'use strict'; import React from 'react'; import PropTypes from 'prop-types'; import createReactClass from 'create-react-class'; import EventHelper from 'terriajs-cesium/Source/Core/EventHelper'; import classNames from 'classnames'; import Styles from './progress-bar.scss'; // The map navigation region const ProgressBar = createReactClass({ propTypes: { terria: PropTypes.object.isRequired }, getInitialState() { return { visible: 'hidden' }; }, /* eslint-disable-next-line camelcase */ UNSAFE_componentWillMount() { this.eventHelper = new EventHelper(); this.eventHelper.add(this.props.terria.tileLoadProgressEvent, this.setProgress); // Clear progress when the viewer changes so we're not left with an invalid progress bar hanging on the screen. this.eventHelper.add(this.props.terria.beforeViewerChanged, this.setProgress.bind(this, 0, 0)); }, setProgress(remaining, max) { const rawPercentage = (1 - (remaining / max)) * 100; const sanitisedPercentage = Math.floor(remaining > 0 ? rawPercentage : 100); this.setState({ percentage: sanitisedPercentage }); }, componentWillUnmount() { this.eventHelper.removeAll(); }, render() { const width = this.state.percentage + '%'; const visibility = this.state.percentage < 100 ? 'visible' : 'hidden'; const complete = this.state.percentage === 100; return ( <div className={classNames(Styles.progressBar, {[Styles.complete]: complete})} style={{visibility, width}} /> ); } }); module.exports = ProgressBar;