]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Refactor comment UI code
authorMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Mon, 8 Aug 2022 00:33:13 +0000 (17:33 -0700)
committerMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Wed, 24 Aug 2022 02:20:08 +0000 (19:20 -0700)
And run prettier

src-ui/src/app/app.module.ts
src-ui/src/app/components/document-comment/document-comment.component.ts [deleted file]
src-ui/src/app/components/document-comments/document-comments.component.html [moved from src-ui/src/app/components/document-comment/document-comment.component.html with 71% similarity]
src-ui/src/app/components/document-comments/document-comments.component.scss [moved from src-ui/src/app/components/document-comment/document-comment.component.scss with 99% similarity]
src-ui/src/app/components/document-comments/document-comments.component.ts [new file with mode: 0644]
src-ui/src/app/components/document-detail/document-detail.component.html
src-ui/src/app/services/rest/document-comments.service.ts [moved from src-ui/src/app/services/rest/document-comment.service.ts with 82% similarity]

index dd34724a65692bd7ea1fd1969a85aefdf94c8410..9840deb58a3afcd84aed0c632a32c343d96b7e41 100644 (file)
@@ -67,7 +67,7 @@ import { ApiVersionInterceptor } from './interceptors/api-version.interceptor'
 import { ColorSliderModule } from 'ngx-color/slider'
 import { ColorComponent } from './components/common/input/color/color.component'
 import { DocumentAsnComponent } from './components/document-asn/document-asn.component'
-import { DocumentCommentComponent } from './components/document-comment/document-comment.component';
+import { DocumentCommentsComponent } from './components/document-comments/document-comments.component'
 import { DirtyDocGuard } from './guards/dirty-doc.guard'
 
 import localeBe from '@angular/common/locales/be'
@@ -174,7 +174,7 @@ function initializeApp(settings: SettingsService) {
     DateComponent,
     ColorComponent,
     DocumentAsnComponent,
-    DocumentCommentComponent,
+    DocumentCommentsComponent,
     TasksComponent,
   ],
   imports: [
diff --git a/src-ui/src/app/components/document-comment/document-comment.component.ts b/src-ui/src/app/components/document-comment/document-comment.component.ts
deleted file mode 100644 (file)
index 57b052d..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-import { Component, OnInit } from '@angular/core';
-import { DocumentDetailComponent } from 'src/app/components/document-detail/document-detail.component';
-import { DocumentCommentService } from 'src/app/services/rest/document-comment.service';
-import { PaperlessDocumentComment } from 'src/app/data/paperless-document-comment';
-
-import { take } from 'rxjs/operators';
-import { FormControl, FormGroup } from '@angular/forms';
-
-@Component({
-  selector: 'app-document-comment',
-  templateUrl: './document-comment.component.html',
-  styleUrls: ['./document-comment.component.scss']
-})
-export class DocumentCommentComponent implements OnInit {
-
-  comments:PaperlessDocumentComment[];
-  networkActive = false;
-  documentId: number;
-  commentForm: FormGroup = new FormGroup({
-    newcomment: new FormControl('')
-  })
-
-  constructor(
-    private documentDetailComponent: DocumentDetailComponent,
-    private documentCommentService: DocumentCommentService,
-  ) { }
-
-  byId(index, item: PaperlessDocumentComment) {
-    return item.id;
-  }
-
-  async ngOnInit(): Promise<any> {
-    try {
-      this.documentId = this.documentDetailComponent.documentId;
-      this.comments= await this.documentCommentService.getComments(this.documentId).pipe(take(1)).toPromise();
-    } catch(err){
-      this.comments = [];
-    }
-  }
-
-  addComment(){
-    this.networkActive = true
-    this.documentCommentService.addComment(this.documentId, this.commentForm.get("newcomment").value).subscribe(result => {
-      this.comments = result;
-      this.commentForm.get("newcomment").reset();
-      this.networkActive = false;
-    }, error => {
-      this.networkActive = false;
-    });
-  }
-
-  deleteComment(event){
-    let parent = event.target.parentElement.closest('div[comment-id]');
-    if(parent){
-      this.documentCommentService.deleteComment(this.documentId, parseInt(parent.getAttribute("comment-id"))).subscribe(result => {
-        this.comments = result;
-        this.networkActive = false;
-      }, error => {
-        this.networkActive = false;
-      });
-    }
-  }
-}
\ No newline at end of file
similarity index 71%
rename from src-ui/src/app/components/document-comment/document-comment.component.html
rename to src-ui/src/app/components/document-comments/document-comments.component.html
index 6a36f999f6a40e12759b0efb408ddc6fe230246c..bdad4da4d629890c84a528f3ac48eb2f7bc72911 100644 (file)
@@ -1,16 +1,16 @@
 <div *ngIf="comments">
     <form [formGroup]='commentForm'>
         <div class="form-group">
-            <textarea class="form-control" id="newcomment" rows="5" formControlName='newcomment'></textarea>
+            <textarea class="form-control" rows="5" formControlName='newcomment'></textarea>
         </div>
-        <button type="button" class="btn btn-primary" i18n [disabled]="networkActive" (click)="addComment()">add comment</button>&nbsp;
+        <button type="button" class="btn btn-primary" [disabled]="networkActive" (click)="addComment()" i18n>Add comment</button>
     </form>
     <hr>
-    <div *ngFor="let comment of comments; trackBy: byId" [disableRipple]="true" class="card border-bg-primary bg-primary mb-3 comment-card" [attr.comment-id]="comment.id">
+    <div *ngFor="let comment of comments; trackBy: commentId" class="card border-bg-primary bg-primary mb-3 comment-card" [attr.comment-id]="comment.id">
         <div class="d-flex card-header comment-card-header text-white justify-content-between">
             <span>{{comment?.user?.firstname}} {{comment?.user?.lastname}} ({{comment?.user?.username}}) - {{ comment?.created | customDate}}</span>
             <span>
-                <a class="text-white" (click)="deleteComment($event)">
+                <a class="text-white" (click)="deleteComment(comment.id)">
                     <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash" viewBox="0 0 16 16">
                         <path d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z"/>
                         <path fill-rule="evenodd" d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4L4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z"/>
@@ -22,4 +22,4 @@
             {{comment.comment}}
         </div>
     </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/src-ui/src/app/components/document-comments/document-comments.component.ts b/src-ui/src/app/components/document-comments/document-comments.component.ts
new file mode 100644 (file)
index 0000000..421811d
--- /dev/null
@@ -0,0 +1,73 @@
+import { Component, Input, OnInit } from '@angular/core'
+import { DocumentCommentsService } from 'src/app/services/rest/document-comments.service'
+import { PaperlessDocumentComment } from 'src/app/data/paperless-document-comment'
+import { FormControl, FormGroup } from '@angular/forms'
+import { first } from 'rxjs/operators'
+import { ToastService } from 'src/app/services/toast.service'
+
+@Component({
+  selector: 'app-document-comments',
+  templateUrl: './document-comments.component.html',
+  styleUrls: ['./document-comments.component.scss'],
+})
+export class DocumentCommentsComponent implements OnInit {
+  commentForm: FormGroup = new FormGroup({
+    newcomment: new FormControl(''),
+  })
+
+  networkActive = false
+  comments: PaperlessDocumentComment[] = []
+
+  @Input()
+  documentId: number
+
+  constructor(
+    private commentsService: DocumentCommentsService,
+    private toastService: ToastService
+  ) {}
+
+  ngOnInit(): void {
+    this.commentsService
+      .getComments(this.documentId)
+      .pipe(first())
+      .subscribe((comments) => (this.comments = comments))
+  }
+
+  commentId(index, comment: PaperlessDocumentComment) {
+    return comment.id
+  }
+
+  addComment() {
+    this.networkActive = true
+    this.commentsService
+      .addComment(this.documentId, this.commentForm.get('newcomment').value)
+      .subscribe({
+        next: (result) => {
+          this.comments = result
+          this.commentForm.get('newcomment').reset()
+          this.networkActive = false
+        },
+        error: (e) => {
+          this.networkActive = false
+          this.toastService.showError(
+            $localize`Error saving comment: ${e.toString()}`
+          )
+        },
+      })
+  }
+
+  deleteComment(commentId: number) {
+    this.commentsService.deleteComment(this.documentId, commentId).subscribe({
+      next: (result) => {
+        this.comments = result
+        this.networkActive = false
+      },
+      error: (e) => {
+        this.networkActive = false
+        this.toastService.showError(
+          $localize`Error deleting comment: ${e.toString()}`
+        )
+      },
+    })
+  }
+}
index 211f93d50a1a08b1bc5d6acb58f758ffef954741..8e7176655807b9da07fb6495bd77e75364e7e261 100644 (file)
                 <li [ngbNavItem]="5" *ngIf="commentsEnabled">
                     <a ngbNavLink i18n>Comments</a>
                     <ng-template ngbNavContent>
-                        <app-document-comment #commentComponent></app-document-comment>
+                        <app-document-comments [documentId]="documentId"></app-document-comments>
                     </ng-template>
 
                 </li>
similarity index 82%
rename from src-ui/src/app/services/rest/document-comment.service.ts
rename to src-ui/src/app/services/rest/document-comments.service.ts
index 2dfbb318556b531c695e5b416de559ec5fceab8b..b105a90d152f87f73cf1944ac7872b0a2e158a59 100644 (file)
@@ -7,14 +7,14 @@ import { Observable } from 'rxjs'
 @Injectable({
   providedIn: 'root',
 })
-export class DocumentCommentService extends AbstractPaperlessService<PaperlessDocumentComment> {
+export class DocumentCommentsService extends AbstractPaperlessService<PaperlessDocumentComment> {
   constructor(http: HttpClient) {
     super(http, 'documents')
   }
 
-  getComments(id: number): Observable<PaperlessDocumentComment[]> {
+  getComments(documentId: number): Observable<PaperlessDocumentComment[]> {
     return this.http.get<PaperlessDocumentComment[]>(
-      this.getResourceUrl(id, 'comments')
+      this.getResourceUrl(documentId, 'comments')
     )
   }