How can brand and type fields filter options based from the existing asset category chosen, and unit model filtering options based from the selected brand? This is my JS:
$(document).ready(function() {
const assetId = $('#asset_id').val();
axios({
method: 'get',
url: `/api/assets/assets/${assetId}`,
}).then(function(res) {
let data = res.data;
$('#id_name').val(data.name);
$('#id_property_number').val(data.property_number);
$('#id_serial_number').val(data.serial_number);
$('#id_date_acquired').val(data.date_acquired);
getAllBrand(data.brand)
getAllUnitModel(data.unit_model)
getAllStatus(data.status)
getAllType(data.type)
getAllUser(data.user)
getAllDepartment(data.department)
getAllArea(data.area)
axios.get(`/api/assets/asset_details/`,{
params:{
asset: data.id
}
}).then(function(res) {
const dataObj = res.data;
const $formWrapper = $('#form_field_wrapper').empty();
dataObj.forEach(obj => {
const assetObj = obj.asset_field;
const fieldId = `id_${assetObj.field_name}`;
const feedbackId = `feedback_${assetObj.field_name}`;
const requiredInfo = obj.asset_form.is_required ? '<span class="text-danger">*</span>' : '';
const requiredClass = obj.asset_form.is_required ? 'form-required' : '';
switch(assetObj.field_type) {
case 'radio':
break;
case 'checkbox':
break;
case 'text':
var fieldData = new Object();
fieldData.assetFormId = obj.asset_form.id; // form id
fieldData.assetFieldId = assetObj.id; // asset field id
fieldData.assetDetailId = obj.id; // asset field id
$formWrapper.append(`
<div class="col-6 m-0">
<div class="form-floating mb-3">
<input type="text" class="form-control asset-form-field ${requiredClass}" id="${fieldId}" placeholder="${assetObj.field_label}" value="${obj.value}">
<label for="${fieldId}">${assetObj.field_label} ${requiredInfo}</label>
<div class="invalid-feedback" id="${feedbackId}"></div>
</div>
</div>
`);
$(`#${fieldId}`).data(fieldData);
break;
case 'select':
let fieldOptions = JSON.parse(assetObj.field_option);
var fieldData = new Object();
fieldData.assetFormId = obj.asset_form.id; // form id
fieldData.assetFieldId = assetObj.id; // asset field id
fieldData.assetDetailId = obj.id; // asset field id
$formWrapper.append(`
<div class="col-6 m-0">
<div class="form-floating-selectize mb-3">
<select class="form-selectize asset-form-field ${requiredClass}" id="${fieldId}" placeholder="${assetObj.field_label}" value="${obj.value}"></select>
<label for="${fieldId}">${assetObj.field_label} ${requiredInfo}</label>
<div class="invalid-feedback" id="${feedbackId}"></div>
</div>
</div>
`);
const $selectField = $(`#${fieldId}`);
$selectField.selectize({
persist: false,
maxItems: 1,
valueField: "id",
labelField: "title",
searchField: "title",
closeAfterSelect: true,
options: fieldOptions,
});
if (obj.value) {
$selectField[0].selectize.setValue(obj.value);
}
$(`#${fieldId}`).data(fieldData);
break;
// }
}
});
}).catch(function(err){
console.log(err)
})
}).catch(function(err){
console.log(err)
})
let getAllBrand = function(values) {
axios({
method: 'get',
url: `/api/assets/brand/names`,
}).then(function(res) {
let data = res.data;
let select = $("#id_brand").selectize({
// plugins: ["clear_button", "remove_button"],
persist: false,
maxItems: 1,
valueField: "id",
labelField: "name",
searchField: "name",
closeAfterSelect: true,
options: data,
});
if (values) select[0].selectize.setValue(values, false);
}).catch(function(err) {
alert(err.message)
});
};
let getAllUnitModel = function(values) {
axios({
method: 'get',
url: `/api/assets/unit_models/names`,
}).then(function(res) {
let data = res.data;
let select = $("#id_unit_model").selectize({
// plugins: ["clear_button", "remove_button"],
persist: false,
maxItems: 1,
valueField: "id",
labelField: "name",
searchField: "name",
closeAfterSelect: true,
options: data,
});
if (values) select[0].selectize.setValue(values, false);
}).catch(function(err) {
alert(err.message)
});
};
let getAllStatus = function(values) {
axios({
method: 'get',
url: `/api/assets/statuses/names`,
}).then(function(res) {
let data = res.data;
let select = $("#id_status").selectize({
// plugins: ["clear_button", "remove_button"],
persist: false,
maxItems: 1,
valueField: "id",
labelField: "name",
searchField: "name",
closeAfterSelect: true,
options: data,
});
if (values) select[0].selectize.setValue(values, false);
}).catch(function(err) {
alert(err.message)
});
};
let getAllType = function(values) {
axios({
method: 'get',
url: `/api/assets/types/names`,
}).then(function(res) {
let data = res.data;
let select = $("#id_type").selectize({
// plugins: ["clear_button", "remove_button"],
persist: false,
maxItems: 1,
valueField: "id",
labelField: "name",
searchField: "name",
closeAfterSelect: true,
options: data,
});
if (values) select[0].selectize.setValue(values, false);
}).catch(function(err) {
alert(err.message)
});
};
let getAllUser = function(values) {
axios({
method: 'get',
url: `/api/core/user/names`,
}).then(function(res) {
let data = res.data;
let select = $("#id_user").selectize({
// plugins: ["clear_button", "remove_button"],
persist: false,
maxItems: 1,
valueField: "id",
labelField: "fullname",
searchField: "fullname",
closeAfterSelect: true,
options: data,
});
if (values) select[0].selectize.setValue(values, false);
}).catch(function(err) {
alert(err.message)
});
};
let getAllDepartment = function(values) {
axios({
method: 'get',
url: `/api/core/department/names`,
}).then(function(res) {
let data = res.data;
let select = $("#id_department").selectize({
// plugins: ["clear_button", "remove_button"],
persist: false,
maxItems: 1,
valueField: "id",
labelField: "name",
searchField: "name",
closeAfterSelect: true,
options: data,
});
if (values) select[0].selectize.setValue(values, false);
}).catch(function(err) {
alert(err.message)
});
};
let getAllArea = function(values) {
axios({
method: 'get',
url: `/api/core/area/names`,
}).then(function(res) {
let data = res.data;
let select = $("#id_area").selectize({
// plugins: ["clear_button", "remove_button"],
persist: false,
maxItems: 1,
valueField: "id",
labelField: "name",
searchField: "name",
closeAfterSelect: true,
options: data,
});
if (values) select[0].selectize.setValue(values, false);
}).catch(function(err) {
alert(err.message)
});
};
getAllBrand()
getAllUnitModel()
getAllStatus()
getAllType()
getAllUser()
getAllDepartment()
getAllArea()
$("#btn-save-asset_update").click(function() {
const assetId = $('#asset_id').val();
const formFields = $('#form_field_wrapper').find('.asset-form-field').filter(function() {
const tagName = $(this).prop('tagName').toLowerCase();
return tagName === 'input' || tagName === 'select';
});
const formFieldArr = new Array(); // []
const assetObj = new Object();
// iterate values of form fields
formFields.each(function(index, element) {
const $element = $(element);
const fieldObj = new Object() // {}
fieldObj.asset_field = $element.data().assetFieldId;
fieldObj.asset_form = $element.data().assetFormId;
fieldObj.detail_id = $element.data().assetDetailId;
fieldObj.value = $element.val();
formFieldArr.push(fieldObj);
});
assetObj.name = $('#id_name').val();
assetObj.asset_category = $('#asset_category').val();
assetObj.brand = $('#id_brand').val();
assetObj.unit_model = $('#id_unit_model').val();
assetObj.status = $('#id_status').val();
assetObj.type = $('#id_type').val();
assetObj.user = $('#id_user').val();
assetObj.department = $('#id_department').val();
assetObj.area = $('#id_area').val();
assetObj.serial_number = $('#id_serial_number').val();
assetObj.property_number = $('#id_property_number').val();
assetObj.date_acquired = $('#id_date_acquired').val();
assetObj.asset_details = formFieldArr;
axios({
method: 'put',
url: `/api/assets/assets/${assetId}/`,
data: assetObj,
headers: axiosConfig
}).then(function(res){
const redirectUrl = '/asset/asset_list';
window.location.href = redirectUrl;
}).catch(function(err){
let errorText = err.response.request.statusText;
let errObj = err.response.data;
errObj.name ? showFieldErrors('name', errObj.name) : removeFieldErrors('name');
errObj.asset_category ? showFieldErrors('asset_category', errObj.asset_category) : removeFieldErrors('asset_category');
errObj.brand ? showFieldErrors('brand', errObj.brand) : removeFieldErrors('brand');
errObj.unit_model ? showFieldErrors('unit_model', errObj.unit_model) : removeFieldErrors('unit_model');
errObj.status ? showFieldErrors('status', errObj.status) : removeFieldErrors('status');
errObj.type ? showFieldErrors('type', errObj.type) : removeFieldErrors('type');
errObj.user ? showFieldErrors('user', errObj.user) : removeFieldErrors('user');
errObj.area ? showFieldErrors('area', errObj.area) : removeFieldErrors('area');
errObj.department ? showFieldErrors('department', errObj.department) : removeFieldErrors('department');
errObj.serial_number ? showFieldErrors('serial_number', errObj.serial_number) : removeFieldErrors('serial_number');
errObj.property_number ? showFieldErrors('property_number', errObj.property_number) : removeFieldErrors('property_number');
errObj.date_acquired ? showFieldErrors('date_acquired', errObj.date_acquired) : removeFieldErrors('date_acquired');
errObj.non_field_errors ? showFieldErrors('non_field_errors', errObj.non_field_errors) : removeFieldErrors('non_field_errors');
toastAlert('danger', errorText);
})
});
});
I did tried eventlisteners but still it wont work. I’m expecting to filter options of brand and type fields based from the existing asset category and, filtering option of the unit model based from the selected brand field.