diff --git a/frontend/components/Layout/Layout.js b/frontend/components/Layout/Layout.js index 6185aeda..b04a9546 100644 --- a/frontend/components/Layout/Layout.js +++ b/frontend/components/Layout/Layout.js @@ -10,7 +10,7 @@ import { Flex } from 'reflexbox'; import { textColor } from 'styles/constants.scss'; import DropdownMenu, { MenuItem } from 'components/DropdownMenu'; -import LoadingIndicator from 'components/LoadingIndicator'; +import { LoadingIndicatorBar } from 'components/LoadingIndicator'; import SidebarCollection from './components/SidebarCollection'; import SidebarCollectionList from './components/SidebarCollectionList'; @@ -72,7 +72,7 @@ type Props = { ]} /> - {this.props.ui.progressBarVisible && } + {this.props.ui.progressBarVisible && } {this.props.notifications} diff --git a/frontend/components/LoadingIndicator/LoadingIndicator.js b/frontend/components/LoadingIndicator/LoadingIndicator.js index a82a85ab..309e6dfb 100644 --- a/frontend/components/LoadingIndicator/LoadingIndicator.js +++ b/frontend/components/LoadingIndicator/LoadingIndicator.js @@ -1,14 +1,15 @@ // @flow import React from 'react'; +import { inject, observer } from 'mobx-react'; -import styles from './LoadingIndicator.scss'; +@observer class LoadingIndicator extends React.Component { + componentDidMount() { + this.props.ui.enableProgressBar(); + } -const LoadingIndicator = () => { - return ( -
-
-
- ); -}; + componentWillUnmount() { + this.props.ui.disableProgressBar(); + } +} -export default LoadingIndicator; +export default inject('ui')(LoadingIndicator); diff --git a/frontend/components/LoadingIndicator/LoadingIndicator.scss b/frontend/components/LoadingIndicator/LoadingIndicator.scss deleted file mode 100644 index f7af32dc..00000000 --- a/frontend/components/LoadingIndicator/LoadingIndicator.scss +++ /dev/null @@ -1,20 +0,0 @@ -.loader { - width: 100%; - height: 2px; - background-color: #03A9F4; -} - -.loading { - position: fixed; - top: 0; - z-index: 9999; - - background-color: #03A9F4; - width: 100%; - animation: loading 4s ease-in-out infinite; -} - -@keyframes loading { - from {margin-left: -100%; z-index:100;} - to {margin-left: 100%; } -} diff --git a/frontend/components/LoadingIndicator/LoadingIndicatorBar.js b/frontend/components/LoadingIndicator/LoadingIndicatorBar.js new file mode 100644 index 00000000..fb8743bf --- /dev/null +++ b/frontend/components/LoadingIndicator/LoadingIndicatorBar.js @@ -0,0 +1,34 @@ +// @flow +import React from 'react'; +import styled, { keyframes } from 'styled-components'; + +const LoadingIndicatorBar = () => { + return ( + + + + ); +}; + +const loadingFrame = keyframes` + from {margin-left: -100%; z-index:100;} + to {margin-left: 100%; } +`; + +const Container = styled.div` + position: fixed; + top: 0; + z-index: 9999; + + background-color: #03A9F4; + width: 100%; + animation: ${loadingFrame} 4s ease-in-out infinite; +`; + +const Loader = styled.div` + width: 100%; + height: 2px; + background-color: #03A9F4; +`; + +export default LoadingIndicatorBar; diff --git a/frontend/components/LoadingIndicator/index.js b/frontend/components/LoadingIndicator/index.js index df904e0a..fe3e594b 100644 --- a/frontend/components/LoadingIndicator/index.js +++ b/frontend/components/LoadingIndicator/index.js @@ -1,3 +1,5 @@ // @flow import LoadingIndicator from './LoadingIndicator'; +import LoadingIndicatorBar from './LoadingIndicatorBar'; export default LoadingIndicator; +export { LoadingIndicatorBar }; diff --git a/frontend/scenes/Document/Document.js b/frontend/scenes/Document/Document.js index 8a700fb4..220e24e7 100644 --- a/frontend/scenes/Document/Document.js +++ b/frontend/scenes/Document/Document.js @@ -11,6 +11,7 @@ import DocumentsStore from 'stores/DocumentsStore'; import Menu from './components/Menu'; import Editor from 'components/Editor'; import { HeaderAction, SaveAction } from 'components/Layout'; +import LoadingIndicator from 'components/LoadingIndicator'; import PublishingInfo from 'components/PublishingInfo'; import DocumentViews from 'components/DocumentViews'; import PreviewLoading from 'components/PreviewLoading'; @@ -34,6 +35,10 @@ type Props = { @observer class Document extends Component { props: Props; + state = { + loading: false, + }; + componentDidMount() { this.loadDocument(this.props); } @@ -90,11 +95,11 @@ type Props = { }; onImageUploadStart() { - this.props.ui.enableProgressBar(); + this.setState({ loading: true }); } onImageUploadStop() { - this.props.ui.disableProgressBar(); + this.setState({ loading: false }); } onChange = text => { @@ -115,6 +120,7 @@ type Props = { return ( {titleText && } + {this.state.loading && } {isFetching && diff --git a/frontend/stores/UiStore.js b/frontend/stores/UiStore.js index fed5c13c..6345af8b 100644 --- a/frontend/stores/UiStore.js +++ b/frontend/stores/UiStore.js @@ -5,7 +5,7 @@ import Collection from 'models/Collection'; class UiStore { @observable activeDocument: ?Document; - @observable progressBarVisible: boolean = true; + @observable progressBarVisible: boolean = false; @observable editMode: boolean = false; /* Computed */