From db948ce98ed13baf05757f2bab9b752fdff87a96 Mon Sep 17 00:00:00 2001 From: Patrizio Bekerle <patrizio@bekerle.com> Date: Tue, 12 Jan 2021 10:06:55 +0100 Subject: [PATCH] Implement "set-property" handling in dbp-provider and use it in dbp-language-select (dbp/apps/library#77) --- .../language-select/src/language-select.js | 10 +++++++++- packages/provider/src/provider.js | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/language-select/src/language-select.js b/packages/language-select/src/language-select.js index 661e6031..bce4a91f 100644 --- a/packages/language-select/src/language-select.js +++ b/packages/language-select/src/language-select.js @@ -53,13 +53,21 @@ export class LanguageSelect extends LitElement { this.requestUpdate('next', oldNext); if (oldValue !== value) { - const event = new CustomEvent("dbp-language-changed", { + let event = new CustomEvent("dbp-language-changed", { bubbles: true, composed: true, detail: {'lang': value} }); this.dispatchEvent(event); + // tell a dbp-provider to update the "lang" property + event = new CustomEvent("set-property", { + bubbles: true, + composed: true, + detail: {'name': 'lang', 'value': value} + }); + this.dispatchEvent(event); + // Unlike other cases we use the next language for the translations so that // users not knowing the current language can understand it. // In case of more than two this doesn't make that much sense, but for now.. diff --git a/packages/provider/src/provider.js b/packages/provider/src/provider.js index b213edbe..52eda0ac 100644 --- a/packages/provider/src/provider.js +++ b/packages/provider/src/provider.js @@ -78,6 +78,25 @@ export class Provider extends HTMLElement { e.stopPropagation(); } }, false); + + // listen to property changes + this.addEventListener('set-property', function (e) { + const name = e.detail.name; + const value = e.detail.value; + + if (that[name]) { + console.log('Provider(' + that.id() + ') eventListener("set-property",..) name "' + name + '" found.'); + that[name] = value; + + that.callbackStore.forEach(item => { + if (item.name === name) { + item.callback(value); + } + }); + + e.stopPropagation(); + } + }, false); } id() { -- GitLab