From 660472d5db0419561f5cd99210fe1ecabc2b8b20 Mon Sep 17 00:00:00 2001 From: Christoph Reiter <reiter.christoph@gmail.com> Date: Thu, 8 Aug 2019 17:51:11 +0200 Subject: [PATCH] Work around select not working when more than one element is used Looks like something is caching based on ID maybe? --- packages/person-select/src/person-select-demo.js | 8 +++++++- packages/person-select/src/person-select.js | 11 ++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/person-select/src/person-select-demo.js b/packages/person-select/src/person-select-demo.js index c08f53ae..cd69e2c8 100644 --- a/packages/person-select/src/person-select-demo.js +++ b/packages/person-select/src/person-select-demo.js @@ -40,7 +40,13 @@ class PersonSelectDemo extends LitElement { <div class="container"> <form> <div class="field"> - <label class="label">Person</label> + <label class="label">Person 1</label> + <div class="control"> + <vpu-person-select lang="${this.lang}" entry-point-url="${getAPiUrl()}"></vpu-person-select> + </div> + </div> + <div class="field"> + <label class="label">Person 2</label> <div class="control"> <vpu-person-select lang="${this.lang}" entry-point-url="${getAPiUrl()}"></vpu-person-select> </div> diff --git a/packages/person-select/src/person-select.js b/packages/person-select/src/person-select.js index a1af5953..48b22da8 100644 --- a/packages/person-select/src/person-select.js +++ b/packages/person-select/src/person-select.js @@ -11,6 +11,8 @@ import commonUtils from 'vpu-common/utils'; select2(window, $); +var selectId = 0; + class PersonSelect extends VPULitElementJQuery { constructor() { @@ -19,6 +21,8 @@ class PersonSelect extends VPULitElementJQuery { this.entryPointUrl = getAPiUrl(); this.jsonld = null; this.$select = null; + // XXX: For some reason using the same ID twice breaks select2 + this.selectId = 'person-select' + selectId++; } static get properties() { @@ -33,7 +37,7 @@ class PersonSelect extends VPULitElementJQuery { const that = this; this.updateComplete.then(()=>{ - that.$select = that.$('#person-select'); + that.$select = $(that.shadowRoot.getElementById(that.selectId)); // close the selector on blur of the web component $(that).blur(() => { @@ -52,6 +56,7 @@ class PersonSelect extends VPULitElementJQuery { const $this = $(this); let lastResult = {}; + // find the correct api url for a person const apiUrl = this.jsonld.getApiUrlForIdentifier("http://schema.org/Person"); // const apiUrl = this.jsonld.getApiUrlForEntityName("Event"); @@ -152,13 +157,13 @@ class PersonSelect extends VPULitElementJQuery { <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.min.css"> <link rel="stylesheet" href="${select2CSS}"> <style> - #person-select { + #${this.selectId} { width: 100%; } </style> <!-- https://select2.org--> - <select id="person-select" name="person" class="select"></select> + <select id="${this.selectId}" name="person" class="select"></select> <div id="person-select-dropdown"></div> `; } -- GitLab