import NodeStatus, { NodeStatusEnum } from '@/app/components/base/node-status' import type { NodeProps } from '@/app/components/workflow/types' import type { FC } from 'react' import React, { useEffect, useMemo } from 'react' import { useTranslation } from 'react-i18next' import { InstallPluginButton } from '@/app/components/workflow/nodes/_base/components/install-plugin-button' import { useNodePluginInstallation } from '@/app/components/workflow/hooks/use-node-plugin-installation' import { useNodeDataUpdate } from '@/app/components/workflow/hooks/use-node-data-update' import type { PluginTriggerNodeType } from './types' import useConfig from './use-config' const formatConfigValue = (rawValue: any): string => { if (rawValue === null || rawValue === undefined) return '' if (typeof rawValue === 'string' || typeof rawValue === 'number' || typeof rawValue === 'boolean') return String(rawValue) if (Array.isArray(rawValue)) return rawValue.join('.') if (typeof rawValue === 'object') { const { value } = rawValue as { value?: any } if (value === null || value === undefined) return '' if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value) if (Array.isArray(value)) return value.join('.') try { return JSON.stringify(value) } catch { return '' } } return '' } const Node: FC> = ({ id, data, }) => { const { subscriptions } = useConfig(id, data) const { config = {}, subscription_id } = data const configKeys = Object.keys(config) const { isChecking, isMissing, uniqueIdentifier, canInstall, onInstallSuccess, shouldDim, } = useNodePluginInstallation(data) const { handleNodeDataUpdate } = useNodeDataUpdate() const showInstallButton = !isChecking && isMissing && canInstall && uniqueIdentifier const shouldLock = !isChecking && isMissing && canInstall && Boolean(uniqueIdentifier) useEffect(() => { if (data._pluginInstallLocked === shouldLock && data._dimmed === shouldDim) return handleNodeDataUpdate({ id, data: { _pluginInstallLocked: shouldLock, _dimmed: shouldDim, }, }) }, [data._pluginInstallLocked, data._dimmed, handleNodeDataUpdate, id, shouldDim, shouldLock]) const { t } = useTranslation() const isValidSubscription = useMemo(() => { return subscription_id && subscriptions?.some(sub => sub.id === subscription_id) }, [subscription_id, subscriptions]) return (
{showInstallButton && (
)}
{!isValidSubscription && } {isValidSubscription && configKeys.map((key, index) => (
{key}
{(() => { const displayValue = formatConfigValue(config[key]) if (displayValue.includes('secret')) return '********' return displayValue })()}
))}
) } export default React.memo(Node)