mirror of
https://akkoma.dev/AkkomaGang/akkoma-fe
synced 2025-04-30 11:09:30 +08:00
57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
// each row is 7 emojis, 6 rows chosen arbitrarily. i don't think more than
|
|
// that are going to be useful.
|
|
const RECENT_MAX = 7 * 6
|
|
|
|
const defaultState = {
|
|
emojis: [],
|
|
}
|
|
|
|
const recentEmojis = {
|
|
state: defaultState,
|
|
|
|
mutations: {
|
|
emojiUsed ({ emojis }, emoji) {
|
|
if (emoji.displayText === undefined || emoji.displayText === null) {
|
|
console.error('emojiUsed was called with a bad emoji object: ', emoji)
|
|
return
|
|
} else if (emoji.displayText.includes('@')) {
|
|
console.error('emojiUsed was called with a remote emoji: ', emoji)
|
|
return
|
|
}
|
|
|
|
const i = emojis.indexOf(emoji.displayText)
|
|
|
|
if (i === -1) {
|
|
// not in `emojis` yet, insert and truncate if necessary
|
|
const newLength = emojis.unshift(emoji.displayText)
|
|
if (newLength > RECENT_MAX) {
|
|
emojis.pop()
|
|
}
|
|
} else if (i !== 0) {
|
|
// emoji is already in `emojis` but needs to be bumped to the top
|
|
emojis.splice(i, 1)
|
|
emojis.unshift(emoji.displayText)
|
|
}
|
|
},
|
|
},
|
|
|
|
getters: {
|
|
recentEmojis: (state, getters, rootState) => state.emojis.reduce((objects, displayText) => {
|
|
let comparator = emoji => emoji.displayText === displayText
|
|
|
|
let emojiObject = rootState.instance.emoji.find(comparator)
|
|
if (emojiObject !== undefined) {
|
|
objects.push(emojiObject)
|
|
} else {
|
|
emojiObject = rootState.instance.customEmoji.find(comparator)
|
|
if (emojiObject !== undefined) {
|
|
objects.push(emojiObject)
|
|
}
|
|
}
|
|
|
|
return objects
|
|
}, []),
|
|
},
|
|
}
|
|
|
|
export default recentEmojis
|