Files
tripwithbonus/static/v2/js/forms.js
2025-01-15 18:04:57 +03:00

131 lines
3.5 KiB
JavaScript

function chooseCheckbox(el) {
if (!el) return;
let $parent = el.closest('.field_container');
let $checkbox = $parent.querySelector('.checkbox')
$checkbox.classList.toggle("checked");
}
function getFormData(form) {
if (!form) return;
let formData = new FormData();
let default_element_types = ['input', 'textarea', 'date'];
let form_elements = getFormElements(form);
if (!form_elements) return;
for (let el of form_elements) {
let $parent = el.closest('.field_container');
let field_type = ''
if ($parent) field_type = $parent.dataset.type;
let name = $parent ? $parent.dataset.name : '';
if (!name) name = el.name
if (!name) name = el.dataset.name;
let value = el.querySelector('input')? el.querySelector('input').value : ''
if (!value && el.querySelector('textarea')) value = el.querySelector('textarea').value;
if (field_type) {
if (default_element_types.indexOf(field_type) > -1) {
formData.append(name, value);
} else if ($parent && !($parent.dataset.type in default_element_types)) {
formData = addCustomDataToFormData($parent, formData)
}
} else {
formData.append(name, value);
}
}
return formData;
}
function getFormElements(form) {
let form_elements = form.querySelectorAll('.field_container');
return form_elements;
}
function addCustomDataToFormData(el, formData) {
let name = el.dataset.name;
switch (el.dataset.type) {
case 'checkbox':
let $checkbox = el.querySelector('.checkbox');
let c_value = $checkbox.classList.contains('checked');
formData.append(name, c_value);
break;
case 'radio':
let $radio = el.querySelector('.radio.checked');
if (!$radio){
formData.append(name, '');
break;
}
let r_value = $radio.closest(".cw_w_radio_inputs_radio_input").dataset.name;
formData.append(name, r_value);
break;
case 'location':
let $location = el.querySelector('input');
let l_value = $location.dataset.id;
formData.append(name, l_value);
break;
}
return formData;
}
function getCargoTypesWTypeTransport (data) {
let type_transport = data.type_transport;
let owner_type = data.owner_type;
let success_callback = data.success_callback;
let error_callback = data.error_callback;
if (!owner_type) return;
let request_data = {
type_transport: type_transport,
owner_type: owner_type,
}
let formData = dataToFormData(request_data);
let request = new api({
url: '/routes/get_cargo_type_by_transport_type/',
data: formData,
data_type: 'formData',
success: success_callback,
error: error_callback,
})
request.ajaxRequest()
}
function getFormOwnerType(el){
let form = el.closest('form');
let owner_type = form.dataset.owner_type;
return owner_type;
}
function dataToFormData(data) {
let formData = new FormData();
for (let key of Object.keys(data)) {
formData.append(key, data[key]);
}
return formData;
}
function selectInputWContainer (el, callback) {
if (!el) return;
let $field = el.closest('.field_container');
if (!$field) return;
let $input = $field.querySelector('input');
$input.focus()
if (callback) callback(el);
}