mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-05-18 04:46:55 +08:00
101 lines
3.0 KiB
TypeScript
101 lines
3.0 KiB
TypeScript
import {
|
|
useCallback,
|
|
useEffect,
|
|
useRef,
|
|
useState,
|
|
} from 'react'
|
|
import { TaskStatus } from '@/app/components/plugins/types'
|
|
import type { PluginStatus } from '@/app/components/plugins/types'
|
|
import {
|
|
useMutationClearAllTaskPlugin,
|
|
useMutationClearTaskPlugin,
|
|
usePluginTaskList,
|
|
} from '@/service/use-plugins'
|
|
|
|
export const usePluginTaskStatus = () => {
|
|
const {
|
|
pluginTasks,
|
|
handleRefetch,
|
|
} = usePluginTaskList()
|
|
const { mutateAsync } = useMutationClearTaskPlugin()
|
|
const { mutateAsync: mutateAsyncClearAll } = useMutationClearAllTaskPlugin()
|
|
const allPlugins = pluginTasks.map(task => task.plugins.map((plugin) => {
|
|
return {
|
|
...plugin,
|
|
taskId: task.id,
|
|
}
|
|
})).flat()
|
|
const errorPlugins: PluginStatus[] = []
|
|
const successPlugins: PluginStatus[] = []
|
|
const runningPlugins: PluginStatus[] = []
|
|
|
|
allPlugins.forEach((plugin) => {
|
|
if (plugin.status === TaskStatus.running)
|
|
runningPlugins.push(plugin)
|
|
if (plugin.status === TaskStatus.failed)
|
|
errorPlugins.push(plugin)
|
|
if (plugin.status === TaskStatus.success)
|
|
successPlugins.push(plugin)
|
|
})
|
|
|
|
const handleClearErrorPlugin = useCallback(async (taskId: string, pluginId: string) => {
|
|
await mutateAsync({
|
|
taskId,
|
|
pluginId,
|
|
})
|
|
handleRefetch()
|
|
}, [mutateAsync, handleRefetch])
|
|
const handleClearAllErrorPlugin = useCallback(async () => {
|
|
await mutateAsyncClearAll()
|
|
handleRefetch()
|
|
}, [mutateAsyncClearAll, handleRefetch])
|
|
const totalPluginsLength = allPlugins.length
|
|
const runningPluginsLength = runningPlugins.length
|
|
const errorPluginsLength = errorPlugins.length
|
|
const successPluginsLength = successPlugins.length
|
|
|
|
const isInstalling = runningPluginsLength > 0 && errorPluginsLength === 0 && successPluginsLength === 0
|
|
const isInstallingWithSuccess = runningPluginsLength > 0 && successPluginsLength > 0 && errorPluginsLength === 0
|
|
const isInstallingWithError = runningPluginsLength > 0 && errorPluginsLength > 0
|
|
const isSuccess = successPluginsLength === totalPluginsLength && totalPluginsLength > 0
|
|
const isFailed = runningPluginsLength === 0 && (errorPluginsLength + successPluginsLength) === totalPluginsLength && totalPluginsLength > 0 && errorPluginsLength > 0
|
|
|
|
const [opacity, setOpacity] = useState(1)
|
|
const timerRef = useRef<NodeJS.Timeout | null>(null)
|
|
|
|
useEffect(() => {
|
|
if (isSuccess) {
|
|
if (timerRef.current) {
|
|
clearTimeout(timerRef.current)
|
|
timerRef.current = null
|
|
}
|
|
if (opacity > 0) {
|
|
timerRef.current = setTimeout(() => {
|
|
setOpacity(v => v - 0.1)
|
|
}, 200)
|
|
}
|
|
}
|
|
|
|
if (!isSuccess)
|
|
setOpacity(1)
|
|
}, [isSuccess, opacity])
|
|
|
|
return {
|
|
errorPlugins,
|
|
successPlugins,
|
|
runningPlugins,
|
|
runningPluginsLength,
|
|
errorPluginsLength,
|
|
successPluginsLength,
|
|
totalPluginsLength,
|
|
isInstalling,
|
|
isInstallingWithSuccess,
|
|
isInstallingWithError,
|
|
isSuccess,
|
|
isFailed,
|
|
handleClearErrorPlugin,
|
|
handleClearAllErrorPlugin,
|
|
opacity,
|
|
}
|
|
}
|