summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/emoji/components/utils.js
blob: b95b56a1d6ff243403825f51e942f6163e40bd29 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { chunk, memoize } from 'lodash';
import { initEmojiMap, getEmojiCategoryMap } from '~/emoji';
import { EMOJIS_PER_ROW, EMOJI_ROW_HEIGHT, CATEGORY_ROW_HEIGHT } from '../constants';

export const generateCategoryHeight = (emojisLength) =>
  emojisLength * EMOJI_ROW_HEIGHT + CATEGORY_ROW_HEIGHT;

export const getEmojiCategories = memoize(async () => {
  await initEmojiMap();

  const categories = await getEmojiCategoryMap();
  let top = 0;

  return Object.freeze(
    Object.keys(categories).reduce((acc, category) => {
      const emojis = chunk(categories[category], EMOJIS_PER_ROW);
      const height = generateCategoryHeight(emojis.length);
      const newAcc = {
        ...acc,
        [category]: { emojis, height, top },
      };
      top += height;

      return newAcc;
    }, {}),
  );
});