mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2025-12-30 11:22:31 +00:00
Contributing all buttons in one place goes against the designs that we set out at the beginning of the project's rewrite and that multiple of us have been following since then.
80 lines
2.3 KiB
JavaScript
80 lines
2.3 KiB
JavaScript
// @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> {
|
|
_label: string;
|
|
_tooltip: string;
|
|
|
|
/**
|
|
* 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;
|
|
}
|
|
}
|