dify/web/app/components/apps/hooks/use-workflow-online-users.ts
Stephen Zhou a84c2d36a3
style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

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