useAddressPostalUtils.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import {AnyJson} from '~/types/interfaces'
  2. import {QUERY_TYPE} from "~/types/enums";
  3. import DataProvider from "~/services/data/dataProvider";
  4. /**
  5. * @category composables/data
  6. * @param $dataProvider
  7. * Composable class qui regroupe les utils des adresses postales
  8. */
  9. export function useAddressPostalUtils($dataProvider: DataProvider) {
  10. /**
  11. * Fonction de recherche qui utilise l'API gouvernematal pour autocompléter les CP et villes.
  12. * @param research
  13. * @param field
  14. * @private
  15. */
  16. async function searchFunction(research: string, field: string): Promise<Array<AnyJson>> {
  17. if (research) {
  18. const response = await $dataProvider.invoke({
  19. type: QUERY_TYPE.DEFAULT,
  20. url: `https://api-adresse.data.gouv.fr/search/?q=${research}&type=municipality&autocomplete=1&limit=20`,
  21. params: {
  22. noXaccessId: true
  23. }
  24. })
  25. const apiResponse = response.data.features.map((data: AnyJson) => data.properties)
  26. // 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
  27. const defaultResponse = []
  28. if (field === 'addressPostal.addressCity') {
  29. defaultResponse.push({id: 0, postcode: null, city: research})
  30. } else {
  31. defaultResponse.push({id: 0, postcode: research, city: null})
  32. }
  33. return defaultResponse.concat(apiResponse)
  34. }
  35. return []
  36. }
  37. /**
  38. * Fonction permettant de mettre à jour le repo par rapport à la réponse (objet) de l'autocomplete
  39. * @param value
  40. * @param updateRepository
  41. * @private
  42. */
  43. function updateCpAddress(value: AnyJson, updateRepository: Function): void {
  44. //Si une valeur est présente
  45. if (value) {
  46. if (value.city)
  47. updateRepository(value.city, 'addressPostal.addressCity')
  48. if (value.postcode)
  49. updateRepository(value.postcode, 'addressPostal.postalCode')
  50. } else {
  51. //Cas où on efface les valeurs des champs
  52. updateRepository(null, 'addressPostal.addressCity')
  53. updateRepository(null, 'addressPostal.postalCode')
  54. }
  55. }
  56. return {
  57. searchFunction,
  58. updateCpAddress
  59. }
  60. }