Olivier Massot 4 years ago
parent
commit
f0efc5d821

+ 4 - 4
components/Ui/Form.vue

@@ -94,16 +94,16 @@ export default defineComponent({
     const { $dataPersister, store, app: { router, i18n } } = useContext()
     const { markFormAsDirty, markFormAsNotDirty } = $useDirtyForm(store)
 
-    const { id, query }:ToRefs = toRefs(props)
-    const properties:UnwrapRef<AnyJson> = reactive({
+    const { id, query }: ToRefs = toRefs(props)
+    const properties: UnwrapRef<AnyJson> = reactive({
       valid: false,
       saveOk: false,
       saveKo: false
     })
 
-    const readOnly:Ref<boolean> = ref(false)
+    const readOnly: Ref<boolean> = ref(false)
 
-    const entry:ComputedRef<AnyJson> = computed(() => {
+    const entry: ComputedRef<AnyJson> = computed(() => {
       return queryHelper.getFlattenEntry(query.value, id.value)
     })
 

+ 77 - 0
components/Ui/Input/Phone.vue

@@ -0,0 +1,77 @@
+<!--
+CHamps de saisie d'un numéro de téléphone
+
+@see https://github.com/yogakurniawan/vue-tel-input-vuetify
+-->
+
+<template>
+  <vue-tel-input-vuetify
+    :field="field"
+    :label="label"
+    :value="data"
+    @input="onChange"
+  />
+</template>
+
+<script lang="ts">
+import { defineComponent } from '@nuxtjs/composition-api'
+
+export default defineComponent({
+  props: {
+    label: {
+      type: String,
+      required: false,
+      default: ''
+    },
+    field: {
+      type: String,
+      required: false,
+      default: null
+    },
+    type: {
+      type: String,
+      required: false,
+      default: null
+    },
+    data: {
+      type: [String, Number],
+      required: false,
+      default: null
+    },
+    readOnly: {
+      type: Boolean,
+      required: false
+    },
+    rules: {
+      type: Array,
+      required: false,
+      default: () => []
+    },
+    error: {
+      type: Boolean,
+      required: false
+    },
+    errorMessage: {
+      type: String,
+      required: false,
+      default: null
+    }
+  },
+  setup (props) {
+    return {
+      label_field: props.label ?? props.field
+    }
+  },
+  methods: {
+    onChange (_, { number }) {
+      this.$emit('update', number.e164, this.field)
+    }
+  }
+})
+</script>
+
+<style>
+input:read-only{
+  color: #666 !important;
+}
+</style>

+ 2 - 1
lang/field/fr-FR.js

@@ -69,6 +69,7 @@ export default (context, locale) => {
     addressCity: 'Ville',
     country: 'Pays',
     addresstype: 'Nature',
-    contactpoint_type: 'Type de contact'
+    contactpoint_type: 'Type de contact',
+    phoneNumberInvalid: 'Numéro de téléphone invalide'
   })
 }

+ 3 - 1
services/rights/abilitiesUtils.ts

@@ -78,7 +78,9 @@ class AbilitiesUtils {
     const abilitiesByRoles = this.getAbilitiesByRoles(this.$store.state.profile.access.roles)
     this.$ability.update(abilitiesByRoles)
     this.initFactory()
-    return abilitiesByRoles.concat(this.getAbilitiesByConfig('./config/abilities/config.yaml'))
+    return abilitiesByRoles.concat(
+      this.getAbilitiesByConfig('./config/abilities/config.yaml')
+    )
   }
 
   /**

+ 1 - 2
services/serializer/denormalizer/yaml.ts

@@ -20,10 +20,9 @@ class Yaml extends BaseDenormalizer {
    */
   public static denormalize (data: AnyJson): AnyJson {
     try {
-      // noinspection TypeScriptValidateJSTypes,JSVoidFunctionReturnValueUsed
       return yaml.load(yaml.dump(read(data.path)))
     } catch (e) {
-      throw new Error(e.message)
+      throw new Error('Cannot determine user abilities: ' + e.message)
     }
   }
 }