You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.5 KiB
TypeScript
62 lines
1.5 KiB
TypeScript
import React from 'react';
|
|
import classNames from 'classnames';
|
|
import { SessionIcon, SessionIconProps } from '../icon';
|
|
import { SessionNotificationCount } from '../SessionNotificationCount';
|
|
import { DefaultTheme, useTheme } from 'styled-components';
|
|
import _ from 'lodash';
|
|
|
|
interface SProps extends SessionIconProps {
|
|
onClick?: any;
|
|
notificationCount?: number;
|
|
isSelected?: boolean;
|
|
theme?: DefaultTheme;
|
|
isHidden?: boolean;
|
|
}
|
|
|
|
const SessionIconButtonInner = (props: SProps) => {
|
|
const {
|
|
iconType,
|
|
iconSize,
|
|
iconColor,
|
|
iconRotation,
|
|
isSelected,
|
|
notificationCount,
|
|
theme,
|
|
glowDuration,
|
|
glowStartDelay,
|
|
noScale,
|
|
isHidden,
|
|
} = props;
|
|
const clickHandler = (e: any) => {
|
|
if (props.onClick) {
|
|
e.stopPropagation();
|
|
props.onClick();
|
|
}
|
|
};
|
|
|
|
const themeToUSe = theme || useTheme();
|
|
|
|
return (
|
|
<div
|
|
className={classNames('session-icon-button', iconSize, isSelected ? 'no-opacity' : '')}
|
|
role="button"
|
|
onClick={clickHandler}
|
|
style={{ display: isHidden ? 'none' : 'flex' }}
|
|
>
|
|
<SessionIcon
|
|
iconType={iconType}
|
|
iconSize={iconSize}
|
|
iconColor={iconColor}
|
|
iconRotation={iconRotation}
|
|
theme={themeToUSe}
|
|
glowDuration={glowDuration}
|
|
glowStartDelay={glowStartDelay}
|
|
noScale={noScale}
|
|
/>
|
|
{Boolean(notificationCount) && <SessionNotificationCount count={notificationCount} />}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export const SessionIconButton = React.memo(SessionIconButtonInner, _.isEqual);
|