mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-14 13:44:41 +08:00
d0b001012e
Summary: The emoji picker allows users to insert emoji to their messages on click. A few emoji that don't render properly in Chromium are replaced with PNGs, both in the composer view and the message list view, but only the Unicode characters are sent in the message bodies. Test Plan: TODO Reviewers: bengotow, evan Reviewed By: evan Differential Revision: https://phab.nylas.com/D2787
69 lines
1.7 KiB
JavaScript
69 lines
1.7 KiB
JavaScript
import NylasStore from 'nylas-store';
|
|
import Rx from 'rx-lite';
|
|
import _ from 'underscore';
|
|
|
|
import {DatabaseStore} from 'nylas-exports';
|
|
import EmojiActions from './emoji-actions';
|
|
|
|
const EmojiJSONBlobKey = 'emoji';
|
|
|
|
|
|
class EmojiStore extends NylasStore {
|
|
constructor(props) {
|
|
super(props);
|
|
this._emoji = [];
|
|
}
|
|
|
|
activate = () => {
|
|
const query = DatabaseStore.findJSONBlob(EmojiJSONBlobKey);
|
|
this._subscription = Rx.Observable.fromQuery(query).subscribe((emoji) => {
|
|
this._emoji = emoji ? emoji : [];
|
|
this.trigger();
|
|
});
|
|
this.listenTo(EmojiActions.useEmoji, this._onUseEmoji);
|
|
}
|
|
|
|
frequentlyUsedEmoji = () => {
|
|
const sortedEmoji = this._emoji;
|
|
sortedEmoji.sort((a, b) => {
|
|
if (a.frequency < b.frequency) return 1;
|
|
return (b.frequency < a.frequency) ? -1 : 0;
|
|
});
|
|
const sortedEmojiNames = [];
|
|
for (const emoji of sortedEmoji) {
|
|
sortedEmojiNames.push(emoji.emojiName);
|
|
}
|
|
if (sortedEmojiNames.length > 32) {
|
|
return sortedEmojiNames.slice(0, 32);
|
|
}
|
|
return sortedEmojiNames;
|
|
}
|
|
|
|
_onUseEmoji = (emoji) => {
|
|
const savedEmoji = _.find(this._emoji, (curEmoji) => {
|
|
return curEmoji.emojiChar === emoji.emojiChar;
|
|
});
|
|
if (savedEmoji) {
|
|
for (const key in emoji) {
|
|
if (emoji.hasOwnProperty(key)) {
|
|
savedEmoji[key] = emoji[key];
|
|
}
|
|
}
|
|
savedEmoji.frequency++;
|
|
} else {
|
|
_.extend(emoji, {frequency: 1});
|
|
this._emoji.push(emoji);
|
|
}
|
|
this._saveEmoji();
|
|
this.trigger();
|
|
}
|
|
|
|
_saveEmoji = () => {
|
|
DatabaseStore.inTransaction((t) => {
|
|
return t.persistJSONBlob(EmojiJSONBlobKey, this._emoji);
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
export default new EmojiStore();
|