Signed-off-by: mbrucedogs <mbrucedogs@gmail.com>
This commit is contained in:
parent
4ebdcd3ff4
commit
e556b4949d
@ -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
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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}
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user