$(document).ready(function () { ajaxPermissionsList(); $('#search-input').on('keyup', function () { var searchText = $(this).val().toLowerCase(); if (searchText === '') { $('#tree li').show(); $('#tree li ul').hide(); } else { $('#tree li').each(function () { var itemText = $(this).find('.node-label').text().toLowerCase(); if (itemText.includes(searchText)) { $(this).show(); $(this).parents('ul').show(); } else { $(this).hide(); } }); } }); $(document).on('click', '.togglePermission > span', function () { $(this).siblings('ul').toggle(); }); }); $('#MainModal').on('show.bs.modal', function () { $(document).off('click', '#tree .togglePermission').on('click', '#tree .togglePermission', function (e) { e.stopPropagation(); let parentLi = $(this).closest('li'); parentLi.children('ul').slideToggle(); $(this).toggleClass('open'); }); $(document).off('change', '#tree .node-checkbox').on('change', '#tree .node-checkbox', function () { let isChecked = $(this).is(':checked'); $(this).closest('li').find('.node-checkbox').prop('checked', isChecked).prop('indeterminate', false); updateParentCheckbox($(this)); }); $(document).off('input', '#search-input').on('input', '#search-input', function () { let searchText = $(this).val().toLowerCase(); if (searchText !== "") { $('#tree .node-label').each(function () { let label = $(this).text().toLowerCase(); let parentLi = $(this).closest('li'); if (label.includes(searchText)) { $(this).addClass('highlight'); parentLi.parents('ul').show(); parentLi.parents('li').children('.li-tree').children('.togglePermission').addClass('open'); } else { $(this).removeClass('highlight'); } }); } $('#tree li').each(function () { if ($(this).find('.highlight').length === 0) { $(this).children('ul').hide(); $(this).children('.li-tree').children('.togglePermission').removeClass('open'); } }); }); }); function updateParentCheckbox(childCheckbox) { let parentLi = childCheckbox.closest('li').parent().closest('li'); while (parentLi.length) { let parentCheckbox = parentLi.find('> .li-tree > div > .node-checkbox'); let allChildren = parentLi.find('li .node-checkbox'); let checkedChildren = parentLi.find('li .node-checkbox:checked'); let allChecked = allChildren.length === checkedChildren.length; let anyChecked = checkedChildren.length > 0; parentCheckbox.prop('checked', allChecked); parentCheckbox.prop('indeterminate', !allChecked && anyChecked); parentLi = parentLi.parent().closest('li'); } } function ajaxPermissionsList() { var permissionListHtml = ''; $.ajax({ url: permissionListAjax, type: 'GET', success: function (response) { if (response.success) { var listPermission = response.data; if (listPermission.length > 0) { permissionListHtml += `