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 | import React from 'react';
import { useDeviceInfo } from '../../utils';
import Icon from '../Icon/Icon';
import './styles.scss';
export interface Props {
type: 'page' | 'toast';
priority: 'info' | 'critical' | 'warning' | 'success';
title?: string | string[];
body: string | JSX.Element | (string | JSX.Element)[];
actionText?: string;
actionHandler?: () => void;
pageButtons?: JSX.Element[];
showCloseButton?: boolean;
onClose?: () => void;
}
export default function Message(props: Props): JSX.Element | null {
const { type, priority, title, body, actionText, actionHandler, pageButtons, showCloseButton, onClose } = props;
const { isMobile } = useDeviceInfo();
return (
<div className={`tw-message tw-message--${type} tw-message--${priority} ${isMobile ? 'tw-message--mobile' : ''}`}>
{type === 'toast' && (
<div className='tw-message--left-side'>
<Icon name={priority} className='left-side--icon' />
</div>
)}
<div className='tw-message--container'>
<div className='tw-message--main-content'>
{type === 'page' && <Icon name={priority} className='main-content--icon' />}
<div className='tw-message--main-body'>
{title && (
<div className='tw-message--title-container'>
<h4>{title}</h4>
</div>
)}
{typeof body === 'string' ? <p>{body}</p> : body}
{type === 'page' && pageButtons && pageButtons.length > 0 ? (
<div className='tw-message--actions-container'>
{pageButtons?.map((pageButton, index) => {
const pageButtonWithKey = {
...pageButton,
key: `page-button-${index}`,
props: { ...pageButton.props, size: pageButton.props.size || 'medium' },
};
return pageButtonWithKey;
})}
</div>
) : null}
</div>
</div>
{type === 'toast' && actionText ? (
<button onClick={actionHandler} className='tw-message--action-text'>
{actionText}
</button>
) : showCloseButton ? (
<button onClick={onClose} className='icon-container'>
<Icon name='close' className='page-message--close-icon' />
</button>
) : null}
</div>
</div>
);
}
|