rn-webim-chat
Version:
Webim chat wrapper for React-Native. Supports Android and iOS. Fixed issues for native platforms build that are present in the official package.
153 lines • 5.98 kB
JavaScript
import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
import { WebimEvents } from './types';
import { webimErrorHandler, WebimSubscription } from './utils';
const LINKING_ERROR = `The package 'rn-webim-chat' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
ios: "- You have run 'pod install'\n",
default: ''
}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
const RnWebimChat = NativeModules.RnWebimChat ? NativeModules.RnWebimChat : new Proxy({}, {
get() {
throw new Error(LINKING_ERROR);
}
});
const emitter = new NativeEventEmitter(RnWebimChat);
const DEFAULT_MESSAGES_LIMIT = 100;
export class RNWebim {
static initSession(params) {
return RnWebimChat.initSession(params).catch(webimErrorHandler).then(() => {
return;
});
}
static resumeSession() {
return RnWebimChat.resumeSession().catch(webimErrorHandler).then(() => {
return;
});
}
static pauseSession() {
return RnWebimChat.pauseSession();
}
static destroySession() {
let clearData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
return RnWebimChat.destroySession(clearData).catch(webimErrorHandler).then(() => {
return;
});
}
static getLastMessages() {
let limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_MESSAGES_LIMIT;
return RnWebimChat.getLastMessages(limit).catch(webimErrorHandler).then(messages => {
return messages || [];
});
}
static getNextMessages() {
let limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_MESSAGES_LIMIT;
return RnWebimChat.getNextMessages(limit).catch(webimErrorHandler).then(messages => {
return messages || [];
});
}
static getAllMessages() {
return RnWebimChat.getAllMessages().catch(webimErrorHandler).then(messages => {
return messages || [];
});
}
static send(message) {
return RnWebimChat.send(message).catch(webimErrorHandler).then(id => {
return id;
});
}
static readMessages() {
return RnWebimChat.readMessages().catch(webimErrorHandler).then(() => {
return;
});
}
static rateOperator(rate) {
return RnWebimChat.rateOperator(rate).catch(webimErrorHandler).then(() => {
return;
});
}
static getCurrentOperator() {
return RnWebimChat.getCurrentOperator().catch(webimErrorHandler).then(result => {
return result;
});
}
static tryAttachFile() {
return new Promise((resolve, reject) => {
RnWebimChat.tryAttachFile(error => reject(webimErrorHandler(error, false)), result => resolve(result));
});
}
static sendFile(uri, name, mime, extension) {
return new Promise((resolve, reject) => RnWebimChat.sendFile(uri, name, mime, extension, error => reject(webimErrorHandler(error, false)), result => resolve(result)));
}
static tryAttachAndSendFile() {
return new Promise((resolve, reject) => {
RnWebimChat.tryAttachFile(error => reject(webimErrorHandler(error, false)), async file => {
const {
uri,
name,
mime,
extension
} = file;
try {
const result = await RNWebim.sendFile(uri, name, mime, extension);
resolve(result);
} catch (e) {
reject(webimErrorHandler(e, false));
}
});
});
}
static addTypingListener(listener) {
const subscription = emitter.addListener(WebimEvents.TYPING, listener);
return new WebimSubscription(() => RNWebim.removeListener(subscription));
}
static addFileUploadingListener(listener) {
const subscription = emitter.addListener(WebimEvents.FILE_UPLOADING_PROGRESS, listener);
return new WebimSubscription(() => RNWebim.removeListener(subscription));
}
static addUnreadCountListener(listener) {
const subscription = emitter.addListener(WebimEvents.UNREAD_COUNTER, listener);
return new WebimSubscription(() => RNWebim.removeListener(subscription));
}
static addNewMessageListener(listener) {
const subscription = emitter.addListener(WebimEvents.NEW_MESSAGE, listener);
return new WebimSubscription(() => RNWebim.removeListener(subscription));
}
static addRemoveMessageListener(listener) {
const subscription = emitter.addListener(WebimEvents.REMOVE_MESSAGE, listener);
return new WebimSubscription(() => RNWebim.removeListener(subscription));
}
static addEditMessageListener(listener) {
const subscription = emitter.addListener(WebimEvents.EDIT_MESSAGE, listener);
return new WebimSubscription(() => RNWebim.removeListener(subscription));
}
static addDialogClearedListener(listener) {
const subscription = emitter.addListener(WebimEvents.CLEAR_DIALOG, listener);
return new WebimSubscription(() => RNWebim.removeListener(subscription));
}
static addTokenUpdatedListener(listener) {
const subscription = emitter.addListener(WebimEvents.TOKEN_UPDATED, listener);
return new WebimSubscription(() => RNWebim.removeListener(subscription));
}
static addErrorListener(listener) {
const subscription = emitter.addListener(WebimEvents.ERROR, listener);
return new WebimSubscription(() => RNWebim.removeListener(subscription));
}
static addSateListener(listener) {
const subscription = emitter.addListener(WebimEvents.STATE, listener);
return new WebimSubscription(() => RNWebim.removeListener(subscription));
}
static addListener(event, listener) {
const subscription = emitter.addListener(event, listener);
return new WebimSubscription(() => RNWebim.removeListener(subscription));
}
static removeListener(listener) {
emitter.removeSubscription(listener);
}
static removeAllListeners(event) {
emitter.removeAllListeners(event);
}
}
export * from './types';
export * from './utils';
export * from './webimNativeError';
export default RNWebim;
//# sourceMappingURL=index.js.map