import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { Artist, Track } from '@/back-api'; import { Covers } from '@/components/Cover'; import { EmptyEnd } from '@/components/EmptyEnd'; import { PageLayout } from '@/components/Layout/PageLayout'; import { SearchInput } from '@/components/SearchInput'; import { BUTTON_TOP_BAR_PROPERTY, TopBar } from '@/components/TopBar/TopBar'; import { useOrderedArtists } from '@/service/Artist'; import { useColorModeValue } from '@/components/ui/color-mode'; import { BASE_WRAP_HEIGHT, BASE_WRAP_ICON_SIZE, BASE_WRAP_WIDTH } from '@/constants/genericSpacing'; import { MdOutlineForkRight } from 'react-icons/md'; import { useActivePlaylistService } from '@/service/ActivePlaylist'; import { shuffleArray } from '@/utils/arrayTools'; import { useTrackService } from '@/service/Track'; import { DataTools, TypeCheck } from '@/utils/data-tools'; const LIMIT_RANDOM_VALUES = 25; export const ArtistsPage = () => { const [filterName, setFilterName] = useState(undefined); const navigate = useNavigate(); const { playInList } = useActivePlaylistService(); const onSelectItem = (data: Artist) => { navigate(`/artist/${data.id}/`); }; const { dataArtist } = useOrderedArtists(filterName); const { store: trackStore } = useTrackService(); const onRandomPlay = () => { const data = shuffleArray(dataArtist) const playingList: number[] = []; for (let i = 0; i < Math.min(data.length, LIMIT_RANDOM_VALUES); i++) { const selectedArtist: Artist = data[i]; const listArtistTracks: Track[] = DataTools.getsWhere( trackStore.data, [ { check: TypeCheck.CONTAINS, key: 'artists', value: selectedArtist.id, }, ], [] ); if (listArtistTracks.length === 0) { continue; } playingList.push(listArtistTracks[Math.floor(Math.random() * listArtistTracks.length)].id); } playInList(0, playingList) } return ( <> {dataArtist?.map((data) => ( onSelectItem(data)} > {data.name} ))} ); };