| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import {AnyJson} from '~/types/interfaces'
- import {QUERY_TYPE} from "~/types/enums";
- import DataProvider from "~/services/data/dataProvider";
- /**
- * @category composables/data
- * @param $dataProvider
- * Composable class qui regroupe les utils des adresses postales
- */
- export function useAddressPostalUtils($dataProvider: DataProvider) {
- /**
- * Fonction de recherche qui utilise l'API gouvernematal pour autocompléter les CP et villes.
- * @param research
- * @param field
- * @private
- */
- async function searchFunction(research: string, field: string): Promise<Array<AnyJson>> {
- if (research) {
- const response = await $dataProvider.invoke({
- type: QUERY_TYPE.DEFAULT,
- url: `https://api-adresse.data.gouv.fr/search/?q=${research}&type=municipality&autocomplete=1&limit=20`,
- params: {
- noXaccessId: true
- }
- })
- const apiResponse = response.data.features.map((data: AnyJson) => data.properties)
- // Par défaut on insère les valeurs que l'utilisateur a écrit, car un nom de ville ou de CP peut être absent de l'API
- const defaultResponse = []
- if (field === 'addressPostal.addressCity') {
- defaultResponse.push({id: 0, postcode: null, city: research})
- } else {
- defaultResponse.push({id: 0, postcode: research, city: null})
- }
- return defaultResponse.concat(apiResponse)
- }
- return []
- }
- /**
- * Fonction permettant de mettre à jour le repo par rapport à la réponse (objet) de l'autocomplete
- * @param value
- * @param updateRepository
- * @private
- */
- function updateCpAddress(value: AnyJson, updateRepository: Function): void {
- //Si une valeur est présente
- if (value) {
- if (value.city)
- updateRepository(value.city, 'addressPostal.addressCity')
- if (value.postcode)
- updateRepository(value.postcode, 'addressPostal.postalCode')
- } else {
- //Cas où on efface les valeurs des champs
- updateRepository(null, 'addressPostal.addressCity')
- updateRepository(null, 'addressPostal.postalCode')
- }
- }
- return {
- searchFunction,
- updateCpAddress
- }
- }
|