import React, { useState } from 'react'; import { IonModal, IonContent, IonList, IonItem, IonLabel } from '@ionic/react'; import { useAppSelector } from '../../redux'; import { selectSingersArray, selectControllerName, selectQueueObject } from '../../redux'; import { queueService } from '../../firebase/services'; import { useToast } from '../../hooks/useToast'; import { ModalHeader } from './ModalHeader'; import type { Song, Singer, QueueItem } from '../../types'; interface SelectSingerProps { isOpen: boolean; onClose: () => void; song: Song; } const SelectSinger: React.FC = ({ isOpen, onClose, song }) => { const singers = useAppSelector(selectSingersArray); const controllerName = useAppSelector(selectControllerName); const currentQueue = useAppSelector(selectQueueObject); const { showSuccess, showError } = useToast(); const [isLoading, setIsLoading] = useState(false); const handleSelectSinger = async (singer: Singer) => { if (!controllerName) { showError('Controller not found'); return; } setIsLoading(true); try { // Calculate the next order by finding the highest order value and adding 1 const queueItems = Object.values(currentQueue) as QueueItem[]; const maxOrder = queueItems.length > 0 ? Math.max(...queueItems.map(item => item.order || 0)) : 0; const nextOrder = maxOrder + 1; const queueItem: Omit = { order: nextOrder, singer: { name: singer.name, lastLogin: singer.lastLogin, }, song: song, }; await queueService.addToQueue(controllerName, queueItem); showSuccess(`${song.title} added to queue for ${singer.name}`); onClose(); } catch (error) { console.error('Failed to add song to queue:', error); showError('Failed to add song to queue'); } finally { setIsLoading(false); } }; return ( {/* Song Information */}

{song.title}

{song.artist}

{song.path}

{/* Singers List */} {singers.map((singer) => ( handleSelectSinger(singer)} disabled={isLoading} >

{singer.name}

Last login: {new Date(singer.lastLogin).toLocaleDateString()}

))}
{singers.length === 0 && (
No singers available
)}
); }; export default SelectSinger;