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 | 23 | </a> |
| 24 | 24 | </div> |
| 25 | 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 | 27 | </div> | ... | ... |
src/app/article/comment/comments.component.ts
| ... | ... | @@ -2,27 +2,27 @@ import { Inject, Input, Component, provide } from 'ng-forward'; |
| 2 | 2 | import { PostCommentComponent } from "./post-comment/post-comment.component"; |
| 3 | 3 | import { CommentService } from "../../../lib/ng-noosfero-api/http/comment.service"; |
| 4 | 4 | import { CommentComponent } from "./comment.component"; |
| 5 | -import { PostCommentEventService } from "./post-comment/post-comment-event.service"; | |
| 6 | 5 | |
| 7 | 6 | @Component({ |
| 8 | 7 | selector: 'noosfero-comments', |
| 9 | 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 | 13 | export class CommentsComponent { |
| 14 | 14 | |
| 15 | - comments: noosfero.Comment[] = []; | |
| 15 | + comments: noosfero.CommentViewModel[] = []; | |
| 16 | 16 | @Input() showForm = true; |
| 17 | 17 | @Input() article: noosfero.Article; |
| 18 | - @Input() parent: noosfero.Comment; | |
| 18 | + @Input() parent: noosfero.CommentViewModel; | |
| 19 | 19 | protected page = 1; |
| 20 | 20 | protected perPage = 5; |
| 21 | 21 | protected total = 0; |
| 22 | 22 | |
| 23 | 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 | 27 | ngOnInit() { |
| 28 | 28 | if (this.parent) { |
| ... | ... | @@ -30,13 +30,20 @@ export class CommentsComponent { |
| 30 | 30 | } else { |
| 31 | 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 | 49 | loadComments() { | ... | ... |
src/app/article/comment/comments.html
| 1 | 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 | 4 | <div class="comments-list"> |
| 5 | 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 | 2 | import { CommentService } from "../../../../lib/ng-noosfero-api/http/comment.service"; |
| 3 | 3 | import { NotificationService } from "../../../shared/services/notification.service"; |
| 4 | 4 | import { SessionService } from "../../../login"; |
| 5 | -import { PostCommentEventService } from "./post-comment-event.service"; | |
| 6 | 5 | import { CommentFormHotspotComponent } from "../../../hotspot/comment-form-hotspot.component"; |
| 7 | 6 | |
| 8 | 7 | @Component({ |
| 9 | 8 | selector: 'noosfero-post-comment', |
| 10 | 9 | templateUrl: 'app/article/comment/post-comment/post-comment.html', |
| 10 | + outputs: ['commentSaved'], | |
| 11 | 11 | directives: [CommentFormHotspotComponent] |
| 12 | 12 | }) |
| 13 | -@Inject(CommentService, NotificationService, SessionService, PostCommentEventService) | |
| 13 | +@Inject(CommentService, NotificationService, SessionService) | |
| 14 | 14 | export class PostCommentComponent { |
| 15 | 15 | |
| 16 | 16 | public static EVENT_COMMENT_RECEIVED = "comment.received"; |
| 17 | 17 | |
| 18 | 18 | @Input() article: noosfero.Article; |
| 19 | 19 | @Input() parent: noosfero.Comment; |
| 20 | + @Output() commentSaved: EventEmitter<Comment> = new EventEmitter<Comment>(); | |
| 20 | 21 | @Input() comment = <noosfero.Comment>{}; |
| 21 | 22 | private currentUser: noosfero.User; |
| 22 | 23 | |
| 23 | 24 | constructor(private commentService: CommentService, |
| 24 | 25 | private notificationService: NotificationService, |
| 25 | - private session: SessionService, | |
| 26 | - private postCommentEventService: PostCommentEventService) { | |
| 26 | + private session: SessionService) { | |
| 27 | 27 | this.currentUser = this.session.currentUser(); |
| 28 | 28 | } |
| 29 | 29 | |
| ... | ... | @@ -32,7 +32,7 @@ export class PostCommentComponent { |
| 32 | 32 | this.comment.reply_of_id = this.parent.id; |
| 33 | 33 | } |
| 34 | 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 | 36 | this.comment.body = ""; |
| 37 | 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 | 26 | new Provider('CommentParagraphService', { useValue: serviceMock }), |
| 27 | 27 | new Provider('CommentParagraphEventService', { useValue: eventServiceMock }) |
| 28 | 28 | ]; |
| 29 | - let helper: ComponentTestHelper; | |
| 29 | + let helper: ComponentTestHelper<AllowCommentComponent>; | |
| 30 | 30 | |
| 31 | 31 | beforeEach(angular.mock.module("templates")); |
| 32 | 32 | |
| ... | ... | @@ -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 | 51 | it('update comments count', () => { | ... | ... |
src/plugins/comment_paragraph/hotspot/comment-paragraph-article-button.component.spec.ts
| ... | ... | @@ -16,7 +16,7 @@ describe("Components", () => { |
| 16 | 16 | new Provider('CommentParagraphService', { useValue: serviceMock }), |
| 17 | 17 | new Provider('CommentParagraphEventService', { useValue: eventServiceMock }) |
| 18 | 18 | ].concat(helpers.provideFilters('translateFilter')); |
| 19 | - let helper: ComponentTestHelper; | |
| 19 | + let helper: ComponentTestHelper<CommentParagraphArticleButtonHotspotComponent>; | |
| 20 | 20 | |
| 21 | 21 | beforeEach(angular.mock.module("templates")); |
| 22 | 22 | |
| ... | ... | @@ -29,7 +29,7 @@ describe("Components", () => { |
| 29 | 29 | article: {} |
| 30 | 30 | } |
| 31 | 31 | }); |
| 32 | - helper = new ComponentTestHelper(cls, done); | |
| 32 | + helper = new ComponentTestHelper<CommentParagraphArticleButtonHotspotComponent>(cls, done); | |
| 33 | 33 | }); |
| 34 | 34 | |
| 35 | 35 | it('emit event when deactivate comment paragraph in an article', () => { |
| ... | ... | @@ -55,7 +55,7 @@ describe("Components", () => { |
| 55 | 55 | }); |
| 56 | 56 | |
| 57 | 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 | 59 | helper.detectChanges(); |
| 60 | 60 | expect(helper.component.isActivated()).toBeTruthy(); |
| 61 | 61 | }); |
| ... | ... | @@ -65,7 +65,7 @@ describe("Components", () => { |
| 65 | 65 | }); |
| 66 | 66 | |
| 67 | 67 | it('return false when article has no setting attribute', () => { |
| 68 | - helper.component.article = {}; | |
| 68 | + helper.component.article = <noosfero.Article>{}; | |
| 69 | 69 | helper.detectChanges(); |
| 70 | 70 | expect(helper.component.isActivated()).toBeFalsy(); |
| 71 | 71 | }); |
| ... | ... | @@ -76,7 +76,7 @@ describe("Components", () => { |
| 76 | 76 | }); |
| 77 | 77 | |
| 78 | 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 | 80 | helper.detectChanges(); |
| 81 | 81 | expect(helper.all('.comment-paragraph-deactivate').length).toEqual(1); |
| 82 | 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 | 8 | describe("Components", () => { |
| 9 | 9 | describe("Comment Paragraph Form Hotspot Component", () => { |
| 10 | 10 | |
| 11 | - let helper: ComponentTestHelper; | |
| 11 | + let helper: ComponentTestHelper<CommentParagraphFormHotspotComponent>; | |
| 12 | 12 | |
| 13 | 13 | beforeEach(angular.mock.module("templates")); |
| 14 | 14 | |
| ... | ... | @@ -21,7 +21,7 @@ describe("Components", () => { |
| 21 | 21 | comment: {} |
| 22 | 22 | } |
| 23 | 23 | }); |
| 24 | - helper = new ComponentTestHelper(cls, done); | |
| 24 | + helper = new ComponentTestHelper<CommentParagraphFormHotspotComponent>(cls, done); | |
| 25 | 25 | }); |
| 26 | 26 | |
| 27 | 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 | 21 | new Provider('CommentService', { useValue: commentServiceMock }), |
| 22 | 22 | new Provider('PostCommentEventService', { useValue: postCommentEventService }) |
| 23 | 23 | ]; |
| 24 | - let helper: ComponentTestHelper; | |
| 24 | + let helper: ComponentTestHelper<SideCommentsComponent>; | |
| 25 | 25 | |
| 26 | 26 | beforeEach(angular.mock.module("templates")); |
| 27 | 27 | |
| ... | ... | @@ -35,7 +35,7 @@ describe("Components", () => { |
| 35 | 35 | article: {} |
| 36 | 36 | } |
| 37 | 37 | }); |
| 38 | - helper = new ComponentTestHelper(cls, done); | |
| 38 | + helper = new ComponentTestHelper<SideCommentsComponent>(cls, done); | |
| 39 | 39 | }); |
| 40 | 40 | |
| 41 | 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 | 2 | import {CommentsComponent} from "../../../app/article/comment/comments.component"; |
| 3 | 3 | import {CommentService} from "../../../lib/ng-noosfero-api/http/comment.service"; |
| 4 | 4 | import {CommentParagraphService} from "../http/comment-paragraph.service"; |
| 5 | -import { PostCommentEventService } from "../../../app/article/comment/post-comment/post-comment-event.service"; | |
| 6 | 5 | |
| 7 | 6 | @Component({ |
| 8 | 7 | selector: "comment-paragraph-side-comments", |
| 9 | 8 | templateUrl: 'app/article/comment/comments.html', |
| 10 | 9 | }) |
| 11 | -@Inject(CommentService, PostCommentEventService, "$scope", CommentParagraphService) | |
| 10 | +@Inject(CommentService, "$scope", CommentParagraphService) | |
| 12 | 11 | export class SideCommentsComponent extends CommentsComponent { |
| 13 | 12 | |
| 14 | 13 | @Input() article: noosfero.Article; |
| 15 | 14 | @Input() paragraphUuid: string; |
| 16 | 15 | |
| 17 | 16 | constructor(commentService: CommentService, |
| 18 | - postCommentEventService: PostCommentEventService, | |
| 19 | 17 | $scope: ng.IScope, |
| 20 | 18 | private commentParagraphService: CommentParagraphService) { |
| 21 | - super(commentService, postCommentEventService, $scope); | |
| 19 | + super(commentService, $scope); | |
| 22 | 20 | } |
| 23 | 21 | |
| 24 | 22 | ngOnInit() { | ... | ... |