import React from 'react'; import EventEmitter from 'eventemitter3'; import { EVENTS, ActionParamsMap, EventParamsMap, createMessageHelper } from 'griffith-message'; export interface Subscription { unsubscribe: () => void; } export interface MessageContextValue { subscribeEvent: (eventName: T, handler: EventParamsMap[T]) => Subscription; dispatchAction: (actionName: T, ...data: Parameters) => void; } export interface InternalMessageContextValue { emitEvent(this: void, eventName: T, ...data: Parameters): void; subscribeAction(this: void, actionName: T, listener: ActionParamsMap[T]): Subscription; } /** * 用于播放器内部,只能接收外界传入的 Action,向外界发出 Event */ export declare const InternalMessageContext: React.Context; /** * 用于播放器外部,只能接收播放器发出的 Event, 或者向播放器发送 Action */ export declare const MessageContext: React.Context; type MessageContextRef = React.MutableRefObject; type MessageProviderProps = { id: string; targetOrigin: string; enableCrossWindow?: boolean; onEvent?: (name: EVENTS, data?: unknown) => void; dispatchRef?: React.MutableRefObject; messageContextRef?: MessageContextRef; }; type MessageHelper = ReturnType; /** * * Retrieve `MessageContext` from outside of Player * * ```js * const messageContextRef = useMessageContextRef() * * messageContextRef.useEvent(EVENTS.PLAY, () => {}) * * render( * <> * * * * ) * ``` */ export declare const useMessageContextRef: () => MessageContextRef & MessageContextValue & { useEvent(name: T, listener: EventParamsMap[T]): void; }; export declare class MessageProvider extends React.PureComponent { static defaultProps: { targetOrigin: string; }; emitter: EventEmitter; crossWindowMessager: MessageHelper; constructor(props: MessageProviderProps); componentDidMount(): void; componentWillUnmount(): void; emitEvent: InternalMessageContextValue['emitEvent']; subscribeEvent: MessageContextValue['subscribeEvent']; dispatchAction: MessageContextValue['dispatchAction']; subscribeAction: InternalMessageContextValue['subscribeAction']; internalContextValue: { emitEvent: (this: void, eventName: T, ...data: Parameters) => void; subscribeAction: (this: void, actionName: T_1, listener: ActionParamsMap[T_1]) => Subscription; }; externalContextValue: { dispatchAction: (actionName: T, ...data: Parameters) => void; subscribeEvent: (eventName: T_1, handler: EventParamsMap[T_1]) => Subscription; }; render(): JSX.Element; } export {};