MOBILE-3230 forum: Use nested children in a discussion when calculating parent subjects

main
Noel De Martin 2019-12-02 13:10:53 +01:00
parent 9ebf923964
commit 8af17d2cf7
1 changed files with 30 additions and 1 deletions

View File

@ -33,6 +33,8 @@ import { AddonModForumSyncProvider } from '../../providers/sync';
type SortType = 'flat-newest' | 'flat-oldest' | 'nested';
type Post = any & { children?: Post[]; };
/**
* Page that displays a forum discussion.
*/
@ -391,7 +393,7 @@ export class AddonModForumDiscussionPage implements OnDestroy {
this.posts = posts;
this.ratingInfo = ratingInfo;
this.postSubjects = this.posts.reduce((postSubjects, post) => {
this.postSubjects = this.getAllPosts().reduce((postSubjects, post) => {
postSubjects[post.id] = post.subject;
return postSubjects;
@ -651,4 +653,31 @@ export class AddonModForumDiscussionPage implements OnDestroy {
ngOnDestroy(): void {
this.onlineObserver && this.onlineObserver.unsubscribe();
}
/**
* Get all the posts contained in the discussion.
*
* @return Array containing all the posts of the discussion.
*/
protected getAllPosts(): Post[] {
return [].concat(...this.posts.map(this.flattenPostHierarchy.bind(this)));
}
/**
* Flatten a post's hierarchy into an array.
*
* @param parent Parent post.
* @return Array containing all the posts within the hierarchy (including the parent).
*/
protected flattenPostHierarchy(parent: Post): Post[] {
const posts = [parent];
const children = parent.children || [];
for (const child of children) {
posts.push(...this.flattenPostHierarchy(child));
}
return posts;
}
}