UNPKG

podchat-browser

Version:

Javascript SDK to use POD's Chat Service - Browser Only

365 lines (313 loc) 11.7 kB
"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;