* applied eslint * add locales and lint the project * removed error boundary * updated locales * fix min files * fix locales
94 lines
2.3 KiB
TypeScript
94 lines
2.3 KiB
TypeScript
import React from 'react';
|
|
import { Icon } from 'UI';
|
|
import cn from 'classnames';
|
|
import { IconNames } from 'UI/SVG';
|
|
import { Tooltip } from 'antd';
|
|
import stl from './sideMenuItem.module.css';
|
|
|
|
type Props = {
|
|
title: string;
|
|
iconName?: IconNames;
|
|
iconBg?: boolean;
|
|
iconColor?: string;
|
|
iconSize?: number;
|
|
className?: string;
|
|
active?: boolean;
|
|
disabled?: boolean;
|
|
tooltipTitle?: string;
|
|
onClick?: () => void;
|
|
deleteHandler?: () => void;
|
|
leading?: React.ReactNode;
|
|
id?: string;
|
|
};
|
|
|
|
function SideMenuItem({
|
|
iconBg = false,
|
|
iconColor = 'gray-dark',
|
|
iconSize = 18,
|
|
className = '',
|
|
iconName,
|
|
title,
|
|
active = false,
|
|
disabled = false,
|
|
tooltipTitle = '',
|
|
onClick,
|
|
deleteHandler,
|
|
leading = null,
|
|
...props
|
|
}: Props) {
|
|
const handleClick = () => {
|
|
if (disabled) return;
|
|
if (onClick) onClick();
|
|
};
|
|
|
|
const handleDeleteClick = (e: React.MouseEvent) => {
|
|
e.stopPropagation();
|
|
if (deleteHandler) deleteHandler();
|
|
};
|
|
|
|
return (
|
|
<Tooltip disabled={!disabled} title={tooltipTitle} placement="top">
|
|
<div
|
|
className={cn(
|
|
className,
|
|
stl.menuItem,
|
|
'flex items-center py-2 justify-between shrink-0 cursor-pointer',
|
|
{ [stl.active]: active, [stl.disabled]: disabled },
|
|
)}
|
|
onClick={handleClick}
|
|
{...props}
|
|
>
|
|
<div className={cn('flex items-center w-full', stl.iconLabel)}>
|
|
{iconName && (
|
|
<div className="flex items-center justify-center w-8 h-8 mr-2">
|
|
{iconBg && (
|
|
<div
|
|
className={cn(
|
|
'w-8 h-8 rounded-full relative opacity-20',
|
|
iconBg,
|
|
)}
|
|
style={{ opacity: 0.2 }}
|
|
/>
|
|
)}
|
|
<Icon
|
|
name={iconName}
|
|
size={iconSize}
|
|
color={active ? 'teal' : iconColor}
|
|
className="absolute"
|
|
/>
|
|
</div>
|
|
)}
|
|
<span className={cn(stl.title, 'capitalize-first')}>{title}</span>
|
|
</div>
|
|
{leading && leading}
|
|
{deleteHandler && (
|
|
<div onClick={handleDeleteClick} className={stl.actions}>
|
|
<Icon name="trash" size={14} />
|
|
</div>
|
|
)}
|
|
</div>
|
|
</Tooltip>
|
|
);
|
|
}
|
|
|
|
export default SideMenuItem;
|