diff --git a/src/newsreader/js/pages/categories/App.js b/src/newsreader/js/pages/categories/App.js
index 691aaed..a035b46 100644
--- a/src/newsreader/js/pages/categories/App.js
+++ b/src/newsreader/js/pages/categories/App.js
@@ -69,6 +69,7 @@ class App extends React.Component {
key={category.pk}
category={category}
showDialog={this.selectCategory}
+ updateUrl={this.props.updateUrl}
/>
);
});
@@ -80,7 +81,7 @@ class App extends React.Component {
const pageHeader = (
<>
Categories
-
+
Create category
>
diff --git a/src/newsreader/js/pages/categories/components/CategoryCard.js b/src/newsreader/js/pages/categories/components/CategoryCard.js
index 94bd6f4..2e7cad4 100644
--- a/src/newsreader/js/pages/categories/components/CategoryCard.js
+++ b/src/newsreader/js/pages/categories/components/CategoryCard.js
@@ -33,7 +33,7 @@ const CategoryCard = props => {
<>
Edit
diff --git a/src/newsreader/js/pages/categories/index.js b/src/newsreader/js/pages/categories/index.js
index 9d75bb9..791fdbd 100644
--- a/src/newsreader/js/pages/categories/index.js
+++ b/src/newsreader/js/pages/categories/index.js
@@ -9,5 +9,15 @@ if (page) {
const dataScript = document.getElementById('categories-data');
const categories = JSON.parse(dataScript.textContent);
- ReactDOM.render(, page);
+ let createUrl = document.getElementById('createUrl').textContent;
+ let updateUrl = document.getElementById('updateUrl').textContent;
+
+ ReactDOM.render(
+ ,
+ page
+ );
}
diff --git a/src/newsreader/js/pages/homepage/App.js b/src/newsreader/js/pages/homepage/App.js
index 91cfa4e..77b6222 100644
--- a/src/newsreader/js/pages/homepage/App.js
+++ b/src/newsreader/js/pages/homepage/App.js
@@ -19,7 +19,11 @@ class App extends React.Component {
return (
<>
-
+
{this.props.error && (
@@ -30,6 +34,10 @@ class App extends React.Component {
post={this.props.post}
rule={this.props.rule}
category={this.props.category}
+ feedUrl={this.props.feedUrl}
+ subredditUrl={this.props.subredditUrl}
+ timelineUrl={this.props.timelineUrl}
+ categoriesUrl={this.props.categoriesUrl}
/>
)}
>
diff --git a/src/newsreader/js/pages/homepage/components/PostModal.js b/src/newsreader/js/pages/homepage/components/PostModal.js
index 3d7a888..5196102 100644
--- a/src/newsreader/js/pages/homepage/components/PostModal.js
+++ b/src/newsreader/js/pages/homepage/components/PostModal.js
@@ -3,7 +3,13 @@ import { connect } from 'react-redux';
import Cookies from 'js-cookie';
import { unSelectPost, markPostRead } from '../actions/posts.js';
-import { CATEGORY_TYPE, RULE_TYPE, FEED, SUBREDDIT } from '../constants.js';
+import {
+ CATEGORY_TYPE,
+ RULE_TYPE,
+ FEED,
+ SUBREDDIT,
+ TWITTER_TIMELINE,
+} from '../constants.js';
import { formatDatetime } from '../../../utils.js';
class PostModal extends React.Component {
@@ -44,12 +50,15 @@ class PostModal extends React.Component {
const post = this.props.post;
const publicationDate = formatDatetime(post.publicationDate);
const titleClassName = post.read ? 'post__title post__title--read' : 'post__title';
+ let ruleUrl = '';
- // TODO add mapping & get urls from backend
- const ruleUrl =
- this.props.rule.type === FEED
- ? `/collection/rules/${this.props.rule.id}/`
- : `/collection/rules/subreddits/${this.props.rule.id}/`;
+ if (this.props.rule.type === SUBREDDIT) {
+ ruleUrl = `${this.props.subredditUrl}/${this.props.rule.id}/`;
+ } else if (this.props.rule.type === TWITTER_TIMELINE) {
+ ruleUrl = `${this.props.timelineUrl}/${this.props.rule.id}/`;
+ } else {
+ ruleUrl = `${this.props.feedUrl}/${this.props.rule.id}/`;
+ }
return (
@@ -68,7 +77,7 @@ class PostModal extends React.Component {
{this.props.category && (
diff --git a/src/newsreader/js/pages/homepage/components/postlist/PostItem.js b/src/newsreader/js/pages/homepage/components/postlist/PostItem.js
index 9b64289..f69a463 100644
--- a/src/newsreader/js/pages/homepage/components/postlist/PostItem.js
+++ b/src/newsreader/js/pages/homepage/components/postlist/PostItem.js
@@ -1,7 +1,13 @@
import React from 'react';
import { connect } from 'react-redux';
-import { CATEGORY_TYPE, RULE_TYPE, FEED, SUBREDDIT } from '../../constants.js';
+import {
+ CATEGORY_TYPE,
+ RULE_TYPE,
+ FEED,
+ SUBREDDIT,
+ TWITTER_TIMELINE,
+} from '../../constants.js';
import { selectPost } from '../../actions/posts.js';
import { formatDatetime } from '../../../../utils.js';
@@ -13,11 +19,15 @@ class PostItem extends React.Component {
const titleClassName = post.read
? 'posts__header posts__header--read'
: 'posts__header';
+ let ruleUrl = '';
- const ruleUrl =
- rule.type === FEED
- ? `/collection/rules/${rule.id}/`
- : `/collection/rules/subreddits/${rule.id}/`;
+ if (rule.type === SUBREDDIT) {
+ ruleUrl = `${this.props.subredditUrl}/${rule.id}/`;
+ } else if (rule.type === TWITTER_TIMELINE) {
+ ruleUrl = `${this.props.timelineUrl}/${rule.id}/`;
+ } else {
+ ruleUrl = `${this.props.feedUrl}/${rule.id}/`;
+ }
return (
diff --git a/src/newsreader/js/pages/homepage/components/postlist/PostList.js b/src/newsreader/js/pages/homepage/components/postlist/PostList.js
index cd57d6d..cff2437 100644
--- a/src/newsreader/js/pages/homepage/components/postlist/PostList.js
+++ b/src/newsreader/js/pages/homepage/components/postlist/PostList.js
@@ -38,7 +38,16 @@ class PostList extends React.Component {
render() {
const postItems = this.props.postsBySection.map((item, index) => {
- return ;
+ return (
+
+ );
});
if (isEqual(this.props.selected, {})) {
diff --git a/src/newsreader/js/pages/homepage/index.js b/src/newsreader/js/pages/homepage/index.js
index c16ed39..394a06c 100644
--- a/src/newsreader/js/pages/homepage/index.js
+++ b/src/newsreader/js/pages/homepage/index.js
@@ -11,9 +11,19 @@ const page = document.getElementById('homepage--page');
if (page) {
const store = configureStore();
+ let feedUrl = document.getElementById('feedUrl').textContent;
+ let subredditUrl = document.getElementById('subredditUrl').textContent;
+ let timelineUrl = document.getElementById('timelineUrl').textContent;
+ let categoriesUrl = document.getElementById('categoriesUrl').textContent;
+
ReactDOM.render(
-
+
,
page
);
diff --git a/src/newsreader/news/core/templates/news/core/views/categories.html b/src/newsreader/news/core/templates/news/core/views/categories.html
index 35fc741..6a6cdae 100644
--- a/src/newsreader/news/core/templates/news/core/views/categories.html
+++ b/src/newsreader/news/core/templates/news/core/views/categories.html
@@ -30,5 +30,8 @@
]
+ {{ categories_update_url|json_script:"updateUrl" }}
+ {{ categories_create_url|json_script:"createUrl" }}
+
{{ block.super }}
{% endblock %}
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 79e1ccc..502ef63 100644
--- a/src/newsreader/news/core/templates/news/core/views/homepage.html
+++ b/src/newsreader/news/core/templates/news/core/views/homepage.html
@@ -3,4 +3,13 @@
{% block content %}
-{% endblock %}
+{% endblock content %}
+
+{% block scripts %}
+ {{ feed_url|json_script:"feedUrl" }}
+ {{ subreddit_url|json_script:"subredditUrl" }}
+ {{ twitter_timeline_url|json_script:"timelineUrl" }}
+ {{ categories_url|json_script:"categoriesUrl" }}
+
+ {{ block.super }}
+{% endblock scripts %}
diff --git a/src/newsreader/news/core/views.py b/src/newsreader/news/core/views.py
index 9ef81eb..981e7b2 100644
--- a/src/newsreader/news/core/views.py
+++ b/src/newsreader/news/core/views.py
@@ -11,24 +11,21 @@ from newsreader.news.core.models import Category
class NewsView(TemplateView):
template_name = "news/core/views/homepage.html"
- # TODO serialize objects to show filled main page
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
- user = self.request.user
- categories = {
- category: category.rules.order_by("-created")
- for category in user.categories.order_by("name")
+ return {
+ **context,
+ "feed_url": reverse_lazy("news:collection:feed-update", args=(0,)),
+ "subreddit_url": reverse_lazy(
+ "news:collection:subreddit-update", args=(0,)
+ ),
+ "twitter_timeline_url": reverse_lazy(
+ "news:collection:twitter-timeline-update", args=(0,)
+ ),
+ "categories_url": reverse_lazy("news:core:category-update", args=(0,)),
}
- rules = {
- rule: rule.posts.order_by("-publication_date")[:30]
- for rule in user.rules.order_by("-created")
- }
-
- context.update(categories=categories, rules=rules)
- return context
-
class CategoryViewMixin:
queryset = Category.objects.prefetch_related("rules").order_by("name")
@@ -58,6 +55,17 @@ class CategoryListView(CategoryViewMixin, ListView):
template_name = "news/core/views/categories.html"
context_object_name = "categories"
+ def get_context_data(self, *args, **kwargs):
+ context = super().get_context_data(*args, **kwargs)
+
+ return {
+ **context,
+ "categories_create_url": reverse_lazy("news:core:category-create"),
+ "categories_update_url": (
+ reverse_lazy("news:core:category-update", args=(0,))
+ ),
+ }
+
class CategoryUpdateView(CategoryViewMixin, CategoryDetailMixin, UpdateView):
template_name = "news/core/views/category-update.html"