Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 2x 2x | import React, { CSSProperties } from 'react';
import { ButtonBase, SxProps } from '@mui/material';
import Icon from '../Icon/Icon';
import { IconName } from '../Icon/icons';
import { Size } from '../Size';
import './styles.scss';
export type ButtonPriority = 'primary' | 'secondary' | 'ghost';
export type ButtonType = 'productive' | 'passive' | 'destructive';
export interface Props {
onClick: (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
label?: string;
type?: ButtonType;
priority?: ButtonPriority;
size?: Size;
disabled?: boolean;
icon?: IconName;
rightIcon?: IconName;
processing?: boolean;
id?: string;
className?: string;
style?: CSSProperties;
sx?: SxProps;
}
export default function Button(props: Props): JSX.Element {
const {
onClick,
label,
type = 'productive',
priority = 'primary',
size = 'small',
disabled,
icon,
rightIcon,
processing,
id,
className,
style,
sx,
} = props;
return (
<ButtonBase
id={id}
onClick={onClick}
className={`button ${type}-${priority} button--${size} ${type}-${priority}--${size} ${
icon && !processing ? 'button-with-icon' : ''
} ${rightIcon && !processing ? 'button-with-right-icon' : ''}
${!label ? 'button-no-label' : ''} ${className ?? ''}`}
disabled={disabled}
style={style}
sx={[
{
'& path': { fill: 'currentColor' },
},
...(Array.isArray(sx) ? sx : [sx]),
]}
>
{processing && <Icon name='spinner' size={size} className='icon-spinner' />}
{!processing && icon && <Icon name={icon} size={size} />}
{!processing && !!label && label}
{!processing && rightIcon && <Icon name={rightIcon} size={size} className='icon-right' />}
</ButtonBase>
);
}
|