277 lines
7.3 KiB
JavaScript
277 lines
7.3 KiB
JavaScript
function chooseCheckbox(el, callback) {
|
|
if (!el) return;
|
|
resetFieldError(el);
|
|
|
|
let $parent = el.closest('.field_container');
|
|
let $checkbox = $parent.querySelector('.checkbox')
|
|
|
|
$checkbox.classList.toggle("checked");
|
|
if (callback) callback($checkbox.classList.contains('checked'));
|
|
}
|
|
|
|
function getFormData(form, formData=new FormData()) {
|
|
if (!form) return;
|
|
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');
|
|
if ($checkbox.dataset.value) c_value = $checkbox.dataset.value;
|
|
|
|
if ($checkbox.classList.contains('checked')){
|
|
if (formData.get(name) || formData.get(name) === false){
|
|
let previos_val = formData.get(name);
|
|
formData.delete(name);
|
|
formData.set(name, previos_val + "," + c_value);
|
|
break;
|
|
}
|
|
}
|
|
if (typeof c_value === 'string'){
|
|
if ($checkbox.classList.contains('checked')){
|
|
formData.append(name, c_value);
|
|
break;
|
|
}
|
|
} else {
|
|
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;
|
|
|
|
case 'select':
|
|
let $select = el.querySelector('select');
|
|
if (!$select) return;
|
|
formData.append(name, $select.value);
|
|
|
|
}
|
|
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);
|
|
}
|
|
|
|
function resetFieldError (el){
|
|
if (!el) return;
|
|
let $field = el.closest('.field_container');
|
|
if (!$field) return;
|
|
|
|
let $error = $field.querySelector('.error_container');
|
|
if (!$error) return;
|
|
|
|
if (!checkFieldEmpty($field)){
|
|
$error.remove()
|
|
}
|
|
}
|
|
|
|
function checkFieldEmpty($field) {
|
|
if (!$field) return;
|
|
let empty = true;
|
|
|
|
switch ($field.dataset.type) {
|
|
case 'checkbox':
|
|
let $checkbox = $field.querySelector('.checkbox');
|
|
let c_value = $checkbox.classList.contains('checked');
|
|
if (c_value) empty = false;
|
|
|
|
break;
|
|
|
|
case 'radio':
|
|
let $radio = $field.querySelector('.radio.checked');
|
|
if ($radio) empty = false;
|
|
|
|
break;
|
|
|
|
case 'location':
|
|
let $location = $field.querySelector('input');
|
|
let l_value = $location.dataset.id;
|
|
|
|
if (l_value) empty = false;
|
|
break;
|
|
|
|
case 'input':
|
|
let $input = $field.querySelector('input');
|
|
if ($input.value) empty = false;
|
|
|
|
break;
|
|
|
|
case 'textarea':
|
|
let $textarea = $field.querySelector('textarea');
|
|
if ($textarea.value) empty = false;
|
|
|
|
break;
|
|
|
|
case 'date':
|
|
let $date = $field.querySelector('input');
|
|
if ($date.value) empty = false;
|
|
|
|
break;
|
|
|
|
case 'select':
|
|
let $select = el.querySelector('select');
|
|
if (!$select) return;
|
|
if ($select.value) empty = false;
|
|
|
|
break;
|
|
}
|
|
return empty;
|
|
}
|
|
|
|
function getFormDataElValue($field) {
|
|
if (!$field) return;
|
|
|
|
switch ($field.dataset.type) {
|
|
case 'checkbox':
|
|
let $checkbox = $field.querySelector('.checkbox');
|
|
let c_value = $checkbox.classList.contains('checked');
|
|
return c_value;
|
|
|
|
case 'radio':
|
|
let $radio = $field.querySelector('.radio.checked');
|
|
if ($radio){
|
|
$radio = $radio.closest('.cw_w_radio_inputs_radio_input').dataset.name;
|
|
return $radio
|
|
} else {
|
|
return ``
|
|
}
|
|
|
|
|
|
case 'location':
|
|
let $location = $field.querySelector('input');
|
|
let l_value = $location.dataset.id;
|
|
|
|
return l_value;
|
|
|
|
case 'input':
|
|
let $input = $field.querySelector('input');
|
|
|
|
return $input.value;
|
|
|
|
case 'textarea':
|
|
let $textarea = $field.querySelector('textarea');
|
|
return $textarea.value;
|
|
|
|
case 'date':
|
|
let $date = $field.querySelector('input');
|
|
return $date.value;
|
|
|
|
case 'select':
|
|
let $select = $field.querySelector('select');
|
|
if (!$select) return;
|
|
|
|
return $select.value;
|
|
}
|
|
}
|
|
|
|
function formDataToQueryString (formData, forms) {
|
|
let str = ``
|
|
|
|
formData.forEach((value, name) => {
|
|
str+=`${name}=${value}&`;
|
|
})
|
|
|
|
return str;
|
|
}
|
|
|