refactor: some field name in strategy status

This commit is contained in:
AkaraChen 2025-01-07 09:30:35 +08:00
parent 61d2f70927
commit 15f3e46c49
6 changed files with 115 additions and 11 deletions

View File

@ -1,10 +1,11 @@
import type { ReactNode } from 'react'
import { memo } from 'react'
import cn from '@/utils/classnames'
type BadgeProps = {
className?: string
text?: string
children?: React.ReactNode
text?: ReactNode
children?: ReactNode
uppercase?: boolean
hasRedCornerMark?: boolean
}

View File

@ -18,6 +18,7 @@ import type { ToolWithProvider } from '../../../types'
import { CollectionType } from '@/app/components/tools/types'
import useGetIcon from '@/app/components/plugins/install-plugin/base/use-get-icon'
import { useStrategyInfo } from '../../agent/use-config'
import { SwitchPluginVersion } from './switch-plugin-version'
const NotFoundWarn = (props: {
title: ReactNode,
@ -100,17 +101,18 @@ export const AgentStrategySelector = memo((props: AgentStrategySelectorProps) =>
value?.agent_strategy_provider_name,
value?.agent_strategy_name,
)
const showPluginNotInstalledWarn = strategyStatus?.plugin?.source === 'external'
&& !strategyStatus.plugin.installed
const showUnsupportedStrategy = strategyStatus?.plugin.source === 'external'
&& strategyStatus.strategy === 'not-found'
&& !strategyStatus?.isExistInPlugin
const showSwitchVersion = strategyStatus?.strategy === 'not-found'
&& strategyStatus.plugin.source === 'marketplace' && strategyStatus.plugin.installed
const showSwitchVersion = !strategyStatus?.isExistInPlugin
&& strategyStatus?.plugin.source === 'marketplace' && strategyStatus.plugin.installed
const showInstallButton = strategyStatus?.strategy === 'not-found'
&& strategyStatus.plugin.source === 'marketplace' && !strategyStatus.plugin.installed
const showInstallButton = !strategyStatus?.isExistInPlugin
&& strategyStatus?.plugin.source === 'marketplace' && !strategyStatus.plugin.installed
const icon = list?.find(
coll => coll.tools?.find(tool => tool.name === value?.agent_strategy_name),
@ -154,6 +156,11 @@ export const AgentStrategySelector = memo((props: AgentStrategySelectorProps) =>
/>
: <RiArrowDownSLine className='size-4 text-text-tertiary' />
}
{showSwitchVersion && <SwitchPluginVersion
uniqueIdentifier={'langgenius/openai:12'}
onSelect={console.error}
version={''}
/>}
</div>}
</div>
</PortalToFollowElemTrigger>

View File

@ -0,0 +1,80 @@
'use client'
import Badge from '@/app/components/base/badge'
import Tooltip from '@/app/components/base/tooltip'
import PluginVersionPicker from '@/app/components/plugins/update-plugin/plugin-version-picker'
import { RiArrowLeftRightLine } from '@remixicon/react'
import { type FC, useCallback, useState } from 'react'
import cn from '@/utils/classnames'
import UpdateFromMarketplace from '@/app/components/plugins/update-plugin/from-market-place'
import { useBoolean } from 'ahooks'
import { useCheckInstalled } from '@/service/use-plugins'
export type SwitchPluginVersionProps = {
uniqueIdentifier: string
tooltip?: string
version: string
onSelect: (version: string) => void
}
export const SwitchPluginVersion: FC<SwitchPluginVersionProps> = (props) => {
const { uniqueIdentifier, tooltip, onSelect, version } = props
const [pluginId] = uniqueIdentifier.split(':')
const [isShow, setIsShow] = useState(false)
const [isShowUpdateModal, { setTrue: showUpdateModal, setFalse: hideUpdateModal }] = useBoolean(false)
const [targetVersion, setTargetVersion] = useState<string>()
const pluginDetails = useCheckInstalled({
pluginIds: [pluginId],
enabled: true,
})
const pluginDetail = pluginDetails.data?.plugins.at(0)
const handleUpdatedFromMarketplace = useCallback(() => {
hideUpdateModal()
onSelect(targetVersion!)
}, [hideUpdateModal, onSelect, targetVersion])
return <Tooltip popupContent={!isShow && tooltip} triggerMethod='hover'>
<div>
{isShowUpdateModal && pluginDetail && <UpdateFromMarketplace
payload={{
originalPackageInfo: {
id: uniqueIdentifier,
payload: pluginDetail.declaration,
},
targetPackageInfo: {
id: uniqueIdentifier,
version: targetVersion!,
},
}}
onCancel={hideUpdateModal}
onSave={handleUpdatedFromMarketplace}
/>}
<PluginVersionPicker
isShow={isShow}
onShowChange={setIsShow}
pluginID={pluginId}
currentVersion={version}
onSelect={(state) => {
setTargetVersion(state.version)
showUpdateModal()
}}
trigger={
<Badge
className={cn(
'mx-1 hover:bg-state-base-hover',
isShow && 'bg-state-base-hover',
)}
uppercase={true}
text={
<>
<div>{version}</div>
<RiArrowLeftRightLine className='ml-1 w-3 h-3 text-text-tertiary' />
</>
}
hasRedCornerMark={true}
/>
}
/>
</div>
</Tooltip>
}

View File

@ -89,9 +89,9 @@ const AgentNode: FC<NodeProps<AgentNodeType>> = (props) => {
{inputs.agent_strategy_name
? <SettingItem
label={t('workflow.nodes.agent.strategy.shortLabel')}
status={currentStrategyStatus?.strategy === 'not-found' ? 'error' : undefined}
status={!currentStrategyStatus?.isExistInPlugin ? 'error' : undefined}
tooltip={
currentStrategyStatus?.strategy === 'not-found' ? t('workflow.nodes.agent.strategyNotInstallTooltip', {
!currentStrategyStatus?.isExistInPlugin ? t('workflow.nodes.agent.strategyNotInstallTooltip', {
plugin: pluginDetail?.declaration.label
? renderI18nObject(pluginDetail?.declaration.label)
: undefined,

View File

@ -18,7 +18,7 @@ export type StrategyStatus = {
source: 'external' | 'marketplace'
installed: boolean
}
strategy: 'not-found' | 'normal'
isExistInPlugin: boolean
}
export const useStrategyInfo = (
@ -46,7 +46,7 @@ export const useStrategyInfo = (
source: isInMarketplace ? 'marketplace' : 'external',
installed: isPluginInstalled,
},
strategy: strategyExist ? 'normal' : 'not-found',
isExistInPlugin: strategyExist,
}
}, [strategy, marketplace, strategyProvider.isError, strategyProvider.isLoading])
return {

View File

@ -0,0 +1,16 @@
'use client'
import { useState } from 'react'
import { SwitchPluginVersion } from '../components/workflow/nodes/_base/components/switch-plugin-version'
export default function Page() {
const [version, setVersion] = useState('0.0.1')
return <div className="p-20">
<SwitchPluginVersion
uniqueIdentifier={'langgenius/openai:12'}
onSelect={setVersion}
version={version}
tooltip='Switch to new version'
/>
</div>
}