import classNames from 'classnames'; import _ from 'lodash'; import { KeyboardEvent, MouseEvent, forwardRef, memo } from 'react'; import styled from 'styled-components'; import { SessionIcon, SessionIconProps } from '.'; import { SessionNotificationCount } from './SessionNotificationCount'; interface SProps extends SessionIconProps { onClick?: (e?: 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 = forwardRef((props, ref) => { const { iconType, iconSize, iconColor, iconRotation, isSelected, notificationCount, glowDuration, glowStartDelay, noScale, isHidden, backgroundColor, borderRadius, iconPadding, margin, id, dataTestId, dataTestIdIcon, style, tabIndex, } = props; const clickHandler = (e: 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) && } ); }); export const SessionIconButton = memo(SessionIconButtonInner, _.isEqual);