import React, { KeyboardEvent } from 'react'; import classNames from 'classnames'; import _ from 'lodash'; import styled from 'styled-components'; import { SessionNotificationCount, SessionUnreadCount } from './SessionNotificationCount'; import { SessionIcon, SessionIconProps } from '.'; interface SProps extends SessionIconProps { onClick?: (e?: React.MouseEvent) => void; notificationCount?: number; isSelected?: boolean; isHidden?: boolean; margin?: string; dataTestId?: string; dataTestIdIcon?: string; id?: string; style?: object; tabIndex?: number; } const StyledSessionIconButton = styled.div<{ color?: string; isSelected?: boolean }>` background-color: var(--button-icon-background-color); svg path { transition: var(--default-duration); ${props => !props.color && `fill: ${ props.isSelected ? 'var(--button-icon-stroke-selected-color)' : 'var(--button-icon-stroke-color)' };`} } &:hover svg path { ${props => !props.color && 'fill: var(--button-icon-stroke-hover-color);'} } `; // eslint-disable-next-line react/display-name const SessionIconButtonInner = React.forwardRef((props, ref) => { const { iconType, iconSize, iconColor, iconRotation, isSelected, notificationCount, glowDuration, glowStartDelay, noScale, isHidden, backgroundColor, borderRadius, iconPadding, margin, id, dataTestId, dataTestIdIcon, style, tabIndex, unreadCount } = props; const clickHandler = (e: React.MouseEvent) => { if (props.onClick) { e.stopPropagation(); props.onClick(e); } }; const keyPressHandler = (e: KeyboardEvent) => { if (e.currentTarget.tabIndex > -1 && e.key === 'Enter' && props.onClick) { e.stopPropagation(); props.onClick(); } }; return ( {Boolean(notificationCount) && } {Boolean(unreadCount) && } ); }); export const SessionIconButton = React.memo(SessionIconButtonInner, _.isEqual);