@design.estate/dees-element
Version:
A library for creating custom elements extending the lit element class with additional functionalities.
40 lines • 2.9 kB
JavaScript
import { noChange } from 'lit';
import { AsyncDirective, directive } from 'lit/async-directive.js';
import { rxjs } from '@push.rocks/smartrx';
/**
* Subscribes to an observable and applies a template function to each emission.
* @param observable - the source Observable
* @param templateFn - function mapping each emitted value to a TemplateResult or other renderable content
*/
class SubscribeWithTemplateDirective extends AsyncDirective {
constructor() {
super(...arguments);
this.sub = null;
}
render(observable, templateFn) {
const changed = this.observable !== observable || this.templateFn !== templateFn;
if (changed) {
this.sub?.unsubscribe();
this.observable = observable;
this.templateFn = templateFn;
if (this.isConnected) {
this.startSubscription();
}
}
return noChange;
}
startSubscription() {
this.sub = this.observable.subscribe((v) => {
const out = this.templateFn(v);
this.setValue(out);
});
}
disconnected() {
this.sub?.unsubscribe();
}
reconnected() {
this.startSubscription();
}
}
export const subscribeWithTemplate = directive(SubscribeWithTemplateDirective);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zdWJzY3JpYmV3aXRodGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kaXJlY3RpdmVzL2NsYXNzZXMuc3Vic2NyaWJld2l0aHRlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXBELE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTNDOzs7O0dBSUc7QUFDSCxNQUFNLDhCQUErQixTQUFRLGNBQWM7SUFBM0Q7O1FBR1UsUUFBRyxHQUE2QixJQUFJLENBQUM7SUFnQy9DLENBQUM7SUE5QkMsTUFBTSxDQUNKLFVBQW9DLEVBQ3BDLFVBQXdEO1FBRXhELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDO1FBQ2pGLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQVUsRUFBRSxFQUFFO1lBQ25ELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQWFELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFNBQVMsQ0FDNUMsOEJBQThCLENBQ0osQ0FBQyJ9