import PropTypes from “prop-types” import PropTypesExact from “prop-types-exact” import React from “react”
export default class ApiMakerEventListener extends React.Component {
static callEvent(target, eventName, args = []) { let event = document.createEvent("Event") event.initEvent(eventName, false, true) target.dispatchEvent(event, args) } static propTypes = PropTypesExact({ event: PropTypes.string.isRequired, onCalled: PropTypes.func.isRequired, target: PropTypes.object }) constructor(props) { super(props) this.onCalled = this.onCalled.bind(this) if (!this.props.target) throw new Error("'target' was expected but not given") } componentDidMount() { this.props.target.addEventListener(this.props.event, this.onCalled) } componentWillUnmount() { this.props.target.removeEventListener(this.props.event, this.onCalled) } onCalled(...args) { this.props.onCalled.apply(null, args) } render() { return "" }
}