diff --git a/src/services/window_event/index.js b/src/services/window_event/index.js deleted file mode 100644 index a426a83af0bc..000000000000 --- a/src/services/window_event/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as EuiWindowEvent } from './window_event'; \ No newline at end of file diff --git a/src/services/window_event/index.ts b/src/services/window_event/index.ts new file mode 100644 index 000000000000..a4b88b33d025 --- /dev/null +++ b/src/services/window_event/index.ts @@ -0,0 +1 @@ +export { EuiWindowEvent } from './window_event'; diff --git a/src/services/window_event/window_event.test.js b/src/services/window_event/window_event.test.tsx similarity index 97% rename from src/services/window_event/window_event.test.js rename to src/services/window_event/window_event.test.tsx index aa21a725e5a8..356d35bc02b2 100644 --- a/src/services/window_event/window_event.test.js +++ b/src/services/window_event/window_event.test.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { EuiWindowEvent } from '.'; +import { EuiWindowEvent } from './window_event'; describe('EuiWindowEvent', () => { @@ -50,4 +50,4 @@ describe('EuiWindowEvent', () => { expect(window.removeEventListener).not.toHaveBeenCalled(); }); -}); \ No newline at end of file +}); diff --git a/src/services/window_event/window_event.js b/src/services/window_event/window_event.ts similarity index 52% rename from src/services/window_event/window_event.js rename to src/services/window_event/window_event.ts index 8bf407863ce5..f99567a061b3 100644 --- a/src/services/window_event/window_event.js +++ b/src/services/window_event/window_event.ts @@ -1,13 +1,18 @@ import { Component } from 'react'; -import PropTypes from 'prop-types'; -export default class WindowEvent extends Component { +type EventNames = keyof WindowEventMap; +interface Props { + event: Ev; + handler: (this: Window, ev: WindowEventMap[Ev]) => any; +} + +export class EuiWindowEvent extends Component> { componentDidMount() { this.addEvent(this.props); } - componentDidUpdate(prevProps) { + componentDidUpdate(prevProps: Props) { if (prevProps.event !== this.props.event || prevProps.handler !== this.props.handler) { this.removeEvent(prevProps); this.addEvent(this.props); @@ -18,29 +23,15 @@ export default class WindowEvent extends Component { this.removeEvent(this.props); } - addEvent({ event, handler }) { + addEvent({ event, handler }: Props) { window.addEventListener(event, handler); } - removeEvent({ event, handler }) { + removeEvent({ event, handler }: Props) { window.removeEventListener(event, handler); } render() { return null; } - } - -WindowEvent.displayName = 'WindowEvent'; - -WindowEvent.propTypes = { - /** - * Type of valid DOM event - */ - event: PropTypes.string.isRequired, - /** - * Event callback function - */ - handler: PropTypes.func.isRequired -};