React native UI SDK for softchatjs-core. Create a free account at: https://www.softchatjs.com
npm install softchatjs-core softchatjs-react-native
npm install expo-av expo-camera expo-file-system expo-image expo-image-picker @shopify/flash-list expo-video
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;
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 |
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 |
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 |
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>