UNPKG

@cfcs/angular

Version:

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

68 lines (63 loc) 1.74 kB
import { EventEmitter } from '@angular/core'; import { adaptReactive, camelize } from '@cfcs/core'; /** * cfcs * Copyright (c) 2022-present NAVER Corp. * MIT license */ 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, }; } /** * cfcs * Copyright (c) 2022-present NAVER Corp. * MIT license */ /** * Generated bundle index. Do not edit. */ export { useReactive }; //# sourceMappingURL=cfcs-angular.mjs.map