last tickets
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user