UNPKG

@design.estate/dees-element

Version:

A library for creating custom elements extending the lit element class with additional functionalities.

40 lines 2.9 kB
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