1
0
mirror of https://github.com/flarum/core.git synced 2025-10-14 08:24:28 +02:00

Create abstract PaginatedListState for DiscussionList and others (#2781)

This commit is contained in:
David Sevilla Martín
2021-05-11 19:14:26 -04:00
committed by GitHub
parent 9a26b2bef4
commit 4e0fdb4c77
11 changed files with 420 additions and 311 deletions

View File

@@ -3,6 +3,7 @@ import DiscussionListItem from './DiscussionListItem';
import Button from '../../common/components/Button';
import LoadingIndicator from '../../common/components/LoadingIndicator';
import Placeholder from '../../common/components/Placeholder';
import Discussion from '../../common/models/Discussion';
/**
* The `DiscussionList` component displays a list of discussions.
@@ -13,24 +14,27 @@ import Placeholder from '../../common/components/Placeholder';
*/
export default class DiscussionList extends Component {
view() {
/**
* @type DiscussionListState
*/
const state = this.attrs.state;
const params = state.getParams();
let loading;
if (state.isLoading()) {
if (state.isInitialLoading() || state.isLoadingNext()) {
loading = <LoadingIndicator />;
} else if (state.moreResults) {
} else if (state.hasNext()) {
loading = Button.component(
{
className: 'Button',
onclick: state.loadMore.bind(state),
onclick: state.loadNext.bind(state),
},
app.translator.trans('core.forum.discussion_list.load_more_button')
);
}
if (state.empty()) {
if (state.isEmpty()) {
const text = app.translator.trans('core.forum.discussion_list.empty_text');
return <div className="DiscussionList">{Placeholder.component({ text })}</div>;
}
@@ -38,12 +42,12 @@ export default class DiscussionList extends Component {
return (
<div className={'DiscussionList' + (state.isSearchResults() ? ' DiscussionList--searchResults' : '')}>
<ul className="DiscussionList-discussions">
{state.discussions.map((discussion) => {
return (
{state.getPages().map((pg) => {
return pg.items.map((discussion) => (
<li key={discussion.id()} data-id={discussion.id()}>
{DiscussionListItem.component({ discussion, params })}
</li>
);
));
})}
</ul>
<div className="DiscussionList-loadMore">{loading}</div>