comments.component.ts
2.01 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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import { Inject, Input, Output, Component, provide, EventEmitter } from 'ng-forward';
import {INgForwardJQuery} from "ng-forward/cjs/util/jqlite-extensions";
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],
outputs: ['commentAdded']
})
@Inject(CommentService, "$element")
export class CommentsComponent {
comments: noosfero.CommentViewModel[] = [];
@Input() showForm = true;
@Input() article: noosfero.Article;
@Input() parent: noosfero.CommentViewModel;
protected page = 1;
protected perPage = 5;
protected total = 0;
constructor(protected commentService: CommentService) { }
ngOnInit() {
if (this.parent) {
this.comments = this.parent.replies;
} else {
this.loadNextPage();
}
}
commentAdded(comment: noosfero.Comment): void {
this.comments.push(comment);
this.resetShowReply();
}
private resetShowReply() {
this.comments.forEach((comment: noosfero.CommentViewModel) => {
comment.__show_reply = false;
});
if (this.parent) {
this.parent.__show_reply = false;
}
}
loadComments() {
return this.commentService.getByArticle(this.article, { page: this.page, per_page: this.perPage });
}
loadNextPage() {
this.loadComments().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;
}
}