<template>
  <div class="data-source-item">
    <Presentation
      class="flex-grow-1"
      :title="dataSource.name"
      size="medium"
      :image="integrationType?.image"
      :initials="integrationType?.image ? null : '?'"
      :subtitle="subtitle"
      :rounded-icon="false"
      avatar-color="neutral"
      @click="$emit('edit', dataSource)"
    />
    <div
      v-if="
        $hasPermission(
          'builder.page.data_source.update',
          dataSource,
          workspace.id
        )
      "
      class="data-source-item__actions"
    >
      <ButtonIcon icon="iconoir-edit" @click="$emit('edit', dataSource)" />
      <ButtonIcon
        ref="contextOpener"
        type="secondary"
        icon="iconoir-more-vert"
        @click="
          $refs.dataSourceItemContext.toggle(
            $refs.contextOpener.$el,
            'bottom',
            'right',
            4
          )
        "
      />
    </div>
    <DataSourceItemContext
      ref="dataSourceItemContext"
      :shared="shared"
      @delete="$emit('delete', dataSource)"
      @share="$emit('share', dataSource)"
    />
  </div>
</template>

<script>
import DataSourceItemContext from '@baserow/modules/builder/components/dataSource/DataSourceItemContext'

export default {
  name: 'DataSourceItem',
  components: { DataSourceItemContext },
  inject: ['workspace', 'builder'],
  props: {
    dataSource: {
      type: Object,
      required: true,
    },
    shared: {
      type: Boolean,
      required: false,
      default: false,
    },
  },
  computed: {
    dataSourceType() {
      if (!this.dataSource.type) {
        return null
      }
      return this.$registry.get('service', this.dataSource.type)
    },
    integrationType() {
      return this.dataSourceType?.integrationType
    },
    image() {
      return this.integrationType?.image || 'default.png'
    },
    subtitle() {
      return this.dataSourceType
        ? this.dataSourceType.getDescription(this.dataSource, this.builder)
        : this.$t('dataSourceItem.notConfigured')
    },
  },
  methods: {},
}
</script>