diff --git a/src/newsreader/js/pages/homepage/App.js b/src/newsreader/js/pages/homepage/App.js
index 01ca773..5b5acde 100644
--- a/src/newsreader/js/pages/homepage/App.js
+++ b/src/newsreader/js/pages/homepage/App.js
@@ -5,6 +5,7 @@ import { isEqual } from 'lodash';
import { fetchCategories } from './actions/categories';
+import ScrollTop from './components/ScrollTop.js';
import Sidebar from './components/sidebar/Sidebar.js';
import PostList from './components/postlist/PostList.js';
import PostModal from './components/PostModal.js';
@@ -41,6 +42,8 @@ class App extends React.Component {
/>
)}
+
+
{this.props.error && (
)}
diff --git a/src/newsreader/js/pages/homepage/components/ScrollTop.js b/src/newsreader/js/pages/homepage/components/ScrollTop.js
new file mode 100644
index 0000000..24228b1
--- /dev/null
+++ b/src/newsreader/js/pages/homepage/components/ScrollTop.js
@@ -0,0 +1,40 @@
+import React from 'react';
+
+export default class ScrollTop extends React.Component {
+ scrollListener = ::this.scrollListener;
+
+ state = { showTop: false, showBottom: false };
+
+ componentDidMount() {
+ window.addEventListener('scroll', this.scrollListener);
+ }
+
+ scrollListener() {
+ const showBottom = window.innerHeight + window.scrollY < document.body.offsetHeight;
+
+ this.setState({
+ showTop: window.pageYOffset > 0 ? true : false,
+ showBottom: showBottom,
+ });
+ }
+
+ render() {
+ return (
+
+ {this.state.showTop && (
+ window.scrollTo(0, 0)}
+ />
+ )}
+
+ {this.state.showBottom && (
+ window.scrollTo(0, document.body.scrollHeight)}
+ />
+ )}
+
+ );
+ }
+}
diff --git a/src/newsreader/scss/components/index.scss b/src/newsreader/scss/components/index.scss
index d0419ac..d64031b 100644
--- a/src/newsreader/scss/components/index.scss
+++ b/src/newsreader/scss/components/index.scss
@@ -26,3 +26,4 @@
@import './post-message/index';
@import './posts/index';
@import './posts-info/index';
+@import './scroll-to-top/index';
diff --git a/src/newsreader/scss/components/modal/_post-modal.scss b/src/newsreader/scss/components/modal/_post-modal.scss
index f6483fe..a286abd 100644
--- a/src/newsreader/scss/components/modal/_post-modal.scss
+++ b/src/newsreader/scss/components/modal/_post-modal.scss
@@ -5,4 +5,6 @@
padding: 0;
cursor: pointer;
+
+ z-index: 1000;
}
diff --git a/src/newsreader/scss/components/scroll-to-top/_scroll-to-top.scss b/src/newsreader/scss/components/scroll-to-top/_scroll-to-top.scss
new file mode 100644
index 0000000..84b40e6
--- /dev/null
+++ b/src/newsreader/scss/components/scroll-to-top/_scroll-to-top.scss
@@ -0,0 +1,33 @@
+.scroll-to-top {
+ display: flex;
+ gap: 10px;
+
+ position: fixed;
+ right: 15%;
+ bottom: 0;
+
+ margin: 0 0 20px 0;
+
+ &:hover {
+ cursor: pointer;
+ }
+
+ &__icon {
+ font-style: initial;
+ padding: 10px;
+
+ background-color: var(--lightest-accent-color);
+
+ &--top:before {
+ @include font-awesome;
+
+ content: "\f062";
+ }
+
+ &--bottom:before {
+ @include font-awesome;
+
+ content: "\f063";
+ }
+ }
+}
diff --git a/src/newsreader/scss/components/scroll-to-top/index.scss b/src/newsreader/scss/components/scroll-to-top/index.scss
new file mode 100644
index 0000000..dcaf7de
--- /dev/null
+++ b/src/newsreader/scss/components/scroll-to-top/index.scss
@@ -0,0 +1 @@
+@import './scroll-to-top';