emoji-mart
Version:
Customizable Slack-like emoji picker for React
76 lines (57 loc) • 1.7 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _store = _interopRequireDefault(require("./store"));
var DEFAULTS = ['+1', 'grinning', 'kissing_heart', 'heart_eyes', 'laughing', 'stuck_out_tongue_winking_eye', 'sweat_smile', 'joy', 'scream', 'disappointed', 'unamused', 'weary', 'sob', 'sunglasses', 'heart', 'poop'];
var frequently, initialized;
var defaults = {};
function init() {
initialized = true;
frequently = _store["default"].get('frequently');
}
function add(emoji) {
if (!initialized) init();
var id = emoji.id;
frequently || (frequently = defaults);
frequently[id] || (frequently[id] = 0);
frequently[id] += 1;
_store["default"].set('last', id);
_store["default"].set('frequently', frequently);
}
function get(perLine) {
if (!initialized) init();
if (!frequently) {
defaults = {};
var result = [];
for (var i = 0; i < perLine; i++) {
defaults[DEFAULTS[i]] = perLine - i;
result.push(DEFAULTS[i]);
}
return result;
}
var quantity = perLine * 4;
var frequentlyKeys = [];
for (var key in frequently) {
if (frequently.hasOwnProperty(key)) {
frequentlyKeys.push(key);
}
}
var sorted = frequentlyKeys.sort(function (a, b) {
return frequently[a] - frequently[b];
}).reverse();
var sliced = sorted.slice(0, quantity);
var last = _store["default"].get('last');
if (last && sliced.indexOf(last) == -1) {
sliced.pop();
sliced.push(last);
}
return sliced;
}
var _default = {
add: add,
get: get
};
exports["default"] = _default;