diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 66e64a07562973fed493f82ab876a84927c5d154..cb0ced8d4aff2cbd4417fb6b2092ee15e37557dd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -98,7 +98,7 @@ phpstan: - master eslint: - image: node:14 + image: node:16 script: - npm install && npm run lint stage: quality-assurance diff --git a/package-lock.json b/package-lock.json index 52e4125a7fb83a69e107d8c3f83c1a2a8e763c41..79a160425aa3a819506f4da4ee49eb9292fef3c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7351,9 +7351,9 @@ } }, "node_modules/img-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -8026,9 +8026,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -11355,9 +11355,9 @@ } }, "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -11714,9 +11714,9 @@ } }, "node_modules/vue-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -11781,9 +11781,9 @@ } }, "node_modules/vue-style-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -18203,9 +18203,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -18693,9 +18693,9 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "jsonfile": { @@ -21167,9 +21167,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -21458,9 +21458,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -21520,9 +21520,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" diff --git a/resources/js/components/Auth/Login.vue b/resources/js/components/Auth/Login.vue index 05a3d05dd6ad83af579eb1284dcfb7e71ac39107..9833ad5092b5fb2603df194dfbc2ed1c88b073a3 100644 --- a/resources/js/components/Auth/Login.vue +++ b/resources/js/components/Auth/Login.vue @@ -113,13 +113,6 @@ </div> </div> </template> -<style> - .login-footer{ - position: fixed; - bottom:0px; - width:100%; - } -</style> <script> import axios from 'axios' export default { @@ -167,3 +160,10 @@ export default { } } </script> +<style> + .login-footer{ + position: fixed; + bottom:0px; + width:100%; + } +</style> diff --git a/resources/js/components/Dashboard/AdminView/Components/MaturityCyberMap.vue b/resources/js/components/Dashboard/AdminView/Components/MaturityCyberMap.vue index 8b29e09ef5fccf2578729584b2b66e084998a323..7f34111f6654b6db60677ef963aef1d2a43c91c3 100644 --- a/resources/js/components/Dashboard/AdminView/Components/MaturityCyberMap.vue +++ b/resources/js/components/Dashboard/AdminView/Components/MaturityCyberMap.vue @@ -8,10 +8,10 @@ </select> <div class="row"> - <div class='my-2 col-md-6 text-right' @click="stripetext('green')" :style= "[disabledFilter.includes('green') ? {'text-decoration':'line-through'} : {'text-decoration':''}]"> + <div class='my-2 col-md-6 text-right' :style= "[disabledFilter.includes('green') ? {'text-decoration':'line-through'} : {'text-decoration':''}]" @click="stripetext('green')"> <div class="mr-2 d-inline-block" style="height: 15px; width: 35px; background-color: green;"></div><span class="text-muted small">En règle</span> </div> - <div class='my-2 col-md-6 text-left' @click="stripetext('red')" :style= "[disabledFilter.includes('red') ? {'text-decoration':'line-through'} : {'text-decoration':''}]"> + <div class='my-2 col-md-6 text-left' :style= "[disabledFilter.includes('red') ? {'text-decoration':'line-through'} : {'text-decoration':''}]" @click="stripetext('red')"> <div class="mr-2 d-inline-block" style="height: 15px; width: 35px; background-color: red;"></div><span class="text-muted small">En alerte</span> </div> </div> @@ -56,29 +56,29 @@ export default { return this.$store.state.measures.all.filter( m => m.fundamental) }, organizations () { - let orgs = this.$store.state.organizations.all.filter(org => org.active).map( org => { - let evaluations = this.evaluations.filter( e => e.organization_id === org.id) - .filter( e => e.status === 2) - .sort( (a,b) => new Date(b.updated_at) - new Date(a.updated_at)) + const orgs = this.$store.state.organizations.all.filter(org => org.active).map( org => { + const evaluations = this.evaluations.filter( e => e.organization_id === org.id) + .filter( e => e.status === 2) + .sort( (a,b) => new Date(b.updated_at) - new Date(a.updated_at)) const getInsideSeuilAlerte = evaluations.length ? evaluations[0].measure_levels.filter( ml => this.fundamentalMeasuresId.includes(ml.measure_id)).filter( ml => ml.actual_level <= this.seuilAlerte) : [] - return {...org, evaluations : evaluations, seuilAlert : getInsideSeuilAlerte} + return {...org, evaluations, seuilAlert : getInsideSeuilAlerte} }) return orgs .filter( org => this.disabledFilter.length ? this.disabledFilter.length > 1 ? false : this.disabledFilter.includes('red') ? !org.seuilAlert.length : this.disabledFilter.includes('green') ? org.seuilAlert.length : true : true) - .filter( org => this.measureFilter ? org.seuilAlert.find(a => a.measure_id === this.measureFilter) : true) + .filter( org => this.measureFilter ? org.seuilAlert.find(a => a.measure_id === this.measureFilter) : true) }, }, - mounted () { - this.initMap() - }, watch : { organizations () { this.initMarkers() } }, + mounted () { + this.initMap() + }, methods : { stripetext(id){ if (this.disabledFilter.includes(id)) { @@ -112,14 +112,14 @@ export default { if (org.evaluations.length) { // Cette carte affiche un point par structure ayant au moins une évaluation - let color = org.seuilAlert.length ? "red" : "green" + const color = org.seuilAlert.length ? "red" : "green" - const style = { radius: 5, fillColor: color, fillOpacity: 1, color: color, organization: org} + const style = { radius: 5, fillColor: color, fillOpacity: 1, color, organization: org} const latlng = org.address && org.address.lat && org.address.lng? [parseFloat(org.address.lat), parseFloat(org.address.lng)] : [] if (latlng.length) { - let measureText = org.seuilAlert.map(a => a.measure.short_name) - let alertText = org.seuilAlert.length ? "<br/><i><small>Mesures de sécurité fondamentales en alerte :</small></i> " + measureText.join(', ') : "" + const measureText = org.seuilAlert.map(a => a.measure.short_name) + const alertText = org.seuilAlert.length ? "<br/><i><small>Mesures de sécurité fondamentales en alerte :</small></i> " + measureText.join(', ') : "" this.markerClusterGroup.addLayer(L.circleMarker(latlng, style) .bindPopup(` diff --git a/resources/js/components/Dashboard/ManagerView/Components/ActionsDoneCard.vue b/resources/js/components/Dashboard/ManagerView/Components/ActionsDoneCard.vue index 6add1817e5c01bdfbfb63ace58c6a7cee12bd450..b51cf2988c3f8013dd6aab10e9643e758f7c7ac0 100644 --- a/resources/js/components/Dashboard/ManagerView/Components/ActionsDoneCard.vue +++ b/resources/js/components/Dashboard/ManagerView/Components/ActionsDoneCard.vue @@ -1,5 +1,5 @@ <template> - <div class="col-md-6" v-if="plannedMeasures && plannedMeasures.length > 0"> + <div v-if="plannedMeasures && plannedMeasures.length > 0" class="col-md-6"> <div class="card flex-row"> <div class="col-4 bg-primary"> <i class="fas fa-crosshairs" style="font-size: 50px;"></i> diff --git a/resources/js/components/Evaluations/Single/Components/Results/Dangers.vue b/resources/js/components/Evaluations/Single/Components/Results/Dangers.vue index 00bcf7bf0d520550c044b552d23fa8e20c833ec4..7bbd91791d6b1ce8f619e1a97de36a753ddb7335 100644 --- a/resources/js/components/Evaluations/Single/Components/Results/Dangers.vue +++ b/resources/js/components/Evaluations/Single/Components/Results/Dangers.vue @@ -38,6 +38,9 @@ import DangerLine from "./DangerLine"; export default { name: 'ResultDangers', + components: { + DangerLine, + }, props : ['evaluation'], computed : { dangers () { @@ -51,11 +54,6 @@ export default { return this.$store.state.graphs[this.evaluation.id].exposition; } }, - methods : { - getLevel(dangerId) { - return this.evaluation.danger_levels.find(dl => dl.danger_id === dangerId).level - } - }, async mounted () { this.loaded = false if (typeof this.$store.state.graphs[this.evaluation.id] === 'undefined' || typeof this.$store.state.graphs[this.evaluation.id].exposition === 'undefined') { @@ -66,8 +64,10 @@ export default { } this.loaded = true }, - components: { - DangerLine, + methods : { + getLevel(dangerId) { + return this.evaluation.danger_levels.find(dl => dl.danger_id === dangerId).level + } } } </script> diff --git a/resources/js/components/Evaluations/Single/Components/Results/MaturityCyber.vue b/resources/js/components/Evaluations/Single/Components/Results/MaturityCyber.vue index 648d81a492436ea1fcbbeb6a00a6de6203810e9f..1a200fca4f86aadb949df132bc3f6c0948e3d2d1 100644 --- a/resources/js/components/Evaluations/Single/Components/Results/MaturityCyber.vue +++ b/resources/js/components/Evaluations/Single/Components/Results/MaturityCyber.vue @@ -6,7 +6,7 @@ </div> </div> <div class="card-body offset-md-3 col-md-6"> - <Radar :chart-data="chartData" :chart-options="options" v-if="chartData" /> + <Radar v-if="chartData" :chart-data="chartData" :chart-options="options" /> </div> </div> </template> diff --git a/resources/js/components/Evaluations/Single/Components/Step4/MeasureActionForm.vue b/resources/js/components/Evaluations/Single/Components/Step4/MeasureActionForm.vue index ffb5fa0d9a89003e08a07d9e97768b81b6c91bc1..97a06e315b93708d9a69435d3b4371156bb79f22 100644 --- a/resources/js/components/Evaluations/Single/Components/Step4/MeasureActionForm.vue +++ b/resources/js/components/Evaluations/Single/Components/Step4/MeasureActionForm.vue @@ -31,11 +31,11 @@ <label :for="`manager${measure.id}`" class="mt-2" :class="{ 'text-danger': submitted && $v.manager.$error }"> Choisir la personne en charge <i class="text-muted small">(Obligatoire)</i></label> <input :id="`manager${measure.id}`" - @change="event => manager = event.target.value" :value="manager" type="text" class="form-control form-control-sm" :disabled="!isEditable" + @change="event => manager = event.target.value" /> </div> @@ -89,7 +89,7 @@ export default { evaluation.measure_levels = this.evaluation.measure_levels.map(m => m.measure_id === this.measure.id ? ({...m, expected_level : parseInt(newValue, 10) }) : m) - console.log(' evaluation.measure_levels', evaluation.measure_levels) + console.log(' evaluation.measure_levels', evaluation.measure_levels) this.$store.dispatch('saveDraftEvaluation', {...evaluation, toast: false}).then(() => { this.$store.dispatch('getGraphForEvaluation', {name: 'risks', id:evaluation.id}) this.$store.dispatch('getGraphForEvaluation', {name: 'futurerisks', id:evaluation.id}) diff --git a/resources/js/components/Evaluations/Single/Components/Step4/PlanAction.vue b/resources/js/components/Evaluations/Single/Components/Step4/PlanAction.vue index bc85219f547139a159d1da4007934493f4515762..92b42c0697d7ee0795d9bb9306e7073736aa7244 100644 --- a/resources/js/components/Evaluations/Single/Components/Step4/PlanAction.vue +++ b/resources/js/components/Evaluations/Single/Components/Step4/PlanAction.vue @@ -9,8 +9,8 @@ <div class="card-body"> <p v-if="measures && measures.length">Dans la liste des mesures, veuillez choisir celles à mettre en place, puis planifiez-les sur un an :</p> <p v-if="!isOneLevelExpected && submitted" class="text-danger"><i class="fas fa-exclamation-circle"></i> Veuillez sélectionner au moins une action.</p> - <div class="row" v-if="measures && measures.length"> - <div :id="`measure-level-for-measure-${measure.id}`" v-for="(measure, index) in measures" :key="measure.id" class="col-xl-3 col-lg-4 col-md-6 col-12"> + <div v-if="measures && measures.length" class="row"> + <div v-for="(measure, index) in measures" :id="`measure-level-for-measure-${measure.id}`" :key="measure.id" class="col-xl-3 col-lg-4 col-md-6 col-12"> <MeasureLevelSelector v-if="measureLevelSelected(measure)" :ref="`Measure${measure.id}`" @@ -23,7 +23,7 @@ /> </div> </div> - <div class="row my-5" v-else-if="!loading"> + <div v-else-if="!loading" class="row my-5"> <div class="col-2"></div> <div class="col-8 mt-5"> <p class="text-center text-lg"> @@ -35,7 +35,7 @@ </div> <div class="col-2"></div> </div> - <div class="row my-5" v-else-if="loading"> + <div v-else-if="loading" class="row my-5"> <div class="col-2"></div> <div class="col-8 mt-5"> <p class="text-center text-lg"> @@ -92,6 +92,10 @@ export default { return this.$store.state.graphs[this.evaluation.id].bestMeasures } }, + mounted() { + console.log('plan action mounted') + this.$store.dispatch('getBestMeasures', {id: this.evaluation.id}) + }, methods : { measureLevelSelected (measure) { return this.evaluation && this.evaluation.measure_levels.find(m => m.measure_id === measure.id) @@ -106,10 +110,6 @@ export default { return false } }, - }, - mounted() { - console.log('plan action mounted') - this.$store.dispatch('getBestMeasures', {id: this.evaluation.id}) } } </script> diff --git a/resources/js/components/Organizations/Single/AddressBlock.vue b/resources/js/components/Organizations/Single/AddressBlock.vue index dbefdaeabc2b392d24840056ec7ebfd164c24774..8664c43cc4ff3c4ae82259ca38b47e72ef384fc6 100644 --- a/resources/js/components/Organizations/Single/AddressBlock.vue +++ b/resources/js/components/Organizations/Single/AddressBlock.vue @@ -35,7 +35,7 @@ </div> <div class="form-group"> <label :class="{ 'text-danger': submitted && $v.address.city.$error }" for="ville">Ville</label> <i - class="text-muted small">(Obligatoire)</i> + class="text-muted small">(Obligatoire)</i> <input id="ville" v-model="address.city" type="text" class="form-control form-control-sm" @@ -63,15 +63,15 @@ import PositionBlock from './PositionBlock.vue' export default { name: 'AddressBlock', + components : { + PositionBlock, + }, props: ['orgAddress', 'submitted'], data() { return { address: this.orgAddress } }, - components : { - PositionBlock, - }, computed: {}, validations: { address: { diff --git a/resources/js/components/Organizations/Single/PositionBlock.vue b/resources/js/components/Organizations/Single/PositionBlock.vue index 38634bc7b290e29c5ab04b9beb87a6678e6dd2b2..1903aa2dfba594809746e3c0d26d5af60b1f440b 100644 --- a/resources/js/components/Organizations/Single/PositionBlock.vue +++ b/resources/js/components/Organizations/Single/PositionBlock.vue @@ -1,6 +1,6 @@ <template> <div> - <button @click.prevent="locateAddress" class="btn btn-primary btn-sm mb-2"><i :class="loading ? 'fa fa-spinner fa-spin' : ''"></i> Localiser l'adresse</button> + <button class="btn btn-primary btn-sm mb-2" @click.prevent="locateAddress"><i :class="loading ? 'fa fa-spinner fa-spin' : ''"></i> Localiser l'adresse</button> <div id="map"></div> </div> </template> @@ -53,8 +53,8 @@ export default { mouseup: () => { this.map.dragging.enable() this.map.off('mousemove') - } - }) + } + }) this.marker.addTo(this.map) const latLngs = [ this.marker.getLatLng() ]; @@ -64,8 +64,8 @@ export default { async locateAddress () { console.log('locateAddress') if (!this.address.address || !this.address.cp || !this.address.city) { - this.$emit('addressError', "L'adresse n'est pas complète") - return + this.$emit('addressError', "L'adresse n'est pas complète") + } else { this.loading = true await axios.get(`https://api-adresse.data.gouv.fr/search/?autocomplete=1&postcode=${this.address.cp}&q=${this.fullAddress}`, @@ -75,25 +75,25 @@ export default { } } ) - .then(res => { - this.loading = false + .then(res => { + this.loading = false - if (!res.data.features.length) { - this.$emit('addressError', "L'adresse n'a pas été trouvée") - return; - } else { - this.enableMap = true - const pointData = res.data.features[0] + if (!res.data.features.length) { + this.$emit('addressError', "L'adresse n'a pas été trouvée") + + } else { + this.enableMap = true + const pointData = res.data.features[0] - this.marker && this.map.removeLayer(this.marker) + this.marker && this.map.removeLayer(this.marker) - this.setMarker(pointData.geometry.coordinates[1], pointData.geometry.coordinates[0]) - } - }) - .catch( () => { - this.loading = false; - this.$emit('addressError', "L'adresse n'a pas été trouvée") - }) + this.setMarker(pointData.geometry.coordinates[1], pointData.geometry.coordinates[0]) + } + }) + .catch( () => { + this.loading = false; + this.$emit('addressError', "L'adresse n'a pas été trouvée") + }) } } }