matrix-react-sdk
Version:
SDK for matrix.org using React
65 lines (60 loc) • 8.23 kB
JavaScript
"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=