12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // @flow
-
- import Tooltip from '@atlaskit/tooltip';
- import React from 'react';
-
- import AbstractToolboxItem from './AbstractToolboxItem';
- import type { Props } from './AbstractToolboxItem';
-
- /**
- * Web implementation of {@code AbstractToolboxItem}.
- */
- export default class ToolboxItem extends AbstractToolboxItem<Props> {
- /**
- * Handles rendering of the actual item. If the label is being shown, which
- * is controlled with the `showLabel` prop, the item is rendered for its
- * display in an overflow menu, otherwise it will only have an icon, which
- * can be displayed on any toolbar.
- *
- * @protected
- * @returns {ReactElement}
- */
- _renderItem() {
- const {
- accessibilityLabel,
- onClick,
- showLabel
- } = this.props;
- const props = {
- 'aria-label': accessibilityLabel,
- className: showLabel ? 'overflow-menu-item' : 'toolbox-button',
- onClick
- };
- const elementType = showLabel ? 'li' : 'div';
- // eslint-disable-next-line no-extra-parens
- const children = (
-
- // $FlowFixMe
- <React.Fragment>
- { this._renderIcon() }
- { showLabel && this.label }
- </React.Fragment>
- );
-
- return React.createElement(elementType, props, children);
- }
-
- /**
- * Helper function to render the item's icon.
- *
- * @private
- * @returns {ReactElement}
- */
- _renderIcon() {
- const { iconName, tooltipPosition, showLabel } = this.props;
- const icon = <i className = { iconName } />;
- const elementType = showLabel ? 'span' : 'div';
- const className
- = showLabel ? 'overflow-menu-item-icon' : 'toolbox-icon';
- const iconWrapper
- = React.createElement(elementType, { className }, icon);
- const tooltip = this.tooltip;
- const useTooltip = !showLabel && tooltip && tooltip.length > 0;
-
- if (useTooltip) {
- return (
- <Tooltip
- description = { tooltip }
- position = { tooltipPosition }>
- { iconWrapper }
- </Tooltip>
- );
- }
-
- return iconWrapper;
- }
- }
|