neweb
Version:
[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coveralls-image]][coveralls-url] [ • 1.39 kB
text/typescript
import { Onemitter } from "onemitter";
import { Component, createElement } from "react";
class ReactOnemitter extends Component<{
propsEmitter: Onemitter<any>;
componentEmitter: Onemitter<React.ComponentClass<any>>;
}, any> {
protected propsEmitterCallback: any;
protected componentEmitterCallback: any;
public componentWillMount() {
this.propsEmitterCallback = (props: any) => {
this.setState(props);
};
this.componentEmitterCallback = (component: any) => {
this.setState({ ___component: component });
};
const state = this.props.propsEmitter.has() ? { ...this.props.propsEmitter.get() } : {};
if (this.props.componentEmitter.has()) {
state.___component = this.props.componentEmitter.get();
}
this.props.propsEmitter.on(this.propsEmitterCallback);
this.props.componentEmitter.on(this.componentEmitterCallback);
this.setState(state);
}
public componentWillUnmount() {
this.props.propsEmitter.off(this.propsEmitterCallback);
this.props.componentEmitter.off(this.componentEmitterCallback);
}
public render() {
const props = { ...this.state };
delete props.___component;
return createElement(this.state.___component, props);
}
}
export default ReactOnemitter;