feat: simplify WorkflowNodeMeta by removing label and accent class handling
This commit is contained in:
@@ -2,7 +2,7 @@ import type { ReactNode } from "react"
|
|||||||
|
|
||||||
import { cn } from "@/lib/utils"
|
import { cn } from "@/lib/utils"
|
||||||
import type { AIWorkflowNodeSpec } from "@/lib/api/admin"
|
import type { AIWorkflowNodeSpec } from "@/lib/api/admin"
|
||||||
import { getWorkflowNodeAccentClass, getWorkflowNodeMeta } from "./workflow-node-meta"
|
import { getWorkflowNodeMeta } from "./workflow-node-meta"
|
||||||
import { WorkflowNodeIcon } from "./workflow-node-icon"
|
import { WorkflowNodeIcon } from "./workflow-node-icon"
|
||||||
|
|
||||||
export function WorkflowNodeCard({
|
export function WorkflowNodeCard({
|
||||||
@@ -40,14 +40,6 @@ export function WorkflowNodeCard({
|
|||||||
{title}
|
{title}
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-0.5 flex items-center gap-1.5">
|
<div className="mt-0.5 flex items-center gap-1.5">
|
||||||
<span
|
|
||||||
className={cn(
|
|
||||||
"inline-flex h-4 shrink-0 items-center rounded-md border px-1.5 text-[10px] font-medium leading-none",
|
|
||||||
getWorkflowNodeAccentClass(meta.tone)
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
{meta.label}
|
|
||||||
</span>
|
|
||||||
<span className="min-w-0 truncate text-[11px] leading-4 text-muted-foreground">
|
<span className="min-w-0 truncate text-[11px] leading-4 text-muted-foreground">
|
||||||
{nodeType}
|
{nodeType}
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -30,42 +30,27 @@ export type WorkflowNodeTone =
|
|||||||
export type WorkflowNodeMeta = {
|
export type WorkflowNodeMeta = {
|
||||||
icon: LucideIcon
|
icon: LucideIcon
|
||||||
tone: WorkflowNodeTone
|
tone: WorkflowNodeTone
|
||||||
label: string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const workflowNodeMetaByType: Record<string, WorkflowNodeMeta> = {
|
const workflowNodeMetaByType: Record<string, WorkflowNodeMeta> = {
|
||||||
start: { icon: PlayCircleIcon, tone: "blue", label: "入口" },
|
start: { icon: PlayCircleIcon, tone: "blue" },
|
||||||
conversation_understanding: { icon: MessageCircleIcon, tone: "indigo", label: "理解" },
|
conversation_understanding: { icon: MessageCircleIcon, tone: "indigo" },
|
||||||
reply_policy: { icon: ShieldCheckIcon, tone: "violet", label: "策略" },
|
reply_policy: { icon: ShieldCheckIcon, tone: "violet" },
|
||||||
knowledge_retrieve: { icon: BookOpenIcon, tone: "emerald", label: "知识" },
|
knowledge_retrieve: { icon: BookOpenIcon, tone: "emerald" },
|
||||||
answerability_gate: { icon: HelpCircleIcon, tone: "cyan", label: "判断" },
|
answerability_gate: { icon: HelpCircleIcon, tone: "cyan" },
|
||||||
llm_reply: { icon: BotIcon, tone: "indigo", label: "生成" },
|
llm_reply: { icon: BotIcon, tone: "indigo" },
|
||||||
condition: { icon: GitBranchIcon, tone: "cyan", label: "分支" },
|
condition: { icon: GitBranchIcon, tone: "cyan" },
|
||||||
analyze_conversation: { icon: SearchIcon, tone: "blue", label: "分析" },
|
analyze_conversation: { icon: SearchIcon, tone: "blue" },
|
||||||
prepare_ticket_draft: { icon: ClipboardListIcon, tone: "amber", label: "工单" },
|
prepare_ticket_draft: { icon: ClipboardListIcon, tone: "amber" },
|
||||||
human_confirm: { icon: UserCheckIcon, tone: "amber", label: "确认" },
|
human_confirm: { icon: UserCheckIcon, tone: "amber" },
|
||||||
create_ticket: { icon: TicketIcon, tone: "rose", label: "工单" },
|
create_ticket: { icon: TicketIcon, tone: "rose" },
|
||||||
handoff_to_human: { icon: HeadphonesIcon, tone: "amber", label: "人工" },
|
handoff_to_human: { icon: HeadphonesIcon, tone: "amber" },
|
||||||
send_reply: { icon: SendIcon, tone: "emerald", label: "发送" },
|
send_reply: { icon: SendIcon, tone: "emerald" },
|
||||||
end: { icon: FlagIcon, tone: "slate", label: "结束" },
|
end: { icon: FlagIcon, tone: "slate" },
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getWorkflowNodeMeta(type: string): WorkflowNodeMeta {
|
export function getWorkflowNodeMeta(type: string): WorkflowNodeMeta {
|
||||||
return workflowNodeMetaByType[type] ?? { icon: FileTextIcon, tone: "slate", label: "节点" }
|
return workflowNodeMetaByType[type] ?? { icon: FileTextIcon, tone: "slate" }
|
||||||
}
|
|
||||||
|
|
||||||
export function getWorkflowNodeAccentClass(tone: WorkflowNodeTone) {
|
|
||||||
const classes: Record<WorkflowNodeTone, string> = {
|
|
||||||
blue: "border-blue-200/80 bg-blue-50 text-blue-700 dark:border-blue-900/60 dark:bg-blue-950/50 dark:text-blue-300",
|
|
||||||
cyan: "border-cyan-200/80 bg-cyan-50 text-cyan-700 dark:border-cyan-900/60 dark:bg-cyan-950/50 dark:text-cyan-300",
|
|
||||||
emerald: "border-emerald-200/80 bg-emerald-50 text-emerald-700 dark:border-emerald-900/60 dark:bg-emerald-950/50 dark:text-emerald-300",
|
|
||||||
indigo: "border-indigo-200/80 bg-indigo-50 text-indigo-700 dark:border-indigo-900/60 dark:bg-indigo-950/50 dark:text-indigo-300",
|
|
||||||
amber: "border-amber-200/80 bg-amber-50 text-amber-700 dark:border-amber-900/60 dark:bg-amber-950/50 dark:text-amber-300",
|
|
||||||
violet: "border-violet-200/80 bg-violet-50 text-violet-700 dark:border-violet-900/60 dark:bg-violet-950/50 dark:text-violet-300",
|
|
||||||
rose: "border-rose-200/80 bg-rose-50 text-rose-700 dark:border-rose-900/60 dark:bg-rose-950/50 dark:text-rose-300",
|
|
||||||
slate: "border-slate-200/80 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-900/60 dark:text-slate-300",
|
|
||||||
}
|
|
||||||
return classes[tone]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getWorkflowNodeIconClass(tone: WorkflowNodeTone) {
|
export function getWorkflowNodeIconClass(tone: WorkflowNodeTone) {
|
||||||
|
|||||||
Reference in New Issue
Block a user