Show rules inside one list
Alot of post components can be refactored now. The API endpoint can also order by publication date only (drop ordering by rule too).
This commit is contained in:
parent
b6b7ae3997
commit
fe27bdbb27
4 changed files with 16 additions and 19 deletions
|
|
@ -6,7 +6,7 @@ import { fetchPostsBySection } from '../../actions/posts.js';
|
||||||
import { filterPosts } from './filters.js';
|
import { filterPosts } from './filters.js';
|
||||||
|
|
||||||
import LoadingIndicator from '../../../../components/LoadingIndicator.js';
|
import LoadingIndicator from '../../../../components/LoadingIndicator.js';
|
||||||
import RuleItem from './RuleItem.js';
|
import PostItem from './PostItem.js';
|
||||||
|
|
||||||
class FeedList extends React.Component {
|
class FeedList extends React.Component {
|
||||||
checkScrollHeight = ::this.checkScrollHeight;
|
checkScrollHeight = ::this.checkScrollHeight;
|
||||||
|
|
@ -37,8 +37,8 @@ class FeedList extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const ruleItems = this.props.posts.map((item, index) => {
|
const postItems = this.props.postsBySection.map((item, index) => {
|
||||||
return <RuleItem key={index} posts={item.posts} rule={item.rule} />;
|
return <PostItem key={index} post={item} selected={this.props.selected} />;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isEqual(this.props.selected, {})) {
|
if (isEqual(this.props.selected, {})) {
|
||||||
|
|
@ -50,7 +50,7 @@ class FeedList extends React.Component {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
} else if (ruleItems.length === 0 && !this.props.isFetching) {
|
} else if (postItems.length === 0 && !this.props.isFetching) {
|
||||||
return (
|
return (
|
||||||
<div className="post-message">
|
<div className="post-message">
|
||||||
<div className="post-message__block">
|
<div className="post-message__block">
|
||||||
|
|
@ -63,7 +63,7 @@ class FeedList extends React.Component {
|
||||||
} else {
|
} else {
|
||||||
return (
|
return (
|
||||||
<div className="post-block">
|
<div className="post-block">
|
||||||
{ruleItems}
|
<ul className="posts">{postItems}</ul>
|
||||||
{this.props.isFetching && <LoadingIndicator />}
|
{this.props.isFetching && <LoadingIndicator />}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
@ -73,7 +73,7 @@ class FeedList extends React.Component {
|
||||||
|
|
||||||
const mapStateToProps = state => ({
|
const mapStateToProps = state => ({
|
||||||
isFetching: state.posts.isFetching,
|
isFetching: state.posts.isFetching,
|
||||||
posts: filterPosts(state),
|
postsBySection: filterPosts(state),
|
||||||
next: state.selected.next,
|
next: state.selected.next,
|
||||||
lastReached: state.selected.lastReached,
|
lastReached: state.selected.lastReached,
|
||||||
selected: state.selected.item,
|
selected: state.selected.item,
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ import { formatDatetime } from '../../../../utils.js';
|
||||||
|
|
||||||
class PostItem extends React.Component {
|
class PostItem extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
const post = this.props.post;
|
const rule = { ...this.props.post.rule };
|
||||||
|
const post = { ...this.props.post, rule: rule.id };
|
||||||
const publicationDate = formatDatetime(post.publicationDate);
|
const publicationDate = formatDatetime(post.publicationDate);
|
||||||
const titleClassName = post.read
|
const titleClassName = post.read
|
||||||
? 'posts-header__title posts-header__title--read'
|
? 'posts-header__title posts-header__title--read'
|
||||||
|
|
@ -29,7 +30,7 @@ class PostItem extends React.Component {
|
||||||
{publicationDate} {post.author && `By ${post.author}`}
|
{publicationDate} {post.author && `By ${post.author}`}
|
||||||
</span>
|
</span>
|
||||||
{this.props.selected.type == CATEGORY_TYPE && (
|
{this.props.selected.type == CATEGORY_TYPE && (
|
||||||
<span className="badge">{this.props.rule.name}</span>
|
<span className="badge">{rule.name}</span>
|
||||||
)}
|
)}
|
||||||
<a
|
<a
|
||||||
className="posts-info__link"
|
className="posts-info__link"
|
||||||
|
|
@ -45,12 +46,8 @@ class PostItem extends React.Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const mapStateToProps = state => ({
|
|
||||||
selected: state.selected.item,
|
|
||||||
});
|
|
||||||
|
|
||||||
const mapDispatchToProps = dispatch => ({
|
const mapDispatchToProps = dispatch => ({
|
||||||
selectPost: post => dispatch(selectPost(post)),
|
selectPost: post => dispatch(selectPost(post)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connect(mapStateToProps, mapDispatchToProps)(PostItem);
|
export default connect(null, mapDispatchToProps)(PostItem);
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,9 @@ export const filterPostsByRule = (rule = {}, posts = []) => {
|
||||||
return post.rule === rule.id;
|
return post.rule === rule.id;
|
||||||
});
|
});
|
||||||
|
|
||||||
return filteredPosts.length > 0 ? [{ rule, posts: filteredPosts }] : [];
|
const filteredData = filteredPosts.map(post => ({ ...post, rule: { ...rule } }));
|
||||||
|
|
||||||
|
return filteredData.length > 0 ? [...filteredData] : [];
|
||||||
};
|
};
|
||||||
|
|
||||||
export const filterPostsByCategory = (category = {}, rules = [], posts = []) => {
|
export const filterPostsByCategory = (category = {}, rules = [], posts = []) => {
|
||||||
|
|
@ -22,13 +24,10 @@ export const filterPostsByCategory = (category = {}, rules = [], posts = []) =>
|
||||||
return post.rule === rule.id;
|
return post.rule === rule.id;
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return filteredPosts.map(post => ({ ...post, rule: { ...rule } }));
|
||||||
rule: { ...rule },
|
|
||||||
posts: filteredPosts,
|
|
||||||
};
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return filteredData.filter(rule => rule.posts.length > 0);
|
return filteredData.length > 0 ? [...filteredData.flat()] : [];
|
||||||
};
|
};
|
||||||
|
|
||||||
export const filterPosts = state => {
|
export const filterPosts = state => {
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
|
||||||
|
width: 95%;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
||||||
&__item {
|
&__item {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue