diff --git a/.firebase/hosting.ZGlzdA.cache b/.firebase/hosting.ZGlzdA.cache index f6bd051..1fb2ce7 100644 --- a/.firebase/hosting.ZGlzdA.cache +++ b/.firebase/hosting.ZGlzdA.cache @@ -1,11 +1,11 @@ vite.svg,499162500000,699a02e0e68a579f687d364bbbe7633161244f35af068220aee37b1b33dfb3c7 -index.html,1753035405872,3c6158b71f45d6e999fa49b429eac62310b4fbbc3a5d610313ab240eb484f92a -assets/swipe-back-CGSdR0aI.js,1753035405872,517c817b67e87bb2d8be7273e40d76dc6046afddee62757c5a30ecaa4dc6e985 -assets/status-tap-CLf1Wfnc.js,1753035405872,74cfde934919ae1a235d219096b646fec1fc240688d58b039cecd11f6fe9de97 -assets/md.transition-BcHE0Hfy.js,1753035405872,957736badb3da354a52c022261dbce86539188b7de89f5b9761e478aa79b1512 -assets/input-shims-DNsJ2SsM.js,1753035405872,0c88fd6b629bc2dc618613c3b0dea275eebe9ff9a54f0e550519b71e2f87e889 -assets/index7-CvVnXkg4.js,1753035405872,bc175c80e2f773729b6b034071fad7830f0cde004d184285cd8c29722271b66f -assets/ios.transition-C4vHCq5E.js,1753035405872,614a85d6eb6c5f73c8024c65bab5e008c271a6e77817519d0035cadc2652e8f5 -assets/focus-visible-supuXXMI.js,1753035405872,df9266429356671847fa2c8123e1564bae645f75df3094f0055c365fa2beae28 -assets/index-CzY-nILz.css,1753035405872,c68362f490f176fbe950e6cc313da199ed6e08c67058d82b833a2026a0be75c9 -assets/index-BijPmtNu.js,1753035405873,9729127c742119efd72ff5f7f4628f939053ad2f25abe6b78e74801e8e599326 +index.html,1753036974325,d4ec7269769afa4794c9b3bc4382b8bb4ca2a9cc11d47522053a62b9c1dbd99b +assets/swipe-back-0ASdaLec.js,1753036974325,dfdb4ccfc65b5ddd1d04306a2cbc650f7f2be8d659bb029d32c75fd5041b6f5e +assets/status-tap-DKvxsyfd.js,1753036974325,1bbe8dd5487685ce491d40b73bc1bbbc1a3fdeac4e485438c55484248ca69fff +assets/md.transition-CWuowIQj.js,1753036974325,b5d793bffc7672549acba90697be0b704a7b39d8f4ff21faaf05ddba2951dcb0 +assets/ios.transition-BPJsV1yP.js,1753036974325,e401e6df1d7c900f8f54e717308a57abfcf913ee17b2eb56846b4ba3049d94cf +assets/input-shims-BtXJpb0t.js,1753036974325,1f111da7ba4ae84995311f07a6d41c62ca179213cd8123623048af9ccee533f9 +assets/index7-_QrtZLKR.js,1753036974325,fac87389bb8d2e7850fef07b4fd01132a49206e2b5ddd40feff932d041e1874e +assets/focus-visible-supuXXMI.js,1753036974325,df9266429356671847fa2c8123e1564bae645f75df3094f0055c365fa2beae28 +assets/index-CzY-nILz.css,1753036974324,c68362f490f176fbe950e6cc313da199ed6e08c67058d82b833a2026a0be75c9 +assets/index-DxnqBJhb.js,1753036974326,143303c7b9c04d8a450f75b956258ba32195e518861db9a8c07e4cbbab3d6c0d diff --git a/src/components/common/SongItem.tsx b/src/components/common/SongItem.tsx index 8e3ceee..0db5749 100644 --- a/src/components/common/SongItem.tsx +++ b/src/components/common/SongItem.tsx @@ -94,7 +94,7 @@ export const SongActionButtons: React.FC<{ onAddToQueue?: () => void; onRemoveFromQueue?: () => void; onToggleFavorite?: () => void; - onDelete?: () => void; + onDeleteItem?: () => void; onSelectSinger?: () => void; }> = ({ isAdmin, @@ -108,7 +108,7 @@ export const SongActionButtons: React.FC<{ onAddToQueue, onRemoveFromQueue, onToggleFavorite, - onDelete, + onDeleteItem, onSelectSinger }) => { const buttons = []; @@ -155,12 +155,12 @@ export const SongActionButtons: React.FC<{ ); } - // Delete from Favorites button - if (showDeleteButton && onDelete) { + // Delete button (generic - can be used for favorites, history, etc.) + if (showDeleteButton && onDeleteItem) { buttons.push( @@ -197,7 +197,7 @@ const SongItem: React.FC = ({ onAddToQueue, onRemoveFromQueue, onToggleFavorite, - onDelete, + onDeleteItem, onSelectSinger, isAdmin = false, className = '', @@ -260,7 +260,7 @@ const SongItem: React.FC = ({ onAddToQueue={onAddToQueue} onRemoveFromQueue={onRemoveFromQueue} onToggleFavorite={onToggleFavorite} - onDelete={onDelete} + onDeleteItem={onDeleteItem} onSelectSinger={onSelectSinger} /> diff --git a/src/features/Artists/Artists.tsx b/src/features/Artists/Artists.tsx index 8735148..5013d5b 100644 --- a/src/features/Artists/Artists.tsx +++ b/src/features/Artists/Artists.tsx @@ -17,7 +17,6 @@ const Artists: React.FC = () => { getSongsByArtist, getSongCountByArtist, handleAddToQueue, - handleToggleFavorite, } = useArtists(); const songs = useAppSelector(selectSongs); @@ -136,7 +135,10 @@ const Artists: React.FC = () => { song={song} context="search" onAddToQueue={() => handleAddToQueue(song)} - onToggleFavorite={() => handleToggleFavorite(song)} + onSelectSinger={() => {}} // Info button functionality + showAddButton={true} + showInfoButton={true} + showFavoriteButton={false} /> diff --git a/src/features/Favorites/Favorites.tsx b/src/features/Favorites/Favorites.tsx index 81ede57..f1909c6 100644 --- a/src/features/Favorites/Favorites.tsx +++ b/src/features/Favorites/Favorites.tsx @@ -47,8 +47,9 @@ const Favorites: React.FC = () => { context="favorites" showInfoButton={true} showAddButton={false} + showDeleteButton={true} onSelectSinger={() => handleSongInfo(song)} - onDelete={() => handleToggleFavorite(song)} + onDeleteItem={() => handleToggleFavorite(song)} /> )} emptyTitle="No favorites yet" diff --git a/src/features/History/History.tsx b/src/features/History/History.tsx index f7d2840..a7372c9 100644 --- a/src/features/History/History.tsx +++ b/src/features/History/History.tsx @@ -53,7 +53,8 @@ const History: React.FC = () => { song={song} context="history" onAddToQueue={() => handleAddToQueue(song)} - onDelete={() => handleDeleteFromHistory(song)} + onSelectSinger={() => {}} // Info button functionality + onDeleteItem={() => handleDeleteFromHistory(song)} isAdmin={isAdmin} showAddButton={true} showInfoButton={true} diff --git a/src/features/SongLists/SongLists.tsx b/src/features/SongLists/SongLists.tsx index 0cb64ee..ca9de7b 100644 --- a/src/features/SongLists/SongLists.tsx +++ b/src/features/SongLists/SongLists.tsx @@ -16,7 +16,6 @@ const SongLists: React.FC = () => { loadMore, checkSongAvailability, handleAddToQueue, - handleToggleFavorite, } = useSongLists(); const songListData = useAppSelector(selectSongList); @@ -133,7 +132,10 @@ const SongLists: React.FC = () => { song={song} context="search" onAddToQueue={() => handleAddToQueue(song)} - onToggleFavorite={() => handleToggleFavorite(song)} + onSelectSinger={() => {}} // Info button functionality + showAddButton={true} + showInfoButton={true} + showFavoriteButton={false} /> ))} diff --git a/src/features/TopPlayed/Top100.tsx b/src/features/TopPlayed/Top100.tsx index 346e8c5..e9f60db 100644 --- a/src/features/TopPlayed/Top100.tsx +++ b/src/features/TopPlayed/Top100.tsx @@ -24,7 +24,7 @@ const Top100: React.FC = () => { const topPlayed = useAppSelector(selectTopPlayed); const topPlayedCount = Object.keys(topPlayed).length; const allSongs = useAppSelector(selectSongsArray); - const { addToQueue, toggleFavorite } = useSongOperations(); + const { addToQueue } = useSongOperations(); const { showSuccess, showError } = useToast(); const [selectedTopPlayed, setSelectedTopPlayed] = useState(null); @@ -70,14 +70,7 @@ const Top100: React.FC = () => { } }, [addToQueue, showSuccess, showError]); - const handleToggleFavorite = useCallback(async (song: Song) => { - try { - await toggleFavorite(song); - showSuccess(song.favorite ? 'Removed from favorites' : 'Added to favorites'); - } catch { - showError('Failed to update favorites'); - } - }, [toggleFavorite, showSuccess, showError]); + // Use real Firebase data from the hook const displayItems = topPlayedItems; @@ -148,7 +141,10 @@ const Top100: React.FC = () => { song={song} context="search" onAddToQueue={() => handleAddToQueue(song)} - onToggleFavorite={() => handleToggleFavorite(song)} + onSelectSinger={() => {}} // Info button functionality + showAddButton={true} + showInfoButton={true} + showFavoriteButton={false} /> ))} diff --git a/src/types/index.ts b/src/types/index.ts index 4c74d9e..3fa34b1 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -132,7 +132,7 @@ export interface SongItemProps { onAddToQueue?: () => void; onRemoveFromQueue?: () => void; onToggleFavorite?: () => void; - onDelete?: () => void; + onDeleteItem?: () => void; onSelectSinger?: () => void; isAdmin?: boolean; className?: string;