/**
 * Copyright 2018-present Facebook.
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 * @format
 */

import {Component} from 'react';

type ViewWithSizeProps = {
  onSize: (width: number, height: number) => any,
};

type ViewWithSizeState = {|
  width: number,
  height: number,
|};

export default class ViewWithSize extends Component<
  ViewWithSizeProps,
  ViewWithSizeState,
> {
  constructor(props: ViewWithSizeProps, context: Object) {
    super(props, context);
    this.state = {height: window.innerHeight, width: window.innerWidth};
  }

  _onResize: Function;

  componentDidMount() {
    this._onResize = () => {
      this.setState({height: window.innerHeight, width: window.innerWidth});
    };
    window.addEventListener('resize', this._onResize);
  }

  componentWillUnmount() {
    window.removeEventListener('resize', this._onResize);
  }

  render() {
    return this.props.onSize(this.state.width, this.state.height);
  }
}
