import { QuestionMarkCircle as HelpCircleIcon } from '@transferwise/icons';
import { clsx } from 'clsx';
import { useState } from 'react';
import { useIntl } from 'react-intl';
import { Size, Position, SizeSmall, SizeLarge } from '../common';
import Modal from '../modal';
import Popover, { PopoverPreferredPlacement } from '../popover';
import messages from './Info.messages';
import { InfoPresentation } from './infoPresentations';
import IconButton, { IconButtonProps } from '../iconButton';
export interface InfoProps {
'aria-label'?: string;
/**
* Extra classes applied to Info
*/
className?: string;
/**
* Content displayed inside a Popover a Modal
*/
content?: React.ReactNode;
onClick?: () => void;
/**
* Decides whether to display content in a Popover or a Modal
*/
presentation?: 'MODAL' | 'POPOVER';
/**
* Decides the size of help Icon
*/
size?: SizeSmall | SizeLarge;
/**
* Title displayed inside a Popover a Modal
*/
title?: React.ReactNode;
/**
* Prferred placement of the Popover, does not apply to Modal
*/
preferredPlacement?: PopoverPreferredPlacement;
}
const Info = ({
className = undefined,
content = undefined,
onClick = undefined,
presentation = InfoPresentation.POPOVER,
size = Size.SMALL,
title = undefined,
'aria-label': ariaLabel,
preferredPlacement = Position.BOTTOM,
}: InfoProps) => {
const intl = useIntl();
const [open, setOpen] = useState(false);
ariaLabel ??= intl.formatMessage(messages.ariaLabel);
const isModal = presentation === InfoPresentation.MODAL;
const buttonProps: IconButtonProps = {
'aria-label': ariaLabel,
priority: 'minimal',
size: 24,
children: ,
};
return (
{isModal ? (
<>
{
setOpen(!open);
if (onClick) {
onClick();
}
}}
{...buttonProps}
/>
setOpen(false)} />
>
) : (
{
if (onClick) {
onClick();
}
}}
/>
)}
);
};
export default Info;