SubdomainNew.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <!-- Component d'un formulaire pour la saisie d'un nouveau subdomain -->
  2. <template>
  3. <main>
  4. <LayoutContainer>
  5. <v-card class="mb-5 mt-4">
  6. <FormToolbar title="subdomain" icon="fa-at"/>
  7. <UiForm
  8. :id="id"
  9. :model="model"
  10. :query="query()"
  11. :submitActions="submitActions">
  12. <template #form.input="{entry, updateRepository}">
  13. <v-container fluid class="container">
  14. <v-row>
  15. <v-col cols="12" sm="6">
  16. <div>{{ $t('pleaseEnterYourNewSubdomain')}} :</div>
  17. </v-col>
  18. </v-row>
  19. <v-row>
  20. <v-col cols="12" sm="6">
  21. <UiInputText
  22. field="subdomain"
  23. label="subdomain"
  24. :data="entry['subdomain']"
  25. @update="updateRepository"
  26. type="string"
  27. :rules="rules().subdomainRules"
  28. />
  29. </v-col>
  30. </v-row>
  31. </v-container>
  32. </template>
  33. <template #form.button>
  34. <NuxtLink :to="{ path: '/parameters/communication'}" class="no-decoration">
  35. <v-btn class="mr-4 ot_light_grey ot_grey--text">
  36. {{ $t('back') }}
  37. </v-btn>
  38. </NuxtLink>
  39. </template>
  40. </UiForm>
  41. </v-card>
  42. </LayoutContainer>
  43. </main>
  44. </template>
  45. <script lang="ts">
  46. import {defineComponent, computed, useContext} from '@nuxtjs/composition-api'
  47. import { Repository as VuexRepository } from '@vuex-orm/core/dist/src/repository/Repository'
  48. import { Query, Model } from '@vuex-orm/core'
  49. import { SUBMIT_TYPE} from '~/types/enums'
  50. import { repositoryHelper } from '~/services/store/repository'
  51. import {AnyJson} from "~/types/interfaces";
  52. import {Subdomain} from "~/models/Organization/Subdomain";
  53. export default defineComponent({
  54. props: {
  55. id:{
  56. type: [Number, String],
  57. required: true
  58. }
  59. },
  60. setup () {
  61. const {app:{i18n}} = useContext()
  62. const repository: VuexRepository<Model> = repositoryHelper.getRepository(Subdomain)
  63. const query: Query = repository.query()
  64. const submitActions = computed(() => {
  65. let actions:AnyJson = {}
  66. actions[SUBMIT_TYPE.SAVE_AND_BACK] = { path: `/parameters/communication` }
  67. return actions
  68. })
  69. /** todo Computed properties needs to be returned as functions until nuxt3 : https://github.com/nuxt-community/composition-api/issues/207 **/
  70. return {
  71. model: Subdomain,
  72. query: () => query,
  73. rules: () => getRules(i18n),
  74. panel: 0,
  75. submitActions
  76. }
  77. },
  78. beforeDestroy() {
  79. repositoryHelper.cleanRepository(Subdomain)
  80. }
  81. })
  82. function getRules (i18n: any) {
  83. return {
  84. subdomainRules: [
  85. (subdomain: string) => (subdomain?.length <= 60) || i18n.t('subdomain_need_to_have_less_than_60_cars'),
  86. (subdomain: string) => (true) || i18n.t('this_subdomain_is_already_used'),
  87. ]
  88. }
  89. }
  90. </script>