react-native-gifted-chat-flashlist
Version:
React Native Gifted Chat with FlashList optimization for better performance
149 lines (148 loc) • 8.28 kB
TypeScript
import PropTypes from 'prop-types';
import React from 'react';
import { StyleProp, ViewStyle, TextStyle } from 'react-native';
import { QuickRepliesProps } from './QuickReplies';
import { MessageTextProps } from './MessageText';
import { MessageImageProps } from './MessageImage';
import { TimeProps } from './Time';
import { User, IMessage, LeftRightStyle, Reply, Omit, MessageVideoProps, MessageAudioProps } from './Models';
export type RenderMessageImageProps<TMessage extends IMessage> = Omit<BubbleProps<TMessage>, 'containerStyle' | 'wrapperStyle'> & MessageImageProps<TMessage>;
export type RenderMessageVideoProps<TMessage extends IMessage> = Omit<BubbleProps<TMessage>, 'containerStyle' | 'wrapperStyle'> & MessageVideoProps<TMessage>;
export type RenderMessageAudioProps<TMessage extends IMessage> = Omit<BubbleProps<TMessage>, 'containerStyle' | 'wrapperStyle'> & MessageAudioProps<TMessage>;
export type RenderMessageTextProps<TMessage extends IMessage> = Omit<BubbleProps<TMessage>, 'containerStyle' | 'wrapperStyle'> & MessageTextProps<TMessage>;
export interface BubbleProps<TMessage extends IMessage> {
user?: User;
touchableProps?: object;
renderUsernameOnMessage?: boolean;
isCustomViewBottom?: boolean;
inverted?: boolean;
position: 'left' | 'right';
currentMessage: TMessage;
nextMessage?: TMessage;
previousMessage?: TMessage;
optionTitles?: string[];
containerStyle?: LeftRightStyle<ViewStyle>;
wrapperStyle?: LeftRightStyle<ViewStyle>;
textStyle?: LeftRightStyle<TextStyle>;
bottomContainerStyle?: LeftRightStyle<ViewStyle>;
tickStyle?: StyleProp<TextStyle>;
containerToNextStyle?: LeftRightStyle<ViewStyle>;
containerToPreviousStyle?: LeftRightStyle<ViewStyle>;
usernameStyle?: TextStyle;
quickReplyStyle?: StyleProp<ViewStyle>;
quickReplyTextStyle?: StyleProp<TextStyle>;
quickReplyContainerStyle?: StyleProp<ViewStyle>;
onPress?(context?: unknown, message?: unknown): void;
onLongPress?(context?: unknown, message?: unknown): void;
onQuickReply?(replies: Reply[]): void;
renderMessageImage?(props: RenderMessageImageProps<TMessage>): React.ReactNode;
renderMessageVideo?(props: RenderMessageVideoProps<TMessage>): React.ReactNode;
renderMessageAudio?(props: RenderMessageAudioProps<TMessage>): React.ReactNode;
renderMessageText?(props: RenderMessageTextProps<TMessage>): React.ReactNode;
renderCustomView?(bubbleProps: BubbleProps<TMessage>): React.ReactNode;
renderTime?(timeProps: TimeProps<TMessage>): React.ReactNode;
renderTicks?(currentMessage: TMessage): React.ReactNode;
renderUsername?(user?: TMessage['user']): React.ReactNode;
renderQuickReplySend?(): React.ReactNode;
renderQuickReplies?(quickReplies: QuickRepliesProps<TMessage>): React.ReactNode;
}
export default class Bubble<TMessage extends IMessage = IMessage> extends React.Component<BubbleProps<TMessage>> {
static contextType: React.Context<import("./GiftedChatContext").IGiftedChatContext>;
static defaultProps: {
touchableProps: {};
onPress: null;
onLongPress: null;
renderMessageImage: null;
renderMessageVideo: null;
renderMessageAudio: null;
renderMessageText: null;
renderCustomView: null;
renderUsername: null;
renderTicks: null;
renderTime: null;
renderQuickReplies: null;
onQuickReply: null;
position: string;
currentMessage: {
text: null;
createdAt: null;
image: null;
};
nextMessage: {};
previousMessage: {};
containerStyle: {};
wrapperStyle: {};
bottomContainerStyle: {};
tickStyle: {};
usernameStyle: {};
containerToNextStyle: {};
containerToPreviousStyle: {};
};
static propTypes: {
user: PropTypes.Validator<object>;
touchableProps: PropTypes.Requireable<object>;
onLongPress: PropTypes.Requireable<(...args: any[]) => any>;
renderMessageImage: PropTypes.Requireable<(...args: any[]) => any>;
renderMessageVideo: PropTypes.Requireable<(...args: any[]) => any>;
renderMessageAudio: PropTypes.Requireable<(...args: any[]) => any>;
renderMessageText: PropTypes.Requireable<(...args: any[]) => any>;
renderCustomView: PropTypes.Requireable<(...args: any[]) => any>;
isCustomViewBottom: PropTypes.Requireable<boolean>;
renderUsernameOnMessage: PropTypes.Requireable<boolean>;
renderUsername: PropTypes.Requireable<(...args: any[]) => any>;
renderTime: PropTypes.Requireable<(...args: any[]) => any>;
renderTicks: PropTypes.Requireable<(...args: any[]) => any>;
renderQuickReplies: PropTypes.Requireable<(...args: any[]) => any>;
onQuickReply: PropTypes.Requireable<(...args: any[]) => any>;
position: PropTypes.Requireable<string>;
optionTitles: PropTypes.Requireable<(string | null | undefined)[]>;
currentMessage: PropTypes.Requireable<object>;
nextMessage: PropTypes.Requireable<object>;
previousMessage: PropTypes.Requireable<object>;
containerStyle: PropTypes.Requireable<PropTypes.InferProps<{
left: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
right: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
}>>;
wrapperStyle: PropTypes.Requireable<PropTypes.InferProps<{
left: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
right: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
}>>;
bottomContainerStyle: PropTypes.Requireable<PropTypes.InferProps<{
left: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
right: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
}>>;
tickStyle: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
usernameStyle: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
containerToNextStyle: PropTypes.Requireable<PropTypes.InferProps<{
left: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
right: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
}>>;
containerToPreviousStyle: PropTypes.Requireable<PropTypes.InferProps<{
left: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
right: PropTypes.Requireable<NonNullable<number | boolean | object | null | undefined>>;
}>>;
};
onPress: () => void;
onLongPress: () => void;
styledBubbleToNext(): (StyleProp<ViewStyle> | {
borderBottomLeftRadius: number;
} | {
borderBottomRightRadius: number;
})[] | null;
styledBubbleToPrevious(): (StyleProp<ViewStyle> | {
borderTopLeftRadius: number;
} | {
borderTopRightRadius: number;
})[] | null;
renderQuickReplies(): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
renderMessageText(): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
renderMessageImage(): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
renderMessageVideo(): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
renderMessageAudio(): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
renderTicks(): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
renderTime(): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
renderUsername(): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
renderCustomView(): React.ReactNode;
renderBubbleContent(): React.JSX.Element;
render(): React.JSX.Element;
}