mirror of
https://github.com/langgenius/dify.git
synced 2026-04-25 13:16:16 +08:00
- Remove appDetail and setAppDetail from Zustand store - Use useAppDetail hook for server state management - Child components now call useAppDetail(appId) directly via useParams() - Replace setAppDetail calls with useInvalidateAppDetail for cache invalidation - Keep only client UI state in Zustand (sidebar, modals) - Split sidebar initialization useEffect for clearer separation of concerns - Update test mocks to use TanStack Query pattern - Fix missing dependencies in use-checklist.ts useMemo/useCallback hooks
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { produce } from 'immer'
|
|
import { useParams } from 'next/navigation'
|
|
import { useCallback } from 'react'
|
|
import { useStoreApi } from 'reactflow'
|
|
import { BlockEnum } from '@/app/components/workflow/types'
|
|
import { fetchWebhookUrl } from '@/service/apps'
|
|
|
|
export const useAutoGenerateWebhookUrl = () => {
|
|
const reactFlowStore = useStoreApi()
|
|
const { appId } = useParams()
|
|
|
|
return useCallback(async (nodeId: string) => {
|
|
if (!appId)
|
|
return
|
|
|
|
const { getNodes } = reactFlowStore.getState()
|
|
const node = getNodes().find(n => n.id === nodeId)
|
|
if (!node || node.data.type !== BlockEnum.TriggerWebhook)
|
|
return
|
|
|
|
if (node.data.webhook_url && node.data.webhook_url.length > 0)
|
|
return
|
|
|
|
try {
|
|
const response = await fetchWebhookUrl({ appId: appId as string, nodeId })
|
|
const { getNodes: getLatestNodes, setNodes } = reactFlowStore.getState()
|
|
let hasUpdated = false
|
|
const updatedNodes = produce(getLatestNodes(), (draft) => {
|
|
const targetNode = draft.find(n => n.id === nodeId)
|
|
if (!targetNode || targetNode.data.type !== BlockEnum.TriggerWebhook)
|
|
return
|
|
|
|
targetNode.data = {
|
|
...targetNode.data,
|
|
webhook_url: response.webhook_url,
|
|
webhook_debug_url: response.webhook_debug_url,
|
|
}
|
|
hasUpdated = true
|
|
})
|
|
|
|
if (hasUpdated)
|
|
setNodes(updatedNodes)
|
|
}
|
|
catch (error: unknown) {
|
|
console.error('Failed to auto-generate webhook URL:', error)
|
|
}
|
|
}, [reactFlowStore, appId])
|
|
}
|