UNPKG

@botonic/react

Version:

Build Chatbots using React

157 lines (156 loc) 5.21 kB
import { BotContext, BotRequest as CoreBotRequest, Input as CoreInput, InputType as CoreInputType, Route as CoreRoute, Routes as CoreRoutes, ServerConfig, Session as CoreSession, SessionUser as CoreSessionUser } from '@botonic/core'; import React from 'react'; import { BlockInputOption, ButtonProps, ReplyProps, WebchatSettingsProps } from './components'; import { CloseWebviewOptions } from './contexts'; import { UseWebchat } from './webchat/context/use-webchat'; import { CoverComponentOptions, PersistentMenuOptionsTheme, WebchatTheme } from './webchat/theme/types'; import { WebchatApp } from './webchat-app'; /** * See @botonic/core's Response for the description of the Response's semantics*/ export interface BotResponse extends CoreBotRequest { response: [React.ReactNode]; } export interface Route extends CoreRoute { action?: React.ComponentType<any>; retryAction?: React.ComponentType<any>; } export type Routes = CoreRoutes<Route>; export type ActionRequest = BotContext; export interface WebchatRef { addBotResponse: ({ response, session, lastRoutePath, }: AddBotResponseArgs) => void; setTyping: (typing: boolean) => void; addUserMessage: (message: any) => Promise<void>; updateUser: (userToUpdate: any) => void; openWebchat: () => void; closeWebchat: () => void; toggleWebchat: () => void; openCoverComponent: () => void; closeCoverComponent: () => void; toggleCoverComponent: () => void; renderCustomComponent: (customComponent: any) => void; unmountCustomComponent: () => void; isOnline: () => boolean; setOnline: (online: boolean) => void; getMessages: () => { id: string; ack: number; unsentInput: CoreInput; }[]; clearMessages: () => void; getLastMessageUpdate: () => string | undefined; updateMessageInfo: (msgId: string, messageInfo: any) => void; updateWebchatSettings: (settings: WebchatSettingsProps) => void; closeWebview: (options?: CloseWebviewOptions) => Promise<void>; } interface AddBotResponseArgs { response: any; session?: any; lastRoutePath?: any; } export interface WebchatArgs { theme?: Partial<WebchatTheme>; persistentMenu?: PersistentMenuOptionsTheme; coverComponent?: CoverComponentOptions; blockInputs?: BlockInputOption[]; enableEmojiPicker?: boolean; enableAttachments?: boolean; enableUserInput?: boolean; enableAnimations?: boolean; hostId?: string; shadowDOM?: boolean | (() => boolean); defaultDelay?: number; defaultTyping?: number; storage?: Storage | null; storageKey?: string; onInit?: (app: WebchatApp, args: any) => void; onOpen?: (app: WebchatApp, args: any) => void; onClose?: (app: WebchatApp, args: any) => void; onMessage?: (app: WebchatApp, message: WebchatMessage) => void; onTrackEvent?: TrackEventFunction; onConnectionChange?: (app: WebchatApp, isOnline: boolean) => void; appId?: string; visibility?: boolean | (() => boolean) | 'dynamic'; server?: ServerConfig; } export interface WebchatProps { webchatHooks?: UseWebchat; initialSession?: any; initialDevSettings?: any; onStateChange: (args: OnStateChangeArgs) => void; shadowDOM?: any; theme?: WebchatTheme; storage?: Storage | null; storageKey?: string | (() => string); defaultDelay?: number; defaultTyping?: number; onInit?: (args?: any) => void; onOpen?: (args?: any) => void; onClose?: (args?: any) => void; onUserInput(args: OnUserInputArgs): Promise<void>; onTrackEvent?: TrackEventFunction; host?: any; server?: ServerConfig; } export type EventArgs = { [key: string]: any; }; export type TrackEventFunction = (request: ActionRequest, eventName: string, args?: EventArgs) => Promise<void>; export declare enum SENDERS { bot = "bot", user = "user", agent = "agent" } export declare enum Typing { On = "typing_on", Off = "typing_off" } export interface WebchatMessage { ack: 0 | 1; blob: boolean; buttons: ButtonProps[]; children: any; data: any; delay: number; display: boolean; enabletimestamps?: boolean; id: string; imagestyle?: any; isUnread: boolean; json: any; markdown: boolean; replies: ReplyProps[]; sentBy: SENDERS; style?: any; timestamp: string; type: CoreInputType; typing: number; } export interface OnUserInputArgs { input: CoreInput; lastRoutePath?: string; session?: CoreSession; user?: CoreSessionUser; } export interface OnStateChangeArgs { messagesJSON: WebchatMessage[]; user: CoreSessionUser; } export interface MessageInfo { data: any | Typing.On; id: string; type: 'update_webchat_settings' | 'sender_action'; } export type Event = ConnectionChangeEvent | UpdateMessageInfoEvent; interface ConnectionChangeEvent { action: 'connectionChange'; online: boolean; isError?: boolean; message?: MessageInfo; } interface UpdateMessageInfoEvent { action: 'update_message_info'; message: MessageInfo; isError?: boolean; } export { CaseEventQueuePositionChangedInput } from '@botonic/core'; export { WebchatTheme };