<template>
  <li
    class="tree__item"
    :class="{
      'tree__item--loading': application._.loading,
    }"
  >
    <div class="tree__action">
      <a class="tree__link" @click="$emit('selected', application)">
        <i class="tree__icon" :class="application._.type.iconClass"></i>
        <span class="tree__link-text">{{ application.name }}</span>
      </a>
    </div>
    <template v-if="application._.selected">
      <ul class="tree__subs">
        <li
          v-for="table in orderedTables"
          :key="table.id"
          class="tree__sub"
          :class="{ active: isTableActive(table) }"
        >
          <a class="tree__sub-link" @click="selectTable(application, table)">
            {{ table.name }}
          </a>
        </li>
      </ul>
    </template>
  </li>
</template>

<script>
import { DatabaseApplicationType } from '@baserow/modules/database/applicationTypes'

export default {
  name: 'TemplateSidebar',
  props: {
    application: {
      type: Object,
      required: true,
    },
    page: {
      required: true,
      validator: (prop) => typeof prop === 'object' || prop === null,
    },
  },
  computed: {
    orderedTables() {
      return this.application.tables
        .map((table) => table)
        .sort((a, b) => a.order - b.order)
    },
  },
  methods: {
    selectTable(application, table) {
      this.$emit('selected-page', {
        application: DatabaseApplicationType.getType(),
        value: {
          database: application,
          table,
        },
      })
    },
    isTableActive(table) {
      return (
        this.page !== null &&
        this.page.application === DatabaseApplicationType.getType() &&
        this.page.value.table.id === table.id
      )
    },
  },
}
</script>