123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- import React from 'react';
-
- import { NOTIFY_CLICK_MODE } from '../../../../toolbox/types';
- import Icon from '../../../icons/components/Icon';
- import Tooltip from '../../../tooltip/components/Tooltip';
-
- interface IProps {
-
- /**
- * The id of the element this button icon controls.
- */
- ariaControls?: string;
-
- /**
- * Whether the element popup is expanded.
- */
- ariaExpanded?: boolean;
-
- /**
- * Whether the element has a popup.
- */
- ariaHasPopup?: boolean;
-
- /**
- * Aria label for the Icon.
- */
- ariaLabel?: string;
-
- /**
- * The button's key.
- */
- buttonKey?: string;
-
- /**
- * The decorated component (ToolboxButton).
- */
- children: React.ReactNode;
-
- /**
- * Icon of the button.
- */
- icon: Function;
-
- /**
- * Flag used for disabling the small icon.
- */
- iconDisabled: boolean;
-
- /**
- * The ID of the icon button.
- */
- iconId: string;
-
- /**
- * The tooltip used for the icon.
- */
- iconTooltip: string;
-
- /**
- * Notify mode for `toolbarButtonClicked` event -
- * whether to only notify or to also prevent button click routine.
- */
- notifyMode?: string;
-
- /**
- * Click handler for the small icon.
- */
- onIconClick: Function;
-
- /**
- * Keydown handler for icon.
- */
- onIconKeyDown?: Function;
-
- /**
- * Additional styles.
- */
- styles?: Object;
- }
-
- /**
- * Displays the `ToolboxButtonWithIcon` component.
- *
- * @param {Object} props - Component's props.
- * @returns {ReactElement}
- */
- export default function ToolboxButtonWithIcon(props: IProps) {
- const {
- children,
- icon,
- iconDisabled,
- iconTooltip,
- buttonKey,
- notifyMode,
- onIconClick,
- onIconKeyDown,
- styles,
- ariaLabel,
- ariaHasPopup,
- ariaControls,
- ariaExpanded,
- iconId
- } = props;
-
- const iconProps: {
- ariaControls?: string;
- ariaExpanded?: boolean;
- containerId?: string;
- onClick?: (e?: React.MouseEvent) => void;
- onKeyDown?: Function;
- role?: string;
- tabIndex?: number;
- } = {};
- let className = '';
-
- if (iconDisabled) {
- className
- = 'settings-button-small-icon settings-button-small-icon--disabled';
- } else {
- className = 'settings-button-small-icon';
- iconProps.onClick = (e?: React.MouseEvent) => {
- if (typeof APP !== 'undefined' && notifyMode) {
- APP.API.notifyToolbarButtonClicked(
- buttonKey, notifyMode === NOTIFY_CLICK_MODE.PREVENT_AND_NOTIFY
- );
- }
-
- if (notifyMode !== NOTIFY_CLICK_MODE.PREVENT_AND_NOTIFY) {
- onIconClick(e);
- }
- };
- iconProps.onKeyDown = onIconKeyDown;
- iconProps.role = 'button';
- iconProps.tabIndex = 0;
- iconProps.ariaControls = ariaControls;
- iconProps.ariaExpanded = ariaExpanded;
- iconProps.containerId = iconId;
- }
-
-
- return (
- <div
- className = 'settings-button-container'
- style = { styles }>
- {children}
-
- <div>
- <Tooltip
- containerClassName = { className }
- content = { iconTooltip }
- position = 'top'>
- <Icon
- { ...iconProps }
- ariaHasPopup = { ariaHasPopup }
- ariaLabel = { ariaLabel }
- size = { 16 }
- src = { icon } />
- </Tooltip>
- </div>
- </div>
- );
- }
|