Creation.vue 1.9 KB

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