From 1621c5c575246790ac46f418c8b598c78e1764ac Mon Sep 17 00:00:00 2001
From: Patrizio Bekerle <patrizio@bekerle.com>
Date: Mon, 11 Jan 2021 14:46:12 +0100
Subject: [PATCH] Don't use parent for events and add attribute warning
 (dbp/apps/library#77)

---
 packages/provider/src/adapter-lit-element.js | 16 ++++++++++++----
 packages/provider/src/provider.js            |  7 +++----
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/packages/provider/src/adapter-lit-element.js b/packages/provider/src/adapter-lit-element.js
index e457983a..53ca6a10 100644
--- a/packages/provider/src/adapter-lit-element.js
+++ b/packages/provider/src/adapter-lit-element.js
@@ -46,13 +46,21 @@ export class AdapterLitElement extends LitElement {
                 detail: {
                     name: global,
                     callback: (value) => {
-                        console.log('AdapterLitElement(' + this.tagName + ') sub/Callback ' + global + ' -> ' + local + ' = ' + value);
-                        this.attributeChangedCallback(local, that[local], value);
+                        console.log('AdapterLitElement(' + that.tagName + ') sub/Callback ' + global + ' -> ' + local + ' = ' + value);
+                        that.attributeChangedCallback(local, that[local], value);
+
+                        // we don't support attributes and provider values at the same time
+                        if (that.getAttribute(local) !== null) {
+                            console.warn('Provider callback: "' + local + '" is also an attribute in tag "' + that.tagName + '", this is not supported!');
+                        } else {
+                            // we don't want to set the attribute
+                            // that.setAttribute(local, value);
+                        }
                     },
                     sender: this,
                 }
             });
-        this.parentElement.dispatchEvent(event);
+        this.dispatchEvent(event);
     }
 
     unSubscribeProviderFor(element) {
@@ -68,7 +76,7 @@ export class AdapterLitElement extends LitElement {
                     sender: this,
                 }
             });
-        this.parentElement.dispatchEvent(event);
+        this.dispatchEvent(event);
     }
 
     static get properties() {
diff --git a/packages/provider/src/provider.js b/packages/provider/src/provider.js
index 49249d39..b213edbe 100644
--- a/packages/provider/src/provider.js
+++ b/packages/provider/src/provider.js
@@ -42,8 +42,7 @@ export class Provider extends HTMLElement {
         console.log('Provider(' + this.id() + ') connectedCallback()');
 
         const that = this;
-        const parent = this.parentElement;
-        parent.addEventListener('inherit', function (e) {
+        this.addEventListener('inherit', function (e) {
             if (that[e.detail.name]) {
                 console.log('Provider(' + that.id() + ') eventListener("inherit",..) name "' + e.detail.name + '" found.');
                 //console.dir(e.detail);
@@ -52,7 +51,7 @@ export class Provider extends HTMLElement {
             }
         }, false);
 
-        parent.addEventListener('subscribe', function (e) {
+        this.addEventListener('subscribe', function (e) {
             const name = e.detail.name;
             if (that[name]) {
                 console.log('Provider(' + that.id() + ') eventListener("subscribe",..) name "' + name + '" found.');
@@ -63,7 +62,7 @@ export class Provider extends HTMLElement {
             }
         }, false);
 
-        parent.addEventListener('unsubscribe', function (e) {
+        this.addEventListener('unsubscribe', function (e) {
             const name = e.detail.name;
             const sender = e.detail.sender;
             if (that[name]) {
-- 
GitLab