@bigfishtv/cockpit
Version:
31 lines (26 loc) • 920 B
JavaScript
/**
* @module Decorators/windowVisible
*/
import React, { Component } from 'react'
import ReactDOM from 'react-dom'
import { windowVisible as isWindowVisible, onVisibilityChange } from '../utils/windowVisible'
/**
* Decorator for providing windowVisible prop to wrapped component
* @param {Component} WrappedComponent
* @return {Component} returns wrapped component
*/
export default function createWindowVisible(WrappedComponent) {
return class WindowVisibilityDecorator extends Component {
componentDidMount(props) {
const window = ReactDOM.findDOMNode(this.refs.cmp).ownerDocument.defaultView
this.setState({ windowVisible: isWindowVisible(window) })
this.unlisten = onVisibilityChange(windowVisible => this.setState({ windowVisible }), window)
}
componentWillUnmount() {
this.unlisten()
}
render() {
return <WrappedComponent ref="cmp" {...this.props} {...this.state} />
}
}
}