// Team management functionality // Load teams async function loadTeams() { console.log('loadTeams called'); console.log('Config check:', config.isConfigured()); console.log('API Base URL:', config.getApiBaseUrl()); console.log('API Key:', config.getApiKey() ? 'Set' : 'Not set'); if (!config.isConfigured()) { showAlert('Please configure your API settings first.', 'warning'); return; } const container = document.getElementById('teamsContainer'); container.innerHTML = '
Loading teams...
'; try { console.log('Making API request to get teams...'); const response = await apiClient.getTeams(); console.log('API response:', response); // Handle structured response - extract teams array from response object const teams = response.teams || response; console.log('Teams data:', teams); displayTeams(teams); } catch (error) { console.error('Error loading teams:', error); handleApiError(error, 'loading teams'); container.innerHTML = '
Failed to load teams
'; } } // Display teams function displayTeams(teams) { const container = document.getElementById('teamsContainer'); if (!teams || teams.length === 0) { container.innerHTML = `

No teams found

Create your first team to get started!

`; return; } const teamsHtml = `
${teams.map(team => `
${escapeHtml(team.name)}

${escapeHtml(team.description || 'No description')}

Created: ${formatDate(team.created_at)}
`).join('')}
`; container.innerHTML = teamsHtml; } // Show create team modal function showCreateTeamModal() { const modalBody = `
`; const modalFooter = ` `; const modal = createModal('createTeamModal', 'Create New Team', modalBody, modalFooter); // Handle form submission document.getElementById('createTeamForm').addEventListener('submit', (e) => { e.preventDefault(); createTeam(); }); modal.show(); // Focus on name field setTimeout(() => document.getElementById('teamName').focus(), 100); } // Create team async function createTeam() { const name = document.getElementById('teamName').value.trim(); const description = document.getElementById('teamDescription').value.trim(); if (!name) { showAlert('Team name is required', 'danger'); return; } const createButton = document.querySelector('#createTeamModal .btn-primary'); setLoadingState(createButton); try { await apiClient.createTeam({ name, description }); showAlert('Team created successfully!', 'success'); // Close modal and refresh teams bootstrap.Modal.getInstance(document.getElementById('createTeamModal')).hide(); removeModal('createTeamModal'); loadTeams(); } catch (error) { handleApiError(error, 'creating team'); } finally { setLoadingState(createButton, false); } } // View team details async function viewTeam(teamId) { try { const response = await apiClient.getTeams(); // Handle structured response - extract teams array from response object const teams = response.teams || response; const team = teams.find(t => t.id === teamId); if (!team) { showAlert('Team not found', 'danger'); return; } const modalBody = `
${escapeHtml(team.name)}

${escapeHtml(team.description || 'No description')}


Team Information

Created: ${formatDate(team.created_at)}

ID: ${team.id}

Statistics

Members: Loading...

Status: Active

`; const modalFooter = ` `; const modal = createModal('viewTeamModal', 'Team Details', modalBody, modalFooter); modal.show(); // Load team member count loadTeamMemberCount(teamId); } catch (error) { handleApiError(error, 'loading team details'); } } // Load team member count async function loadTeamMemberCount(teamId) { try { const response = await apiClient.getUsers(); // Handle structured response - extract users array from response object const users = response.users || response; const teamMembers = users.filter(user => user.team_id === teamId); document.getElementById('teamMemberCount').textContent = teamMembers.length; } catch (error) { document.getElementById('teamMemberCount').textContent = 'Error loading'; } } // Edit team async function editTeam(teamId) { try { const response = await apiClient.getTeams(); // Handle structured response - extract teams array from response object const teams = response.teams || response; const team = teams.find(t => t.id === teamId); if (!team) { showAlert('Team not found', 'danger'); return; } const modalBody = `
`; const modalFooter = ` `; const modal = createModal('editTeamModal', 'Edit Team', modalBody, modalFooter); // Handle form submission document.getElementById('editTeamForm').addEventListener('submit', (e) => { e.preventDefault(); saveTeamChanges(teamId); }); modal.show(); } catch (error) { handleApiError(error, 'loading team for editing'); } } // Save team changes async function saveTeamChanges(teamId) { const name = document.getElementById('editTeamName').value.trim(); const description = document.getElementById('editTeamDescription').value.trim(); if (!name) { showAlert('Team name is required', 'danger'); return; } const saveButton = document.querySelector('#editTeamModal .btn-primary'); setLoadingState(saveButton); try { await apiClient.updateTeam(teamId, { name, description }); showAlert('Team updated successfully!', 'success'); // Close modal and refresh teams bootstrap.Modal.getInstance(document.getElementById('editTeamModal')).hide(); removeModal('editTeamModal'); loadTeams(); // Close view modal if open const viewModal = document.getElementById('viewTeamModal'); if (viewModal) { bootstrap.Modal.getInstance(viewModal)?.hide(); removeModal('viewTeamModal'); } } catch (error) { handleApiError(error, 'updating team'); } finally { setLoadingState(saveButton, false); } } // Delete team function deleteTeam(teamId) { confirmAction('Are you sure you want to delete this team? This action cannot be undone and will affect all team members.', async () => { try { await apiClient.deleteTeam(teamId); showAlert('Team deleted successfully!', 'success'); loadTeams(); // Close any open modals const modals = ['viewTeamModal', 'editTeamModal']; modals.forEach(modalId => { const modalElement = document.getElementById(modalId); if (modalElement) { bootstrap.Modal.getInstance(modalElement)?.hide(); removeModal(modalId); } }); } catch (error) { handleApiError(error, 'deleting team'); } }); }