feat: propagate trigger metadata for plugin icons across UI

This commit is contained in:
lyzno1
2025-10-25 12:15:21 +08:00
parent e3484c8dc3
commit 3bd62f3fdf
9 changed files with 258 additions and 29 deletions

View File

@ -26,7 +26,13 @@ export type ITriggerCardProps = {
}
const getTriggerIcon = (trigger: AppTrigger, triggerPlugins: any[]) => {
const { trigger_type, status, provider_name } = trigger
const {
trigger_type,
status,
provider_name,
provider_id,
icon: triggerIconFromApi,
} = trigger
// Status dot styling based on trigger status
const getStatusDot = () => {
@ -58,16 +64,18 @@ const getTriggerIcon = (trigger: AppTrigger, triggerPlugins: any[]) => {
blockType = BlockEnum.TriggerWebhook
}
let triggerIcon: string | undefined
if (trigger_type === 'trigger-plugin' && provider_name) {
let triggerIcon: string | undefined = triggerIconFromApi
if (!triggerIcon && trigger_type === 'trigger-plugin') {
const targetTriggers = triggerPlugins || []
const foundTrigger = targetTriggers.find(triggerWithProvider =>
canFindTool(triggerWithProvider.id, provider_name)
|| triggerWithProvider.id.includes(provider_name)
|| triggerWithProvider.name === provider_name,
)
const identifiers = [provider_id, provider_name].filter(Boolean) as string[]
const foundTrigger = targetTriggers.find((triggerWithProvider) => {
return identifiers.some(identifier =>
canFindTool(triggerWithProvider.id, identifier)
|| triggerWithProvider.id.includes(identifier)
|| triggerWithProvider.name === identifier,
)
})
triggerIcon = foundTrigger?.icon
console.log('triggerIcon', triggerIcon)
}
return (

View File

@ -162,7 +162,10 @@ const WorkflowAppLogList: FC<ILogs> = ({ logs, appDetail, onRefresh }) => {
</td>
{isWorkflow && (
<td className='p-3 pr-2'>
<TriggerByDisplay triggeredFrom={log.workflow_run.triggered_from || 'app-run'} />
<TriggerByDisplay
triggeredFrom={log.workflow_run.triggered_from || 'app-run'}
triggerInfo={log.trigger_info}
/>
</td>
)}
</tr>

View File

@ -11,11 +11,26 @@ import {
} from '@/app/components/base/icons/src/vender/workflow'
import BlockIcon from '@/app/components/workflow/block-icon'
import { BlockEnum } from '@/app/components/workflow/types'
import type { TriggerInfo } from '@/models/log'
type TriggerByDisplayProps = {
triggeredFrom: string
className?: string
showText?: boolean
triggerInfo?: TriggerInfo
}
const resolveTriggerType = (value: string) => {
switch (value) {
case 'trigger-plugin':
return 'plugin'
case 'trigger-webhook':
return 'webhook'
case 'trigger-schedule':
return 'schedule'
default:
return value
}
}
const getTriggerDisplayName = (triggeredFrom: string, t: any) => {
@ -32,7 +47,7 @@ const getTriggerDisplayName = (triggeredFrom: string, t: any) => {
return nameMap[triggeredFrom] || triggeredFrom
}
const getTriggerIcon = (triggeredFrom: string) => {
const getTriggerIcon = (triggeredFrom: string, triggerInfo?: TriggerInfo) => {
switch (triggeredFrom) {
case 'webhook':
return (
@ -47,12 +62,11 @@ const getTriggerIcon = (triggeredFrom: string) => {
</div>
)
case 'plugin':
// For plugin triggers in logs, use a generic plugin icon since we don't have specific plugin info
// This matches the standard BlockIcon styling for TriggerPlugin
return (
<BlockIcon
type={BlockEnum.TriggerPlugin}
size="md"
toolIcon={triggerInfo?.icon}
/>
)
case 'debugging':
@ -83,11 +97,13 @@ const TriggerByDisplay: FC<TriggerByDisplayProps> = ({
triggeredFrom,
className = '',
showText = true,
triggerInfo,
}) => {
const { t } = useTranslation()
const displayName = getTriggerDisplayName(triggeredFrom, t)
const icon = getTriggerIcon(triggeredFrom)
const resolvedType = resolveTriggerType(triggerInfo?.type || triggeredFrom)
const displayName = triggerInfo?.provider_name || getTriggerDisplayName(resolvedType, t)
const icon = getTriggerIcon(resolvedType, triggerInfo)
return (
<div className={`flex items-center gap-1.5 ${className}`}>