mirror of
https://github.com/langgenius/dify.git
synced 2026-07-23 03:58:31 +08:00
64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
'use client'
|
|
import type { VariantProps } from 'class-variance-authority'
|
|
import type { CSSProperties } from 'react'
|
|
import { cn } from '@langgenius/dify-ui/cn'
|
|
import { RiErrorWarningFill } from '@remixicon/react'
|
|
import { cva } from 'class-variance-authority'
|
|
import * as React from 'react'
|
|
import AlertTriangle from '@/app/components/base/icons/src/vender/solid/alertsAndFeedback/AlertTriangle'
|
|
|
|
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, { IconComponent: React.ElementType; message: string }> =
|
|
{
|
|
[NodeStatusEnum.warning]: { IconComponent: AlertTriangle, message: 'Warning' },
|
|
[NodeStatusEnum.error]: { IconComponent: RiErrorWarningFill, message: 'Error' },
|
|
}
|
|
|
|
type NodeStatusProps = {
|
|
message?: string
|
|
styleCss?: CSSProperties
|
|
iconClassName?: string
|
|
} & React.HTMLAttributes<HTMLDivElement> &
|
|
VariantProps<typeof nodeStatusVariants>
|
|
|
|
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 (
|
|
<div className={cn(nodeStatusVariants({ status, className }))} style={styleCss} {...props}>
|
|
<Icon className={cn('size-3.5 shrink-0', iconClassName)} />
|
|
<span>{message ?? defaultMessage}</span>
|
|
{children}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
NodeStatus.displayName = 'NodeStatus'
|
|
|
|
export default React.memo(NodeStatus)
|