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