@vokhuyet/react-native-messy
TypeScript icon, indicating that this package has built-in type declarations

0.1.9 • Public • Published

react-native-messy

Chat ui for React Native

Dependency

Installation

npm install @vokhuyet/react-native-messy

or

yarn add @vokhuyet/react-native-messy

Usage

import { Messy } from '@vokhuyet/react-native-messy';

// ...
    const [list, setList] = useState([]);

    <Messy
       messages={list}
        loading={isLoading}
        BaseModule={{
          Cache: CacheDimension,
          Image: ChatListImage,
          Text: AppText,
        }}
        renderLoading={renderLoading}
        renderMessageSystem={ChatListMessageSystem}
        listProps={{
          onEndReached,
          ListHeaderComponent: ChatListHeader,
        }}
        messageProps={{
          hideOwnerAvatar: true,
          hidePartnerAvatar: false,
          onPress: onPressMessage,
          onLongPress: onLongPressMessage,
        }}
        user={{id: account?.user?.id}}
        footerProps={{
          onSend,
          ExtraLeft: <ChatListExtraLeft />,
          ExtraActionLeft: <ChatListExtraActionLeft />,
        }}
    />

Object Type

TMessyMessageLocation

  name: string;
  image: ImageProps['source'];
  latitude: string;
  longitude: string;

TMessyMessage

  id?: string | number | null;
  text?: string;
  image?: ImageSourcePropType;
  video?: { uri: string };
  audio?: {uri: string}; // not implemented, you can implement by yourself
  location?: TMessyMessageLocation;
  user?: TUser;
  type?: 'system' | 'message';
  createdTime?: Date | number | string;
  status?: 'sending' | 'sent' | 'seen';
  seenBy?: TUser[];
  local?: Asset;
  clientId?: string; // used for display message in List before receiving response from Server
  category?: string; // used for display multiple type of system message

TColor

  background: string;
  primary: string;
  accent: string;
  placeholder: string;
  shadow: string;
  success: string;
  message_left: {
    background: string;
    text: string;
    link: string;
    email: string;
    phone: string;
    audio: string;
  };
  message_right: {
    background: string;
    text: string;
    link: string;
    email: string;
    phone: string;
    audio: string;
  };
  input: {
    text: string; //text color in TextInput
  };

TUser

  id: string | number | null | undefined;
  userName?: string | null;
  avatar?: ImageSource;

TMessyFooterProps

  onSend?: (message?: TMessyMessage) => Promise<void> | void;
  inputProps?: TextInputProps;
  ExtraLeft?: React.ReactNode;
  ExtraActionLeft?: React.ReactNode;
  renderFooter?: FC<TMessyFooterProps>;

TMessageProps

  hideOwnerAvatar: boolean;
  hidePartnerAvatar: boolean;
  onPress?: (message: TMessyMessageProps) => Promise<void> | void;
  onLongPress?: (message: TMessyMessageProps) => Promise<void> | void;

TBaseModule

  Image?: FC<ImageProps>;
  Text?: FC<TextProps>;
  Video?: FC;
  Cache: {
    get: (key: string) => any;
    set: (key: string, value: any) => void;
  };

Props

  • loading(boolean): loading status
  • messages(TMessyMessage[]): list of messages
  • user(TUser): sender information;
  • theme: (TColor): custom theme for message;
  • footerProps(TMessyFooterProps): Custom props for Element below list messages;
  • listProps(TListProps): custom flatlist props;
  • messageProps(TMessageProps): ;
  • parsedShape(ParseShape[]): Custom parse patterns for react-native-parsed-text ;
  • showDateTime(boolean): show created time of message;
  • renderLoading(FC<{}>): component when loading list message;
  • renderMessageSystem(FC<{ data?: TMessyMessage }>): custom system message;
  • renderMessage((data: TMessyMessageProps) => JSX.Element): custom whole message item view;
  • renderAvatarFC<{ user?: TUser }>: custom ;
  • renderMessageText((data: TMessyMessageProps) => JSX.Element): custom text message;
  • renderMessageAudio(data: TMessyMessageProps) => JSX.Element;
  • renderMessageImage(data: TMessyMessageProps) => JSX.Element;
  • renderMessageVideo(data: TMessyMessageProps) => JSX.Element;
  • renderMessageDateTime((data: TMessyMessage) => JSX.Element): custom datetime value in message item
  • renderMessageLocation: (data: TMessyMessageProps) => JSX.Element;
  • BaseModule(TBaseModule);

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT


Made with create-react-native-library

Package Sidebar

Install

npm i @vokhuyet/react-native-messy

Weekly Downloads

295

Version

0.1.9

License

MIT

Unpacked Size

643 kB

Total Files

247

Last publish

Collaborators

  • vokhuyetoz