@botonic/react
Version:
Build Chatbots using React
84 lines (83 loc) • 3.28 kB
TypeScript
/// <reference types="react" />
import { Input as CoreInput, Session as CoreSession } from '@botonic/core';
import { Reply, WebchatSettingsProps, Webview } from '../../components';
import { CloseWebviewOptions } from '../../contexts';
import { TrackEventFunction, WebchatMessage } from '../../index-types';
import { WebchatTheme } from '../theme/types';
export interface ErrorMessage {
message?: string;
}
export interface DevSettings {
keepSessionOnReload?: boolean;
showSessionView?: boolean;
}
export interface WebchatState {
messagesJSON: any[];
messagesComponents: any[];
replies?: (typeof Reply)[];
latestInput: Partial<CoreInput>;
typing: boolean;
webview: Webview | null;
webviewParams: null;
session: Partial<CoreSession>;
lastRoutePath?: string;
handoff: boolean;
theme: WebchatTheme;
themeUpdates: Partial<WebchatTheme>;
error: ErrorMessage;
online: boolean;
devSettings: DevSettings;
isWebchatOpen: boolean;
isEmojiPickerOpen: boolean;
isPersistentMenuOpen: boolean;
isCoverComponentOpen: boolean;
isCustomComponentRendered: boolean;
lastMessageUpdate?: string;
currentAttachment?: File;
numUnreadMessages: number;
isLastMessageVisible: boolean;
isInputFocused: boolean;
}
export type ClientInput = Omit<CoreInput, 'message_id' | 'bot_interaction_id'>;
export type ClientSession = {
user: ClientUser;
};
export type ClientUser = {
id: string;
name: string;
locale: string;
country: string;
system_locale?: string;
extra_data?: Record<string, any>;
};
export interface WebchatContextProps {
addMessage: (message: WebchatMessage) => void;
getThemeProperty: (property: string, defaultValue?: any) => any;
closeWebview: (options?: CloseWebviewOptions) => Promise<void>;
openWebview: (webviewComponent: Webview, params?: any) => void;
resetUnreadMessages: () => void;
resolveCase: () => void;
sendAttachment: (attachment: File) => Promise<void>;
sendInput: (input: ClientInput) => Promise<void>;
sendPayload: (payload: string) => Promise<void>;
sendText: (text: string, payload?: string) => Promise<void>;
setIsInputFocused: (isInputFocused: boolean) => void;
setLastMessageVisible: (isLastMessageVisible: boolean) => void;
toggleWebchat: (toggle: boolean) => void;
toggleEmojiPicker: (toggle: boolean) => void;
togglePersistentMenu: (toggle: boolean) => void;
toggleCoverComponent: (toggle: boolean) => void;
updateLatestInput: (input: ClientInput) => void;
updateMessage: (message: WebchatMessage) => void;
updateReplies: (replies: (typeof Reply)[]) => void;
updateUser: (user: ClientUser) => void;
updateWebchatDevSettings: (settings: WebchatSettingsProps) => void;
trackEvent?: TrackEventFunction;
webchatState: WebchatState;
webchatContainerRef: React.MutableRefObject<HTMLDivElement | null>;
chatAreaRef: React.MutableRefObject<HTMLDivElement | null>;
inputPanelRef: React.MutableRefObject<HTMLDivElement | null>;
headerRef: React.MutableRefObject<HTMLDivElement | null>;
scrollableMessagesListRef: React.MutableRefObject<HTMLDivElement | null>;
repliesRef: React.MutableRefObject<HTMLDivElement | null>;
}