<template>
  <ul class="row-modal__field-list margin-bottom-0">
    <li
      v-for="field in fields"
      :key="'row-edit-field-' + field.id"
      v-sortable="{
        enabled: fieldIsSortable(field),
        id: field.id,
        update: (newOrder) => {
          $emit('order-fields', { newOrder })
        },
        handle: '[data-field-handle]',
        marginTop: -10,
      }"
      class="row-modal__field-item"
    >
      <RowEditModalField
        :ref="'field-' + field.id"
        :field="field"
        :can-be-hidden="field.primary ? primaryIsSortable : true"
        :hidden="hidden"
        :read-only="readOnly"
        :row="row"
        :view="view"
        :table="table"
        :database="database"
        :sortable="sortable && fieldIsSortable(field)"
        :can-modify-fields="canModifyFields"
        @field-updated="$emit('field-updated', $event)"
        @field-deleted="$emit('field-deleted')"
        @update="$emit('update', $event)"
        @refresh-row="$emit('refresh-row', $event)"
        @toggle-field-visibility="$emit('toggle-field-visibility', $event)"
      ></RowEditModalField>
    </li>
  </ul>
</template>

<script>
import RowEditModalField from '@baserow/modules/database/components/row/RowEditModalField'

export default {
  name: 'RowEditModalFieldsList',
  components: {
    RowEditModalField,
  },
  props: {
    primaryIsSortable: {
      type: Boolean,
      required: false,
      default: false,
    },
    fields: {
      type: Array,
      required: true,
    },
    sortable: {
      type: Boolean,
      required: true,
    },
    canModifyFields: {
      type: Boolean,
      required: false,
      default: true,
    },
    hidden: {
      type: Boolean,
      required: true,
    },
    readOnly: {
      type: Boolean,
      required: true,
    },
    row: {
      type: Object,
      required: true,
    },
    view: {
      type: [Object, null],
      required: true,
    },
    table: {
      type: Object,
      required: true,
    },
    database: {
      type: Object,
      required: true,
    },
  },
  methods: {
    fieldIsSortable(field) {
      return this.sortable && (this.primaryIsSortable || !field.primary)
    },
  },
}
</script>