podchat-browser
Version:
Javascript SDK to use POD's Chat Service - Browser Only
365 lines (313 loc) • 11.7 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Thread = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _utility = _interopRequireDefault(require("../../../utility/utility"));
var _archive = _interopRequireDefault(require("./archive"));
var _pin = _interopRequireDefault(require("./pin"));
var _mute = _interopRequireDefault(require("./mute"));
var _unRead = _interopRequireDefault(require("./unRead"));
var _validation = _interopRequireDefault(require("./validation"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var Thread = /*#__PURE__*/function () {
function Thread(app) {
(0, _classCallCheck2["default"])(this, Thread);
this._app = app;
this._list = {
main: [],
archive: []
};
this._params = {};
this.archive = new _archive["default"](this);
this.pin = new _pin["default"](this);
this.mute = new _mute["default"](this);
this.unRead = new _unRead["default"](this);
this.validation = new _validation["default"](this);
}
(0, _createClass2["default"])(Thread, [{
key: "getThreadItemById",
value: function getThreadItemById(threadId) {
var repo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'main';
return this.getAll(repo).find(function (thread) {
return (thread === null || thread === void 0 ? void 0 : thread.id) === threadId;
}) || null;
}
}, {
key: "getThreadResponse",
value: function getThreadResponse(threads) {
var start = parseInt(this._params.offset);
var end = start + parseInt(this._params.count);
var result = {
hasNext: true,
nextOffset: end,
contentCount: undefined,
threads: threads
};
return {
typeCode: "default",
ownerId: undefined,
hasError: false,
cache: false,
errorMessage: "",
errorCode: "",
result: result,
uniqueId: _utility["default"].generateUUID()
};
}
}, {
key: "getThreadByIds",
value: function getThreadByIds(ids, cache) {
var _this = this;
var threads = [];
if (typeof ids !== "undefined" && cache && (ids === null || ids === void 0 ? void 0 : ids.length) > 0) {
ids.forEach(function (i) {
var index = _this.findIndex(i);
if (index > -1) {
threads.push(_this.getAll()[index]);
}
});
}
if (threads.length === 0) {
return false;
}
return {
typeCode: "default",
ownerId: undefined,
hasError: false,
cache: false,
errorMessage: "",
errorCode: "",
result: {
hasNext: true,
nextOffset: null,
contentCount: undefined,
threads: threads
},
uniqueId: _utility["default"].generateUUID()
};
}
}, {
key: "getCacheData",
value: function getCacheData(params) {
params.typeCode = params.typeCode ? params.typeCode : this._app.typeCodes.getActiveTypeCode().typeCode;
this._params = params;
if (!this.validation.checkParameterIsValid(params)) {
return false;
}
var start = parseInt(params.offset);
var end = start + parseInt(params.count);
var threads = this.getAll().slice(start, end);
if (this.validation.checkDataIsValid(params, threads)) {
return this.getThreadResponse(threads);
}
return false;
}
}, {
key: "get",
value: function get(id) {
return this.getAll()[this.findIndex(id)];
}
}, {
key: "getAll",
value: function getAll() {
var repo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'main';
if (repo === 'archive') {
return this._list.archive;
}
return this.sortPinMessage();
}
}, {
key: "findIndex",
value: function findIndex(threadId) {
var repo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'main';
return this.getAll(repo).findIndex(function (item) {
return (item === null || item === void 0 ? void 0 : item.id) == threadId;
});
}
}, {
key: "updateOrSave",
value: function updateOrSave(threadId, message) {
var repo = message !== null && message !== void 0 && message.archiveThread ? 'archive' : 'main';
var index = this.length(repo);
var update = this.update(threadId, message);
if (!update) {
this.save(message, index);
}
}
}, {
key: "length",
value: function length() {
var _this$_list$repo;
var repo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'main';
return (_this$_list$repo = this._list[repo]) === null || _this$_list$repo === void 0 ? void 0 : _this$_list$repo.length;
}
}, {
key: "update",
value: function update(threadId) {
var obj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var repo = obj !== null && obj !== void 0 && obj.archiveThread ? 'archive' : 'main';
var index = this.findIndex(threadId, repo);
if (index > -1) {
this._list[repo][index] = _objectSpread(_objectSpread({}, this._list[repo][index]), obj);
return true;
}
return false;
}
}, {
key: "changeTitle",
value: function changeTitle(threadId, title) {
this.update(threadId, {
title: title
});
}
}, {
key: "handleNewMessage",
value: function handleNewMessage(threadId, message) {
var _message$lastMessageV;
delete message.unreadCount;
if (message !== null && message !== void 0 && (_message$lastMessageV = message.lastMessageVO) !== null && _message$lastMessageV !== void 0 && _message$lastMessageV.mentioned) {
this.updateMentioned(threadId, true);
}
this.updateDelivered(threadId, false);
this.updateOrSave(threadId, message);
}
}, {
key: "updateSeen",
value: function updateSeen(threadId, value) {
this.update(threadId, {
unreadCount: value !== null && value !== void 0 ? value : 0
});
}
}, {
key: "updateMentioned",
value: function updateMentioned(threadId, value) {
//todo we need handle archived thread
var repo = 'main';
var index = this.findIndex(threadId);
if (index > -1) {
this._list[repo][index]['mentioned'] = value;
return true;
}
return false;
}
}, {
key: "updateDelivered",
value: function updateDelivered(threadId, value) {
//todo we need handle archived thread
var repo = 'main';
var index = this.findIndex(threadId);
if (index > -1) {
this._list[repo][index]['lastMessageVO'] = _objectSpread(_objectSpread({}, this._list[repo][index]['lastMessageVO']), {
delivered: value,
seen: value
});
return true;
}
return false;
}
}, {
key: "putItemAfterLastPinThread",
value: function putItemAfterLastPinThread(item) {
var _this$getAll$filter$l;
var index = (_this$getAll$filter$l = this.getAll().filter(function (item) {
return (item === null || item === void 0 ? void 0 : item.pin) === true;
}).length) !== null && _this$getAll$filter$l !== void 0 ? _this$getAll$filter$l : 0;
this.getAll().splice(index, 0, item);
} // add or update thread
}, {
key: "save",
value: function save(thread, index) {
var repo = thread.archiveThread ? 'archive' : 'main';
var existedIndex = this.findIndex(thread.id, repo);
if (index >= 0 && existedIndex === -1) {
this.getAll(repo)[index] = thread;
} else if (existedIndex > -1) {
this.getAll(repo)[existedIndex] = thread;
}
return thread;
}
}, {
key: "saveMany",
value: function saveMany(newThreads, params) {
if (!this.validation.checkTypeCodeIsValid(params.typeCode)) {
return;
}
if (Array.isArray(newThreads)) {
var index = parseInt(this._params.offset);
for (var item in newThreads) {
this.save(newThreads[item], index++);
}
this._list.main = (0, _toConsumableArray2["default"])(this.getAll()).map(function (item) {
return item === undefined ? null : item;
});
}
}
}, {
key: "remove",
value: function remove(id) {
var localThreadIndex = this.findIndex(id);
if (localThreadIndex > -1) {
this.getAll().splice(localThreadIndex, 1);
}
return this.getAll();
}
}, {
key: "removeAll",
value: function removeAll() {
this._list.main = [];
this._list.archive = [];
}
}, {
key: "addAfterPinMessageOrUpdate",
value: function addAfterPinMessageOrUpdate(thread) {
var existedIndex = this.findIndex(thread === null || thread === void 0 ? void 0 : thread.id);
if (existedIndex > -1) {
// update
this.getAll()[existedIndex] = thread;
} else {
//Inserts at index (this._pinned_count )
this.getAll().splice(this.pinedMessageCount(), 0, thread);
}
}
}, {
key: "sortPinMessage",
value: function sortPinMessage() {
return this._list.main.sort(function (a, b) {
if (b !== null && b !== void 0 && b.pin || a !== null && a !== void 0 && a.pin) {
return (b === null || b === void 0 ? void 0 : b.pin) - (a === null || a === void 0 ? void 0 : a.pin);
}
if ((b === null || b === void 0 ? void 0 : b.time) < (a === null || a === void 0 ? void 0 : a.time)) {
return -1;
}
if ((b === null || b === void 0 ? void 0 : b.time) > (a === null || a === void 0 ? void 0 : a.time)) {
return 1;
}
return 0;
});
}
}, {
key: "pinedMessageCount",
value: function pinedMessageCount() {
return this.getAll().filter(function (data) {
return data.pin === true;
}).length;
}
}, {
key: "getLastMessageItem",
value: function getLastMessageItem(threadId) {
var thread = this.getAll().find(function (thread) {
return (thread === null || thread === void 0 ? void 0 : thread.id) === threadId;
}) || {};
return (thread === null || thread === void 0 ? void 0 : thread.lastMessageVO) || {};
}
}]);
return Thread;
}();
exports.Thread = Thread;