Skip to content
Snippets Groups Projects
AddShowModal.vue 3.33 KiB
Newer Older
  <AEditDialog
    ref="dialog"
    :save="save"
    :title="t('showCreator.title')"
    :save-label="t('showCreator.title')"
    data-testid="add-show-modal"
      <FormGroup v-slot="attrs" :errors="errors.forField('name')" :label="t('show.fields.name')">
        <input
          v-bind="attrs"
          v-model="showData.name"
          type="text"
          required
          data-testid="add-show-modal:show-name"
        />
      </FormGroup>
      <FormGroup
        v-if="slugErrors.length > 0"
        v-slot="attrs"
        :errors="slugErrors"
        :label="t('show.fields.slug')"
      >
        <input
          v-bind="attrs"
          v-model="showData.slug"
          type="text"
          required
          data-testid="add-show-modal:slug"
        />
      </FormGroup>
      <FormGroup
        v-slot="attrs"
        :errors="errors.forField('shortDescription')"
        :label="t('show.fields.shortDescription')"
      >
        <textarea
          v-bind="attrs"
          v-model="showData.shortDescription"
          required
          data-testid="add-show-modal:show-description"
        />
      </FormGroup>
      <FormGroup
        v-slot="attrs"
        :errors="errors.forField('typeId')"
        :label="t('show.fields.typeId')"
      >
        <select
          v-bind="attrs"
          v-model="showData.typeId"
          required
          data-testid="add-show-modal:show-type"
        >
          <option v-for="type in typeStore.items" :key="type.id" :value="type.id">
            {{ type.name }}
          </option>
        </select>
      </FormGroup>
      <FormGroup
        v-slot="attrs"
        :errors="errors.forField('fundingCategoryId')"
        :label="t('show.fields.fundingCategoryId')"
      >
        <select
          v-bind="attrs"
          v-model="showData.fundingCategoryId"
          required
          data-testid="add-show-modal:show-funding-category"
        >
          <option v-for="cat in fundingCategoryStore.items" :key="cat.id" :value="cat.id">
            {{ cat.name }}
          </option>
        </select>
      </FormGroup>
    </FormTable>
  </AEditDialog>
<script setup lang="ts">
import { computed, Ref, ref } from 'vue'
import { useRouter } from 'vue-router'
import { useCreateBehaviour } from '@/form'
import { useI18n } from '@/i18n'
import { useFundingCategoryStore, useShowStore, useTypeStore } from '@/stores'
import { NewShow, newShow } from '@/stores/shows'
import AEditDialog from '@/components/generic/AEditDialog.vue'
import FormGroup from '@/components/generic/FormGroup.vue'
import FormTable from '@/components/generic/FormTable.vue'
const { t } = useI18n()
const dialog = ref()
const router = useRouter()
const showStore = useShowStore()
const typeStore = useTypeStore()
const fundingCategoryStore = useFundingCategoryStore()
const showData = ref() as Ref<NewShow>
const { create, errors } = useCreateBehaviour(showStore.create)
const slugErrors = computed(() => errors.value.forField('slug'))
async function save() {
  const newShow = await create(showData.value)
  close()
  await router.push({ name: 'show-basic-data', params: { showId: newShow.id } })
}
  showData.value = newShow()
defineExpose({
  open: () => dialog.value.open(),
  close: () => dialog.value.close(),
})