LP#1955065: fix deletion of item notes in Angular item attributes editor
authorGalen Charlton <gmc@equinoxOLI.org>
Fri, 8 Jul 2022 16:03:35 +0000 (12:03 -0400)
committerGalen Charlton <gmc@equinoxOLI.org>
Mon, 11 Jul 2022 13:56:08 +0000 (09:56 -0400)
This patch fixes several bugs that prevent item notes from
being correctly deleted by the Angular item attributes editor.

To test
-------
[1] Apply patch.
[2] Edit a single item in the Angular item attributes editor.
[3] Verify that notes can be added and deleted.
[4] In Holdings View, choose Add/Manage Item Notes for a single
    selected item.
[5] Verify that notes can be added and deleted;
[6] Repeat steps 4 and 5 for a different item after successfully
    deleting an item note. Verify that notes can be added and deleted.
[7] In Holdings View, choose Add/Manage Item Notes for multiple
    selected items.
[8] Verify that ntoes can be added to the selected items.

Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Open-ILS/src/eg2/src/app/staff/cat/volcopy/copy-attrs.component.ts
Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.ts
Open-ILS/src/eg2/src/app/staff/share/holdings/copy-notes-dialog.component.ts

index e04a2bc..4abf63b 100644 (file)
@@ -469,11 +469,14 @@ export class CopyAttrsComponent implements OnInit, AfterViewInit {
         this.copyNotesDialog.inPlaceCreateMode = true;
         this.copyNotesDialog.copyIds = this.context.copyList().map(c => c.id());
 
-        this.copyNotesDialog.open({size: 'lg'}).subscribe(newNotes => {
-            if (!newNotes || newNotes.length === 0) { return; }
+        this.copyNotesDialog.open({size: 'lg'}).subscribe(changes => {
+            if ((!changes.newNotes || changes.newNotes.length === 0) &&
+                (!changes.delNotes || changes.delNotes.length === 0)
+               ) {
+                return;
+            }
 
-            console.log(newNotes);
-            newNotes.forEach(note => {
+            changes.newNotes.forEach(note => {
                 this.context.copyList().forEach(copy => {
                     const n = this.idl.clone(note);
                     n.owning_copy(copy.id());
@@ -481,6 +484,16 @@ export class CopyAttrsComponent implements OnInit, AfterViewInit {
                     copy.ischanged(true);
                 });
             });
+            if (this.context.copyList().length === 1) {
+                const copy = this.context.copyList()[0];
+                changes.delNotes.forEach(note => {
+                    const existing = copy.notes().filter(n => n.id() === note.id())[0];
+                    if (existing) {
+                        existing.isdeleted(true);
+                        copy.ischanged(true);
+                    }
+                });
+            }
         });
     }
 
index fa7343d..57b9981 100644 (file)
@@ -970,8 +970,8 @@ export class HoldingsMaintenanceComponent implements OnInit {
 
         this.copyNotesDialog.copyIds = copyIds;
         this.copyNotesDialog.open({size: 'lg'}).subscribe(
-            modified => {
-                if (modified) {
+            changes => {
+                if (changes.newNotes.length > 0 || changes.delNotes.length > 0) {
                     this.hardRefresh();
                 }
             }
index ad9d94d..a62dd4f 100644 (file)
@@ -16,6 +16,11 @@ import {NgbModal, NgbModalOptions} from '@ng-bootstrap/ng-bootstrap';
  * Dialog for managing copy notes.
  */
 
+export interface CopyNotesChanges {
+    newNotes: IdlObject[];
+    delNotes: IdlObject[];
+}
+
 @Component({
   selector: 'eg-copy-notes-dialog',
   templateUrl: 'copy-notes-dialog.component.html'
@@ -67,10 +72,11 @@ export class CopyNotesDialogComponent
 
     /**
      */
-    open(args: NgbModalOptions): Observable<IdlObject[]> {
+    open(args: NgbModalOptions): Observable<CopyNotesChanges> {
         this.copy = null;
         this.copies = [];
         this.newNotes = [];
+        this.delNotes = [];
 
         if (this.copyIds.length === 0 && !this.inPlaceCreateMode) {
             return throwError('copy ID required');
@@ -141,7 +147,7 @@ export class CopyNotesDialogComponent
     applyChanges() {
 
         if (this.inPlaceCreateMode) {
-            this.close(this.newNotes);
+            this.close({ newNotes: this.newNotes, delNotes: this.delNotes });
             return;
         }