$(document).ready(function () { $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'), 'Accept': 'application/json' } }); // --- PHONE INPUT LOGIC --- const phoneInstances = {}; function initPhoneInput(selector) { const input = document.querySelector(selector); if (!input) return null; if (phoneInstances[selector]) return phoneInstances[selector]; phoneInstances[selector] = window.intlTelInput(input, { initialCountry: "gh", onlyCountries: ["gh"], nationalMode: true, autoPlaceholder: "polite", utilsScript: "https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.19/js/utils.js" }); input.addEventListener("blur", function () { if (phoneInstances[selector].isValidNumber()) { phoneInstances[selector].setNumber(phoneInstances[selector].getNumber()); } }); return phoneInstances[selector]; } $('#editUserModal').on('shown.bs.modal', () => initPhoneInput("#editPhone")); $('#addUserModal').on('shown.bs.modal', () => initPhoneInput("#addUserphone")); // --- SELECT2 LOGIC --- $('#editAllowedApps, #inputPermissions').select2({ dropdownParent: $('#editUserModal'), placeholder: "Select options, multiple allowed" }); $('#allowedApps').select2({ dropdownParent: $('#addUserModal'), placeholder: "Select options, multiple allowed" }); // --- DYNAMIC POSITIONS MAP LOGIC --- let optionsMap = {}; // Start empty function populatePositions(userType, targetDropdown) { targetDropdown.empty().append(''); if (optionsMap[userType]) { $.each(optionsMap[userType], function(index, value) { targetDropdown.append($("").attr("value", value.toLowerCase()).text(toTitleCase(value))); }); } } function toSentenceCase(value) { value = value .replace(/_+/g, ' ') .replace(/\s+/g, ' ') .trim() .toLowerCase(); return value ? value.charAt(0).toUpperCase() + value.slice(1) : ''; } function toTitleCase(value) { return value .replace(/_+/g, ' ') .replace(/\s+/g, ' ') .trim() .toLowerCase() .replace(/\b\w/g, char => char.toUpperCase()); } // Fetch the map from the backend on load $.ajax({ url: base_url + '/users/positions-map', type: 'GET', success: function(response) { let mapData = response.data || response; if (mapData && Object.keys(mapData).length > 0) { optionsMap = mapData; // Populate if a radio is already checked let initialUserType = $("input[name='user_type']:checked").val(); if(initialUserType) { populatePositions(initialUserType, $("#uaPostionAdd")); } } else { console.warn("The map data is empty or formatted incorrectly."); } }, error: function(xhr, status, error) { console.error("Failed to load positions map:", error); console.log(xhr.responseText); // Shows PHP errors if the route crashed } }); $("input[name='user_type']").change(function() { let userType = $(this).val(); let isDistrict = (userType === 'district_user'); let isRegional = (userType === 'regional_luspa'); populatePositions(userType, $("#uaPostionAdd")); }); // --- DEPENDENT DROPDOWNS --- $('.regionIDD').change(function() { let region_id = $(this).val(); let $districtSelect = $('.districtIDD'); $districtSelect.empty().append(''); if(!region_id) return; $.ajax({ url: base_url + '/admin/districts/' + region_id, type: 'GET', success: function(data) { if(data.districts) { $.each(data.districts, function(id, row) { $districtSelect.append($("