SpeciesFileGroup/taxonworks

View on GitHub
app/javascript/vue/tasks/images/new_image/components/Panel/PanelDepicSome.vue

Summary

Maintainability
Test Coverage
<template>
  <BlockLayout>
    <template #header>
      <h3>Depict some</h3>
    </template>
    <template #body>
      <ul class="no_bullets">
        <li
          v-for="item in OBJECT_TYPES"
          :key="item.type"
        >
          <label>
            <input
              v-model="selectedType"
              type="radio"
              name="depicsome"
              :value="item"
            />
            {{ item.label }}
          </label>
        </li>
      </ul>
      <SmartSelector
        v-if="selectedType"
        class="margin-medium-top"
        :otu-picker="isOtuType"
        :autocomplete="!isOtuType"
        :model="selectedType.model"
        :klass="selectedType.type"
        target="Depiction"
        @selected="addToList"
      />

      <TableList
        v-if="listCreated.length"
        class="margin-medium-top"
        :list="listCreated"
        :header="['Objects', '']"
        :delete-warning="false"
        soft-delete
        annotator
        navigator
        quick-forms
        :attributes="['label']"
        @delete="
          (item) => store.commit(MutationNames.RemoveObjectForDepictions, item)
        "
      />
    </template>
  </BlockLayout>
</template>

<script setup>
import BlockLayout from '@/components/layout/BlockLayout.vue'
import SmartSelector from '@/components/ui/SmartSelector'
import TableList from '@/components/table_list'

import { GetterNames } from '../../store/getters/getters.js'
import { MutationNames } from '../../store/mutations/mutations.js'
import { computed, ref } from 'vue'
import { useStore } from 'vuex'
import { OTU, COLLECTING_EVENT, COLLECTION_OBJECT } from '@/constants'

const store = useStore()

const listCreated = computed(
  () => store.getters[GetterNames.GetObjectsForDepictions]
)
const isOtuType = computed(() => selectedType.value?.type === OTU)

const OBJECT_TYPES = [
  {
    type: OTU,
    label: 'Otu',
    model: 'otus'
  },
  {
    type: COLLECTING_EVENT,
    label: 'Collecting event',
    model: 'collecting_events'
  },
  {
    type: COLLECTION_OBJECT,
    label: 'Collection object',
    model: 'collection_objects'
  },
  {
    type: 'Person',
    label: 'Person',
    model: 'people'
  }
]
const selectedType = ref()

function addToList(item) {
  store.commit(MutationNames.AddObjectForDepictions, {
    id: item.id,
    label: item.object_label,
    global_id: item.global_id,
    base_class: selectedType.value.type
  })
}
</script>