matrix-react-sdk
Version:
SDK for matrix.org using React
64 lines (57 loc) • 8.86 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.add = add;
exports.get = get;
var _lodash = require("lodash");
var _SettingsStore = _interopRequireDefault(require("../settings/SettingsStore"));
var _SettingLevel = require("../settings/SettingLevel");
/*
Copyright 2024 New Vector Ltd.
Copyright 2020 The Matrix.org Foundation C.I.C.
Copyright 2019 Tulir Asokan <tulir@maunium.net>
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
// New format tries to be more space efficient for synchronization. Ordered by Date descending.
// [emoji, count]
const SETTING_NAME = "recent_emoji";
// we store more recents than we typically query but this lets us sort by weighted usage
// even if you haven't used your typically favourite emoji for a little while.
const STORAGE_LIMIT = 100;
// TODO remove this after some time
function migrate() {
const data = JSON.parse(window.localStorage.mx_reaction_count || "{}");
const sorted = Object.entries(data).sort(([, [count1, date1]], [, [count2, date2]]) => date2 - date1);
const newFormat = sorted.map(([emoji, [count, date]]) => [emoji, count]);
_SettingsStore.default.setValue(SETTING_NAME, null, _SettingLevel.SettingLevel.ACCOUNT, newFormat.slice(0, STORAGE_LIMIT));
}
function getRecentEmoji() {
return _SettingsStore.default.getValue(SETTING_NAME) || [];
}
function add(emoji) {
const recents = getRecentEmoji();
const i = recents.findIndex(([e]) => e === emoji);
let newEntry;
if (i >= 0) {
// first remove the existing tuple so that we can increment it and push it to the front
[newEntry] = recents.splice(i, 1);
newEntry[1]++; // increment the usage count
} else {
newEntry = [emoji, 1];
}
_SettingsStore.default.setValue(SETTING_NAME, null, _SettingLevel.SettingLevel.ACCOUNT, [newEntry, ...recents].slice(0, STORAGE_LIMIT));
}
function get(limit = 24) {
let recents = getRecentEmoji();
if (recents.length < 1) {
migrate();
recents = getRecentEmoji();
}
// perform a stable sort on `count` to keep the recent (date) order as a secondary sort factor
const sorted = (0, _lodash.orderBy)(recents, "1", "desc");
return sorted.slice(0, limit).map(([emoji]) => emoji);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9TZXR0aW5nc1N0b3JlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9TZXR0aW5nTGV2ZWwiLCJTRVRUSU5HX05BTUUiLCJTVE9SQUdFX0xJTUlUIiwibWlncmF0ZSIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJ3aW5kb3ciLCJsb2NhbFN0b3JhZ2UiLCJteF9yZWFjdGlvbl9jb3VudCIsInNvcnRlZCIsIk9iamVjdCIsImVudHJpZXMiLCJzb3J0IiwiY291bnQxIiwiZGF0ZTEiLCJjb3VudDIiLCJkYXRlMiIsIm5ld0Zvcm1hdCIsIm1hcCIsImVtb2ppIiwiY291bnQiLCJkYXRlIiwiU2V0dGluZ3NTdG9yZSIsInNldFZhbHVlIiwiU2V0dGluZ0xldmVsIiwiQUNDT1VOVCIsInNsaWNlIiwiZ2V0UmVjZW50RW1vamkiLCJnZXRWYWx1ZSIsImFkZCIsInJlY2VudHMiLCJpIiwiZmluZEluZGV4IiwiZSIsIm5ld0VudHJ5Iiwic3BsaWNlIiwiZ2V0IiwibGltaXQiLCJsZW5ndGgiLCJvcmRlckJ5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vtb2ppcGlja2VyL3JlY2VudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuQ29weXJpZ2h0IDIwMTkgVHVsaXIgQXNva2FuIDx0dWxpckBtYXVuaXVtLm5ldD5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gXCJsb2Rhc2hcIjtcblxuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzU3RvcmVcIjtcbmltcG9ydCB7IFNldHRpbmdMZXZlbCB9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5nTGV2ZWxcIjtcblxuaW50ZXJmYWNlIElMZWdhY3lGb3JtYXQge1xuICAgIFtlbW9qaTogc3RyaW5nXTogW251bWJlciwgbnVtYmVyXTsgLy8gW2NvdW50LCBkYXRlXVxufVxuXG4vLyBOZXcgZm9ybWF0IHRyaWVzIHRvIGJlIG1vcmUgc3BhY2UgZWZmaWNpZW50IGZvciBzeW5jaHJvbml6YXRpb24uIE9yZGVyZWQgYnkgRGF0ZSBkZXNjZW5kaW5nLlxudHlwZSBGb3JtYXQgPSBbc3RyaW5nLCBudW1iZXJdW107IC8vIFtlbW9qaSwgY291bnRdXG5cbmNvbnN0IFNFVFRJTkdfTkFNRSA9IFwicmVjZW50X2Vtb2ppXCI7XG5cbi8vIHdlIHN0b3JlIG1vcmUgcmVjZW50cyB0aGFuIHdlIHR5cGljYWxseSBxdWVyeSBidXQgdGhpcyBsZXRzIHVzIHNvcnQgYnkgd2VpZ2h0ZWQgdXNhZ2Vcbi8vIGV2ZW4gaWYgeW91IGhhdmVuJ3QgdXNlZCB5b3VyIHR5cGljYWxseSBmYXZvdXJpdGUgZW1vamkgZm9yIGEgbGl0dGxlIHdoaWxlLlxuY29uc3QgU1RPUkFHRV9MSU1JVCA9IDEwMDtcblxuLy8gVE9ETyByZW1vdmUgdGhpcyBhZnRlciBzb21lIHRpbWVcbmZ1bmN0aW9uIG1pZ3JhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YTogSUxlZ2FjeUZvcm1hdCA9IEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZS5teF9yZWFjdGlvbl9jb3VudCB8fCBcInt9XCIpO1xuICAgIGNvbnN0IHNvcnRlZCA9IE9iamVjdC5lbnRyaWVzKGRhdGEpLnNvcnQoKFssIFtjb3VudDEsIGRhdGUxXV0sIFssIFtjb3VudDIsIGRhdGUyXV0pID0+IGRhdGUyIC0gZGF0ZTEpO1xuICAgIGNvbnN0IG5ld0Zvcm1hdCA9IHNvcnRlZC5tYXAoKFtlbW9qaSwgW2NvdW50LCBkYXRlXV0pID0+IFtlbW9qaSwgY291bnRdKTtcbiAgICBTZXR0aW5nc1N0b3JlLnNldFZhbHVlKFNFVFRJTkdfTkFNRSwgbnVsbCwgU2V0dGluZ0xldmVsLkFDQ09VTlQsIG5ld0Zvcm1hdC5zbGljZSgwLCBTVE9SQUdFX0xJTUlUKSk7XG59XG5cbmZ1bmN0aW9uIGdldFJlY2VudEVtb2ppKCk6IEZvcm1hdCB7XG4gICAgcmV0dXJuIFNldHRpbmdzU3RvcmUuZ2V0VmFsdWUoU0VUVElOR19OQU1FKSB8fCBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChlbW9qaTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmVjZW50cyA9IGdldFJlY2VudEVtb2ppKCk7XG4gICAgY29uc3QgaSA9IHJlY2VudHMuZmluZEluZGV4KChbZV0pID0+IGUgPT09IGVtb2ppKTtcblxuICAgIGxldCBuZXdFbnRyeTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgIC8vIGZpcnN0IHJlbW92ZSB0aGUgZXhpc3RpbmcgdHVwbGUgc28gdGhhdCB3ZSBjYW4gaW5jcmVtZW50IGl0IGFuZCBwdXNoIGl0IHRvIHRoZSBmcm9udFxuICAgICAgICBbbmV3RW50cnldID0gcmVjZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIG5ld0VudHJ5WzFdKys7IC8vIGluY3JlbWVudCB0aGUgdXNhZ2UgY291bnRcbiAgICB9IGVsc2Uge1xuICAgICAgICBuZXdFbnRyeSA9IFtlbW9qaSwgMV07XG4gICAgfVxuXG4gICAgU2V0dGluZ3NTdG9yZS5zZXRWYWx1ZShTRVRUSU5HX05BTUUsIG51bGwsIFNldHRpbmdMZXZlbC5BQ0NPVU5ULCBbbmV3RW50cnksIC4uLnJlY2VudHNdLnNsaWNlKDAsIFNUT1JBR0VfTElNSVQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChsaW1pdCA9IDI0KTogc3RyaW5nW10ge1xuICAgIGxldCByZWNlbnRzID0gZ2V0UmVjZW50RW1vamkoKTtcblxuICAgIGlmIChyZWNlbnRzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgbWlncmF0ZSgpO1xuICAgICAgICByZWNlbnRzID0gZ2V0UmVjZW50RW1vamkoKTtcbiAgICB9XG5cbiAgICAvLyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQgb24gYGNvdW50YCB0byBrZWVwIHRoZSByZWNlbnQgKGRhdGUpIG9yZGVyIGFzIGEgc2Vjb25kYXJ5IHNvcnQgZmFjdG9yXG4gICAgY29uc3Qgc29ydGVkID0gb3JkZXJCeShyZWNlbnRzLCBcIjFcIiwgXCJkZXNjXCIpO1xuICAgIHJldHVybiBzb3J0ZWQuc2xpY2UoMCwgbGltaXQpLm1hcCgoW2Vtb2ppXSkgPT4gZW1vamkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGFBQUEsR0FBQUgsT0FBQTtBQVpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBV0E7QUFDa0M7O0FBRWxDLE1BQU1JLFlBQVksR0FBRyxjQUFjOztBQUVuQztBQUNBO0FBQ0EsTUFBTUMsYUFBYSxHQUFHLEdBQUc7O0FBRXpCO0FBQ0EsU0FBU0MsT0FBT0EsQ0FBQSxFQUFTO0VBQ3JCLE1BQU1DLElBQW1CLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxNQUFNLENBQUNDLFlBQVksQ0FBQ0MsaUJBQWlCLElBQUksSUFBSSxDQUFDO0VBQ3JGLE1BQU1DLE1BQU0sR0FBR0MsTUFBTSxDQUFDQyxPQUFPLENBQUNSLElBQUksQ0FBQyxDQUFDUyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUNDLE1BQU0sRUFBRUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUNDLE1BQU0sRUFBRUMsS0FBSyxDQUFDLENBQUMsS0FBS0EsS0FBSyxHQUFHRixLQUFLLENBQUM7RUFDckcsTUFBTUcsU0FBUyxHQUFHUixNQUFNLENBQUNTLEdBQUcsQ0FBQyxDQUFDLENBQUNDLEtBQUssRUFBRSxDQUFDQyxLQUFLLEVBQUVDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQ0YsS0FBSyxFQUFFQyxLQUFLLENBQUMsQ0FBQztFQUN4RUUsc0JBQWEsQ0FBQ0MsUUFBUSxDQUFDdkIsWUFBWSxFQUFFLElBQUksRUFBRXdCLDBCQUFZLENBQUNDLE9BQU8sRUFBRVIsU0FBUyxDQUFDUyxLQUFLLENBQUMsQ0FBQyxFQUFFekIsYUFBYSxDQUFDLENBQUM7QUFDdkc7QUFFQSxTQUFTMEIsY0FBY0EsQ0FBQSxFQUFXO0VBQzlCLE9BQU9MLHNCQUFhLENBQUNNLFFBQVEsQ0FBQzVCLFlBQVksQ0FBQyxJQUFJLEVBQUU7QUFDckQ7QUFFTyxTQUFTNkIsR0FBR0EsQ0FBQ1YsS0FBYSxFQUFRO0VBQ3JDLE1BQU1XLE9BQU8sR0FBR0gsY0FBYyxDQUFDLENBQUM7RUFDaEMsTUFBTUksQ0FBQyxHQUFHRCxPQUFPLENBQUNFLFNBQVMsQ0FBQyxDQUFDLENBQUNDLENBQUMsQ0FBQyxLQUFLQSxDQUFDLEtBQUtkLEtBQUssQ0FBQztFQUVqRCxJQUFJZSxRQUFRO0VBQ1osSUFBSUgsQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUNSO0lBQ0EsQ0FBQ0csUUFBUSxDQUFDLEdBQUdKLE9BQU8sQ0FBQ0ssTUFBTSxDQUFDSixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ25CLENBQUMsTUFBTTtJQUNIQSxRQUFRLEdBQUcsQ0FBQ2YsS0FBSyxFQUFFLENBQUMsQ0FBQztFQUN6QjtFQUVBRyxzQkFBYSxDQUFDQyxRQUFRLENBQUN2QixZQUFZLEVBQUUsSUFBSSxFQUFFd0IsMEJBQVksQ0FBQ0MsT0FBTyxFQUFFLENBQUNTLFFBQVEsRUFBRSxHQUFHSixPQUFPLENBQUMsQ0FBQ0osS0FBSyxDQUFDLENBQUMsRUFBRXpCLGFBQWEsQ0FBQyxDQUFDO0FBQ3BIO0FBRU8sU0FBU21DLEdBQUdBLENBQUNDLEtBQUssR0FBRyxFQUFFLEVBQVk7RUFDdEMsSUFBSVAsT0FBTyxHQUFHSCxjQUFjLENBQUMsQ0FBQztFQUU5QixJQUFJRyxPQUFPLENBQUNRLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDcEJwQyxPQUFPLENBQUMsQ0FBQztJQUNUNEIsT0FBTyxHQUFHSCxjQUFjLENBQUMsQ0FBQztFQUM5Qjs7RUFFQTtFQUNBLE1BQU1sQixNQUFNLEdBQUcsSUFBQThCLGVBQU8sRUFBQ1QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUM7RUFDNUMsT0FBT3JCLE1BQU0sQ0FBQ2lCLEtBQUssQ0FBQyxDQUFDLEVBQUVXLEtBQUssQ0FBQyxDQUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLEtBQUtBLEtBQUssQ0FBQztBQUN6RCIsImlnbm9yZUxpc3QiOltdfQ==