UNPKG

box-ui-elements-mlh

Version:
65 lines (55 loc) 1.97 kB
// @flow strict import React, { type Element } from 'react'; import { FormattedMessage } from 'react-intl'; import PlainButton from '../../components/plain-button'; import Button from '../../components/button'; import Tooltip from '../../components/tooltip'; import IconCheck from '../../icons/general/IconCheck'; import IconClose from '../../icons/general/IconClose'; import IconPencil from '../../icons/general/IconPencil'; import { bdlGray62 } from '../../styles/variables'; import { CANCEL_ICON_TYPE, EDIT_ICON_TYPE, SAVE_ICON_TYPE } from './constants'; type IconType = typeof CANCEL_ICON_TYPE | typeof EDIT_ICON_TYPE | typeof SAVE_ICON_TYPE; type Props = { className?: string, isUpdating?: boolean, onClick: void => void, tooltipText: Element<typeof FormattedMessage>, type?: IconType, }; const IconWithTooltip = ({ className, isUpdating, onClick, tooltipText, type, }: Props): Element<typeof Tooltip> | null => { let iconBtn; switch (type) { case CANCEL_ICON_TYPE: iconBtn = ( <PlainButton className={className} type="button" onClick={onClick}> <IconClose color={bdlGray62} width={16} height={16} /> </PlainButton> ); break; case EDIT_ICON_TYPE: iconBtn = ( <PlainButton className={className} type="button" onClick={onClick}> <IconPencil color={bdlGray62} /> </PlainButton> ); break; case SAVE_ICON_TYPE: iconBtn = ( <Button className={className} isLoading={isUpdating} type="button" onClick={onClick}> <IconCheck color={bdlGray62} width={16} height={16} /> </Button> ); break; default: return null; } return <Tooltip text={tooltipText}>{iconBtn}</Tooltip>; }; export default IconWithTooltip;