Teal.fm frontend powered by slices.network tealfm-slices.wisp.place
tealfm slices
1import { graphql, useLazyLoadQuery } from "react-relay"; 2import { useParams } from "react-router-dom"; 3import type { TopTracksQuery } from "./__generated__/TopTracksQuery.graphql"; 4import TopTrackItem from "./TopTrackItem"; 5import Layout from "./Layout"; 6import { useDateRangeFilter } from "./useDateRangeFilter"; 7 8export default function TopTracks() { 9 const { period } = useParams<{ period?: string }>(); 10 const queryVariables = useDateRangeFilter(period); 11 12 const data = useLazyLoadQuery<TopTracksQuery>( 13 graphql` 14 query TopTracksQuery($where: FmTealAlphaFeedPlayWhereInput) { 15 fmTealAlphaFeedPlaysAggregated( 16 groupBy: [trackName, releaseMbId, artists] 17 orderBy: { count: desc } 18 limit: 50 19 where: $where 20 ) { 21 trackName 22 releaseMbId 23 artists 24 count 25 } 26 } 27 `, 28 queryVariables, 29 { fetchKey: period || "all", fetchPolicy: "store-or-network" } 30 ); 31 32 const tracks = data.fmTealAlphaFeedPlaysAggregated || []; 33 const maxCount = tracks.length > 0 ? tracks[0].count : 0; 34 35 return ( 36 <Layout> 37 <div className="space-y-1"> 38 {tracks.map((track, index) => ( 39 <TopTrackItem 40 key={`${track.trackName}-${index}`} 41 trackName={track.trackName || "Unknown Track"} 42 releaseMbId={track.releaseMbId} 43 artists={track.artists || "Unknown Artist"} 44 count={track.count} 45 rank={index + 1} 46 maxCount={maxCount} 47 /> 48 ))} 49 </div> 50 </Layout> 51 ); 52}