diff --git a/src/newsreader/js/pages/homepage/App.js b/src/newsreader/js/pages/homepage/App.js
index 01ca773..897bb15 100644
--- a/src/newsreader/js/pages/homepage/App.js
+++ b/src/newsreader/js/pages/homepage/App.js
@@ -5,20 +5,15 @@ import { isEqual } from 'lodash';
import { fetchCategories } from './actions/categories';
-import Sidebar from './components/sidebar/Sidebar.js';
import PostList from './components/postlist/PostList.js';
import PostModal from './components/PostModal.js';
import Messages from '../../components/Messages.js';
class App extends React.Component {
- componentDidMount() {
- this.props.fetchCategories();
- }
-
+ // TODO: render sidebar separate from main component
render() {
return (
<>
-
)}
+ {/* TODO: check this styling */}
{this.props.error && (
)}
@@ -70,8 +66,4 @@ const mapStateToProps = state => {
return { error, post: state.selected.post };
};
-const mapDispatchToProps = dispatch => ({
- fetchCategories: () => dispatch(fetchCategories()),
-});
-
-export default connect(mapStateToProps, mapDispatchToProps)(App);
+export default connect(mapStateToProps)(App);
diff --git a/src/newsreader/js/pages/homepage/components/sidebar/Sidebar.js b/src/newsreader/js/pages/homepage/components/sidebar/Sidebar.js
index 88a69f2..d4f2ea5 100644
--- a/src/newsreader/js/pages/homepage/components/sidebar/Sidebar.js
+++ b/src/newsreader/js/pages/homepage/components/sidebar/Sidebar.js
@@ -1,9 +1,9 @@
import React from 'react';
import { connect } from 'react-redux';
-import { isEqual } from 'lodash';
import { filterCategories, filterRules } from './filters.js';
+import { fetchCategories } from '../../actions/categories';
import { CATEGORY_TYPE, RULE_TYPE } from '../../constants.js';
import LoadingIndicator from '../../../../components/LoadingIndicator.js';
import CategoryItem from './CategoryItem.js';
@@ -12,6 +12,10 @@ import ReadButton from './ReadButton.js';
// TODO: show empty category message
class Sidebar extends React.Component {
+ componentDidMount() {
+ this.props.fetchCategories();
+ }
+
render() {
const categoryItems = this.props.categories.items.map(category => {
const rules = this.props.rules.items.filter(rule => {
@@ -33,7 +37,7 @@ class Sidebar extends React.Component {
[CATEGORY_TYPE, RULE_TYPE].includes(this.props.selected.item.type);
return (
-
+ <>
{(this.props.categories.isFetching || this.props.rules.isFetching) && (
)}
@@ -44,7 +48,7 @@ class Sidebar extends React.Component {
{showReadButton && }
-
+ >
);
}
}
@@ -55,4 +59,8 @@ const mapStateToProps = state => ({
selected: state.selected,
});
-export default connect(mapStateToProps)(Sidebar);
+const mapDispatchToProps = dispatch => ({
+ fetchCategories: () => dispatch(fetchCategories()),
+});
+
+export default connect(mapStateToProps, mapDispatchToProps)(Sidebar);
diff --git a/src/newsreader/js/pages/homepage/index.js b/src/newsreader/js/pages/homepage/index.js
index 86cdd09..4d52dcb 100644
--- a/src/newsreader/js/pages/homepage/index.js
+++ b/src/newsreader/js/pages/homepage/index.js
@@ -5,12 +5,24 @@ import { Provider } from 'react-redux';
import configureStore from './configureStore.js';
import App from './App.js';
+import Sidebar from './components/sidebar/Sidebar.js';
-const page = document.getElementById('homepage--page');
+const homepageBody = document.getElementById('homepage--page');
+const containers = [...homepageBody.children].filter(element => element.matches('.main'));
+const sidebars = document.getElementsByClassName('sidebar');
+const store = configureStore();
-if (page) {
- const store = configureStore();
+[...sidebars].forEach(sidebar => {
+ const sidebarMount = (
+
+
+
+ );
+ ReactDOM.render(sidebarMount, sidebar);
+});
+
+[...containers].forEach(container => {
const settings = JSON.parse(document.getElementById('homepageSettings').textContent);
const { feedUrl, subredditUrl, timelineUrl, categoriesUrl } = settings;
@@ -27,5 +39,5 @@ if (page) {
);
- ReactDOM.render(app, page);
-}
+ ReactDOM.render(app, container);
+});
diff --git a/src/newsreader/news/core/templates/news/core/views/homepage.html b/src/newsreader/news/core/templates/news/core/views/homepage.html
index a135314..2570b51 100644
--- a/src/newsreader/news/core/templates/news/core/views/homepage.html
+++ b/src/newsreader/news/core/templates/news/core/views/homepage.html
@@ -1,9 +1,11 @@
{% extends "base.html" %}
{% load static %}
-{% block content %}
-
-{% endblock content %}
+{% block page_id %}id="homepage--page"{% endblock %}
+
+{% block sidebar %}
+
+{% endblock %}
{% block scripts %}
{{ homepageSettings|json_script:"homepageSettings" }}
diff --git a/src/newsreader/scss/components/body/_body.scss b/src/newsreader/scss/components/body/_body.scss
index 34bba4c..d6748fa 100644
--- a/src/newsreader/scss/components/body/_body.scss
+++ b/src/newsreader/scss/components/body/_body.scss
@@ -4,6 +4,11 @@
font-family: Rubik, sans-serif;
font-size: $font-size;
+
+ // TODO add grid area names
+ display: grid;
+ grid-template-columns: 1fr 3fr;
+ grid-gap: 20px;
}
body {
@@ -14,5 +19,4 @@ body {
padding: 0;
box-sizing: border-box;
}
-
}
diff --git a/src/newsreader/scss/components/main/_main.scss b/src/newsreader/scss/components/main/_main.scss
index 5d0143f..0e580ad 100644
--- a/src/newsreader/scss/components/main/_main.scss
+++ b/src/newsreader/scss/components/main/_main.scss
@@ -1,7 +1,8 @@
.main {
+ grid-column: 2;
+ grid-row: 2;
+
display: flex;
flex-direction: column;
align-items: center;
-
- margin: 20px 0;
}
diff --git a/src/newsreader/scss/components/navbar/_navbar.scss b/src/newsreader/scss/components/navbar/_navbar.scss
index afdacce..ad81832 100644
--- a/src/newsreader/scss/components/navbar/_navbar.scss
+++ b/src/newsreader/scss/components/navbar/_navbar.scss
@@ -1,4 +1,7 @@
.nav {
+ grid-column: 1 /3;
+ grid-row: 1;
+
display: flex;
justify-content: center;
align-items: center;
@@ -6,9 +9,6 @@
padding: 10px 0;
width: 100%;
- position: sticky;
- top: 0;
-
background-color: var(--lightest-accent-color);
ol {
diff --git a/src/newsreader/scss/components/sidebar/_sidebar.scss b/src/newsreader/scss/components/sidebar/_sidebar.scss
index 0521af4..c21f652 100644
--- a/src/newsreader/scss/components/sidebar/_sidebar.scss
+++ b/src/newsreader/scss/components/sidebar/_sidebar.scss
@@ -1,13 +1,10 @@
.sidebar {
+ grid-column: 1;
+ grid-row: 2;
+
display: flex;
flex-direction: column;
align-items: center;
- align-self: start;
-
- position: sticky;
- top: 50px;
-
- width: 20%;
&__nav {
width: 100%;
@@ -15,7 +12,6 @@
overflow: auto;
list-style: none;
-
}
&__container {
diff --git a/src/newsreader/scss/pages/homepage/index.scss b/src/newsreader/scss/pages/homepage/index.scss
index 30f5a50..8dffdf8 100644
--- a/src/newsreader/scss/pages/homepage/index.scss
+++ b/src/newsreader/scss/pages/homepage/index.scss
@@ -1,9 +1,9 @@
#homepage--page {
- display: flex;
- flex-direction: row;
- align-items: initial;
- width: 100%;
+ & .main {
+ display: flex;
+ flex-direction: row;
+ align-items: initial;
- margin: 20px 0 0 0;
- background-color: initial;
+ background-color: initial;
+ }
}
diff --git a/src/newsreader/templates/base.html b/src/newsreader/templates/base.html
index 3c65329..5ed7cce 100644
--- a/src/newsreader/templates/base.html
+++ b/src/newsreader/templates/base.html
@@ -10,7 +10,7 @@
{% endblock %}
-
+