import dynamic from 'next/dynamic'; import { FC, ReactNode } from 'react'; import { type CogProps, Heading, type HeadingProps, type MagnifyingGlassProps, } from '../../atoms'; import styles from './modal.module.scss'; export type Icons = 'cogs' | 'search'; export type ModalProps = { /** * The modal body. */ children: ReactNode; /** * Set additional classnames. */ className?: string; /** * Set additional classnames to the heading. */ headingClassName?: HeadingProps['className']; /** * A icon to illustrate the modal. */ icon?: Icons; /** * The modal title. */ title?: string; }; const CogIcon = dynamic( () => import('../../atoms/icons/cog').then((mod) => mod.Cog), { ssr: false, } ); const SearchIcon = dynamic( () => import('../../atoms/icons/magnifying-glass').then( (mod) => mod.MagnifyingGlass ), { ssr: false } ); /** * Modal component * * Render a modal component with an optional title and icon. */ export const Modal: FC = ({ children, className = '', headingClassName = '', icon, title, }) => { const getIcon = (id: Icons) => { switch (id) { case 'cogs': return ; case 'search': return ; default: return <>; } }; return (
{title && ( {icon && {getIcon(icon)}} {title} )} {children}
); };