Files
discord-decomp/modules/premium/native/PremiumTabBadge.tsx
T
2026-11-01 12:12:55 +02:00

148 lines
8.1 KiB
TypeScript

// Metro module 14012 (f14013).
import { View } from "react-native";
import SubscriptionStore from "../../../stores/billing/SubscriptionStore";
import { PREMIUM_TIER_2_REFERRAL_TRIAL_ID } from "../PremiumConstants";
import { Gradients } from "../../colors/native/ColorConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import * as _shared from "../../../design/shared";
import useTheme from "../../../hooks/useTheme";
import { Text } from "../../../design/components/Text/native/Text";
import useTrackImpression from "../../app_analytics/useTrackImpression";
import { ImpressionTypes, ImpressionNames } from "../../../_bundle/Module503";
import { MarketingComponentType } from "../../../_bundle/Module6567";
import { Icon } from "../../../design/void/native";
import Module14013 from "../../../_bundle/Module14013";
import { usePremiumTrialOffer } from "../hooks/usePremiumTrialOffer.android";
import { usePremiumDiscountOffer } from "../hooks/usePremiumDiscountOffer.android";
import { useHasTier2Premium } from "../../../utils/PremiumUtils";
import { useIsDismissibleContentDismissed_UNSAFE } from "../../dismissible_content/DismissibleContentUnsafeUtils";
import { DismissibleContent } from "../../../_bundle/Module1358";
import { useStateFromStores } from "../../../_bundle/Module589";
import { useSelectedDismissibleContent, useSelectedSnowflakeBoundDismissibleContent } from "../../dismissible_content/hooks/useSelectedDismissibleContent";
import { useIsEligibleSenderForReferralProgram } from "../referral_program/hooks/useIsEligibleSenderForReferralProgram";
import { useIsReferralProgramEntrypointBadgeAcknowledged } from "../referral_program/ReferralProgramUtils";
import { usePromotionMarketingComponent } from "../hooks/usePromotionMarketingComponent";
import { intl, t } from "../../../intl/index.native";
import Module4611 from "../../../_bundle/Module4611";
import { HorizontalGradient } from "../../../ConstantsIOS";
import { isAndroid } from "../../../utils/PlatformUtils";
let useStyles, OfferBadge;
const ThemedTabBadge = function ThemedTabBadge(props) {
const label = props.label;
const styles = useStyles();
const isThemeDark = _shared.isThemeDark(useTheme());
return <View style={[styles.badge, isThemeDark ? styles.badgeBackgroundDarkTheme : styles.badgeBackgroundLightTheme]}>
<Text variant="eyebrow" color={isThemeDark ? "text-overlay-dark" : "text-overlay-light"} style={styles.text}>{label}</Text>
</View>;
};
OfferBadge = function OfferBadge(props) {
const { acked, badgeCopy, ackedBadgeCopy, componentId } = props;
const styles = useStyles();
useTrackImpression({
type: ImpressionTypes.VIEW,
name: ImpressionNames.PREMIUM_MARKETING_COMPONENT,
properties: {
component_type: MarketingComponentType.PREMIUM_TAB,
component_id: componentId
}
}, {
disableTrack: componentId == null
});
return acked ? <View style={styles.acked}>
<Icon source={Module14013} size={Icon.Sizes.EXTRA_SMALL} color={styles.icon.color} style={styles.icon} />
<Text variant="eyebrow" color="interactive-text-default" style={styles.text}>{ackedBadgeCopy}</Text>
</View> : <ThemedTabBadge label={badgeCopy} />;
};
useStyles = createStyles({
tag: {
paddingVertical: 4,
paddingHorizontal: 8,
borderRadius: Module712.radii.round
},
badge: {
display: "flex",
minWidth: 16,
minHeight: 16,
paddingHorizontal: 8,
justifyContent: "center",
alignItems: "center",
gap: 4,
borderRadius: Module712.radii.round
},
badgeBackgroundLightTheme: {
backgroundColor: Module712.colors.BACKGROUND_BRAND
},
badgeBackgroundDarkTheme: {
backgroundColor: Module712.colors.WHITE
},
acked: {
paddingVertical: 2,
paddingHorizontal: 12,
borderRadius: Module712.radii.round,
backgroundColor: Module712.colors.BORDER_SUBTLE,
display: "flex",
flexDirection: "row",
alignItems: "center",
textAlignVertical: "center"
},
ackedBadge: {
backgroundColor: Module712.colors.BORDER_SUBTLE
},
icon: {
color: Module712.colors.INTERACTIVE_TEXT_DEFAULT,
marginRight: 2
},
text: {
paddingBottom: 2
},
premiumDiscountBadge: {
paddingVertical: 2,
paddingHorizontal: 12,
borderRadius: Module712.radii.round,
display: "flex",
flexDirection: "row",
alignItems: "center",
textAlignVertical: "center"
}
});
export default function PremiumTabBadge() {
const styles = useStyles();
const premiumTrialOffer = usePremiumTrialOffer();
const premiumDiscountOffer = usePremiumDiscountOffer();
const hasTier2Premium = useHasTier2Premium();
const isDismissibleContentDismissed_UNSAFE = useIsDismissibleContentDismissed_UNSAFE(DismissibleContent.MOBILE_NITRO_HOME_SETTINGS_BADGE);
const r45 = isDismissibleContentDismissed_UNSAFE ? !isDismissibleContentDismissed_UNSAFE : hasTier2Premium;
const [r18, ] = useSelectedDismissibleContent(useStateFromStores([SubscriptionStore], () => SubscriptionStore.getPremiumTypeSubscription())?.trialId === PREMIUM_TIER_2_REFERRAL_TRIAL_ID && !r45 ? [DismissibleContent.REFERRAL_TRIAL_MOBILE_NITRO_HOME_BADGE] : [], void 0, true);
const [r17, ] = useSelectedDismissibleContent(!r45 && hasTier2Premium ? [DismissibleContent.WHATS_NEW_TENURE_BADGE_REWARD] : [], void 0, true);
const isEligibleSenderForReferralProgram = useIsEligibleSenderForReferralProgram();
const isReferralProgramEntrypointBadgeAcknowledged = useIsReferralProgramEntrypointBadgeAcknowledged();
const promotionMarketingComponent = usePromotionMarketingComponent(MarketingComponentType.PREMIUM_TAB);
const r93 = promotionMarketingComponent != null ? promotionMarketingComponent.properties.properties.oneofKind === "premiumTab" ? DismissibleContent.PREMIUM_TAB_MARKETING_MOMENT_OFFER_BADGE : null : null;
let r101 = promotionMarketingComponent?.promotionId;
if (r101 == null) {
r101 = "";
}
const [r104, ] = useSelectedSnowflakeBoundDismissibleContent(r93, r101, void 0, true);
if (promotionMarketingComponent != null && promotionMarketingComponent.properties.properties.oneofKind === "premiumTab") {
return <OfferBadge acked={r104 !== DismissibleContent.PREMIUM_TAB_MARKETING_MOMENT_OFFER_BADGE} badgeCopy={promotionMarketingComponent.properties.properties.premiumTab.badgeLabel} ackedBadgeCopy={promotionMarketingComponent.properties.properties.premiumTab.acknowledgedBadgeLabel} componentId={promotionMarketingComponent.id} />;
}
const r118 = r18 === DismissibleContent.REFERRAL_TRIAL_MOBILE_NITRO_HOME_BADGE ? intl.string(t.uO4bXn) : r17 === DismissibleContent.WHATS_NEW_TENURE_BADGE_REWARD ? intl.string(t["jyYgZ+"]) : null;
return isEligibleSenderForReferralProgram && !isReferralProgramEntrypointBadgeAcknowledged ? <ThemedTabBadge label={intl.string(t.RDE0Sc)} /> : r45 ? <Module4611 style={styles.tag} colors={Gradients.PREMIUM_TIER_2} start={HorizontalGradient.START} end={HorizontalGradient.END}>
<Text variant="eyebrow" color="text-overlay-light" style={isAndroid() ? styles.text : void 0}>
{intl.string(t.y2b7CA)}
</Text>
</Module4611> : premiumTrialOffer != null ? <OfferBadge acked={premiumTrialOffer?.expires_at != null} badgeCopy={intl.string(t.OS9KPu)} ackedBadgeCopy={intl.string(t.OS9KPu)} /> : premiumDiscountOffer != null ? premiumDiscountOffer.hasAcknowledged() ? <View style={[styles.premiumDiscountBadge, styles.ackedBadge]}>
<Icon source={Module14013} size={Icon.Sizes.EXTRA_SMALL} color={styles.icon.color} style={styles.icon} />
<Text variant="eyebrow" color="interactive-text-default" style={styles.text}>
{intl.string(t["/DTtr6"])}
</Text>
</View> : <Module4611 style={styles.premiumDiscountBadge} colors={["#db00a4", "#5968f0"]} start={HorizontalGradient.START} end={HorizontalGradient.END}>
<Text variant="eyebrow" color="text-overlay-light" style={styles.text}>
{intl.string(t["/DTtr6"])}
</Text>
</Module4611> : r118 != null ? <Module4611 style={styles.tag} colors={Gradients.PREMIUM_TIER_2} start={HorizontalGradient.START} end={HorizontalGradient.END}>
<Text variant="eyebrow" color="text-overlay-light" style={isAndroid() ? styles.text : void 0}>{r118}</Text>
</Module4611> : null;
};