Files
dify/web/context/event-emitter.tsx
yyh 2ab0b334a8 Merge remote-tracking branch 'origin/main' into feat/support-agent-sandbox
# Conflicts:
#	web/app/components/rag-pipeline/components/update-dsl-modal.tsx
#	web/app/components/workflow-app/hooks/use-nodes-sync-draft.ts
#	web/app/components/workflow/variable-inspect/utils.tsx
#	web/app/layout.tsx
#	web/context/event-emitter.tsx
#	web/eslint-suppressions.json
#	web/next.config.ts
#	web/package.json
#	web/pnpm-lock.yaml
#	web/types/feature.ts
2026-02-10 18:12:41 +08:00

42 lines
1.1 KiB
TypeScript

'use client'
import type { EventEmitter } from 'ahooks/lib/useEventEmitter'
import { useEventEmitter } from 'ahooks'
import { createContext, useContext } from 'use-context-selector'
/**
* Typed event object emitted via the shared EventEmitter.
* Covers workflow updates, prompt-editor commands, DSL export checks, etc.
*/
export type EventEmitterMessage = {
type: string
payload?: unknown
instanceId?: string
}
export type EventEmitterValue = string | EventEmitterMessage
export type EventPayload = EventEmitterValue
const EventEmitterContext = createContext<{ eventEmitter: EventEmitter<EventEmitterValue> | null }>({
eventEmitter: null,
})
export const useEventEmitterContextContext = () => useContext(EventEmitterContext)
type EventEmitterContextProviderProps = {
children: React.ReactNode
}
export const EventEmitterContextProvider = ({
children,
}: EventEmitterContextProviderProps) => {
const eventEmitter = useEventEmitter<EventEmitterValue>()
return (
<EventEmitterContext.Provider value={{ eventEmitter }}>
{children}
</EventEmitterContext.Provider>
)
}
export default EventEmitterContext