dify/web/app/components/apps/hooks/use-workflow-online-users.ts
Stephen Zhou 3ad06bebd9
refactor(web): migrate console contracts to generated types (#38231)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-01 01:40:12 +00:00

49 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
}
const 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 const useWorkflowOnlineUsers = ({
appIds,
enabled,
}: UseWorkflowOnlineUsersParams) => {
const shouldFetch = enabled && appIds.length > 0
const { data: onlineUsersMap = {} } = useQuery(consoleQuery.apps.workflows.onlineUsers.post.queryOptions({
input: { body: { app_ids: appIds } },
enabled: shouldFetch,
select: normalizeWorkflowOnlineUsers,
refetchInterval: shouldFetch ? 10000 : false,
}))
return {
onlineUsersMap,
}
}