From f2aa825f95c1183339867c3da8fd728aefc7c79f Mon Sep 17 00:00:00 2001 From: Philipp Kunz Date: Mon, 4 Sep 2023 14:56:57 +0200 Subject: [PATCH] fix(core): update --- ts/00_commitinfo_data.ts | 2 +- ts/dees-element.classes.resolvedirective.ts | 36 +++++++++++++-------- ts/index.ts | 9 ++++++ 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 3916381..07e8413 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@design.estate/dees-element', - version: '2.0.25', + version: '2.0.26', description: 'a custom element class extending lit element class' } diff --git a/ts/dees-element.classes.resolvedirective.ts b/ts/dees-element.classes.resolvedirective.ts index 18071b3..78875a4 100644 --- a/ts/dees-element.classes.resolvedirective.ts +++ b/ts/dees-element.classes.resolvedirective.ts @@ -1,36 +1,46 @@ import { noChange } from 'lit'; import { AsyncDirective, directive } from 'lit/async-directive.js'; -import { rxjs } from '@push.rocks/smartrx'; class ResolveDirective extends AsyncDirective { - observable: rxjs.Observable | undefined; - sub: rxjs.Subscription | null = null; + promise: Promise | undefined; + hasPromiseSettled: boolean = false; - render(observable: rxjs.Observable) { - if (this.observable !== observable) { - this.sub?.unsubscribe(); - this.observable = observable; + render(promise: Promise) { + if (this.promise !== promise) { + this.promise = promise; if (this.isConnected) { - this.subscribe(observable); + this.handlePromise(promise); } } return noChange; } - subscribe(observable: rxjs.Observable) { - this.sub = observable.subscribe((v: unknown) => { - this.setValue(v); + handlePromise(promise: Promise) { + this.hasPromiseSettled = false; + + promise.then((value) => { + if (this.promise === promise && !this.hasPromiseSettled) { + this.setValue(value); + this.hasPromiseSettled = true; + } + }).catch((error) => { + if (this.promise === promise && !this.hasPromiseSettled) { + this.setValue(error); + this.hasPromiseSettled = true; + } }); } disconnected() { - this.sub?.unsubscribe(); + this.hasPromiseSettled = true; // prevent setting value if the promise settles after disconnection } reconnected() { - this.subscribe(this.observable!); + if (!this.hasPromiseSettled) { + this.handlePromise(this.promise!); + } } } diff --git a/ts/index.ts b/ts/index.ts index 5c4c101..7559387 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -24,3 +24,12 @@ export * from './dees-element.classes.resolvedirective.js'; * a singleton instance of CssManager */ export const cssManager = new CssManager(); + +// better scoped exports +import { resolve } from './dees-element.classes.resolvedirective.js'; +import { subscribe } from './dees-element.classes.subscribedirective.js'; + +export const directives = { + resolve, + subscribe, +}