34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
import { useEffect, useState } from 'react';
|
|
import orderBy from 'lodash/orderBy';
|
|
|
|
import database from '../../lib/database';
|
|
import shortnameToUnicode from '../../lib/methods/helpers/shortnameToUnicode';
|
|
import { IEmoji } from '../../definitions';
|
|
|
|
const useFrequentlyUsedEmoji = (): {
|
|
frequentlyUsed: (string | IEmoji)[];
|
|
loaded: boolean;
|
|
} => {
|
|
const [frequentlyUsed, setFrequentlyUsed] = useState<(string | IEmoji)[]>([]);
|
|
const [loaded, setLoaded] = useState(false);
|
|
const getFrequentlyUsedEmojis = async () => {
|
|
const db = database.active;
|
|
const frequentlyUsedRecords = await db.get('frequently_used_emojis').query().fetch();
|
|
const frequentlyUsedOrdered = orderBy(frequentlyUsedRecords, ['count'], ['desc']);
|
|
const frequentlyUsedEmojis = frequentlyUsedOrdered.map(item => {
|
|
if (item.isCustom) {
|
|
return { content: item.content, extension: item.extension, isCustom: item.isCustom };
|
|
}
|
|
return shortnameToUnicode(`${item.content}`);
|
|
}) as (string | IEmoji)[];
|
|
setFrequentlyUsed(frequentlyUsedEmojis);
|
|
setLoaded(true);
|
|
};
|
|
useEffect(() => {
|
|
getFrequentlyUsedEmojis();
|
|
}, []);
|
|
return { frequentlyUsed, loaded };
|
|
};
|
|
|
|
export default useFrequentlyUsedEmoji;
|