import { renderTable } from '../utils/uiUtils.js'; import { renderTeamDropdown } from '../utils/dropdownUtils.js'; import TeamCreation from './TeamCreation.js'; import TeamEdit from './TeamEdit.js'; import TeamCaptainEdit from './TeamCaptainEdit.js'; export default class TeamManagement { constructor(store) { this.store = store; this.container = document.createElement('div'); this.container.id = 'teamManagementSection'; this.container.className = 'team-management-section'; this.container.style.display = 'block'; this.selectedTeamId = null; this.teamCreation = new TeamCreation(store, () => { this.refreshTable(); this.refreshTeamSelectDropdown(); }); this.teamEdit = new TeamEdit(store, this.container, () => { this.refreshTable(); this.refreshTeamPlayersList(); }); this.teamCaptainEdit = new TeamCaptainEdit(store, this.container, () => { this.refreshTable(); this.refreshTeamPlayersList(); }); } async render() { console.log('TeamManagement.js loaded'); this.container.innerHTML = `

Team Management

🔍
Team Name Players Captain Action
`; this.container.querySelector('#teamCreationContainer').appendChild(this.teamCreation.render()); this.teamEdit.setupEventListeners(); this.teamCaptainEdit.setupEventListeners(); await this.refreshTable(); await this.refreshTeamSelectDropdown(); this.setupEventListeners(); document.addEventListener('playerDatabaseUpdated', async () => { console.log('Received playerDatabaseUpdated event'); await this.refreshTable(); await this.refreshTeamPlayersList(); }); document.addEventListener('teamDatabaseUpdated', async () => { console.log('Received teamDatabaseUpdated event'); await this.refreshTable(); await this.refreshTeamSelectDropdown(); await this.refreshTeamPlayersList(); }); return this.container; } setupEventListeners() { console.log('Setting up event listeners for TeamManagement'); this.container.addEventListener('click', (e) => { const target = e.target.closest('button'); if (!target) return; const teamId = target.closest('tr')?.dataset.teamId; if (target.classList.contains('delete-team-btn') && teamId) { console.log('Delete Team button clicked'); if (confirm('Are you sure you want to delete this team?')) { this.store.deleteTeam(teamId); this.refreshTable(); this.refreshTeamSelectDropdown(); this.refreshTeamPlayersList(); document.dispatchEvent(new CustomEvent('playerDatabaseUpdated')); } } else if (target.classList.contains('edit-team-btn') && teamId) { console.log('Edit Team button clicked'); this.teamEdit.openEditTeamModal(teamId); } else if (target.classList.contains('edit-captain-btn') && teamId) { console.log('Edit Captain button clicked'); this.teamCaptainEdit.openEditCaptainModal(teamId); } }); this.container.querySelector('#teamSelect').addEventListener('change', (e) => { console.log('Team select changed:', e.target.value); this.selectedTeamId = e.target.value || null; this.refreshTeamPlayersList(); }); } async refreshTable() { console.log('Refreshing team table'); const teamDatabase = this.store.getTeamDatabase() || []; const playerDatabase = this.store.getPlayerDatabase() || []; console.log('Team database:', teamDatabase); console.log('Player database for team table:', playerDatabase); const tbody = this.container.querySelector('#teamDatabaseTable tbody'); if (teamDatabase.length === 0) { tbody.innerHTML = 'No teams found. Add a team to get started.'; return; } const fields = [ { key: 'name', label: 'Team Name' }, { key: 'playerIds', label: 'Players', transform: (playerIds) => { return playerIds.map(pid => { const player = playerDatabase.find(p => p.id === pid); return player ? `${player.firstName} ${player.lastName}` : 'Unknown'; }).join(', '); }}, { key: 'captainId', label: 'Captain', transform: (captainId) => { console.log('Rendering captain for captainId:', captainId); const captain = playerDatabase.find(p => p.id === captainId); return captain ? `${captain.firstName} ${captain.lastName}` : 'None'; }} ]; renderTable(this.container, teamDatabase, fields, (team) => ` ${team.name} ${team.playerIds.map(pid => { const player = playerDatabase.find(p => p.id === pid); return player ? `${player.firstName} ${player.lastName}` : 'Unknown'; }).join(', ')} ${playerDatabase.find(p => p.id === team.captainId) ? playerDatabase.find(p => p.id === team.captainId).firstName + ' ' + playerDatabase.find(p => p.id === team.captainId).lastName : 'None'} `, false); } async refreshTeamSelectDropdown() { console.log('Refreshing team select dropdown'); const teamDatabase = this.store.getTeamDatabase() || []; console.log('Team database for dropdown:', teamDatabase); renderTeamDropdown(this.container, teamDatabase, this.selectedTeamId, 'teamSelect'); } async refreshTeamPlayersList() { console.log('Refreshing team players list for teamId:', this.selectedTeamId); const playerDatabase = this.store.getPlayerDatabase() || []; const teamDatabase = this.store.getTeamDatabase() || []; console.log('Team database for players list:', teamDatabase); const teamPlayersList = this.container.querySelector('#teamPlayersList'); if (!this.selectedTeamId) { teamPlayersList.innerHTML = '

Select a team to view its players.

'; return; } const team = teamDatabase.find(t => t.id === this.selectedTeamId); if (!team) { teamPlayersList.innerHTML = '

Team not found.

'; return; } const players = team.playerIds .map(pid => playerDatabase.find(p => p.id === pid)) .filter(p => p) .map(p => ({ ...p, isCaptain: p.id === team.captainId })); teamPlayersList.innerHTML = `

Players in ${team.name}

`; } }