From e5cd374382422ed203f7def223744a7693c2e9f4 Mon Sep 17 00:00:00 2001 From: leon-morival Date: Fri, 5 Sep 2025 15:01:45 +0200 Subject: [PATCH] playback cards --- src/screens/HitParade/HitParade.js | 23 +++- .../HitParade/components/PlaybacksCard.js | 102 ++++++++++-------- 2 files changed, 77 insertions(+), 48 deletions(-) diff --git a/src/screens/HitParade/HitParade.js b/src/screens/HitParade/HitParade.js index d359d35..07e44e2 100644 --- a/src/screens/HitParade/HitParade.js +++ b/src/screens/HitParade/HitParade.js @@ -22,6 +22,16 @@ const HitParade = () => { listener: true, condition: true, }); + const { data: topPlaybacks } = useDataFromRef({ + // Firestore n'autorise pas 2 inégalités (>, <, >=, <=, !=) sur des champs différents. + // On ne garde qu'une inégalité côté requête (views > 0) et on filtre ensuite côté client. + // On surdimensionne le limit pour s'assurer d'obtenir 10 playbacks après filtrage. + ref: projectsRef.where("views", ">", 0).orderBy("views", "desc").limit(50), + format: (docs) => docs.filter((d) => d?.playbackUrl != null).slice(0, 10), + simpleRef: false, + listener: true, + condition: true, + }); return ( @@ -114,8 +124,17 @@ const HitParade = () => { gap: 10, paddingBottom: responsiveHeight(20), }} - data={Array.from({ length: 5 })} - renderItem={() => } + data={Array.isArray(topPlaybacks) ? topPlaybacks : []} + keyExtractor={(item) => item.id} + renderItem={({ item, index }) => ( + navigate(Routes.Playbacks, { projectId: item.id })} + /> + )} /> )} {selected === "Clips" && ( diff --git a/src/screens/HitParade/components/PlaybacksCard.js b/src/screens/HitParade/components/PlaybacksCard.js index 89c1874..dbc89da 100644 --- a/src/screens/HitParade/components/PlaybacksCard.js +++ b/src/screens/HitParade/components/PlaybacksCard.js @@ -1,4 +1,4 @@ -import { View, Text, Image, Platform } from "react-native"; +import { View, Text, Image, Platform, Pressable } from "react-native"; import React from "react"; import { BlurView } from "expo-blur"; import { img } from "../../../assets"; @@ -6,65 +6,75 @@ import { Palette, Style } from "../../../styles"; import { FONT_FAMILY } from "../../../styles/Fonts"; import CoinBadge from "./CoinBadge"; -const PlaybacksCard = () => { +const PlaybacksCard = ({ + rank = 1, + title = "Sans titre", + artist = "MusicLand", + coverUrl = null, + onPress = () => null, +}) => { return ( - - + - - 1 - - - - Alors on danse - - - Stromae + {rank} + + + + {title} + + + {artist} + + - - - + + + ); };