UNPKG

14.2 kBTypeScriptView Raw
1import PropTypes from 'prop-types';
2import React, { RefObject } from 'react';
3import { Animated, StyleProp, ViewStyle, FlatList, TextStyle } from 'react-native';
4import { ActionSheetOptions } from '@expo/react-native-action-sheet';
5import * as utils from './utils';
6import Actions from './Actions';
7import Avatar from './Avatar';
8import Bubble from './Bubble';
9import SystemMessage from './SystemMessage';
10import MessageImage from './MessageImage';
11import MessageText from './MessageText';
12import Composer from './Composer';
13import Day from './Day';
14import InputToolbar from './InputToolbar';
15import LoadEarlier from './LoadEarlier';
16import Message from './Message';
17import MessageContainer from './MessageContainer';
18import Send from './Send';
19import Time from './Time';
20import GiftedAvatar from './GiftedAvatar';
21import { IMessage, User, Reply, LeftRightStyle } from './Models';
22import QuickReplies from './QuickReplies';
23export interface GiftedChatProps<TMessage extends IMessage = IMessage> {
24 messages?: TMessage[];
25 isTyping?: boolean;
26 messagesContainerStyle?: StyleProp<ViewStyle>;
27 text?: string;
28 alignTop?: boolean;
29 wrapInSafeArea?: boolean;
30 scrollToBottom?: boolean;
31 scrollToBottomStyle?: StyleProp<ViewStyle>;
32 initialText?: string;
33 placeholder?: string;
34 disableComposer?: boolean;
35 user?: User;
36 locale?: string;
37 timeFormat?: string;
38 dateFormat?: string;
39 loadEarlier?: boolean;
40 isLoadingEarlier?: boolean;
41 showUserAvatar?: boolean;
42 showAvatarForEveryMessage?: boolean;
43 isKeyboardInternallyHandled?: boolean;
44 renderAvatarOnTop?: boolean;
45 inverted?: boolean;
46 imageProps?: Message<TMessage>['props'];
47 lightboxProps?: any;
48 bottomOffset?: number;
49 minInputToolbarHeight?: number;
50 listViewProps?: any;
51 textInputProps?: any;
52 keyboardShouldPersistTaps?: any;
53 maxInputLength?: number;
54 forceGetKeyboardHeight?: boolean;
55 alwaysShowSend?: boolean;
56 imageStyle?: StyleProp<ViewStyle>;
57 extraData?: any;
58 minComposerHeight?: number;
59 maxComposerHeight?: number;
60 options?: {
61 [key: string]: any;
62 };
63 optionTintColor?: string;
64 quickReplyStyle?: StyleProp<ViewStyle>;
65 isCustomViewBottom?: boolean;
66 infiniteScroll?: boolean;
67 timeTextStyle?: LeftRightStyle<TextStyle>;
68 actionSheet?(): {
69 showActionSheetWithOptions: (options: ActionSheetOptions, callback: (i: number) => void) => void;
70 };
71 onPressAvatar?(user: User): void;
72 onLongPressAvatar?(user: User): void;
73 messageIdGenerator?(message?: TMessage): string;
74 onSend?(messages: TMessage[]): void;
75 onLoadEarlier?(): void;
76 renderLoading?(): React.ReactNode;
77 renderLoadEarlier?(props: LoadEarlier['props']): React.ReactNode;
78 renderAvatar?(props: Avatar<TMessage>['props']): React.ReactNode;
79 renderBubble?(props: Bubble<TMessage>['props']): React.ReactNode;
80 renderSystemMessage?(props: SystemMessage<TMessage>['props']): React.ReactNode;
81 onLongPress?(context: any, message: any): void;
82 renderMessage?(message: Message<TMessage>['props']): React.ReactNode;
83 renderMessageText?(messageText: MessageText<TMessage>['props']): React.ReactNode;
84 renderMessageImage?(props: MessageImage<TMessage>['props']): React.ReactNode;
85 renderCustomView?(props: Bubble<TMessage>['props']): React.ReactNode;
86 renderDay?(props: Day<TMessage>['props']): React.ReactNode;
87 renderTime?(props: Time<TMessage>['props']): React.ReactNode;
88 renderFooter?(): React.ReactNode;
89 renderChatEmpty?(): React.ReactNode;
90 renderChatFooter?(): React.ReactNode;
91 renderInputToolbar?(props: InputToolbar['props']): React.ReactNode;
92 renderComposer?(props: Composer['props']): React.ReactNode;
93 renderActions?(props: Actions['props']): React.ReactNode;
94 renderSend?(props: Send['props']): React.ReactNode;
95 renderAccessory?(props: InputToolbar['props']): React.ReactNode;
96 onPressActionButton?(): void;
97 onInputTextChanged?(text: string): void;
98 parsePatterns?(linkStyle: TextStyle): any;
99 onQuickReply?(replies: Reply[]): void;
100 renderQuickReplies?(quickReplies: QuickReplies['props']): React.ReactNode;
101 renderQuickReplySend?(): React.ReactNode;
102 scrollToBottomComponent?(): React.ReactNode;
103 shouldUpdateMessage?(props: Message<TMessage>['props'], nextProps: Message<TMessage>['props']): boolean;
104}
105export interface GiftedChatState<TMessage extends IMessage = IMessage> {
106 isInitialized: boolean;
107 composerHeight?: number;
108 messagesContainerHeight?: number | Animated.Value;
109 typingDisabled: boolean;
110 text?: string;
111 messages?: TMessage[];
112}
113declare class GiftedChat<TMessage extends IMessage = IMessage> extends React.Component<GiftedChatProps<TMessage>, GiftedChatState> {
114 static childContextTypes: {
115 actionSheet: PropTypes.Requireable<(...args: any[]) => any>;
116 getLocale: PropTypes.Requireable<(...args: any[]) => any>;
117 };
118 static defaultProps: {
119 messages: never[];
120 messagesContainerStyle: undefined;
121 text: undefined;
122 placeholder: string;
123 disableComposer: boolean;
124 messageIdGenerator: () => string;
125 user: {};
126 onSend: () => void;
127 locale: null;
128 timeFormat: string;
129 dateFormat: string;
130 loadEarlier: boolean;
131 onLoadEarlier: () => void;
132 isLoadingEarlier: boolean;
133 renderLoading: null;
134 renderLoadEarlier: null;
135 renderAvatar: undefined;
136 showUserAvatar: boolean;
137 actionSheet: null;
138 onPressAvatar: null;
139 onLongPressAvatar: null;
140 renderUsernameOnMessage: boolean;
141 renderAvatarOnTop: boolean;
142 renderBubble: null;
143 renderSystemMessage: null;
144 onLongPress: null;
145 renderMessage: null;
146 renderMessageText: null;
147 renderMessageImage: null;
148 imageProps: {};
149 videoProps: {};
150 audioProps: {};
151 lightboxProps: {};
152 textInputProps: {};
153 listViewProps: {};
154 renderCustomView: null;
155 isCustomViewBottom: boolean;
156 renderDay: null;
157 renderTime: null;
158 renderFooter: null;
159 renderChatEmpty: null;
160 renderChatFooter: null;
161 renderInputToolbar: null;
162 renderComposer: null;
163 renderActions: null;
164 renderSend: null;
165 renderAccessory: null;
166 isKeyboardInternallyHandled: boolean;
167 onPressActionButton: null;
168 bottomOffset: number;
169 minInputToolbarHeight: number;
170 keyboardShouldPersistTaps: string;
171 onInputTextChanged: null;
172 maxInputLength: null;
173 forceGetKeyboardHeight: boolean;
174 inverted: boolean;
175 extraData: null;
176 minComposerHeight: number | undefined;
177 maxComposerHeight: number;
178 wrapInSafeArea: boolean;
179 };
180 static propTypes: {
181 messages: PropTypes.Requireable<(object | null | undefined)[]>;
182 messagesContainerStyle: PropTypes.Requireable<number | boolean | object>;
183 text: PropTypes.Requireable<string>;
184 initialText: PropTypes.Requireable<string>;
185 placeholder: PropTypes.Requireable<string>;
186 disableComposer: PropTypes.Requireable<boolean>;
187 messageIdGenerator: PropTypes.Requireable<(...args: any[]) => any>;
188 user: PropTypes.Requireable<object>;
189 onSend: PropTypes.Requireable<(...args: any[]) => any>;
190 locale: PropTypes.Requireable<string>;
191 timeFormat: PropTypes.Requireable<string>;
192 dateFormat: PropTypes.Requireable<string>;
193 isKeyboardInternallyHandled: PropTypes.Requireable<boolean>;
194 loadEarlier: PropTypes.Requireable<boolean>;
195 onLoadEarlier: PropTypes.Requireable<(...args: any[]) => any>;
196 isLoadingEarlier: PropTypes.Requireable<boolean>;
197 renderLoading: PropTypes.Requireable<(...args: any[]) => any>;
198 renderLoadEarlier: PropTypes.Requireable<(...args: any[]) => any>;
199 renderAvatar: PropTypes.Requireable<(...args: any[]) => any>;
200 showUserAvatar: PropTypes.Requireable<boolean>;
201 actionSheet: PropTypes.Requireable<(...args: any[]) => any>;
202 onPressAvatar: PropTypes.Requireable<(...args: any[]) => any>;
203 onLongPressAvatar: PropTypes.Requireable<(...args: any[]) => any>;
204 renderUsernameOnMessage: PropTypes.Requireable<boolean>;
205 renderAvatarOnTop: PropTypes.Requireable<boolean>;
206 isCustomViewBottom: PropTypes.Requireable<boolean>;
207 renderBubble: PropTypes.Requireable<(...args: any[]) => any>;
208 renderSystemMessage: PropTypes.Requireable<(...args: any[]) => any>;
209 onLongPress: PropTypes.Requireable<(...args: any[]) => any>;
210 renderMessage: PropTypes.Requireable<(...args: any[]) => any>;
211 renderMessageText: PropTypes.Requireable<(...args: any[]) => any>;
212 renderMessageImage: PropTypes.Requireable<(...args: any[]) => any>;
213 imageProps: PropTypes.Requireable<object>;
214 videoProps: PropTypes.Requireable<object>;
215 audioProps: PropTypes.Requireable<object>;
216 lightboxProps: PropTypes.Requireable<object>;
217 renderCustomView: PropTypes.Requireable<(...args: any[]) => any>;
218 renderDay: PropTypes.Requireable<(...args: any[]) => any>;
219 renderTime: PropTypes.Requireable<(...args: any[]) => any>;
220 renderFooter: PropTypes.Requireable<(...args: any[]) => any>;
221 renderChatEmpty: PropTypes.Requireable<(...args: any[]) => any>;
222 renderChatFooter: PropTypes.Requireable<(...args: any[]) => any>;
223 renderInputToolbar: PropTypes.Requireable<(...args: any[]) => any>;
224 renderComposer: PropTypes.Requireable<(...args: any[]) => any>;
225 renderActions: PropTypes.Requireable<(...args: any[]) => any>;
226 renderSend: PropTypes.Requireable<(...args: any[]) => any>;
227 renderAccessory: PropTypes.Requireable<(...args: any[]) => any>;
228 onPressActionButton: PropTypes.Requireable<(...args: any[]) => any>;
229 bottomOffset: PropTypes.Requireable<number>;
230 minInputToolbarHeight: PropTypes.Requireable<number>;
231 listViewProps: PropTypes.Requireable<object>;
232 keyboardShouldPersistTaps: PropTypes.Requireable<string>;
233 onInputTextChanged: PropTypes.Requireable<(...args: any[]) => any>;
234 maxInputLength: PropTypes.Requireable<number>;
235 forceGetKeyboardHeight: PropTypes.Requireable<boolean>;
236 inverted: PropTypes.Requireable<boolean>;
237 textInputProps: PropTypes.Requireable<object>;
238 extraData: PropTypes.Requireable<object>;
239 minComposerHeight: PropTypes.Requireable<number>;
240 maxComposerHeight: PropTypes.Requireable<number>;
241 alignTop: PropTypes.Requireable<boolean>;
242 wrapInSafeArea: PropTypes.Requireable<boolean>;
243 };
244 static append<TMessage extends IMessage>(currentMessages: TMessage[] | undefined, messages: TMessage[], inverted?: boolean): TMessage[];
245 static prepend<TMessage extends IMessage>(currentMessages: TMessage[] | undefined, messages: TMessage[], inverted?: boolean): TMessage[];
246 _isMounted: boolean;
247 _keyboardHeight: number;
248 _bottomOffset: number;
249 _maxHeight?: number;
250 _isFirstLayout: boolean;
251 _locale: string;
252 invertibleScrollViewProps: any;
253 _actionSheetRef: any;
254 _messageContainerRef?: RefObject<FlatList<IMessage>>;
255 textInput?: any;
256 state: {
257 isInitialized: boolean;
258 composerHeight: number | undefined;
259 messagesContainerHeight: undefined;
260 typingDisabled: boolean;
261 text: undefined;
262 messages: undefined;
263 };
264 constructor(props: GiftedChatProps<TMessage>);
265 getChildContext(): {
266 actionSheet: () => any;
267 getLocale: () => string;
268 };
269 componentDidMount(): void;
270 componentWillUnmount(): void;
271 componentDidUpdate(prevProps?: GiftedChatProps<TMessage>): void;
272 initLocale(): void;
273 setLocale(locale: string): void;
274 getLocale: () => string;
275 setTextFromProp(textProp?: string): void;
276 getTextFromProp(fallback: string): string;
277 setMessages(messages: TMessage[]): void;
278 getMessages(): undefined;
279 setMaxHeight(height: number): void;
280 getMaxHeight(): number | undefined;
281 setKeyboardHeight(height: number): void;
282 getKeyboardHeight(): number;
283 setBottomOffset(value: number): void;
284 getBottomOffset(): number;
285 setIsFirstLayout(value: boolean): void;
286 getIsFirstLayout(): boolean;
287 setIsTypingDisabled(value: boolean): void;
288 getIsTypingDisabled(): boolean;
289 setIsMounted(value: boolean): void;
290 getIsMounted(): boolean;
291 getMinInputToolbarHeight(): number | undefined;
292 calculateInputToolbarHeight(composerHeight: number): number;
293 /**
294 * Returns the height, based on current window size, without taking the keyboard into account.
295 */
296 getBasicMessagesContainerHeight(composerHeight?: number | undefined): number;
297 /**
298 * Returns the height, based on current window size, taking the keyboard into account.
299 */
300 getMessagesContainerHeightWithKeyboard(composerHeight?: number | undefined): number;
301 safeAreaSupport: (bottomOffset: number) => number;
302 onKeyboardWillShow: (e: any) => void;
303 onKeyboardWillHide: (_e: any) => void;
304 onKeyboardDidShow: (e: any) => void;
305 onKeyboardDidHide: (e: any) => void;
306 scrollToBottom(animated?: boolean): void;
307 renderMessages(): JSX.Element;
308 onSend: (messages?: TMessage[], shouldResetInputToolbar?: boolean) => void;
309 resetInputToolbar(): void;
310 focusTextInput(): void;
311 onInputSizeChanged: (size: {
312 height: number;
313 }) => void;
314 onInputTextChanged: (text: string) => void;
315 notifyInputTextReset(): void;
316 onInitialLayoutViewLayout: (e: any) => void;
317 onMainViewLayout: (e: any) => void;
318 renderInputToolbar(): {} | null | undefined;
319 renderChatFooter(): {} | null | undefined;
320 renderLoading(): {} | null | undefined;
321 render(): JSX.Element;
322}
323export * from './Models';
324export { GiftedChat, Actions, Avatar, Bubble, SystemMessage, MessageImage, MessageText, Composer, Day, InputToolbar, LoadEarlier, Message, MessageContainer, Send, Time, GiftedAvatar, utils, };