All files / app/assets/javascripts/emoji/components emoji_list.vue

100% Statements 8/8
100% Branches 1/1
100% Functions 4/4
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45        45x                   3x       3x 1x         1x         2x       3x 3x                    
<script>
import { chunk } from 'lodash';
import { searchEmoji } from '~/emoji';
import { EMOJIS_PER_ROW } from '../constants';
import { getEmojiCategories, generateCategoryHeight } from './utils';
 
export default {
  props: {
    searchValue: {
      type: String,
      required: true,
    },
  },
  data() {
    return { render: false };
  },
  computed: {
    filteredCategories() {
      if (this.searchValue !== '') {
        const emojis = chunk(
          searchEmoji(this.searchValue).map(({ emoji }) => emoji.name),
          EMOJIS_PER_ROW,
        );
 
        return {
          search: { emojis, height: generateCategoryHeight(emojis.length) },
        };
      }
 
      return this.categories;
    },
  },
  async mounted() {
    this.categories = await getEmojiCategories();
    this.render = true;
  },
};
</script>
 
<template>
  <div v-if="render">
    <slot :filtered-categories="filteredCategories"></slot>
  </div>
</template>