123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- // @flow
-
- import React, { Component } from 'react';
-
- import { Icon } from '../../icons';
-
- type Props = {
-
- /**
- * The decorated component (ToolboxButton).
- */
- children: React$Node,
-
- /**
- * Icon of the button.
- */
- icon: Function,
-
- /**
- * Flag used for disabling the small icon.
- */
- iconDisabled: boolean,
-
- /**
- * Click handler for the small icon.
- */
- onIconClick: Function,
-
- /**
- * Additional styles.
- */
- styles?: Object,
- };
-
- type State = {
-
- /**
- * Whether the button is hovered or not.
- */
- isHovered: boolean,
- };
-
- /**
- * Displayes the `ToolboxButtonWithIcon` component.
- *
- * @returns {ReactElement}
- */
- export default class ToolboxButtonWithIcon extends Component<Props, State> {
-
- /**
- * Initializes a new {@code ToolboxButtonWithIcon} instance.
- *
- * @param {Props} props - The props of the component.
- */
- constructor(props: Props) {
- super(props);
-
- this.state = {
- isHovered: false
- };
- this._onMouseEnter = this._onMouseEnter.bind(this);
- this._onMouseLeave = this._onMouseLeave.bind(this);
- }
-
- _onMouseEnter: () => void;
-
- /**
- * Handler for when the small button has the mouse over.
- *
- * @returns {void}.
- */
- _onMouseEnter() {
- this.setState({
- isHovered: true
- });
- }
-
- _onMouseLeave: () => void;
-
- /**
- * Handler for when the mouse leaves the small button.
- *
- * @returns {void}
- */
- _onMouseLeave() {
- this.setState({
- isHovered: false
- });
- }
-
- /**
- * Implements React's {@link Component#render()}.
- *
- * @inheritdoc
- * @returns {React$Node}
- */
- render() {
- const {
- children,
- icon,
- iconDisabled,
- onIconClick,
- styles
- } = this.props;
-
- const iconProps = {};
- let size = 9;
-
- if (iconDisabled) {
- iconProps.className
- = 'settings-button-small-icon settings-button-small-icon--disabled';
- } else {
- iconProps.className = 'settings-button-small-icon';
- iconProps.onClick = onIconClick;
-
- if (this.state.isHovered) {
- iconProps.className = `${iconProps.className} settings-button-small-icon--hovered`;
- size = 11;
- }
- }
-
- return (
- <div
- className = 'settings-button-container'
- styles = { styles }>
- {children}
- <div
- onMouseEnter = { this._onMouseEnter }
- onMouseLeave = { this._onMouseLeave }>
- <Icon
- { ...iconProps }
- size = { size }
- src = { icon } />
- </div>
- </div>
- );
- }
- }
|