var usersTable = document.getElementById('usersTable'); if (usersTable) { var userSearch = document.getElementById('userSearch'); var userRoleFilter = document.getElementById('userRoleFilter'); var userOrganizationFilter = document.getElementById('userOrganizationFilter'); var userStatusFilter = document.getElementById('userStatusFilter'); var userResetFilterBtn = document.getElementById('userResetFilterBtn'); var userUrlParams = new URLSearchParams(window.location.search); var initialUserSearch = (userUrlParams.get('user_search') || '').trim(); var initialUserRole = (userUrlParams.get('user_role') || 'all').trim(); var initialUserOrganization = (userUrlParams.get('user_organization') || 'all').trim(); var initialUserStatus = (userUrlParams.get('user_status') || 'all').trim(); if (userSearch && initialUserSearch !== '') { userSearch.value = initialUserSearch; } if (userRoleFilter) { userRoleFilter.value = initialUserRole !== '' && userRoleFilter.querySelector('option[value="' + initialUserRole + '"]') ? initialUserRole : 'all'; } if (userOrganizationFilter) { userOrganizationFilter.value = initialUserOrganization !== '' ? initialUserOrganization : 'all'; if (userOrganizationFilter.value !== initialUserOrganization && initialUserOrganization !== 'all') { userOrganizationFilter.value = 'all'; } } if (userStatusFilter) { userStatusFilter.value = ['active', 'inactive', 'removed'].indexOf(initialUserStatus) !== -1 ? initialUserStatus : 'all'; } var userRows = Array.prototype.slice.call(document.querySelectorAll('#usersTable .user-row')); var usersPaginationWrap = document.getElementById('usersPaginationWrap'); var usersPaginationPrev = document.getElementById('usersPaginationPrev'); var usersPaginationNext = document.getElementById('usersPaginationNext'); var usersPageNumbers = document.getElementById('usersPageNumbers'); var usersPage = 1; var usersPerPage = getResponsiveAdminTablePageSize(); var preservedUserState = window.consumeAdminTabUiState('users'); if (preservedUserState) { var preservedUserValues = preservedUserState.values || {}; if (userSearch && Object.prototype.hasOwnProperty.call(preservedUserValues, 'userSearch')) { userSearch.value = preservedUserValues.userSearch; } if (userRoleFilter && Object.prototype.hasOwnProperty.call(preservedUserValues, 'userRoleFilter')) { userRoleFilter.value = preservedUserValues.userRoleFilter; } if (userOrganizationFilter && Object.prototype.hasOwnProperty.call(preservedUserValues, 'userOrganizationFilter')) { userOrganizationFilter.value = preservedUserValues.userOrganizationFilter; } if (userStatusFilter && Object.prototype.hasOwnProperty.call(preservedUserValues, 'userStatusFilter')) { userStatusFilter.value = preservedUserValues.userStatusFilter; } usersPage = Math.max(1, Number(preservedUserState.page) || 1); } function renderUsersPageButtons(totalPages) { window.DocuFlowPagination.render(usersPageNumbers, usersPage, totalPages, function (page) { usersPage = page; applyUserFilter(); }); } var applyUserFilter = function () { var searchValue = (userSearch && userSearch.value ? userSearch.value : '').toLowerCase().trim(); var roleValue = userRoleFilter ? userRoleFilter.value : 'all'; var organizationValue = userOrganizationFilter ? userOrganizationFilter.value : 'all'; var statusValue = userStatusFilter ? userStatusFilter.value : 'all'; var filteredRows = []; userRows.forEach(function (row) { var matchesRole = roleValue === 'all' || row.dataset.role === roleValue; var rowOrganization = row.dataset.organizationName || ''; var matchesOrganization = organizationValue === 'all' || (organizationValue === '__none__' && rowOrganization.trim() === '') || rowOrganization === organizationValue; var matchesStatus = statusValue === 'all' || row.dataset.status === statusValue; var haystack = [ row.dataset.name, row.dataset.email, row.dataset.empid, rowOrganization.toLowerCase() ].join(' '); var matchesSearch = searchValue === '' || haystack.indexOf(searchValue) !== -1; if (matchesRole && matchesOrganization && matchesStatus && matchesSearch) { filteredRows.push(row); } row.style.display = 'none'; }); var totalPages = Math.max(1, Math.ceil(filteredRows.length / usersPerPage)); if (usersPage > totalPages) usersPage = totalPages; var startIndex = (usersPage - 1) * usersPerPage; filteredRows.slice(startIndex, startIndex + usersPerPage).forEach(function (row) { row.style.display = ''; }); var showPagination = filteredRows.length > usersPerPage; if (usersPaginationWrap) usersPaginationWrap.style.display = showPagination ? 'flex' : 'none'; if (showPagination) renderUsersPageButtons(totalPages); if (usersPaginationPrev) usersPaginationPrev.classList.toggle('disabled', usersPage <= 1); if (usersPaginationNext) usersPaginationNext.classList.toggle('disabled', usersPage >= totalPages); }; if (userSearch) { userSearch.addEventListener('input', function () { usersPage = 1; applyUserFilter(); }); } if (userRoleFilter) { userRoleFilter.addEventListener('change', function () { usersPage = 1; applyUserFilter(); }); } if (userOrganizationFilter) { userOrganizationFilter.addEventListener('change', function () { usersPage = 1; applyUserFilter(); }); } if (userStatusFilter) { userStatusFilter.addEventListener('change', function () { usersPage = 1; applyUserFilter(); }); } if (userResetFilterBtn) { userResetFilterBtn.addEventListener('click', function () { if (userSearch) userSearch.value = ''; if (userRoleFilter) userRoleFilter.value = 'all'; if (userOrganizationFilter) userOrganizationFilter.value = 'all'; if (userStatusFilter) userStatusFilter.value = 'all'; usersPage = 1; applyUserFilter(); }); } if (usersPaginationPrev) { usersPaginationPrev.addEventListener('click', function (e) { e.preventDefault(); if (!this.classList.contains('disabled')) { usersPage = Math.max(1, usersPage - 1); applyUserFilter(); } }); } if (usersPaginationNext) { usersPaginationNext.addEventListener('click', function (e) { e.preventDefault(); if (!this.classList.contains('disabled')) { usersPage = usersPage + 1; applyUserFilter(); } }); } window.addEventListener('resize', function () { var nextPerPage = getResponsiveAdminTablePageSize(); if (nextPerPage !== usersPerPage) { usersPerPage = nextPerPage; usersPage = 1; applyUserFilter(); } }); document.addEventListener('dashboard-data-table:sort', function (event) { if (!event.detail || !event.detail.table || event.detail.table.id !== 'usersTable') { return; } event.preventDefault(); event.detail.handled = true; userRows = sortAdminDashboardRows(userRows, event.detail.columnIndex, event.detail.order); usersPage = 1; applyUserFilter(); }); applyUserFilter(); var roleOrganizationOfficerMap = []; function roleIsOrganizationOfficer(role) { return !!roleOrganizationOfficerMap[(role || '').toString()]; } // Helper function to toggle organization field visibility and filter options function toggleOrganizationField() { var roleSelect = document.getElementById('editUserRole'); var organizationWrapper = document.getElementById('editUserOrganizationWrapper'); var organizationSelect = document.getElementById('editUserOrganization'); var organizationLabel = document.getElementById('editUserOrganizationLabel'); if (roleSelect && organizationWrapper && organizationSelect) { var selectedRole = roleSelect.value; var shouldHide = !roleIsOrganizationOfficer(selectedRole); if (shouldHide) { organizationWrapper.style.display = 'none'; organizationSelect.value = ''; } else { organizationWrapper.style.display = ''; filterOrganizationOptions(organizationSelect, selectedRole); // Update label based on role. if (organizationLabel) { organizationLabel.textContent = '