UNPKG

terriajs

Version:

Geospatial data visualization platform.

63 lines (61 loc) 2.38 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { observer } from "mobx-react"; import { useCallback, useEffect, useState } from "react"; import styled, { css, keyframes, useTheme } from "styled-components"; import EventHelper from "terriajs-cesium/Source/Core/EventHelper"; import { useViewState } from "../Context"; export const ProgressBar = observer(() => { const [loadPercentage, setLoadPercentage] = useState(0); const [indeterminateLoading, setIndeterminateLoading] = useState(); const theme = useTheme(); const { terria } = useViewState(); const setProgress = useCallback((remaining, max) => { const rawPercentage = (1 - remaining / max) * 100; const sanitisedPercentage = Math.floor(remaining > 0 ? rawPercentage : 100); setLoadPercentage(sanitisedPercentage); }, []); const setMode = (mode) => { setIndeterminateLoading(mode); }; useEffect(() => { const eventHelper = new EventHelper(); eventHelper.add(terria.tileLoadProgressEvent, setProgress); eventHelper.add(terria.indeterminateTileLoadProgressEvent, setMode); return () => { eventHelper.removeAll(); }; /* eslint-disable-next-line react-hooks/exhaustive-deps */ }, []); const backgroundColor = terria.baseMapContrastColor === "#ffffff" ? "#ffffff" : theme.colorPrimary; const allComplete = loadPercentage === 100 && !indeterminateLoading; return (_jsx(StyledProgressBar, { complete: allComplete, indeterminate: indeterminateLoading, backgroundColor: backgroundColor, loadPercentage: `${loadPercentage}%` })); }); const StyledProgressBar = styled.div ` height: 5px; overflow: hidden; transition: opacity 200ms linear, width 200ms linear, visibility 400ms linear; background-color: ${(props) => props.backgroundColor}; width: ${(props) => props.loadPercentage}; ${(props) => props.complete && `visibility: hidden;`} ${(props) => props.indeterminate && css ` width: 100%; animation: ${indeterminateAnimation} 1.2s infinite linear; transform-origin: 0% 50%; `} `; const indeterminateAnimation = keyframes ` 0% { transform: translateX(0) scaleX(0); } 40% { transform: translateX(0) scaleX(0.4); } 100% { transform: translateX(100%) scaleX(0.5); } }`; //# sourceMappingURL=ProgressBar.js.map