@cfcs/angular
Version:
Write once, create framework components that supports React, Vue, Svelte, and more.
54 lines • 6.72 kB
JavaScript
/**
* cfcs
* Copyright (c) 2022-present NAVER Corp.
* MIT license
*/
import { EventEmitter } from "@angular/core";
import { camelize, adaptReactive } from "@cfcs/core";
export function useReactive(self, reactiveAdapter, props) {
const adaptResult = adaptReactive(reactiveAdapter, props);
const reactiveState = adaptResult.state();
const names = Object.keys(reactiveState);
const events = adaptResult.events();
const methods = adaptResult.methods();
for (const name in reactiveState) {
self[name] = reactiveState[name];
}
for (const name in methods) {
self[name] = methods[name];
}
events.forEach(name => {
self[camelize(`ngx ${name}`)] = new EventEmitter();
});
let callbacks = [];
function mounted() {
adaptResult.mounted();
const inst = adaptResult.instance();
names.forEach((name) => {
inst.subscribe(name, (value) => {
setTimeout(() => {
self[name] = value;
});
});
});
callbacks = events.map(name => {
const callback = (...args) => {
self[camelize(`ngx ${name}`)].emit(...args);
};
adaptResult.on(name, callback);
return callback;
});
adaptResult.init();
}
function destroy() {
events.forEach((name, i) => {
adaptResult.off(name, callbacks[i]);
});
adaptResult.destroy();
}
return {
mounted,
destroy,
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlUmVhY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy91c2VSZWFjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQTJDLFFBQVEsRUFBRSxhQUFhLEVBQWlCLE1BQU0sWUFBWSxDQUFDO0FBRTdHLE1BQU0sVUFBVSxXQUFXLENBTXpCLElBQVcsRUFBRSxlQUE4RSxFQUFFLEtBQW1CO0lBQ2hILE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUV0QyxLQUFLLE1BQU0sSUFBSSxJQUFJLGFBQWEsRUFBRTtRQUMvQixJQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzNDO0lBQ0QsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLEVBQUU7UUFDekIsSUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNyQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDbkIsSUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQWMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxTQUFTLEdBQW9DLEVBQUUsQ0FBQztJQUVwRCxTQUFTLE9BQU87UUFDZCxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXBDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQVcsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUN6QyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNiLElBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRTtnQkFDaEMsSUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQWMsRUFBRSxDQUFDLENBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDeEYsQ0FBQyxDQUFDO1lBRUYsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdEMsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELFNBQVMsT0FBTztRQUNkLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPO1FBQ1AsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjZmNzXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItcHJlc2VudCBOQVZFUiBDb3JwLlxuICogTUlUIGxpY2Vuc2VcbiAqL1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFJlYWN0aXZlU3Vic2NyaWJlLCBSZWFjdGl2ZUFkYXB0ZXJQYXJhbSwgY2FtZWxpemUsIGFkYXB0UmVhY3RpdmUsIFJlYWN0aXZlU3RhdGUgfSBmcm9tIFwiQGNmY3MvY29yZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVhY3RpdmU8XG4gIEluc3RhbmNlIGV4dGVuZHMgUmVhY3RpdmVTdWJzY3JpYmU8UmVjb3JkPHN0cmluZywgYW55Pj4sXG4gIFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlYWN0aXZlU3RhdGU8SW5zdGFuY2U+LFxuICBNZXRob2RzIGV4dGVuZHMga2V5b2YgUGFydGlhbDxJbnN0YW5jZT4gPSBhbnksXG4gIFByb3BzID0gYW55LFxuICBFdmVudHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4+KHNlbGY6IFN0YXRlLCByZWFjdGl2ZUFkYXB0ZXI6IFJlYWN0aXZlQWRhcHRlclBhcmFtPEluc3RhbmNlLCBTdGF0ZSwgTWV0aG9kcywgUHJvcHMsIEV2ZW50cz4sIHByb3BzPzogKCkgPT4gUHJvcHMpIHtcbiAgY29uc3QgYWRhcHRSZXN1bHQgPSBhZGFwdFJlYWN0aXZlKHJlYWN0aXZlQWRhcHRlciwgcHJvcHMpO1xuICBjb25zdCByZWFjdGl2ZVN0YXRlID0gYWRhcHRSZXN1bHQuc3RhdGUoKTtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhyZWFjdGl2ZVN0YXRlKTtcbiAgY29uc3QgZXZlbnRzID0gYWRhcHRSZXN1bHQuZXZlbnRzKCk7XG4gIGNvbnN0IG1ldGhvZHMgPSBhZGFwdFJlc3VsdC5tZXRob2RzKCk7XG5cbiAgZm9yIChjb25zdCBuYW1lIGluIHJlYWN0aXZlU3RhdGUpIHtcbiAgICAoc2VsZiBhcyBhbnkpW25hbWVdID0gcmVhY3RpdmVTdGF0ZVtuYW1lXTtcbiAgfVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gbWV0aG9kcykge1xuICAgIChzZWxmIGFzIGFueSlbbmFtZV0gPSBtZXRob2RzW25hbWVdO1xuICB9XG5cbiAgZXZlbnRzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgKHNlbGYgYXMgYW55KVtjYW1lbGl6ZShgbmd4ICR7bmFtZSBhcyBzdHJpbmd9YCldID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB9KTtcbiAgbGV0IGNhbGxiYWNrczogQXJyYXk8KC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPiA9IFtdO1xuXG4gIGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgYWRhcHRSZXN1bHQubW91bnRlZCgpO1xuICAgIGNvbnN0IGluc3QgPSBhZGFwdFJlc3VsdC5pbnN0YW5jZSgpO1xuXG4gICAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgaW5zdC5zdWJzY3JpYmUobmFtZSBhcyBhbnksICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIChzZWxmIGFzIGFueSlbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNhbGxiYWNrcyA9IGV2ZW50cy5tYXAobmFtZSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAoKHNlbGYgYXMgYW55KVtjYW1lbGl6ZShgbmd4ICR7bmFtZSBhcyBzdHJpbmd9YCldIGFzIEV2ZW50RW1pdHRlcjxhbnk+KS5lbWl0KC4uLmFyZ3MpO1xuICAgICAgfTtcblxuICAgICAgYWRhcHRSZXN1bHQub24obmFtZSBhcyBhbnksIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICB9KTtcbiAgICBhZGFwdFJlc3VsdC5pbml0KCk7XG4gIH1cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBldmVudHMuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xuICAgICAgYWRhcHRSZXN1bHQub2ZmKG5hbWUgYXMgYW55LCBjYWxsYmFja3NbaV0pO1xuICAgIH0pO1xuXG4gICAgYWRhcHRSZXN1bHQuZGVzdHJveSgpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudGVkLFxuICAgIGRlc3Ryb3ksXG4gIH07XG59XG4iXX0=