UNPKG

@cfcs/angular

Version:

Write once, create framework components that supports React, Vue, Svelte, and more.

54 lines 6.72 kB
/** * 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=