Files
dify/web/app/components/apps/hooks/use-workflow-online-users.ts
Stephen Zhou 23ffbd2532 tweaks
2026-05-07 18:09:52 +08:00

53 lines
1.3 KiB
TypeScript

import type { WorkflowOnlineUser, WorkflowOnlineUsersResponse } from '@/models/app'
import { useQuery } from '@tanstack/react-query'
import { consoleQuery } from '@/service/client'
type WorkflowOnlineUsersMap = Record<string, WorkflowOnlineUser[]>
type UseWorkflowOnlineUsersParams = {
appIds: string[]
enabled: boolean
}
function normalizeWorkflowOnlineUsers(response?: WorkflowOnlineUsersResponse): WorkflowOnlineUsersMap {
const data = response?.data
if (!data)
return {}
if (Array.isArray(data)) {
return data.reduce<WorkflowOnlineUsersMap>((acc, item) => {
if (item?.app_id)
acc[item.app_id] = item.users || []
return acc
}, {})
}
return Object.entries(data).reduce<WorkflowOnlineUsersMap>((acc, [appId, users]) => {
if (appId)
acc[appId] = users || []
return acc
}, {})
}
export function useWorkflowOnlineUsers({
appIds,
enabled,
}: UseWorkflowOnlineUsersParams) {
const shouldFetch = enabled && appIds.length > 0
const { data: onlineUsersMap = {} } = useQuery(consoleQuery.apps.workflowOnlineUsers.queryOptions({
input: {
body: {
app_ids: appIds,
},
},
enabled: shouldFetch,
select: normalizeWorkflowOnlineUsers,
refetchInterval: shouldFetch ? 10000 : false,
}))
return {
onlineUsersMap,
}
}