Creation.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <template>
  2. <UiForm v-model="entity" :submit-actions="submitActions">
  3. <template #form.button>
  4. <v-btn v-if="goBackRoute" class="theme-neutral mr-3" @click="quit">
  5. {{ $t('cancel') }}
  6. </v-btn>
  7. </template>
  8. <slot v-bind="{ model, entity }" />
  9. </UiForm>
  10. </template>
  11. <script setup lang="ts">
  12. import type { PropType } from 'vue'
  13. import type { RouteLocationRaw } from '@intlify/vue-router-bridge'
  14. import type ApiModel from '~/models/ApiModel'
  15. import type { AnyJson } from '~/types/data'
  16. import { SUBMIT_TYPE } from '~/types/enum/enums'
  17. import { useEntityManager } from '~/composables/data/useEntityManager'
  18. const props = defineProps({
  19. /**
  20. * Classe de l'ApiModel (ex: Organization, Notification, ...)
  21. */
  22. model: {
  23. type: Function as any as () => typeof ApiModel,
  24. required: true,
  25. },
  26. /**
  27. * Route de retour
  28. */
  29. goBackRoute: {
  30. type: Object as PropType<RouteLocationRaw>,
  31. required: false,
  32. default: null,
  33. },
  34. /**
  35. * La validation est en cours
  36. */
  37. validationPending: {
  38. type: Boolean,
  39. required: false,
  40. default: false,
  41. },
  42. /**
  43. * Faut-il rafraichir le profil à la soumission du formulaire ?
  44. */
  45. refreshProfile: {
  46. type: Boolean,
  47. required: false,
  48. default: false,
  49. },
  50. })
  51. const router = useRouter()
  52. const { em } = useEntityManager()
  53. // @ts-ignore Pour une raison que j'ignore, le type Ref<ApiModel> met en erreur la prop entity de UiForm...
  54. const entity: ApiModel = reactive(em.newInstance(props.model))
  55. const submitActions = computed(() => {
  56. const actions: AnyJson = {}
  57. if (props.goBackRoute !== null) {
  58. actions[SUBMIT_TYPE.SAVE_AND_BACK] = props.goBackRoute
  59. } else {
  60. actions[SUBMIT_TYPE.SAVE] = null
  61. }
  62. return actions
  63. })
  64. const quit = () => {
  65. if (!props.goBackRoute) {
  66. throw new Error('no go back route defined')
  67. }
  68. router.push(props.goBackRoute)
  69. }
  70. </script>
  71. <style scoped lang="scss"></style>