]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/home_location_name-endpoint.js
Merge remote-tracking branch 'upstream/pull/5957'
[rails.git] / app / assets / javascripts / home_location_name-endpoint.js
1 OSM.HomeLocationNameGeocoder = function Endpoint(latInput, lonInput, locationNameInput) {
2   const endpoint = {
3     autofill: true,
4     countryName: locationNameInput.val().trim()
5   };
6
7   let requestController = null;
8
9   endpoint.updateHomeLocationName = function (
10     updateInput = true,
11     lat = latInput.val().trim(),
12     lon = lonInput.val().trim(),
13     successFn
14   ) {
15     if (!lat || !lon || !endpoint.autofill) {
16       return;
17     }
18
19     const geocodeUrl = "/search/nominatim_reverse_query",
20           csrf_param = $("meta[name=csrf-param]").attr("content"),
21           csrf_token = $("meta[name=csrf-token]").attr("content"),
22           params = new URLSearchParams({
23             lat,
24             lon,
25             zoom: 3
26           });
27     params.set(csrf_param, csrf_token);
28
29     if (requestController) {
30       requestController.abort();
31     }
32     const currentRequestController = new AbortController();
33     requestController = currentRequestController;
34
35     fetch(geocodeUrl, {
36       method: "POST",
37       body: params,
38       signal: requestController.signal,
39       headers: { accept: "application/json" }
40     })
41       .then((response) => response.json())
42       .then((data) => {
43         const country = data.length ? data[0].name : "";
44
45         if (updateInput) {
46           $("#home_location_name").val(country);
47         } else if (endpoint.countryName !== country) {
48           endpoint.autofill = false;
49         }
50         endpoint.countryName = country;
51         requestController = null;
52
53         if (successFn) {
54           successFn();
55         }
56       })
57       .catch(() => {
58         if (currentRequestController === requestController) {
59           requestController = null;
60         }
61       });
62   };
63
64   return endpoint;
65 };