Signed-off-by: mbrucedogs <mbrucedogs@gmail.com>

This commit is contained in:
mbrucedogs 2025-07-20 14:01:15 -05:00
parent 4ebdcd3ff4
commit e556b4949d
8 changed files with 36 additions and 34 deletions

View File

@ -1,11 +1,11 @@
vite.svg,499162500000,699a02e0e68a579f687d364bbbe7633161244f35af068220aee37b1b33dfb3c7 vite.svg,499162500000,699a02e0e68a579f687d364bbbe7633161244f35af068220aee37b1b33dfb3c7
index.html,1753035405872,3c6158b71f45d6e999fa49b429eac62310b4fbbc3a5d610313ab240eb484f92a index.html,1753036974325,d4ec7269769afa4794c9b3bc4382b8bb4ca2a9cc11d47522053a62b9c1dbd99b
assets/swipe-back-CGSdR0aI.js,1753035405872,517c817b67e87bb2d8be7273e40d76dc6046afddee62757c5a30ecaa4dc6e985 assets/swipe-back-0ASdaLec.js,1753036974325,dfdb4ccfc65b5ddd1d04306a2cbc650f7f2be8d659bb029d32c75fd5041b6f5e
assets/status-tap-CLf1Wfnc.js,1753035405872,74cfde934919ae1a235d219096b646fec1fc240688d58b039cecd11f6fe9de97 assets/status-tap-DKvxsyfd.js,1753036974325,1bbe8dd5487685ce491d40b73bc1bbbc1a3fdeac4e485438c55484248ca69fff
assets/md.transition-BcHE0Hfy.js,1753035405872,957736badb3da354a52c022261dbce86539188b7de89f5b9761e478aa79b1512 assets/md.transition-CWuowIQj.js,1753036974325,b5d793bffc7672549acba90697be0b704a7b39d8f4ff21faaf05ddba2951dcb0
assets/input-shims-DNsJ2SsM.js,1753035405872,0c88fd6b629bc2dc618613c3b0dea275eebe9ff9a54f0e550519b71e2f87e889 assets/ios.transition-BPJsV1yP.js,1753036974325,e401e6df1d7c900f8f54e717308a57abfcf913ee17b2eb56846b4ba3049d94cf
assets/index7-CvVnXkg4.js,1753035405872,bc175c80e2f773729b6b034071fad7830f0cde004d184285cd8c29722271b66f assets/input-shims-BtXJpb0t.js,1753036974325,1f111da7ba4ae84995311f07a6d41c62ca179213cd8123623048af9ccee533f9
assets/ios.transition-C4vHCq5E.js,1753035405872,614a85d6eb6c5f73c8024c65bab5e008c271a6e77817519d0035cadc2652e8f5 assets/index7-_QrtZLKR.js,1753036974325,fac87389bb8d2e7850fef07b4fd01132a49206e2b5ddd40feff932d041e1874e
assets/focus-visible-supuXXMI.js,1753035405872,df9266429356671847fa2c8123e1564bae645f75df3094f0055c365fa2beae28 assets/focus-visible-supuXXMI.js,1753036974325,df9266429356671847fa2c8123e1564bae645f75df3094f0055c365fa2beae28
assets/index-CzY-nILz.css,1753035405872,c68362f490f176fbe950e6cc313da199ed6e08c67058d82b833a2026a0be75c9 assets/index-CzY-nILz.css,1753036974324,c68362f490f176fbe950e6cc313da199ed6e08c67058d82b833a2026a0be75c9
assets/index-BijPmtNu.js,1753035405873,9729127c742119efd72ff5f7f4628f939053ad2f25abe6b78e74801e8e599326 assets/index-DxnqBJhb.js,1753036974326,143303c7b9c04d8a450f75b956258ba32195e518861db9a8c07e4cbbab3d6c0d

View File

@ -94,7 +94,7 @@ export const SongActionButtons: React.FC<{
onAddToQueue?: () => void; onAddToQueue?: () => void;
onRemoveFromQueue?: () => void; onRemoveFromQueue?: () => void;
onToggleFavorite?: () => void; onToggleFavorite?: () => void;
onDelete?: () => void; onDeleteItem?: () => void;
onSelectSinger?: () => void; onSelectSinger?: () => void;
}> = ({ }> = ({
isAdmin, isAdmin,
@ -108,7 +108,7 @@ export const SongActionButtons: React.FC<{
onAddToQueue, onAddToQueue,
onRemoveFromQueue, onRemoveFromQueue,
onToggleFavorite, onToggleFavorite,
onDelete, onDeleteItem,
onSelectSinger onSelectSinger
}) => { }) => {
const buttons = []; const buttons = [];
@ -155,12 +155,12 @@ export const SongActionButtons: React.FC<{
); );
} }
// Delete from Favorites button // Delete button (generic - can be used for favorites, history, etc.)
if (showDeleteButton && onDelete) { if (showDeleteButton && onDeleteItem) {
buttons.push( buttons.push(
<ActionButton <ActionButton
key="delete" key="delete"
onClick={onDelete} onClick={onDeleteItem}
variant="danger" variant="danger"
size="sm" size="sm"
> >
@ -197,7 +197,7 @@ const SongItem: React.FC<SongItemProps> = ({
onAddToQueue, onAddToQueue,
onRemoveFromQueue, onRemoveFromQueue,
onToggleFavorite, onToggleFavorite,
onDelete, onDeleteItem,
onSelectSinger, onSelectSinger,
isAdmin = false, isAdmin = false,
className = '', className = '',
@ -260,7 +260,7 @@ const SongItem: React.FC<SongItemProps> = ({
onAddToQueue={onAddToQueue} onAddToQueue={onAddToQueue}
onRemoveFromQueue={onRemoveFromQueue} onRemoveFromQueue={onRemoveFromQueue}
onToggleFavorite={onToggleFavorite} onToggleFavorite={onToggleFavorite}
onDelete={onDelete} onDeleteItem={onDeleteItem}
onSelectSinger={onSelectSinger} onSelectSinger={onSelectSinger}
/> />
</div> </div>

View File

@ -17,7 +17,6 @@ const Artists: React.FC = () => {
getSongsByArtist, getSongsByArtist,
getSongCountByArtist, getSongCountByArtist,
handleAddToQueue, handleAddToQueue,
handleToggleFavorite,
} = useArtists(); } = useArtists();
const songs = useAppSelector(selectSongs); const songs = useAppSelector(selectSongs);
@ -136,7 +135,10 @@ const Artists: React.FC = () => {
song={song} song={song}
context="search" context="search"
onAddToQueue={() => handleAddToQueue(song)} onAddToQueue={() => handleAddToQueue(song)}
onToggleFavorite={() => handleToggleFavorite(song)} onSelectSinger={() => {}} // Info button functionality
showAddButton={true}
showInfoButton={true}
showFavoriteButton={false}
/> />
</div> </div>
</div> </div>

View File

@ -47,8 +47,9 @@ const Favorites: React.FC = () => {
context="favorites" context="favorites"
showInfoButton={true} showInfoButton={true}
showAddButton={false} showAddButton={false}
showDeleteButton={true}
onSelectSinger={() => handleSongInfo(song)} onSelectSinger={() => handleSongInfo(song)}
onDelete={() => handleToggleFavorite(song)} onDeleteItem={() => handleToggleFavorite(song)}
/> />
)} )}
emptyTitle="No favorites yet" emptyTitle="No favorites yet"

View File

@ -53,7 +53,8 @@ const History: React.FC = () => {
song={song} song={song}
context="history" context="history"
onAddToQueue={() => handleAddToQueue(song)} onAddToQueue={() => handleAddToQueue(song)}
onDelete={() => handleDeleteFromHistory(song)} onSelectSinger={() => {}} // Info button functionality
onDeleteItem={() => handleDeleteFromHistory(song)}
isAdmin={isAdmin} isAdmin={isAdmin}
showAddButton={true} showAddButton={true}
showInfoButton={true} showInfoButton={true}

View File

@ -16,7 +16,6 @@ const SongLists: React.FC = () => {
loadMore, loadMore,
checkSongAvailability, checkSongAvailability,
handleAddToQueue, handleAddToQueue,
handleToggleFavorite,
} = useSongLists(); } = useSongLists();
const songListData = useAppSelector(selectSongList); const songListData = useAppSelector(selectSongList);
@ -133,7 +132,10 @@ const SongLists: React.FC = () => {
song={song} song={song}
context="search" context="search"
onAddToQueue={() => handleAddToQueue(song)} onAddToQueue={() => handleAddToQueue(song)}
onToggleFavorite={() => handleToggleFavorite(song)} onSelectSinger={() => {}} // Info button functionality
showAddButton={true}
showInfoButton={true}
showFavoriteButton={false}
/> />
))} ))}
</IonList> </IonList>

View File

@ -24,7 +24,7 @@ const Top100: React.FC = () => {
const topPlayed = useAppSelector(selectTopPlayed); const topPlayed = useAppSelector(selectTopPlayed);
const topPlayedCount = Object.keys(topPlayed).length; const topPlayedCount = Object.keys(topPlayed).length;
const allSongs = useAppSelector(selectSongsArray); const allSongs = useAppSelector(selectSongsArray);
const { addToQueue, toggleFavorite } = useSongOperations(); const { addToQueue } = useSongOperations();
const { showSuccess, showError } = useToast(); const { showSuccess, showError } = useToast();
const [selectedTopPlayed, setSelectedTopPlayed] = useState<TopPlayed | null>(null); const [selectedTopPlayed, setSelectedTopPlayed] = useState<TopPlayed | null>(null);
@ -70,14 +70,7 @@ const Top100: React.FC = () => {
} }
}, [addToQueue, showSuccess, showError]); }, [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 // Use real Firebase data from the hook
const displayItems = topPlayedItems; const displayItems = topPlayedItems;
@ -148,7 +141,10 @@ const Top100: React.FC = () => {
song={song} song={song}
context="search" context="search"
onAddToQueue={() => handleAddToQueue(song)} onAddToQueue={() => handleAddToQueue(song)}
onToggleFavorite={() => handleToggleFavorite(song)} onSelectSinger={() => {}} // Info button functionality
showAddButton={true}
showInfoButton={true}
showFavoriteButton={false}
/> />
))} ))}
</IonList> </IonList>

View File

@ -132,7 +132,7 @@ export interface SongItemProps {
onAddToQueue?: () => void; onAddToQueue?: () => void;
onRemoveFromQueue?: () => void; onRemoveFromQueue?: () => void;
onToggleFavorite?: () => void; onToggleFavorite?: () => void;
onDelete?: () => void; onDeleteItem?: () => void;
onSelectSinger?: () => void; onSelectSinger?: () => void;
isAdmin?: boolean; isAdmin?: boolean;
className?: string; className?: string;