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((index, name) => { let el = null; for (let i = 0; i < forms.length; i++) { let _el = forms[i].querySelector(`[data-name="${name}"]`) if (_el){ el = _el; i = forms.length; } } if (!el) return; let value = getFormDataElValue(el); str+=`${name}=${value}&`; }) return str; }