From f3f23d7ce7d62b71fbd05104d29c47657724f19c Mon Sep 17 00:00:00 2001
From: Patrizio Bekerle <patrizio.bekerle@tugraz.at>
Date: Thu, 24 Oct 2019 11:09:23 +0200
Subject: [PATCH] Add reload button

---
 packages/person-select/README.md              |  6 ++++
 .../src/vpu-person-select-demo.js             |  2 +-
 .../person-select/src/vpu-person-select.js    | 35 +++++++++++++------
 3 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/packages/person-select/README.md b/packages/person-select/README.md
index 995d0f2a..d4f26b91 100644
--- a/packages/person-select/README.md
+++ b/packages/person-select/README.md
@@ -19,6 +19,12 @@
     - the `value` will also be set automatically when a person is chosen in the selector
 - `data-object` (read-only): when a person is selected the person object will be set as json string
     - example `<vpu-person-select data-object="{"@id":"/people/testuser", "@type":"http://schema.org/Person", "identifier":"testuser", "givenName":"Hans", "familyName":"Tester", "honorificSuffix":"Ing.", "telephone":"+43 (876) 123-4567", "phoneExtension":"4567", "email":"hans.tester@email.com", "name":"Hans Tester"}"></vpu-person-select>`
+- `show-reload-button` (optional): if set a reload button will be viewed next to the select box
+    - the button triggers a `change` event on the web component
+    - the button is disabled if no person is selected
+    - example `<vpu-person-select show-reload-button></vpu-person-select>`
+- `reload-button-title` (optional): sets a title text on the reload button
+    - example `<vpu-person-select show-reload-button reload-button-text="Reload result list"></vpu-person-select>`
 
 ## Local development
 
diff --git a/packages/person-select/src/vpu-person-select-demo.js b/packages/person-select/src/vpu-person-select-demo.js
index 457e1b1c..a698806d 100644
--- a/packages/person-select/src/vpu-person-select-demo.js
+++ b/packages/person-select/src/vpu-person-select-demo.js
@@ -66,7 +66,7 @@ class PersonSelectDemo extends LitElement {
                         <div class="field">
                             <label class="label">Person 2</label>
                             <div class="control">
-                                <vpu-person-select lang="${this.lang}" entry-point-url="${commonUtils.getAPiUrl()}"></vpu-person-select>
+                                <vpu-person-select lang="${this.lang}" entry-point-url="${commonUtils.getAPiUrl()}" show-reload-button reload-button-title="Click me"></vpu-person-select>
                             </div>
                         </div>
                     </form>
diff --git a/packages/person-select/src/vpu-person-select.js b/packages/person-select/src/vpu-person-select.js
index fb4c1d98..dcb1f33f 100644
--- a/packages/person-select/src/vpu-person-select.js
+++ b/packages/person-select/src/vpu-person-select.js
@@ -30,6 +30,8 @@ class PersonSelect extends VPULitElementJQuery {
         this.ignoreValueUpdate = false;
         this.isSearching = false;
         this.lastResult = {};
+        this.showReloadButton = false;
+        this.reloadButtonTitle = '';
     }
 
     static get properties() {
@@ -38,6 +40,8 @@ class PersonSelect extends VPULitElementJQuery {
             active: { type: Boolean, attribute: false },
             entryPointUrl: { type: String, attribute: 'entry-point-url' },
             value: { type: String },
+            showReloadButton: { type: Boolean, attribute: 'show-reload-button' },
+            reloadButtonTitle: { type: String, attribute: 'reload-button-title' },
         };
     }
 
@@ -63,16 +67,6 @@ class PersonSelect extends VPULitElementJQuery {
                 }, 500);
             });
 
-            that.$('#reload-button').click(() => {
-                // fire a change event
-                that.dispatchEvent(new CustomEvent('change', {
-                    detail: {
-                        value: that.value,
-                    },
-                    bubbles: true
-                }));
-            });
-
             // try an init when user-interface is loaded
             that.initJSONLD();
         });
@@ -257,6 +251,20 @@ class PersonSelect extends VPULitElementJQuery {
         return this.$select !== null && this.$select.hasClass("select2-hidden-accessible");
     }
 
+    reloadClick() {
+        if (this.value === "") {
+            return;
+        }
+
+        // fire a change event
+        this.dispatchEvent(new CustomEvent('change', {
+            detail: {
+                value: this.value,
+            },
+            bubbles: true
+        }));
+    }
+
     static get styles() {
         // language=css
         return css`
@@ -314,7 +322,12 @@ class PersonSelect extends VPULitElementJQuery {
                         <!-- https://select2.org-->
                         <select id="${this.selectId}" name="person" class="select" ?disabled=${!this.active}>${!this.active ? html`<option value="" disabled selected>${ i18n.t('person-select.login-required')}</option>` : ''}</select>
                     </div>
-                    <a class="control button" id="reload-button" style="display: none">
+                    <a class="control button"
+                       id="reload-button"
+                       ?disabled=${this.value === ""}
+                       @click="${this.reloadClick}"
+                       style="display: ${this.showReloadButton ? "flex" : "none"}"
+                       title="${this.reloadButtonTitle}">
                         <vpu-icon name="reload"></vpu-icon>
                     </a>
                 </div>
-- 
GitLab