-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
94 lines (82 loc) · 2.79 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//Elements
const formTemplate = document.querySelector('form-template');
const formElement = formTemplate.returnShadowRoot().querySelector('form');
const nameList = formTemplate.returnShadowRoot().querySelector('#name-list');
nameList.style.display = 'none';
const nameInput = formElement.elements['name'];
nameInput.addEventListener('keyup', (event) => {
if (event.target.value.trim() !== '') {
fetchHandler(event);
} else {
nameList.innerHTML = '';
nameList.style.display = 'none';
return;
}
});
//Render results
/////////////////////////////////////////////////////////////
const renderResult = (name, fullName, inn, address) => {
formElement.elements['name'].value = name;
formElement.elements['short-name'].value = name;
formElement.elements['full-name'].value = fullName;
formElement.elements['inn'].value = inn;
formElement.elements['address'].value = address;
};
const renderResults = (result) => {
if (!result || result.suggestions.length === 0) {
nameList.style.display = 'none';
return;
}
if (nameInput.blur()) {
nameList.style.display = 'none';
}
nameList.style.display = 'block';
const options = result.suggestions.map(
(item) =>
`<div
data-name='${item.value}'
data-full-name='${item.data.name.full_with_opf}'
data-inn='${item.data.inn} / ${item.data.kpp}'
data-address='${item.data.address.value}'
class="form__list-item">
<span class="form__list-item-name">${item.value}</span>
<div class="form__list-item-info">
<span>${item.data.inn}</span>
<span>${item.data.address.value}</span>
</div>
</div>`
);
const optionsString = options.join('');
nameList.innerHTML = `<span class="form__list-info">
Выберите вариант или продолжите ввод</span> ${optionsString}`;
nameList.addEventListener('click', (e) => {
const currentEl = e.target.closest('.form__list-item');
const { name, fullName, inn, address } = currentEl.dataset;
renderResult(name, fullName, inn, address);
nameList.style.display = 'none';
});
};
//Api
/////////////////////////////////////////////////////////////////////
const url = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/party';
const token = '90837c3dcbda670757700967e6d12a064eaf4dff';
const fetchHandler = (event) => {
const query = event.target.value;
const options = {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
Authorization: 'Token ' + token,
},
body: JSON.stringify({ query }),
};
fetch(url, options)
.then((response) => response.json())
.then((result) => {
renderResults(result);
nameInput.focus();
})
.catch((error) => console.log('error', error));
};