@cfcs/angular
Version:
Write once, create framework components that supports React, Vue, Svelte, and more.
68 lines (63 loc) • 1.74 kB
JavaScript
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