Skip to content

Instantly share code, notes, and snippets.

@itsdouges
Last active October 14, 2017 22:50
Show Gist options
  • Save itsdouges/961753d75b7d89ffd6c2e1f149fb0120 to your computer and use it in GitHub Desktop.
Save itsdouges/961753d75b7d89ffd6c2e1f149fb0120 to your computer and use it in GitHub Desktop.
import {AfterViewInit, Component, ElementRef, Inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges} from '@angular/core';
import {ArmoryStore} from './store';
import {Provider} from 'react-redux';
import * as React from 'react';
import {ReactElement} from 'react';
import * as ReactDOM from 'react-dom';
@Component({
selector: 'tome-armory-component',
template: ' '
})
export class ArmoryComponent implements AfterViewInit, OnDestroy, OnChanges {
@Input() reactComponent;
@Input() props;
private providerElement: ReactElement<Provider>;
private renderedProvider: React.Component;
constructor(@Inject(ArmoryStore) private store,
private elementRef: ElementRef) {
}
public rerender(): void {
ReactDOM.render(
this.buildComponent(),
this.elementRef.nativeElement,
);
}
buildComponent(): any {
return React.createElement(Provider, {store: this.store},
React.createElement(this.reactComponent, this.props)
);
}
ngAfterViewInit(): void {
ReactDOM.render(this.buildComponent(), this.elementRef.nativeElement);
}
ngOnDestroy(): void {
ReactDOM.unmountComponentAtNode(this.elementRef.nativeElement);
}
ngOnChanges(changes: SimpleChanges): void {
this.rerender();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment