podchat-browser
Version:
Javascript SDK to use POD's Chat Service - Browser Only
155 lines (130 loc) • 5.34 kB
JavaScript
import {chatMessageVOTypes} from "../constants";
import Utility from "../../utility/utility";
import {
formatDataToMakeContact
} from "../helpers/dataFormatters"
function ContactsMethods(app) {
function getContacts(params, callback) {
var count = 25,
offset = 0,
content = {},
cache = false,
returnCache = false;
if (params) {
if ((typeof params.cache == 'boolean')) {
cache = params.cache;
}
if (parseInt(params.count) > 0) {
count = parseInt(params.count);
}
if (parseInt(params.offset) > 0) {
offset = parseInt(params.offset);
}
if (typeof params.query === 'string') {
content.query = params.query;
}
if (typeof params.email === 'string') {
content.email = params.email;
}
if (typeof params.cellphoneNumber === 'string') {
content.cellphoneNumber = params.cellphoneNumber;
}
if (parseInt(params.contactId) > 0) {
content.id = params.contactId;
}
if (typeof params.uniqueId === 'string') {
content.uniqueId = params.uniqueId;
}
if (typeof params.username === 'string') {
content.username = params.username;
}
if (typeof params.coreUserId !== "undefined") {
content.coreUserId = params.coreUserId;
}
var functionLevelCache = (typeof params.cache == 'boolean') ? params.cache : true;
}
content.size = count;
content.offset = offset;
var sendMessageParams = {
chatMessageVOType: chatMessageVOTypes.GET_CONTACTS,
typeCode: params.typeCode,
ownerId: params.ownerId,
content: content
};
const cacheData = app.store.contacts.paginate(content, cache);
if (cacheData) {
const returnData = cacheData
callback && callback(returnData);
//if (!returnData.hasError) {
// app.chatEvents.fireEvent('contactEvents', {
// type: 'CONTACTS_LIST_CHANGE',
// result: returnData.result
// });
//}
callback = undefined;
return;
}
/**
* Retrieve Contacts from server
*/
return app.messenger.sendMessage(sendMessageParams, {
onResult: function (result) {
var returnData = {
typeCode: result.typeCode,
ownerId: result.ownerId,
hasError: result.hasError,
cache: false,
errorMessage: result.errorMessage,
errorCode: result.errorCode
};
if (!returnData.hasError) {
var messageContent = result.result,
messageLength = messageContent.length,
resultData = {
contacts: [],
contentCount: result.contentCount,
hasNext: (offset + count < result.contentCount && messageLength > 0),
nextOffset: offset * 1 + messageLength * 1
},
contactData;
for (var i = 0; i < messageLength; i++) {
contactData = formatDataToMakeContact(messageContent[i]);
if (contactData) {
resultData.contacts.push(contactData);
}
}
returnData.result = resultData;
}
const cloneReturnData = JSON.parse(JSON.stringify(returnData));
cloneReturnData.result.fromCache = false
callback && callback(cloneReturnData);
if (!returnData.hasError) {
if (cache) {
app.store.contacts.saveMany(content,returnData.result, count, offset)
}
if (returnCache) {
app.chatEvents.fireEvent('contactEvents', {
type: 'CONTACTS_LIST_CHANGE',
result: returnData.result
});
}
}
/**
* Delete callback so if server pushes response before
* cache, cache won't send data again
*/
callback = undefined;
}
});
}
function onGetContacts(uniqueId, messageContent, contentCount, chatMessage) {
if (app.store.messagesCallbacks[uniqueId]) {
app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount));
}
}
return {
getContacts,
onGetContacts
}
}
export default ContactsMethods