<template>
  <ul
    v-auto-overflow-scroll
    class="elements-list__items elements-list__items--no-max-height"
  >
    <ElementsListItem
      v-for="element in filteredElements"
      :key="element.id"
      :element="element"
      :filtered-search-elements="filteredSearchElements"
      @select="$emit('select', $event)"
    />
  </ul>
</template>

<script>
import ElementsListItem from '@baserow/modules/builder/components/elements/ElementsListItem'

export default {
  name: 'ElementsList',
  components: { ElementsListItem },
  inject: ['page'],
  props: {
    elements: {
      type: Array,
      required: true,
    },
    filteredSearchElements: {
      type: Array,
      required: false,
      default: () => [],
    },
  },
  computed: {
    /**
     * Responsible for returning elements to display in `ElementsListItem`.
     * If we've been given an array of `filteredSearchElements`, we'll filter
     * the elements to only include those that match the `id` of the element.
     * If `filteredSearchElements` is empty, then we show all `elements`.
     */
    filteredElements() {
      if (this.filteredSearchElements.length === 0) {
        return this.elements
      } else {
        return this.elements.filter((element) => {
          return this.filteredSearchElements.includes(element.id)
        })
      }
    },
  },
}
</script>