UNPKG

matrix-react-sdk

Version:
65 lines (60 loc) 8.23 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _lodash = require("lodash"); var _logger = require("matrix-js-sdk/src/logger"); /* Copyright 2024 New Vector Ltd. Copyright 2017 Aviral Dasgupta SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ class SendHistoryManager { // used for indexing the loaded validated history Array constructor(roomId, prefix) { (0, _defineProperty2.default)(this, "history", []); (0, _defineProperty2.default)(this, "prefix", void 0); (0, _defineProperty2.default)(this, "lastIndex", 0); // used for indexing the storage (0, _defineProperty2.default)(this, "currentIndex", 0); this.prefix = prefix + roomId; // TODO: Performance issues? let index = 0; let itemJSON; while (itemJSON = sessionStorage.getItem(`${this.prefix}[${index}]`)) { try { this.history.push(JSON.parse(itemJSON)); } catch (e) { _logger.logger.warn("Throwing away unserialisable history", e); break; } ++index; } this.lastIndex = this.history.length - 1; // reset currentIndex to account for any unserialisable history this.currentIndex = this.lastIndex + 1; } static createItem(model, replyEvent) { return { parts: model.serializeParts(), replyEventId: replyEvent ? replyEvent.getId() : undefined }; } save(editorModel, replyEvent) { const item = SendHistoryManager.createItem(editorModel, replyEvent); this.history.push(item); this.currentIndex = this.history.length; this.lastIndex += 1; sessionStorage.setItem(`${this.prefix}[${this.lastIndex}]`, JSON.stringify(item)); } getItem(offset) { this.currentIndex = (0, _lodash.clamp)(this.currentIndex + offset, 0, this.history.length - 1); return this.history[this.currentIndex]; } } exports.default = SendHistoryManager; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9sb2dnZXIiLCJTZW5kSGlzdG9yeU1hbmFnZXIiLCJjb25zdHJ1Y3RvciIsInJvb21JZCIsInByZWZpeCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiaW5kZXgiLCJpdGVtSlNPTiIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImhpc3RvcnkiLCJwdXNoIiwiSlNPTiIsInBhcnNlIiwiZSIsImxvZ2dlciIsIndhcm4iLCJsYXN0SW5kZXgiLCJsZW5ndGgiLCJjdXJyZW50SW5kZXgiLCJjcmVhdGVJdGVtIiwibW9kZWwiLCJyZXBseUV2ZW50IiwicGFydHMiLCJzZXJpYWxpemVQYXJ0cyIsInJlcGx5RXZlbnRJZCIsImdldElkIiwidW5kZWZpbmVkIiwic2F2ZSIsImVkaXRvck1vZGVsIiwiaXRlbSIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJvZmZzZXQiLCJjbGFtcCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvU2VuZEhpc3RvcnlNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDE3IEF2aXJhbCBEYXNndXB0YVxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBjbGFtcCB9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7IE1hdHJpeEV2ZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL2xvZ2dlclwiO1xuXG5pbXBvcnQgeyBTZXJpYWxpemVkUGFydCB9IGZyb20gXCIuL2VkaXRvci9wYXJ0c1wiO1xuaW1wb3J0IEVkaXRvck1vZGVsIGZyb20gXCIuL2VkaXRvci9tb2RlbFwiO1xuXG5pbnRlcmZhY2UgSUhpc3RvcnlJdGVtIHtcbiAgICBwYXJ0czogU2VyaWFsaXplZFBhcnRbXTtcbiAgICByZXBseUV2ZW50SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbmRIaXN0b3J5TWFuYWdlciB7XG4gICAgcHVibGljIGhpc3Rvcnk6IEFycmF5PElIaXN0b3J5SXRlbT4gPSBbXTtcbiAgICBwdWJsaWMgcHJlZml4OiBzdHJpbmc7XG4gICAgcHVibGljIGxhc3RJbmRleCA9IDA7IC8vIHVzZWQgZm9yIGluZGV4aW5nIHRoZSBzdG9yYWdlXG4gICAgcHVibGljIGN1cnJlbnRJbmRleCA9IDA7IC8vIHVzZWQgZm9yIGluZGV4aW5nIHRoZSBsb2FkZWQgdmFsaWRhdGVkIGhpc3RvcnkgQXJyYXlcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihyb29tSWQ6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXggKyByb29tSWQ7XG5cbiAgICAgICAgLy8gVE9ETzogUGVyZm9ybWFuY2UgaXNzdWVzP1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgaXRlbUpTT047XG5cbiAgICAgICAgd2hpbGUgKChpdGVtSlNPTiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5wcmVmaXh9WyR7aW5kZXh9XWApKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChKU09OLnBhcnNlKGl0ZW1KU09OKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJUaHJvd2luZyBhd2F5IHVuc2VyaWFsaXNhYmxlIGhpc3RvcnlcIiwgZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGFzdEluZGV4ID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDE7XG4gICAgICAgIC8vIHJlc2V0IGN1cnJlbnRJbmRleCB0byBhY2NvdW50IGZvciBhbnkgdW5zZXJpYWxpc2FibGUgaGlzdG9yeVxuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMubGFzdEluZGV4ICsgMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUl0ZW0obW9kZWw6IEVkaXRvck1vZGVsLCByZXBseUV2ZW50PzogTWF0cml4RXZlbnQpOiBJSGlzdG9yeUl0ZW0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFydHM6IG1vZGVsLnNlcmlhbGl6ZVBhcnRzKCksXG4gICAgICAgICAgICByZXBseUV2ZW50SWQ6IHJlcGx5RXZlbnQgPyByZXBseUV2ZW50LmdldElkKCkgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoZWRpdG9yTW9kZWw6IEVkaXRvck1vZGVsLCByZXBseUV2ZW50PzogTWF0cml4RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IFNlbmRIaXN0b3J5TWFuYWdlci5jcmVhdGVJdGVtKGVkaXRvck1vZGVsLCByZXBseUV2ZW50KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gdGhpcy5oaXN0b3J5Lmxlbmd0aDtcbiAgICAgICAgdGhpcy5sYXN0SW5kZXggKz0gMTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgJHt0aGlzLnByZWZpeH1bJHt0aGlzLmxhc3RJbmRleH1dYCwgSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJdGVtKG9mZnNldDogbnVtYmVyKTogSUhpc3RvcnlJdGVtIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBjbGFtcCh0aGlzLmN1cnJlbnRJbmRleCArIG9mZnNldCwgMCwgdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5W3RoaXMuY3VycmVudEluZGV4XTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBY2UsTUFBTUUsa0JBQWtCLENBQUM7RUFJWDs7RUFFbEJDLFdBQVdBLENBQUNDLE1BQWMsRUFBRUMsTUFBYyxFQUFFO0lBQUEsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQSxtQkFMYixFQUFFO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQTtJQUFBLElBQUFELGdCQUFBLENBQUFDLE9BQUEscUJBRXJCLENBQUM7SUFBRTtJQUFBLElBQUFELGdCQUFBLENBQUFDLE9BQUEsd0JBQ0EsQ0FBQztJQUduQixJQUFJLENBQUNGLE1BQU0sR0FBR0EsTUFBTSxHQUFHRCxNQUFNOztJQUU3QjtJQUNBLElBQUlJLEtBQUssR0FBRyxDQUFDO0lBQ2IsSUFBSUMsUUFBUTtJQUVaLE9BQVFBLFFBQVEsR0FBR0MsY0FBYyxDQUFDQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUNOLE1BQU0sSUFBSUcsS0FBSyxHQUFHLENBQUMsRUFBRztNQUNwRSxJQUFJO1FBQ0EsSUFBSSxDQUFDSSxPQUFPLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxLQUFLLENBQUNOLFFBQVEsQ0FBQyxDQUFDO01BQzNDLENBQUMsQ0FBQyxPQUFPTyxDQUFDLEVBQUU7UUFDUkMsY0FBTSxDQUFDQyxJQUFJLENBQUMsc0NBQXNDLEVBQUVGLENBQUMsQ0FBQztRQUN0RDtNQUNKO01BQ0EsRUFBRVIsS0FBSztJQUNYO0lBQ0EsSUFBSSxDQUFDVyxTQUFTLEdBQUcsSUFBSSxDQUFDUCxPQUFPLENBQUNRLE1BQU0sR0FBRyxDQUFDO0lBQ3hDO0lBQ0EsSUFBSSxDQUFDQyxZQUFZLEdBQUcsSUFBSSxDQUFDRixTQUFTLEdBQUcsQ0FBQztFQUMxQztFQUVBLE9BQWNHLFVBQVVBLENBQUNDLEtBQWtCLEVBQUVDLFVBQXdCLEVBQWdCO0lBQ2pGLE9BQU87TUFDSEMsS0FBSyxFQUFFRixLQUFLLENBQUNHLGNBQWMsQ0FBQyxDQUFDO01BQzdCQyxZQUFZLEVBQUVILFVBQVUsR0FBR0EsVUFBVSxDQUFDSSxLQUFLLENBQUMsQ0FBQyxHQUFHQztJQUNwRCxDQUFDO0VBQ0w7RUFFT0MsSUFBSUEsQ0FBQ0MsV0FBd0IsRUFBRVAsVUFBd0IsRUFBUTtJQUNsRSxNQUFNUSxJQUFJLEdBQUc5QixrQkFBa0IsQ0FBQ29CLFVBQVUsQ0FBQ1MsV0FBVyxFQUFFUCxVQUFVLENBQUM7SUFDbkUsSUFBSSxDQUFDWixPQUFPLENBQUNDLElBQUksQ0FBQ21CLElBQUksQ0FBQztJQUN2QixJQUFJLENBQUNYLFlBQVksR0FBRyxJQUFJLENBQUNULE9BQU8sQ0FBQ1EsTUFBTTtJQUN2QyxJQUFJLENBQUNELFNBQVMsSUFBSSxDQUFDO0lBQ25CVCxjQUFjLENBQUN1QixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM1QixNQUFNLElBQUksSUFBSSxDQUFDYyxTQUFTLEdBQUcsRUFBRUwsSUFBSSxDQUFDb0IsU0FBUyxDQUFDRixJQUFJLENBQUMsQ0FBQztFQUNyRjtFQUVPckIsT0FBT0EsQ0FBQ3dCLE1BQWMsRUFBZ0I7SUFDekMsSUFBSSxDQUFDZCxZQUFZLEdBQUcsSUFBQWUsYUFBSyxFQUFDLElBQUksQ0FBQ2YsWUFBWSxHQUFHYyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQ3ZCLE9BQU8sQ0FBQ1EsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqRixPQUFPLElBQUksQ0FBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQ1MsWUFBWSxDQUFDO0VBQzFDO0FBQ0o7QUFBQ2dCLE9BQUEsQ0FBQTlCLE9BQUEsR0FBQUwsa0JBQUEiLCJpZ25vcmVMaXN0IjpbXX0=