comments.component.ts
1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { Inject, Input, Component, provide } from 'ng-forward';
import { PostCommentComponent } from "./post-comment/post-comment.component";
import { CommentService } from "../../../lib/ng-noosfero-api/http/comment.service";
import { CommentComponent } from "./comment.component";
@Component({
selector: 'noosfero-comments',
templateUrl: 'app/article/comment/comments.html',
directives: [PostCommentComponent, CommentComponent]
})
@Inject(CommentService, "$rootScope")
export class CommentsComponent {
comments: noosfero.Comment[] = [];
@Input() showForm = true;
@Input() article: noosfero.Article;
@Input() parent: noosfero.Comment;
private page = 1;
private perPage = 5;
private total = 0;
constructor(private commentService: CommentService, private $rootScope: ng.IScope) {
$rootScope.$on(PostCommentComponent.EVENT_COMMENT_RECEIVED, (event: ng.IAngularEvent, comment: noosfero.Comment) => {
if ((!this.parent && !comment.reply_of) || (comment.reply_of && this.parent && comment.reply_of.id === this.parent.id)) {
if (!this.comments) this.comments = [];
this.comments.push(comment);
}
});
}
ngOnInit() {
if (this.parent) {
this.comments = this.parent.replies;
} else {
this.loadNextPage();
}
}
loadNextPage() {
this.commentService.getByArticle(this.article, { page: this.page, per_page: this.perPage }).then((result: noosfero.RestResult<noosfero.Comment[]>) => {
this.comments = this.comments.concat(result.data);
this.total = result.headers ? result.headers("total") : this.comments.length;
this.page++;
});
}
displayMore() {
let pages = Math.ceil(this.total / this.perPage);
return !this.parent && pages >= this.page;
}
}