function showTab(tabName) { // Hide all panels document.querySelectorAll('.tab-panel').forEach(panel => panel.classList.add('hidden')); // Remove active class from all tabs document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.remove('active')); // Show selected panel document.getElementById('panel-' + tabName).classList.remove('hidden'); // Add active class to selected tab document.getElementById('tab-' + tabName).classList.add('active'); } document.addEventListener('DOMContentLoaded', function() { // Update selected IP count document.getElementById('bulk-ip-select')?.addEventListener('change', function() { document.getElementById('selected-ip-count').textContent = this.selectedOptions.length; }); document.getElementById('bulk-tag-device-select')?.addEventListener('change', function() { document.getElementById('selected-tag-device-count').textContent = this.selectedOptions.length; }); // Load available IPs when subnet changes document.getElementById('bulk-subnet-select')?.addEventListener('change', function() { const subnetId = this.value; const ipSelect = document.getElementById('bulk-ip-select'); if (!subnetId) { ipSelect.innerHTML = ''; document.getElementById('selected-ip-count').textContent = '0'; return; } ipSelect.innerHTML = ''; fetch(`/get_available_ips?subnet_id=${subnetId}`) .then(response => response.json()) .then(data => { ipSelect.innerHTML = ''; if (data.available_ips.length === 0) { ipSelect.innerHTML = ''; } else { data.available_ips.forEach(ip => { const option = document.createElement('option'); option.value = ip.id; option.textContent = ip.ip; ipSelect.appendChild(option); }); } document.getElementById('selected-ip-count').textContent = '0'; }) .catch(() => { ipSelect.innerHTML = ''; }); }); // Bulk IP Assignment document.getElementById('bulk-assign-ips-form')?.addEventListener('submit', function(e) { e.preventDefault(); const formData = new FormData(this); const resultDiv = document.getElementById('assign-ips-result'); resultDiv.classList.remove('hidden'); resultDiv.innerHTML = '

Processing...

'; fetch('/bulk/assign_ips', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { let html = '
'; if (data.success.length > 0) { html += `
Successfully assigned ${data.success.length} IP(s):
'; } if (data.failed.length > 0) { html += `
Failed ${data.failed.length} assignment(s):
'; } html += '
'; resultDiv.innerHTML = html; // Reload IP list if successful if (data.success.length > 0) { const subnetSelect = document.getElementById('bulk-subnet-select'); if (subnetSelect.value) { subnetSelect.dispatchEvent(new Event('change')); } } }) .catch(error => { resultDiv.innerHTML = `

Error: ${error.message}

`; }); }); // Bulk Device Creation document.getElementById('bulk-create-devices-form')?.addEventListener('submit', function(e) { e.preventDefault(); const formData = new FormData(this); const resultDiv = document.getElementById('create-devices-result'); resultDiv.classList.remove('hidden'); resultDiv.innerHTML = '

Processing...

'; fetch('/bulk/create_devices', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { let html = '
'; if (data.success.length > 0) { html += `
Successfully created ${data.success.length} device(s):
'; } if (data.failed.length > 0) { html += `
Failed ${data.failed.length} creation(s):
'; } html += '
'; resultDiv.innerHTML = html; if (data.success.length > 0) { setTimeout(() => window.location.reload(), 2000); } }) .catch(error => { resultDiv.innerHTML = `

Error: ${error.message}

`; }); }); // Bulk Tag Assignment document.getElementById('bulk-assign-tags-form')?.addEventListener('submit', function(e) { e.preventDefault(); const formData = new FormData(this); const resultDiv = document.getElementById('assign-tags-result'); resultDiv.classList.remove('hidden'); resultDiv.innerHTML = '

Processing...

'; fetch('/bulk/assign_tags', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { let html = '
'; if (data.success.length > 0) { html += `
Successfully assigned ${data.success.length} tag(s):
'; } if (data.failed.length > 0) { html += `
Failed ${data.failed.length} assignment(s):
'; } html += '
'; resultDiv.innerHTML = html; }) .catch(error => { resultDiv.innerHTML = `

Error: ${error.message}

`; }); }); });