clear lot of tickets

This commit is contained in:
Thomas Demirdjian
2025-11-07 17:33:06 +01:00
parent 4365f1e46d
commit d7d9211fbe
30 changed files with 970 additions and 355 deletions
+63 -3
View File
@@ -89,6 +89,12 @@ const STAGE_CARD_CONTENT = [
];
const CLUB_CARD_IMAGE = icons.clubIcon;
const ACTIVE_SUBSCRIPTION_STATUSES = new Set([
"trialing",
"active",
"past_due",
"unpaid",
]);
const Home = ({ navigation, route }) => {
const {
@@ -102,6 +108,43 @@ const Home = ({ navigation, route }) => {
} = useUser();
const { setTooltip } = useMinuit();
const hasActiveSubscription = useMemo(() => {
if (!currentUserData) {
return false;
}
const pickStatus = (value) => {
if (typeof value !== "string") {
return null;
}
const trimmed = value.trim();
return trimmed ? trimmed.toLowerCase() : null;
};
const statusCandidates = [
pickStatus(currentUserData?.stripeSubscriptionStatus),
pickStatus(currentUserData?.stripeSubscription?.status),
pickStatus(
currentUserData?.stripeSubscription?.stripeSubscriptionStatus,
),
pickStatus(currentUserData?.stripeSubscription?.metadata?.status),
].filter(Boolean);
if (
statusCandidates.some((status) =>
ACTIVE_SUBSCRIPTION_STATUSES.has(status),
)
) {
return true;
}
const hasPremiumLevel =
typeof currentUserData?.premiumLevel === "string" &&
currentUserData.premiumLevel.trim().length > 0;
return hasPremiumLevel;
}, [currentUserData]);
if (!currentUID) {
return <LandingPage />;
}
@@ -386,9 +429,17 @@ const Home = ({ navigation, route }) => {
const handleStagePress = useCallback(
(stageKey, isLocked) => {
if (!hasActiveProject || isLocked) {
if (isLocked) {
return;
}
if (!hasActiveProject || !currentProject) {
if (stageKey === "songwriter") {
handleStartNew();
}
return;
}
ensureProjectSelected();
const action = getStageAction(stageKey, currentProject);
if (!action?.route) {
@@ -396,7 +447,12 @@ const Home = ({ navigation, route }) => {
}
navigate(action.route, action.params);
},
[currentProject, ensureProjectSelected, hasActiveProject],
[
currentProject,
ensureProjectSelected,
hasActiveProject,
handleStartNew,
],
);
const handleClubPress = useCallback(() => {
@@ -464,7 +520,11 @@ const Home = ({ navigation, route }) => {
))}
</View>
<ClubCard image={CLUB_CARD_IMAGE} onPress={handleClubPress} />
<ClubCard
image={CLUB_CARD_IMAGE}
onPress={handleClubPress}
hasActiveSubscription={hasActiveSubscription}
/>
</View>
</Page>
</View>