last tickets

This commit is contained in:
Thomas Demirdjian
2025-11-24 15:35:14 +01:00
parent 471a3177e8
commit 72852ad92b
40 changed files with 1749 additions and 667 deletions
+15 -70
View File
@@ -1,5 +1,5 @@
import { View, Text, Image } from "react-native";
import React, { useCallback, useMemo } from "react";
import React, { useCallback, useEffect } from "react";
import Page from "../../layouts/Page";
import MusicLandHeader from "../../components/MusicLandHeader";
import GradientButton from "../../components/GradientButton";
@@ -14,80 +14,25 @@ import { Routes } from "../../navigation";
import { useRoute } from "@react-navigation/native";
import { useUser } from "../../providers/UserDataProvider";
const ACTIVE_SUBSCRIPTION_STATUSES = new Set([
"trialing",
"active",
"past_due",
"unpaid",
]);
const pickStatus = (value) => {
if (typeof value !== "string") {
return null;
}
const trimmed = value.trim();
return trimmed ? trimmed.toLowerCase() : null;
};
const hasActiveSubscription = (userData) => {
if (!userData) {
return false;
}
const statusCandidates = [
pickStatus(userData?.stripeSubscriptionStatus),
pickStatus(userData?.stripeSubscription?.status),
pickStatus(userData?.stripeSubscription?.stripeSubscriptionStatus),
pickStatus(userData?.stripeSubscription?.metadata?.status),
].filter(Boolean);
if (
statusCandidates.some((status) =>
ACTIVE_SUBSCRIPTION_STATUSES.has(status),
)
) {
return true;
}
const premiumUntil = userData?.premiumUntil;
if (premiumUntil) {
const asDate =
premiumUntil?.toDate?.() ||
(premiumUntil?.seconds ? new Date(premiumUntil.seconds * 1000) : null);
if (asDate && asDate > new Date()) {
return true;
}
}
if (userData?.premium?.active) {
return true;
}
return false;
};
const StreamSong = () => {
const params = useRoute().params;
const action = params?.action;
const { currentUserData = null } = useUser() || {};
const isPlaybackFlow = action === "playback";
const userHasActiveSubscription = useMemo(
() => hasActiveSubscription(currentUserData),
[currentUserData],
);
const headingText = isPlaybackFlow
? "Publier ton playback"
: "Publier ta chanson";
const project = params?.project || null;
const { hasActiveSubscription } = useUser() || {};
const userHasActiveSubscription = hasActiveSubscription;
useEffect(() => {
if (action && action !== "playback") {
navigate(Routes.SongDownload, { project });
}
}, [action, project]);
const headingText = "Publier ton playback";
const descriptionText = userHasActiveSubscription
? `Ton abonnement est actif, tu peux publier ${
isPlaybackFlow ? "ce playback" : "cette chanson"
} sur MusicLand et participer au concours.`
: `Pour publier ${isPlaybackFlow ? "ton playback" : "ta chanson"} sur la plateforme, tu dois rejoindre le Club MusicLand.`;
? "Ton abonnement est actif, publie ton playback et participe au concours."
: "Pour publier ton playback sur la plateforme, rejoins le Club MusicLand.";
const ctaLabel = userHasActiveSubscription
? isPlaybackFlow
? "Publier mon playback"
: "Publier ma chanson"
? "Publier mon playback"
: "Rejoindre le Club MusicLand";
const handlePrimaryAction = useCallback(() => {
if (userHasActiveSubscription) {