piral-ng
Version:
Plugin for integrating Angular components in Piral.
38 lines • 1.42 kB
JavaScript
import { BehaviorSubject } from 'rxjs';
import { enqueue } from './queue';
import { defineModule } from './module';
import { bootstrap, prepareBootstrap } from './bootstrap';
import { NgExtension } from '../common';
export function createConverter(_ = {}) {
const registry = new Map();
const convert = (component) => ({
mount(el, props, ctx, locals) {
locals.active = true;
if (!locals.props) {
locals.props = new BehaviorSubject(props);
}
if (!locals.queued) {
locals.queued = Promise.resolve();
}
locals.queued = locals.queued.then(() => enqueue(async () => {
if (!registry.has(component)) {
registry.set(component, await prepareBootstrap(component, props.piral));
}
if (locals.active) {
return await bootstrap(registry.get(component), el, locals.props, ctx);
}
}));
},
update(el, props, ctx, locals) {
locals.props.next(props);
},
unmount(el, locals) {
locals.active = false;
locals.queued = locals.queued.then((dispose) => dispose && enqueue(dispose));
},
});
convert.defineModule = defineModule;
convert.Extension = NgExtension;
return convert;
}
//# sourceMappingURL=converter.js.map