Current File : /var/www/vinorea/admin512ouanzb8zkcifpcf6/themes/new-theme/js/product-page/nested-categories.js |
/**
* Nested categories management
*/
export default function () {
const nestedCategoriesForm = $('#form_step1_categories');
return {
init() {
if (nestedCategoriesForm.length === 0) {
return;
}
nestedCategoriesForm.categorytree();
this.removeDefaultIfNeeded();
// now we can select default category from nested Categories even if it's not related from a "code" point of view.
nestedCategoriesForm.on('change', 'input.default-category', function updateDefaultCategory() {
const categoryId = $(this).val();
/* we can't select a default category if category is not selected
* that's why we check category first instead of warn user.
*/
const category = nestedCategoriesForm.find(`input[value="${categoryId}"].category`);
const defaultcat = nestedCategoriesForm.find(`input[value="${categoryId}"].default-category`);
if (category.is(':checked') === false && defaultcat.is(':checked') === true) {
category.trigger('click');
}
window.defaultCategory.check(categoryId);
});
},
removeDefaultIfNeeded() {
/**
* What if we unselect category when it's a default category ?
*/
nestedCategoriesForm.on('change', 'input.category', function removeDefaultCategoryIfNotSelected() {
const findClosestCheckedCategory = function (category) {
const parent = category.closest('ul').parent();
const parentCategory = parent.find('> div > label > input');
if (!parent.is('li')) {
return nestedCategoriesForm.find('input[type="checkbox"]:checked').first();
} if (parentCategory.prop('checked')) {
return parentCategory;
}
return findClosestCheckedCategory(parent);
};
const categoryId = $(this).val();
const category = nestedCategoriesForm.find(`input[value="${categoryId}"].category`);
const defaultcat = nestedCategoriesForm.find(`input[value="${categoryId}"].default-category`);
if (nestedCategoriesForm.find('input[type="checkbox"]').filter(':checked').length < 1) {
category.prop('checked', true);
} else if (category.is(':checked') === false && defaultcat.is(':checked') === true) {
const newCategory = findClosestCheckedCategory(category);
window.defaultCategory.check(newCategory.val());
window.productCategoriesTags.checkDefaultCategory(newCategory.val());
}
});
},
};
}