UNPKG

softchatjs-react-native

Version:

React native UI SDK for softchatjs-core. Create a free account at: https://www.softchatjs.com

155 lines (126 loc) 4.97 kB
# softchatjs-react-native React native UI SDK for softchatjs-core. Create a free account at: https://www.softchatjs.com ## Installation `npm install softchatjs-core softchatjs-react-native` ## Install the peer dependecies `npm install expo-av expo-camera expo-file-system expo-image expo-image-picker @shopify/flash-list expo-video` ## Usage ```javascript import React, { useEffect } from 'react'; import { ChatProvider, Conversations } from "softchatjs-react-native"; import ChatClient from "softchatjs-core" const client = ChatClient.getInstance({ subId: 'xxxx', projectId: 'xxxx' }); var chatUser = { uid: '1234', username: 'abc-123', firstname: "John", lastname: "Doe", profileUrl: "", custom: { "anything": "anything" }, } function App() { const [ currentConversation, setCurrentConversation ] = useState(null) useEffect(() => { if (client) { client.initializeUser(chatUser); } }, [client]); return ( <ChatProvider client={client} > {currentConversation? ( <Chat activeConversation={currentConversation} /> ):( <Conversations user={chatUser} onOpen={({ activeConversation }) => { setCurrentConversation(activeConversation) }} /> )} </ChatProvider> ); } export default App; ``` ### Guide ## `<Conversations />` Component API ### Props | Parameter | Type | Default | Description | | :-------- | :------- | :-------| :----------------| | `user` | `UserMeta` | | **Required**. chat user | | `onOpen` | `Function` | | **Required**. Function that returns the selected conversation | | `renderItem` | `Function` | |Render a custom conversation item | | `renderHeader` | `Function` | | Render a custom conversation header | | `renderPlaceHolder` | `Function` | | Render a custom placeholder | | `users` | `UserMeta[]` | | list of users a conversation can be initiated with | | `store` | `ConversationListMeta` | | Locally stored conversation map | ## `<Chat />` Component API ### Props | Parameter | Type | Default | Description | | :-------- | :------- | :-------| :----------------| | `activeConversation` | `ConversationListItem` | | **Required**. Selected conversation | | `renderChatBubble` | `Function` | | Render a custom chat item | | `renderHeader` | `Function` | | Render chat header | | `placeholder` | `JSX.Element` | | Render placeholder | | `renderHeader` | `Function` | | Render custom chat input | | `keyboardOffset` | `number` | | Value passed to adjust how the keyboard adjusts the input field when it's open | ## `<BroadcastLists />` Component API ### Props | Parameter | Type | Default | Description | | :-------- | :------- | :-------| :----------------| | `client` | `ChatClient` | | **Required**. Selected conversation | | `onOpen` | `Function` | | **Required** Function that returns the selected broadcast list | | `renderItem` | `Function` | | Render a custom broadacast list item | ## Customizing the UI ```javascript var fontFamily = "Giest" var darkModeTheme: ReactTheme = { background: { primary: "#1b1d21", // White for the primary background secondary: "#202326", // Light grey for secondary background disabled: "#E0E0E0", // Very light grey for disabled background }, text: { primary: "white", // Black text for high contrast secondary: "#4A4A4A", // Dark grey for secondary text disabled: "#9E9E9E", // Light grey for disabled text }, action: { primary: "#007AFF", // Bright blue for primary action buttons secondary: "#5AA3FF", // Light blue for secondary action buttons }, chatBubble: { left: { bgColor: "#343434", // Light grey for incoming message background messageColor: "white", // Dark grey for incoming message text messageTimeColor: "#6D6D6D", // Medium grey for message time replyBorderColor: "#D1D1D6", // Slightly darker grey for reply border }, right: { bgColor: "#343434", // Light blue for outgoing message background messageColor: "white", // Black for outgoing message text messageTimeColor: "#6D6D6D", // Medium grey for message time replyBorderColor: "#A3D1FF", // Medium blue for reply border }, }, icon: "white", // Dark grey for icons divider: "rgba(128, 128, 128, 0.136)", // Light grey for dividers hideDivider: false, input: { bgColor: "#1b1d21", // Light grey for input background textColor: "white", // Black for input text emojiPickerTheme: "dark", // Light theme for emoji picker }, }; <ChatProvider client={client} theme={darkModeTheme} fontFamily={fontFamily} > {children} </ChatProvider> ```