LP#1957179: improve saving of templates in Angular holdings editor
authorGalen Charlton <gmc@equinoxOLI.org>
Thu, 26 May 2022 15:11:59 +0000 (11:11 -0400)
committerMichele Morgan <mmorgan@noblenet.org>
Wed, 14 Sep 2022 21:04:09 +0000 (17:04 -0400)
This patch makes the following improvements to the handling
of holding templates in the Angular holdings editor:

- templates are now saved to the cat.copy.templates user setting,
  matching the AngularJS holdings editor
- toast is displayed upon saving or deleting a template
- upon saving a completely new template, re-style it in the
  combobox so that it no longer has the new-and-freetext
  styling

To test
-------
[1] Apply the patch and open the Angular holdings editor.
[2] Verify that once a template is saved or deleted, that
    refreshing the Angular holdings editor will show the
    updated list of templates.
[3] Verify that toast is displayed upon saving or deleting
    a template.

Note that because of a quirk in how user settings are cached by
the web staff client, if you are testing in more than one browser
(but with the same user account), if you save a template in one
browser, you'll need to log out and back in with the second browser
to see the changes.

Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
Open-ILS/src/eg2/src/app/staff/cat/volcopy/copy-attrs.component.html
Open-ILS/src/eg2/src/app/staff/cat/volcopy/copy-attrs.component.ts
Open-ILS/src/eg2/src/app/staff/cat/volcopy/volcopy.service.ts

index f312fe8..feab30a 100644 (file)
@@ -11,6 +11,9 @@
 <eg-string #mintConditionYes i18n-text text="Good"></eg-string>
 <eg-string #mintConditionNo i18n-text text="Damaged"></eg-string>
 
+<eg-string #savedHoldingsTemplates i18n-text text="Saved holdings template(s)"></eg-string>
+<eg-string #deletedHoldingsTemplate i18n-text text="Deleted holdings template"></eg-string>
+
 <!-- We ask this question a lot.  Here's a handy template -->
 <ng-template #yesNoSelect let-field="field">
   <eg-combobox domId="{{field}}-input" 
index 35a08ed..e016e51 100644 (file)
@@ -25,6 +25,7 @@ import {ComboboxComponent, ComboboxEntry} from '@eg/share/combobox/combobox.comp
 import {BatchItemAttrComponent, BatchChangeSelection
     } from '@eg/staff/share/holdings/batch-item-attr.component';
 import {FileExportService} from '@eg/share/util/file-export.service';
+import {ToastService} from '@eg/share/toast/toast.service';
 
 @Component({
   selector: 'eg-copy-attrs',
@@ -71,6 +72,11 @@ export class CopyAttrsComponent implements OnInit, AfterViewInit {
     @ViewChild('mintConditionNo', {static: false})
         mintConditionNo: StringComponent;
 
+    @ViewChild('savedHoldingsTemplates', {static: false})
+        savedHoldingsTemplates: StringComponent;
+    @ViewChild('deletedHoldingsTemplate', {static: false})
+        deletedHoldingsTemplate: StringComponent;
+
     @ViewChild('copyAlertsDialog', {static: false})
         private copyAlertsDialog: CopyAlertsDialogComponent;
 
@@ -102,6 +108,7 @@ export class CopyAttrsComponent implements OnInit, AfterViewInit {
         private format: FormatService,
         private store: StoreService,
         private fileExport: FileExportService,
+        private toast: ToastService,
         public  volcopy: VolCopyService
     ) { }
 
@@ -649,7 +656,15 @@ export class CopyAttrsComponent implements OnInit, AfterViewInit {
         });
 
         this.volcopy.templates[name] = template;
-        this.volcopy.saveTemplates();
+        this.volcopy.saveTemplates().then(x => {
+            this.savedHoldingsTemplates.current().then(str => this.toast.success(str));
+            if (entry.freetext) {
+                // once a new template has been added, make it
+                // display like any other in the comobox
+                this.copyTemplateCbox.selected =
+                    this.volcopy.templateNames.filter(_ => _.label === name)[0];
+            }
+        });
     }
 
     exportTemplate($event) {
@@ -693,7 +708,9 @@ export class CopyAttrsComponent implements OnInit, AfterViewInit {
         const entry: ComboboxEntry = this.copyTemplateCbox.selected;
         if (!entry) { return; }
         delete this.volcopy.templates[entry.id];
-        this.volcopy.saveTemplates();
+        this.volcopy.saveTemplates().then(
+            x => this.deletedHoldingsTemplate.current().then(str => this.toast.success(str))
+        );
         this.copyTemplateCbox.selected = null;
     }
 
index 400825e..ed023ee 100644 (file)
@@ -149,9 +149,8 @@ export class VolCopyService {
 
 
     saveTemplates(): Promise<any> {
-        this.store.setLocalItem('cat.copy.templates', this.templates);
-        // Re-sort, etc.
-        return this.fetchTemplates();
+        return this.serverStore.setItem('cat.copy.templates', this.templates)
+            .then(() => this.fetchTemplates());
     }
 
     fetchDefaults(): Promise<any> {