Files
2018-05-27 22:46:18 +02:00

76 lines
1.9 KiB
JavaScript

import React from "react";
import { GiftedChat } from "react-native-gifted-chat";
import Chatkit from "@pusher/chatkit";
const CHATKIT_TOKEN_PROVIDER_ENDPOINT =
"<url from TEST TOKEN PROVIDER section>";
const CHATKIT_INSTANCE_LOCATOR = "<id from CREDENTIALS section>";
const CHATKIT_ROOM_ID = "<room identifier from INSTANCE INSPECTOR section>";
const CHATKIT_USER_NAME = "<user name>";
export default class MyChat extends React.Component {
state = {
messages: []
};
componentDidMount() {
const tokenProvider = new Chatkit.TokenProvider({
url: CHATKIT_TOKEN_PROVIDER_ENDPOINT
});
const chatManager = new Chatkit.ChatManager({
instanceLocator: CHATKIT_INSTANCE_LOCATOR,
userId: CHATKIT_USER_NAME,
tokenProvider: tokenProvider
});
chatManager.connect().then(currentUser => {
this.currentUser = currentUser;
this.currentUser.subscribeToRoom({
roomId: CHATKIT_ROOM_ID,
hooks: {
onNewMessage: this.onReceive.bind(this)
}
});
});
}
onReceive(data) {
const { id, senderId, text, createdAt } = data;
const incomingMessage = {
_id: id,
text: text,
createdAt: new Date(createdAt),
user: {
_id: senderId,
name: senderId,
avatar:
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQmXGGuS_PrRhQt73sGzdZvnkQrPXvtA-9cjcPxJLhLo8rW-sVA"
}
};
this.setState(previousState => ({
messages: GiftedChat.append(previousState.messages, incomingMessage)
}));
}
onSend([message]) {
this.currentUser.sendMessage({
text: message.text,
roomId: CHATKIT_ROOM_ID
});
}
render() {
return (
<GiftedChat
messages={this.state.messages}
onSend={messages => this.onSend(messages)}
user={{
_id: CHATKIT_USER_NAME
}}
/>
);
}
}