<template functional>
  <div
    class="grid-view__cell grid-field-file__cell"
    @drop.prevent="$options.methods.drop(parent, props, $event)"
    @dragover.prevent
    @dragenter.prevent="$options.methods.dragEnter(parent, props, $event)"
    @dragleave="$options.methods.dragLeave(parent, props, $event)"
  >
    <div
      v-show="Object.prototype.hasOwnProperty.call(props.state, props.field.id)"
      class="grid-field-file__dragging"
    >
      <div>
        <i class="grid-field-file__drop-icon iconoir-cloud-upload"></i>
        Drop here
      </div>
    </div>
    <ul v-if="Array.isArray(props.value)" class="grid-field-file__list">
      <li
        v-for="(file, index) in props.value"
        :key="file.name + index"
        class="grid-field-file__item"
      >
        <a class="grid-field-file__link">
          <img
            v-if="file.is_image"
            class="grid-field-file__image"
            :src="file.thumbnails.tiny.url"
          />
          <i
            v-else
            class="grid-field-file__icon"
            :class="$options.methods.getIconClass(file.mime_type)"
          ></i>
        </a>
      </li>
    </ul>
  </div>
</template>

<script>
import { mimetype2icon } from '@baserow/modules/core/utils/fileTypeToIcon'

export default {
  name: 'FunctionalGridViewFieldFile',
  methods: {
    getIconClass(mimeType) {
      return mimetype2icon(mimeType)
    },
    drop(parent, props, event) {
      if (props.readOnly) {
        return
      }

      parent.selectCell(props.field.id)
      parent.setState({})
      parent.$nextTick(() => {
        parent.$refs.selectedField.onDrop(event)
      })
    },
    dragEnter(parent, props, event) {
      if (props.readOnly) {
        return
      }

      parent.setState({
        [props.field.id]: event.target,
      })
    },
    dragLeave(parent, props, event) {
      if (props.readOnly) {
        return
      }

      if (
        Object.prototype.hasOwnProperty.call(props.state, props.field.id) &&
        props.state[props.field.id] === event.target
      ) {
        event.stopPropagation()
        event.preventDefault()
        parent.setState({})
      }
    },
  },
}
</script>