portfolio/components/ui/StatusMessage.tsx
Ryan Freeman 82f6277770
All checks were successful
Build And Publish / BuildAndPublish (push) Successful in 3m7s
Simplify status message component
2025-05-05 10:37:39 +01:00

31 lines
1.2 KiB
TypeScript

import clsx from 'clsx'
import React, {ReactNode} from 'react'
import {CheckIcon} from '@/components/icons/CheckIcon'
import {CrossIcon} from '@/components/icons/CrossIcon'
type StatusMessageProps = {
children: ReactNode
className?: string
errorConditions?: string[]
}
export function StatusMessage({children, className, errorConditions}: StatusMessageProps) {
const _errorConditions = ['error', 'problem', ...errorConditions ?? []]
const isError = _errorConditions.some(condition => children?.toString().toLowerCase().includes(condition))
return (
<>
{children &&
<div
className={clsx(`flex items-start sm:items-center ${className ?? ''}, ${isError ? 'text-red-800 dark:text-red-600' : 'text-green-800 dark:text-green-600'}`)}>
{!isError ? <CheckIcon className="size-5 mt-0.5 sm:mt-0 mr-1"/>
: <CrossIcon className="size-5 mt-0.5 sm:mt-0 mr-1 "/>}
<p aria-live="polite" role="status"
className="text-sm font-semibold">
{children}
</p>
</div>
}
</>
)
}