SpeciesFileGroup/taxonworks

View on GitHub
app/javascript/vue/tasks/containers/new_container/components/ContainerParent.vue

Summary

Maintainability
Test Coverage
<template>
  <div class="field">
    <label>Parent</label>
    <VAutocomplete
      v-if="!parentId"
      url="/containers/autocomplete"
      placeholder="Search a container..."
      param="term"
      label="label"
      @get-item="(container) => (parentId = container.id)"
    />
    <div
      v-if="parent"
      class="horizontal-left-content gap-small middle"
    >
      <input
        class="full_width"
        type="text"
        disabled="true"
        :value="parent.object_label"
      />
      <VBtn
        color="primary"
        circle
        @click="() => (parentId = null)"
      >
        <VIcon
          name="trash"
          x-small
        />
      </VBtn>
    </div>
  </div>
</template>

<script setup>
import { ref, watch } from 'vue'
import { Container } from '@/routes/endpoints'
import { CONTAINER_PARAMETERS } from '../constants'
import VAutocomplete from '@/components/ui/Autocomplete.vue'
import VBtn from '@/components/ui/VBtn/index.vue'
import VIcon from '@/components/ui/VIcon/index.vue'

const props = defineProps({
  types: {
    type: Array,
    default: () => []
  }
})

const parentId = defineModel({
  type: [Number, null],
  required: true
})

const parent = ref()

watch(parentId, (newVal) => {
  if (newVal) {
    Container.find(newVal, CONTAINER_PARAMETERS).then(({ body }) => {
      parent.value = body
    })
  } else {
    parent.value = undefined
  }
})
</script>