123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 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,
- }
- }
|