SpeciesFileGroup/taxonworks

View on GitHub
app/javascript/vue/tasks/people/filter/components/Facet/FacetPerson.vue

Summary

Maintainability
Test Coverage
<template>
  <FacetContainer>
    <h3>Name</h3>
    <div
      class="field"
      v-help.facets.name.fullName
    >
      <label class="display-block">Full name</label>
      <input
        class="full_width"
        v-model="params.name"
        placeholder="von Smith III, Alex; prefix last name suffix, first name"
        type="text"
      />
      <label>
        <input
          v-model="params.exact"
          type="checkbox"
          value="name"
        />
        Exact
      </label>
    </div>
    <div class="field label-above">
      <label>Near (Levenshtein)</label>
      <select v-model="params.levenshtein_cuttoff">
        <option :value="undefined" />
        <option
          v-for="n in 5"
          :key="n"
          :value="n"
        >
          {{ n }}
        </option>
      </select>
    </div>
    <h4>Parts</h4>
    <div
      v-for="{ label, param } in fields"
      :key="param"
      class="field"
    >
      <label class="display-block">{{ label }}</label>
      <input
        class="full_width"
        type="text"
        v-model="params[param]"
      />
      <label>
        <input
          type="checkbox"
          :value="param"
          v-model="params.exact"
        />
        Exact
      </label>
    </div>
  </FacetContainer>
</template>

<script setup>
import FacetContainer from '@/components/Filter/Facets/FacetContainer.vue'
import { computed } from 'vue'
import { URLParamsToJSON } from '@/helpers/url/parse'

const props = defineProps({
  modelValue: {
    type: Object,
    required: true
  }
})

const fields = [
  {
    label: 'First name',
    param: 'first_name'
  },
  {
    label: 'Last name',
    param: 'last_name'
  },
  {
    label: 'Suffix',
    param: 'suffix'
  },
  {
    label: 'Prefix',
    param: 'prefix'
  }
]

const emit = defineEmits(['update:modelValue'])

const params = computed({
  get: () => props.modelValue,
  set: (value) => emit('update:modelValue', value)
})

const urlParams = URLParamsToJSON(location.href)

Object.assign(params.value, {
  name: urlParams.name,
  first_name: urlParams.first_name,
  last_name: urlParams.last_name,
  suffix: urlParams.suffix,
  prefix: urlParams.prefix,
  exact: Array.isArray(urlParams.exact) ? urlParams.exact : []
})
</script>