import { PureComponent } from 'react'; import type { ReactNode, RefObject } from 'react'; import PropTypes from 'prop-types'; import { FlatList, ListViewProps, ListRenderItemInfo, NativeSyntheticEvent, NativeScrollEvent, StyleProp, ViewStyle } from 'react-native'; import type { LoadEarlierProps } from './LoadEarlier'; import Message from './Message'; import { User, IMessage, Reply } from './Models'; export interface MessageContainerProps { messages?: TMessage[]; isTyping?: boolean; user?: User; listViewProps: Partial; inverted?: boolean; loadEarlier?: boolean; alignTop?: boolean; scrollToBottom?: boolean; scrollToBottomStyle?: StyleProp; invertibleScrollViewProps?: any; extraData?: any; scrollToBottomOffset?: number; forwardRef?: RefObject>; renderChatEmpty?(): ReactNode; renderFooter?(props: MessageContainerProps): ReactNode; renderMessage?(props: Message['props']): ReactNode; renderLoadEarlier?(props: LoadEarlierProps): ReactNode; scrollToBottomComponent?(): ReactNode; onLoadEarlier?(): void; onQuickReply?(replies: Reply[]): void; infiniteScroll?: boolean; isLoadingEarlier?: boolean; } interface State { showScrollBottom: boolean; hasScrolled: boolean; } declare class MessageContainer extends PureComponent, State> { static defaultProps: { messages: never[]; user: {}; isTyping: boolean; renderChatEmpty: null; renderFooter: null; renderMessage: null; renderLoadEarlier: undefined; onLoadEarlier: () => null; onQuickReply: () => null; inverted: boolean; loadEarlier: boolean; listViewProps: {}; invertibleScrollViewProps: {}; extraData: null; scrollToBottom: boolean; scrollToBottomOffset: number; scrollToBottomComponent: undefined; forwardRef: undefined; alignTop: boolean; scrollToBottomStyle: {}; infiniteScroll: boolean; isLoadingEarlier: boolean; }; static propTypes: { messages: PropTypes.Requireable<(object | null | undefined)[]>; isTyping: PropTypes.Requireable; user: PropTypes.Requireable; renderChatEmpty: PropTypes.Requireable<(...args: any[]) => any>; renderFooter: PropTypes.Requireable<(...args: any[]) => any>; renderMessage: PropTypes.Requireable<(...args: any[]) => any>; renderLoadEarlier: PropTypes.Requireable<(...args: any[]) => any>; onLoadEarlier: PropTypes.Requireable<(...args: any[]) => any>; listViewProps: PropTypes.Requireable; inverted: PropTypes.Requireable; loadEarlier: PropTypes.Requireable; invertibleScrollViewProps: PropTypes.Requireable; extraData: PropTypes.Requireable; scrollToBottom: PropTypes.Requireable; scrollToBottomOffset: PropTypes.Requireable; scrollToBottomComponent: PropTypes.Requireable<(...args: any[]) => any>; alignTop: PropTypes.Requireable; scrollToBottomStyle: PropTypes.Requireable; infiniteScroll: PropTypes.Requireable; }; constructor(props: MessageContainerProps); renderTypingIndicator: () => JSX.Element | null; renderFooter: () => ReactNode; renderLoadEarlier: () => ReactNode; scrollToBottom: (animated?: boolean) => void; handleOnScroll: (event: NativeSyntheticEvent) => void; onLayoutList: () => void; onEndReached: ({ distanceFromEnd }: { distanceFromEnd: number; }) => void; scrollTo(options: { animated?: boolean; offset: number; }): void; renderRow: ({ item: _item, index }: ListRenderItemInfo) => ReactNode; renderChatEmpty: () => ReactNode; renderHeaderWrapper: () => JSX.Element; renderScrollBottomComponent(): ReactNode; renderScrollToBottomWrapper(): JSX.Element; render(): JSX.Element; } export default MessageContainer;