brf/client/public/shared/components/message_factory.tsx
2025-11-24 17:09:09 +01:00

35 lines
843 B
TypeScript

import { h, type FunctionComponent } from 'preact'
import cn from 'classnames'
export default function messageFactory(styles: {
base?: string
text?: string
icon?: string
button?: string
noMargin?: string
normal?: string
error?: string
success?: string
}) {
const Message: FunctionComponent<{
className?: string
dismiss?: () => void
noMargin?: boolean
type?: 'normal' | 'error' | 'success'
}> = ({ children, className, dismiss, noMargin, type = 'normal' }) => (
<div className={cn(styles.base, styles[type], noMargin && styles.noMargin, className)}>
<i className={styles.icon} />
<div className={styles.text}>{children}</div>
{dismiss && (
<button className={styles.button} onClick={() => dismiss()}>
X
</button>
)}
</div>
)
return Message
}