'use client' import AlertTriangle from '@/app/components/base/icons/src/vender/solid/alertsAndFeedback/AlertTriangle' import classNames from '@/utils/classnames' import { RiErrorWarningFill } from '@remixicon/react' import { type VariantProps, cva } from 'class-variance-authority' import type { CSSProperties } from 'react' import React from 'react' export enum NodeStatusEnum { warning = 'warning', error = 'error', } const nodeStatusVariants = cva( 'flex items-center gap-1 rounded-md px-2 py-1 system-xs-medium', { variants: { status: { [NodeStatusEnum.warning]: 'bg-state-warning-hover text-text-warning', [NodeStatusEnum.error]: 'bg-state-destructive-hover text-text-destructive', }, }, defaultVariants: { status: NodeStatusEnum.warning, }, }, ) const StatusIconMap: Record = { [NodeStatusEnum.warning]: { IconComponent: AlertTriangle, message: 'Warning' }, [NodeStatusEnum.error]: { IconComponent: RiErrorWarningFill, message: 'Error' }, } export type NodeStatusProps = { message?: string styleCss?: CSSProperties iconClassName?: string } & React.HTMLAttributes & VariantProps const NodeStatus = ({ className, status, message, styleCss, iconClassName, children, ...props }: NodeStatusProps) => { const Icon = StatusIconMap[status ?? NodeStatusEnum.warning].IconComponent const defaultMessage = StatusIconMap[status ?? NodeStatusEnum.warning].message return (
{message ?? defaultMessage} {children}
) } NodeStatus.displayName = 'NodeStatus' export default React.memo(NodeStatus)