Commit 8af6d143965a8843256bd49c71ee080843da04e3
1 parent
12f1379f
Exists in
master
and in
26 other branches
Fix merge with comment-paragraph
Showing
9 changed files
with
40 additions
and
35 deletions
Show diff stats
src/app/article/comment/comment.html
@@ -23,5 +23,5 @@ | @@ -23,5 +23,5 @@ | ||
23 | </a> | 23 | </a> |
24 | </div> | 24 | </div> |
25 | </div> | 25 | </div> |
26 | - <noosfero-comments [show-form]="ctrl.showReply" [article]="ctrl.article" [parent]="ctrl.comment" ng-if="ctrl.displayReplies"></noosfero-comments> | 26 | + <noosfero-comments [show-form]="ctrl.showReply()" [article]="ctrl.article" [parent]="ctrl.comment" ng-if="ctrl.displayReplies"></noosfero-comments> |
27 | </div> | 27 | </div> |
src/app/article/comment/comments.component.ts
@@ -2,27 +2,27 @@ import { Inject, Input, Component, provide } from 'ng-forward'; | @@ -2,27 +2,27 @@ import { Inject, Input, Component, provide } from 'ng-forward'; | ||
2 | import { PostCommentComponent } from "./post-comment/post-comment.component"; | 2 | import { PostCommentComponent } from "./post-comment/post-comment.component"; |
3 | import { CommentService } from "../../../lib/ng-noosfero-api/http/comment.service"; | 3 | import { CommentService } from "../../../lib/ng-noosfero-api/http/comment.service"; |
4 | import { CommentComponent } from "./comment.component"; | 4 | import { CommentComponent } from "./comment.component"; |
5 | -import { PostCommentEventService } from "./post-comment/post-comment-event.service"; | ||
6 | 5 | ||
7 | @Component({ | 6 | @Component({ |
8 | selector: 'noosfero-comments', | 7 | selector: 'noosfero-comments', |
9 | templateUrl: 'app/article/comment/comments.html', | 8 | templateUrl: 'app/article/comment/comments.html', |
10 | - directives: [PostCommentComponent, CommentComponent] | 9 | + directives: [PostCommentComponent, CommentComponent], |
10 | + outputs: ['commentAdded'] | ||
11 | }) | 11 | }) |
12 | -@Inject(CommentService, PostCommentEventService, "$scope") | 12 | +@Inject(CommentService, "$element") |
13 | export class CommentsComponent { | 13 | export class CommentsComponent { |
14 | 14 | ||
15 | - comments: noosfero.Comment[] = []; | 15 | + comments: noosfero.CommentViewModel[] = []; |
16 | @Input() showForm = true; | 16 | @Input() showForm = true; |
17 | @Input() article: noosfero.Article; | 17 | @Input() article: noosfero.Article; |
18 | - @Input() parent: noosfero.Comment; | 18 | + @Input() parent: noosfero.CommentViewModel; |
19 | protected page = 1; | 19 | protected page = 1; |
20 | protected perPage = 5; | 20 | protected perPage = 5; |
21 | protected total = 0; | 21 | protected total = 0; |
22 | 22 | ||
23 | newComment = <noosfero.Comment>{}; | 23 | newComment = <noosfero.Comment>{}; |
24 | 24 | ||
25 | - constructor(protected commentService: CommentService, private postCommentEventService: PostCommentEventService, private $scope: ng.IScope) { } | 25 | + constructor(protected commentService: CommentService, private $scope: ng.IScope) { } |
26 | 26 | ||
27 | ngOnInit() { | 27 | ngOnInit() { |
28 | if (this.parent) { | 28 | if (this.parent) { |
@@ -30,13 +30,20 @@ export class CommentsComponent { | @@ -30,13 +30,20 @@ export class CommentsComponent { | ||
30 | } else { | 30 | } else { |
31 | this.loadNextPage(); | 31 | this.loadNextPage(); |
32 | } | 32 | } |
33 | - this.postCommentEventService.subscribe((comment: noosfero.Comment) => { | ||
34 | - if ((!this.parent && !comment.reply_of) || (comment.reply_of && this.parent && comment.reply_of.id === this.parent.id)) { | ||
35 | - if (!this.comments) this.comments = []; | ||
36 | - this.comments.push(comment); | ||
37 | - this.$scope.$apply(); | ||
38 | - } | 33 | + } |
34 | + | ||
35 | + commentAdded(comment: noosfero.Comment): void { | ||
36 | + this.comments.push(comment); | ||
37 | + this.resetShowReply(); | ||
38 | + } | ||
39 | + | ||
40 | + private resetShowReply() { | ||
41 | + this.comments.forEach((comment: noosfero.CommentViewModel) => { | ||
42 | + comment.__show_reply = false; | ||
39 | }); | 43 | }); |
44 | + if (this.parent) { | ||
45 | + this.parent.__show_reply = false; | ||
46 | + } | ||
40 | } | 47 | } |
41 | 48 | ||
42 | loadComments() { | 49 | loadComments() { |
src/app/article/comment/comments.html
1 | <div class="comments"> | 1 | <div class="comments"> |
2 | - <noosfero-post-comment ng-if="ctrl.showForm" [article]="ctrl.article" [parent]="ctrl.parent" [comment]="ctrl.newComment"></noosfero-post-comment> | 2 | + <noosfero-post-comment (comment-saved)="ctrl.commentAdded($event.detail)" ng-if="ctrl.showForm" [article]="ctrl.article" [parent]="ctrl.parent" [comment]="ctrl.newComment"></noosfero-post-comment> |
3 | 3 | ||
4 | <div class="comments-list"> | 4 | <div class="comments-list"> |
5 | <noosfero-comment ng-repeat="comment in ctrl.comments | orderBy: 'created_at':true" [comment]="comment" [article]="ctrl.article"></noosfero-comment> | 5 | <noosfero-comment ng-repeat="comment in ctrl.comments | orderBy: 'created_at':true" [comment]="comment" [article]="ctrl.article"></noosfero-comment> |
src/app/article/comment/post-comment/post-comment.component.ts
1 | -import { Inject, Input, Component } from 'ng-forward'; | 1 | +import { Inject, Input, Output, EventEmitter, Component } from 'ng-forward'; |
2 | import { CommentService } from "../../../../lib/ng-noosfero-api/http/comment.service"; | 2 | import { CommentService } from "../../../../lib/ng-noosfero-api/http/comment.service"; |
3 | import { NotificationService } from "../../../shared/services/notification.service"; | 3 | import { NotificationService } from "../../../shared/services/notification.service"; |
4 | import { SessionService } from "../../../login"; | 4 | import { SessionService } from "../../../login"; |
5 | -import { PostCommentEventService } from "./post-comment-event.service"; | ||
6 | import { CommentFormHotspotComponent } from "../../../hotspot/comment-form-hotspot.component"; | 5 | import { CommentFormHotspotComponent } from "../../../hotspot/comment-form-hotspot.component"; |
7 | 6 | ||
8 | @Component({ | 7 | @Component({ |
9 | selector: 'noosfero-post-comment', | 8 | selector: 'noosfero-post-comment', |
10 | templateUrl: 'app/article/comment/post-comment/post-comment.html', | 9 | templateUrl: 'app/article/comment/post-comment/post-comment.html', |
10 | + outputs: ['commentSaved'], | ||
11 | directives: [CommentFormHotspotComponent] | 11 | directives: [CommentFormHotspotComponent] |
12 | }) | 12 | }) |
13 | -@Inject(CommentService, NotificationService, SessionService, PostCommentEventService) | 13 | +@Inject(CommentService, NotificationService, SessionService) |
14 | export class PostCommentComponent { | 14 | export class PostCommentComponent { |
15 | 15 | ||
16 | public static EVENT_COMMENT_RECEIVED = "comment.received"; | 16 | public static EVENT_COMMENT_RECEIVED = "comment.received"; |
17 | 17 | ||
18 | @Input() article: noosfero.Article; | 18 | @Input() article: noosfero.Article; |
19 | @Input() parent: noosfero.Comment; | 19 | @Input() parent: noosfero.Comment; |
20 | + @Output() commentSaved: EventEmitter<Comment> = new EventEmitter<Comment>(); | ||
20 | @Input() comment = <noosfero.Comment>{}; | 21 | @Input() comment = <noosfero.Comment>{}; |
21 | private currentUser: noosfero.User; | 22 | private currentUser: noosfero.User; |
22 | 23 | ||
23 | constructor(private commentService: CommentService, | 24 | constructor(private commentService: CommentService, |
24 | private notificationService: NotificationService, | 25 | private notificationService: NotificationService, |
25 | - private session: SessionService, | ||
26 | - private postCommentEventService: PostCommentEventService) { | 26 | + private session: SessionService) { |
27 | this.currentUser = this.session.currentUser(); | 27 | this.currentUser = this.session.currentUser(); |
28 | } | 28 | } |
29 | 29 | ||
@@ -32,7 +32,7 @@ export class PostCommentComponent { | @@ -32,7 +32,7 @@ export class PostCommentComponent { | ||
32 | this.comment.reply_of_id = this.parent.id; | 32 | this.comment.reply_of_id = this.parent.id; |
33 | } | 33 | } |
34 | this.commentService.createInArticle(this.article, this.comment).then((result: noosfero.RestResult<noosfero.Comment>) => { | 34 | this.commentService.createInArticle(this.article, this.comment).then((result: noosfero.RestResult<noosfero.Comment>) => { |
35 | - this.postCommentEventService.emit(result.data); | 35 | + this.commentSaved.next(result.data); |
36 | this.comment.body = ""; | 36 | this.comment.body = ""; |
37 | this.notificationService.success({ title: "comment.post.success.title", message: "comment.post.success.message" }); | 37 | this.notificationService.success({ title: "comment.post.success.title", message: "comment.post.success.message" }); |
38 | }); | 38 | }); |
src/plugins/comment_paragraph/allow-comment/allow-comment.component.spec.ts
@@ -26,7 +26,7 @@ describe("Components", () => { | @@ -26,7 +26,7 @@ describe("Components", () => { | ||
26 | new Provider('CommentParagraphService', { useValue: serviceMock }), | 26 | new Provider('CommentParagraphService', { useValue: serviceMock }), |
27 | new Provider('CommentParagraphEventService', { useValue: eventServiceMock }) | 27 | new Provider('CommentParagraphEventService', { useValue: eventServiceMock }) |
28 | ]; | 28 | ]; |
29 | - let helper: ComponentTestHelper; | 29 | + let helper: ComponentTestHelper<AllowCommentComponent>; |
30 | 30 | ||
31 | beforeEach(angular.mock.module("templates")); | 31 | beforeEach(angular.mock.module("templates")); |
32 | 32 | ||
@@ -45,7 +45,7 @@ describe("Components", () => { | @@ -45,7 +45,7 @@ describe("Components", () => { | ||
45 | } | 45 | } |
46 | } | 46 | } |
47 | }); | 47 | }); |
48 | - helper = new ComponentTestHelper(cls, done); | 48 | + helper = new ComponentTestHelper<AllowCommentComponent>(cls, done); |
49 | }); | 49 | }); |
50 | 50 | ||
51 | it('update comments count', () => { | 51 | it('update comments count', () => { |
src/plugins/comment_paragraph/hotspot/comment-paragraph-article-button.component.spec.ts
@@ -16,7 +16,7 @@ describe("Components", () => { | @@ -16,7 +16,7 @@ describe("Components", () => { | ||
16 | new Provider('CommentParagraphService', { useValue: serviceMock }), | 16 | new Provider('CommentParagraphService', { useValue: serviceMock }), |
17 | new Provider('CommentParagraphEventService', { useValue: eventServiceMock }) | 17 | new Provider('CommentParagraphEventService', { useValue: eventServiceMock }) |
18 | ].concat(helpers.provideFilters('translateFilter')); | 18 | ].concat(helpers.provideFilters('translateFilter')); |
19 | - let helper: ComponentTestHelper; | 19 | + let helper: ComponentTestHelper<CommentParagraphArticleButtonHotspotComponent>; |
20 | 20 | ||
21 | beforeEach(angular.mock.module("templates")); | 21 | beforeEach(angular.mock.module("templates")); |
22 | 22 | ||
@@ -29,7 +29,7 @@ describe("Components", () => { | @@ -29,7 +29,7 @@ describe("Components", () => { | ||
29 | article: {} | 29 | article: {} |
30 | } | 30 | } |
31 | }); | 31 | }); |
32 | - helper = new ComponentTestHelper(cls, done); | 32 | + helper = new ComponentTestHelper<CommentParagraphArticleButtonHotspotComponent>(cls, done); |
33 | }); | 33 | }); |
34 | 34 | ||
35 | it('emit event when deactivate comment paragraph in an article', () => { | 35 | it('emit event when deactivate comment paragraph in an article', () => { |
@@ -55,7 +55,7 @@ describe("Components", () => { | @@ -55,7 +55,7 @@ describe("Components", () => { | ||
55 | }); | 55 | }); |
56 | 56 | ||
57 | it('return true when comment paragraph is active', () => { | 57 | it('return true when comment paragraph is active', () => { |
58 | - helper.component.article = { setting: { comment_paragraph_plugin_activate: true } }; | 58 | + helper.component.article = <noosfero.Article>{ setting: { comment_paragraph_plugin_activate: true } }; |
59 | helper.detectChanges(); | 59 | helper.detectChanges(); |
60 | expect(helper.component.isActivated()).toBeTruthy(); | 60 | expect(helper.component.isActivated()).toBeTruthy(); |
61 | }); | 61 | }); |
@@ -65,7 +65,7 @@ describe("Components", () => { | @@ -65,7 +65,7 @@ describe("Components", () => { | ||
65 | }); | 65 | }); |
66 | 66 | ||
67 | it('return false when article has no setting attribute', () => { | 67 | it('return false when article has no setting attribute', () => { |
68 | - helper.component.article = {}; | 68 | + helper.component.article = <noosfero.Article>{}; |
69 | helper.detectChanges(); | 69 | helper.detectChanges(); |
70 | expect(helper.component.isActivated()).toBeFalsy(); | 70 | expect(helper.component.isActivated()).toBeFalsy(); |
71 | }); | 71 | }); |
@@ -76,7 +76,7 @@ describe("Components", () => { | @@ -76,7 +76,7 @@ describe("Components", () => { | ||
76 | }); | 76 | }); |
77 | 77 | ||
78 | it('display deactivate button when comment paragraph is active', () => { | 78 | it('display deactivate button when comment paragraph is active', () => { |
79 | - helper.component.article = { setting: { comment_paragraph_plugin_activate: true } }; | 79 | + helper.component.article = <noosfero.Article>{ setting: { comment_paragraph_plugin_activate: true } }; |
80 | helper.detectChanges(); | 80 | helper.detectChanges(); |
81 | expect(helper.all('.comment-paragraph-deactivate').length).toEqual(1); | 81 | expect(helper.all('.comment-paragraph-deactivate').length).toEqual(1); |
82 | expect(helper.all('.comment-paragraph-activate').length).toEqual(0); | 82 | expect(helper.all('.comment-paragraph-activate').length).toEqual(0); |
src/plugins/comment_paragraph/hotspot/comment-paragraph-from.component.spec.ts
@@ -8,7 +8,7 @@ let htmlTemplate = '<comment-paragraph-form-hotspot [comment]="ctrl.comment" [pa | @@ -8,7 +8,7 @@ let htmlTemplate = '<comment-paragraph-form-hotspot [comment]="ctrl.comment" [pa | ||
8 | describe("Components", () => { | 8 | describe("Components", () => { |
9 | describe("Comment Paragraph Form Hotspot Component", () => { | 9 | describe("Comment Paragraph Form Hotspot Component", () => { |
10 | 10 | ||
11 | - let helper: ComponentTestHelper; | 11 | + let helper: ComponentTestHelper<CommentParagraphFormHotspotComponent>; |
12 | 12 | ||
13 | beforeEach(angular.mock.module("templates")); | 13 | beforeEach(angular.mock.module("templates")); |
14 | 14 | ||
@@ -21,7 +21,7 @@ describe("Components", () => { | @@ -21,7 +21,7 @@ describe("Components", () => { | ||
21 | comment: {} | 21 | comment: {} |
22 | } | 22 | } |
23 | }); | 23 | }); |
24 | - helper = new ComponentTestHelper(cls, done); | 24 | + helper = new ComponentTestHelper<CommentParagraphFormHotspotComponent>(cls, done); |
25 | }); | 25 | }); |
26 | 26 | ||
27 | it('set paragraph uuid when parent has it setted', () => { | 27 | it('set paragraph uuid when parent has it setted', () => { |
src/plugins/comment_paragraph/side-comments/side-comments.component.spec.ts
@@ -21,7 +21,7 @@ describe("Components", () => { | @@ -21,7 +21,7 @@ describe("Components", () => { | ||
21 | new Provider('CommentService', { useValue: commentServiceMock }), | 21 | new Provider('CommentService', { useValue: commentServiceMock }), |
22 | new Provider('PostCommentEventService', { useValue: postCommentEventService }) | 22 | new Provider('PostCommentEventService', { useValue: postCommentEventService }) |
23 | ]; | 23 | ]; |
24 | - let helper: ComponentTestHelper; | 24 | + let helper: ComponentTestHelper<SideCommentsComponent>; |
25 | 25 | ||
26 | beforeEach(angular.mock.module("templates")); | 26 | beforeEach(angular.mock.module("templates")); |
27 | 27 | ||
@@ -35,7 +35,7 @@ describe("Components", () => { | @@ -35,7 +35,7 @@ describe("Components", () => { | ||
35 | article: {} | 35 | article: {} |
36 | } | 36 | } |
37 | }); | 37 | }); |
38 | - helper = new ComponentTestHelper(cls, done); | 38 | + helper = new ComponentTestHelper<SideCommentsComponent>(cls, done); |
39 | }); | 39 | }); |
40 | 40 | ||
41 | it('call service to load paragraph comments', () => { | 41 | it('call service to load paragraph comments', () => { |
src/plugins/comment_paragraph/side-comments/side-comments.component.ts
@@ -2,23 +2,21 @@ import {Component, Inject, Input, Output} from "ng-forward"; | @@ -2,23 +2,21 @@ import {Component, Inject, Input, Output} from "ng-forward"; | ||
2 | import {CommentsComponent} from "../../../app/article/comment/comments.component"; | 2 | import {CommentsComponent} from "../../../app/article/comment/comments.component"; |
3 | import {CommentService} from "../../../lib/ng-noosfero-api/http/comment.service"; | 3 | import {CommentService} from "../../../lib/ng-noosfero-api/http/comment.service"; |
4 | import {CommentParagraphService} from "../http/comment-paragraph.service"; | 4 | import {CommentParagraphService} from "../http/comment-paragraph.service"; |
5 | -import { PostCommentEventService } from "../../../app/article/comment/post-comment/post-comment-event.service"; | ||
6 | 5 | ||
7 | @Component({ | 6 | @Component({ |
8 | selector: "comment-paragraph-side-comments", | 7 | selector: "comment-paragraph-side-comments", |
9 | templateUrl: 'app/article/comment/comments.html', | 8 | templateUrl: 'app/article/comment/comments.html', |
10 | }) | 9 | }) |
11 | -@Inject(CommentService, PostCommentEventService, "$scope", CommentParagraphService) | 10 | +@Inject(CommentService, "$scope", CommentParagraphService) |
12 | export class SideCommentsComponent extends CommentsComponent { | 11 | export class SideCommentsComponent extends CommentsComponent { |
13 | 12 | ||
14 | @Input() article: noosfero.Article; | 13 | @Input() article: noosfero.Article; |
15 | @Input() paragraphUuid: string; | 14 | @Input() paragraphUuid: string; |
16 | 15 | ||
17 | constructor(commentService: CommentService, | 16 | constructor(commentService: CommentService, |
18 | - postCommentEventService: PostCommentEventService, | ||
19 | $scope: ng.IScope, | 17 | $scope: ng.IScope, |
20 | private commentParagraphService: CommentParagraphService) { | 18 | private commentParagraphService: CommentParagraphService) { |
21 | - super(commentService, postCommentEventService, $scope); | 19 | + super(commentService, $scope); |
22 | } | 20 | } |
23 | 21 | ||
24 | ngOnInit() { | 22 | ngOnInit() { |