22import { render , rehydrate } from 'fela-dom'
33import objectEach from 'fast-loops/lib/objectEach'
44
5- function hasDOM ( renderer ) {
5+ function hasDOM ( renderer , targetDocument = document ) {
66 return (
77 renderer &&
88 ! renderer . isNativeRenderer &&
99 typeof window !== 'undefined' &&
10- window . document &&
11- window . document . createElement
10+ targetDocument &&
11+ targetDocument . createElement
1212 )
1313}
1414
15- function hasServerRenderedStyle ( ) {
16- return window . document . querySelectorAll ( '[data-fela-type]' ) . length > 0
15+ function hasServerRenderedStyle ( targetDocument = document ) {
16+ return targetDocument . querySelectorAll ( '[data-fela-type]' ) . length > 0
1717}
1818
1919export default function RendererProviderFactory (
@@ -27,11 +27,26 @@ export default function RendererProviderFactory(
2727 constructor ( props : Object , context : Object ) {
2828 super ( props , context )
2929
30- if ( hasDOM ( props . renderer ) ) {
31- if ( props . rehydrate && hasServerRenderedStyle ( ) ) {
32- rehydrate ( props . renderer )
30+ this . _renderStyle ( )
31+ }
32+
33+ componentDidUpdate ( prevProps ) {
34+ // TODO: we might add a shallow compare to avoid unnecessary rerenders
35+ this . _renderStyle ( )
36+ }
37+
38+ _renderStyle ( ) {
39+ const {
40+ renderer,
41+ rehydrate : shouldRehydrate ,
42+ targetDocument,
43+ } = this . props
44+
45+ if ( hasDOM ( renderer , targetDocument ) ) {
46+ if ( shouldRehydrate && hasServerRenderedStyle ( targetDocument ) ) {
47+ rehydrate ( renderer , targetDocument )
3348 } else {
34- render ( props . renderer )
49+ render ( renderer , targetDocument )
3550 }
3651 }
3752 }
0 commit comments