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
Markdown
# 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 /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>
```