<template>
  <ul v-auto-overflow-scroll class="select__items select__items--no-max-height">
    <li
      v-for="{ element, indented } in elementsAndChildren"
      :key="element.id"
      :class="{
        'select__item--selected': element.id === elementSelectedId,
        'select__item--indented': indented,
      }"
      class="select__item"
    >
      <ElementsListItem :element="element" @click="$emit('select', element)" />
    </li>
  </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,
    },
    elementSelected: {
      type: Object,
      required: false,
      default: null,
    },
  },
  computed: {
    elementSelectedId() {
      return this.elementSelected ? this.elementSelected.id : null
    },
    elementsAndChildren() {
      return this.elements.reduce((acc, element) => {
        acc.push({ element, indented: false })

        const children = this.getChildren(element)
        if (children.length) {
          acc.push(
            ...children.map((child) => ({ element: child, indented: true }))
          )
        }

        return acc
      }, [])
    },
  },
  methods: {
    getChildren(element) {
      return this.$store.getters['element/getChildren'](this.page, element)
    },
  },
}
</script>