// @flow import { Component } from 'react'; /** * The type of the React {@code Component} props of {@link AbstractDialogTab}. */ export type Props = { /** * Function that closes the dialog. */ closeDialog: Function, /** * Callback to invoke on change. */ onTabStateChange: Function, /** * The id of the tab. */ tabId: number }; /** * Abstract React {@code Component} for tabs of the DialogWithTabs component. * * @extends Component */ class AbstractDialogTab extends Component { /** * Initializes a new {@code AbstractDialogTab} instance. * * @param {P} props - The read-only properties with which the new * instance is to be initialized. */ constructor(props: P) { super(props); // Bind event handler so it is only bound once for every instance. this._onChange = this._onChange.bind(this); } _onChange: (Object) => void; /** * Uses the onTabStateChange function to pass the changed state of the * controlled tab component to the controlling DialogWithTabs component. * * @param {Object} change - Object that contains the changed property and * value. * @returns {void} */ _onChange(change) { const { onTabStateChange, tabId } = this.props; onTabStateChange(tabId, { ...this.props, ...change }); } } export default AbstractDialogTab;