This commit is contained in:
janisslsm committed 2026-11-01 12:12:55 +02:00
1 parent 1781d25a15
commit 732c0ad767
33051 files changed
+2591613 -3019689

No files matched your search

@@ -0,0 +1,202 @@
// Metro module 8397 (f8398).
import { useCallback, useMemo } from "react";
import { View } from "react-native";
import UserStore from "../../../../stores/UserStore";
import { PremiumTypes, TieredTenureBadge } from "../../PremiumConstants";
import { AnalyticsPages, UserSettingsSections } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useMobileTenureBadgeImages } from "./hooks/useMobileTenureBadgeImages";
import { getTieredTenureBadgeData } from "../../../user_profile/TieredTenureBadgeUtils";
import { getTenureBadgeRequirementString } from "../hooks/useTenureBadgeRequirementString";
import FastImage from "../../../../components_native/common/FastImage";
import { Text } from "../../../../design/components/Text/native/Text";
import { intl, t } from "../../../../intl/index.native";
import { useTieredTenureBadgeDataForUser, usePremiumSinceForUser } from "../hooks/useTenureBadging";
import { useStateFromStores } from "../../../../_bundle/Module589";
import * as _PremiumTypeUtils from "../../../../utils/PremiumTypeUtils";
import useTrackImpression from "../../../app_analytics/useTrackImpression";
import { ImpressionTypes, ImpressionNames } from "../../../../_bundle/Module503";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import { openUserSettings } from "../../../user_settings/core/native/openUserSettings";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import { getUserProfileActionSheetKey } from "../../../user_profile/native/showUserProfileActionSheet";
import usePremiumFeatureUpsellGetNitro from "../../roadblocks/native/hooks/usePremiumFeatureUpsellGetNitro";
import NitroUpsellButton from "../../components/native/NitroUpsellButton";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import { BottomSheetScrollView } from "../../../../_bundle/Module5245";
let c5387_12, useStyles;
const TieredTenureBadgeItem = function TieredTenureBadgeItem(props) {
const badge = props.badge;
let isUsersBadge = props.isUsersBadge;
const premiumSince = props.premiumSince;
const styles2 = useStyles();
const small = useMobileTenureBadgeImages(badge)?.small;
const tieredTenureBadgeData = getTieredTenureBadgeData(badge);
const tenureBadgeRequirementString = getTenureBadgeRequirementString(badge, tieredTenureBadgeData?.tenureReqNumMonths);
const r34 = tieredTenureBadgeData == null;
let r35 = null;
if (!r34) {
const style = [styles2.badgeContainer, isUsersBadge ? styles2.usersBadgeContainer : isUsersBadge];
const r46 = [<FastImage resizeMode="contain" source={small} />, <Text style={styles2.badgeName} variant="heading-md/semibold" color="mobile-text-heading-primary">
{intl.string(tieredTenureBadgeData.nameUnformatted)}
</Text>, <Text style={styles2.badgeRequirement} variant="text-xs/normal" color="mobile-text-heading-primary">{tenureBadgeRequirementString}</Text>, ,];
if (isUsersBadge) {
isUsersBadge = premiumSince != null;
}
if (isUsersBadge) {
isUsersBadge = <Text style={styles2.badgePremiumSince} variant="text-xs/normal" color="text-muted">
{intl.formatToPlainString(t.Hu4jfi, {
date: new Date(premiumSince)
})}
</Text>;
}
r46[3] = isUsersBadge;
r35 = <View style={style}>{r46}</View>;
}
return r35;
};
c5387_12 = "TIERED_TENURE_BADGE_ACTION_SHEET";
useStyles = createStyles({
headerContainer: {
paddingHorizontal: 24,
alignItems: "center"
},
title: {
marginTop: 8,
paddingHorizontal: 12,
textAlign: "center"
},
subtitle: {
marginTop: 8,
textAlign: "center"
},
container: {
flexDirection: "row",
flexWrap: "wrap",
justifyContent: "center",
paddingHorizontal: 24,
marginTop: 16
},
rowContainer: {
flexDirection: "row",
width: "100%",
height: 160,
gap: 8,
justifyContent: "center",
alignItems: "center",
marginTop: 24
},
rowContainerWithUsersBadge: {
height: 186
},
badgeContainer: {
minWidth: 110,
height: "100%",
paddingTop: 16,
alignItems: "center",
paddingHorizontal: 8
},
usersBadgeContainer: {
backgroundColor: Module712.colors.BACKGROUND_MOD_MUTED,
borderWidth: 1.2,
borderColor: Module712.colors.BACKGROUND_MOD_STRONG,
borderRadius: Module712.radii.sm
},
badgeName: {
marginTop: 8
},
badgeRequirement: {
marginTop: 4
},
badgePremiumSince: {
width: 90,
marginTop: 4,
textAlign: "center"
},
footer: {
marginHorizontal: 24
}
});
export default function TieredTenureBadgeActionSheet(props) {
let props2;
const { userId, shouldShowCTA = true } = props;
const styles = useStyles();
const tieredTenureBadgeDataForUser = useTieredTenureBadgeDataForUser(userId);
const premiumSinceForUser = usePremiumSinceForUser(userId);
const stateFromStores = useStateFromStores([UserStore], () => UserStore.getCurrentUser());
const isPremium = _PremiumTypeUtils.isPremium(stateFromStores, PremiumTypes.TIER_2);
const isPremiumAtLeast = _PremiumTypeUtils.isPremiumAtLeast(stateFromStores?.premiumType, PremiumTypes.TIER_0);
useTrackImpression({
type: ImpressionTypes.HALFSHEET,
name: ImpressionNames.TIERED_TENURE_BADGE_MODAL,
properties: {
badge: tieredTenureBadgeDataForUser?.id,
premium_type: isPremium,
viewed_user_id: userId
}
}, {
disableTrack: tieredTenureBadgeDataForUser?.id == null
}, [tieredTenureBadgeDataForUser?.id]);
const bottom = useSafeAreaInsets_native().bottom;
const callback = useCallback(() => {
openUserSettings({
screen: UserSettingsSections.PREMIUM
});
ActionSheetActionCreators.hideActionSheet(c5387_12);
ActionSheetActionCreators.hideActionSheet(getUserProfileActionSheetKey(userId));
}, [userId]);
const premiumFeatureUpsellGetNitro = usePremiumFeatureUpsellGetNitro(false, callback, AnalyticsPages.TIERED_TENURE_BADGES_ACTION_SHEET, "replaceTopSheet");
const { loading, onPress } = premiumFeatureUpsellGetNitro;
const memo = useMemo(() => {
let length2;
const r10 = Object.values(TieredTenureBadge);
const r11 = [];
const length = r10.length;
let r0 = 0;
if (0 < length) {
do {
const r1 = r0 + 3;
r11.push(r10.slice(r0, r1));
length2 = r10.length;
r0 = r1;
} while (r0 < length2);
}
return r11;
}, []);
const r130 = <View style={styles.headerContainer}>
<Text variant="heading-xl/bold" color="mobile-text-heading-primary" style={styles.title}>
{isPremium ? intl.string(t.Og62j7) : intl.string(t.RtGeFS)}
</Text>
<Text variant="text-md/medium" color="text-default" style={styles.subtitle}>
{isPremium ? intl.string(t.IdAP91) : intl.format(t["bF+q7R"], {
learnMoreHook: callback
})}
</Text>
</View>;
const r134 = {
style: [styles.footer, {
paddingBottom: bottom
}],
children: null
};
if (isPremium) {
r134.children = <NitroUpsellButton shiny={false} text={intl.string(t.hvVgAZ)} onPress={callback} />;
props2 = r134;
} else {
r134.children = <NitroUpsellButton loading={loading} text={isPremiumAtLeast ? intl.string(t.IJI7yk) : intl.string(t.pj0XBN)} onPress={onPress} />;
props2 = r134;
}
const r161 = <View {...props2} />;
return <BottomSheet scrollable startExpanded footer={shouldShowCTA ? r161 : void 0}>
<BottomSheetScrollView contentContainerStyle={[styles.container, {
paddingBottom: bottom + 64
}]}>
{r130}
{memo.map((a0, a1) => <View key={a1} style={[styles.rowContainer, a0.some((item) => item === tieredTenureBadgeDataForUser?.id) && styles.rowContainerWithUsersBadge]}>
{a0.map((item, index) => <TieredTenureBadgeItem key={index} badge={item} isUsersBadge={item === tieredTenureBadgeDataForUser?.id} premiumSince={premiumSinceForUser} />)}
</View>)}
</BottomSheetScrollView>
</BottomSheet>;
};
export const TIERED_TENURE_BADGE_ACTION_SHEET_KEY = "TIERED_TENURE_BADGE_ACTION_SHEET";
@@ -0,0 +1,63 @@
// Metro module 8440 (f8441).
import { useMemo } from "react";
import { View } from "react-native";
import { UserSettingsSections } from "../../../../Constants";
import { ContentDismissActionType } from "../../../dismissible_content/DismissibleContentConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { useMobileTenureBadgeImages } from "./hooks/useMobileTenureBadgeImages";
import FastImage from "../../../../components_native/common/FastImage";
import { getTieredTenureBadge, getTieredTenureBadgeData } from "../../../user_profile/TieredTenureBadgeUtils";
import { DismissibleContent } from "../../../../_bundle/Module1358";
import { useSelectedDismissibleContent } from "../../../dismissible_content/hooks/useSelectedDismissibleContent";
import { intl, t } from "../../../../intl/index.native";
import { openUserSettings } from "../../../user_settings/core/native/openUserSettings";
import { useCoachmark } from "../../../../design/components/Coachmark/native/useCoachmark.native";
let useStyles;
const CoachmarkImg = function CoachmarkImg(props) {
const badge = props.badge;
const styles = useStyles();
const medium = useMobileTenureBadgeImages(badge?.id)?.medium;
return badge == null ? null : <View style={styles.imageContainer}>
<FastImage resizeMode="contain" style={styles.image} source={{
uri: medium
}} />
</View>;
};
useStyles = createStyles({
image: {
width: "100%",
height: "100%"
},
imageContainer: {
width: 110,
height: 72,
marginTop: 16
}
});
export default function TieredTenureBadgeCoachmark({ targetRef, badgeId }) {
const tieredTenureBadge = getTieredTenureBadge(badgeId);
const tieredTenureBadgeData = tieredTenureBadge != null ? getTieredTenureBadgeData(tieredTenureBadge) : null;
const [r32, r13] = useSelectedDismissibleContent(tieredTenureBadgeData != null ? [DismissibleContent.TIERED_TENURE_BADGE_COACHMARK] : []);
let c16576_1 = r32;
let c16576_2 = r13;
useCoachmark(targetRef, useMemo(() => ({
offsetY: 12,
title: intl.string(t.Ajj8iG),
description: intl.string(t["WUNqD/"]),
position: "bottom",
visible: c16576_1 === DismissibleContent.TIERED_TENURE_BADGE_COACHMARK,
onDismiss: () => {
c16576_2(ContentDismissActionType.USER_DISMISS);
},
renderImgComponent: () => <CoachmarkImg badge={tieredTenureBadgeData} />,
onButtonPress: () => {
c16576_2(ContentDismissActionType.TAKE_ACTION);
openUserSettings({
screen: UserSettingsSections.PREMIUM
});
},
buttonLabel: intl.string(t.RzWDqY),
buttonVariant: "experimental_premium-primary"
}), [r13, r32, tieredTenureBadgeData]));
return null;
};
@@ -0,0 +1,112 @@
// Metro module 12469 (f12470).
import { useCallback } from "react";
import { View } from "react-native";
import UserStore from "../../../../stores/UserStore";
import { AnalyticEvents } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { useTieredTenureBadgeData, usePremiumSince, TieredTenureBadgeStatus } from "../hooks/useTenureBadging";
import { useTimeUntilNextBadge } from "../hooks/useTimeUntilNextBadge";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { useMobileTenureBadgeImages } from "./hooks/useMobileTenureBadgeImages";
import AnalyticsUtils from "../../../../utils/AnalyticsUtils";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import { TIERED_TENURE_BADGE_ACTION_SHEET_KEY } from "./TieredTenureBadgeActionSheet";
import { intl, t } from "../../../../intl/index.native";
import Module12472 from "../../../../_bundle/Module12472";
import { Text } from "../../../../design/components/Text/native/Text";
import { getTenureBadgeRequirementString } from "../hooks/useTenureBadgeRequirementString";
import PremiumPerkCard from "../../native/PremiumPerkCard";
import FastImage from "../../../../components_native/common/FastImage";
const useStyles = createStyles({
badgeNameContainer: {
flexDirection: "row"
},
tenureRequirements: {
marginStart: 4
},
image: {
width: "100%",
height: "100%"
},
imageContainer: {
height: 238,
paddingVertical: 32
},
upcomingBadge: {
opacity: 0.4
},
title: {
marginTop: 0
}
});
export function TieredTenureBadgePerkCard() {
const tieredTenureBadgeData = useTieredTenureBadgeData();
const premiumSince = usePremiumSince();
const timeUntilNextBadge = useTimeUntilNextBadge();
const styles = useStyles();
const stateFromStores = useStateFromStores([UserStore], () => UserStore.getCurrentUser());
const large = useMobileTenureBadgeImages(tieredTenureBadgeData?.id)?.large;
const callback = useCallback(() => {
if (stateFromStores != null) {
if (tieredTenureBadgeData?.id != null) {
AnalyticsUtils.track(AnalyticEvents.TIERED_TENURE_BADGE_PERK_CARD_CLICKED, {
badge: tieredTenureBadgeData?.id
});
}
ActionSheetActionCreators.openLazy(import("./TieredTenureBadgeActionSheet"), TIERED_TENURE_BADGE_ACTION_SHEET_KEY, {
userId: stateFromStores.id,
shouldShowCTA: false
});
}
}, [stateFromStores, tieredTenureBadgeData?.id]);
if (tieredTenureBadgeData == null) {
return null;
}
const pillText = tieredTenureBadgeData.status === TieredTenureBadgeStatus.UPCOMING ? intl.string(t.O9TBwQ) : intl.string(t["jyYgZ+"]);
const r74 = premiumSince != null;
let r18 = null;
let uri = large;
if (r74) {
const status = tieredTenureBadgeData.status;
if (TieredTenureBadgeStatus.EARNED === status) {
r18 = intl.format(t.Hu4jfi, {
date: new Date(premiumSince)
});
uri = large;
} else {
const UPCOMING = TieredTenureBadgeStatus.UPCOMING;
r18 = null;
uri = large;
if (UPCOMING === status) {
const r84 = timeUntilNextBadge != null;
r18 = null;
uri = large;
if (r84) {
r18 = intl.format(t.vwLvec, {
timeFrame: intl.formatToPlainString(t["k2UNz+"], {
days: timeUntilNextBadge.days
}),
date: new Date(premiumSince)
});
uri = Module12472;
}
}
}
}
const bodyComponent = <View>
<View style={styles.badgeNameContainer}>
<Text variant="heading-md/medium" color="text-default">
{intl.string(tieredTenureBadgeData.nameUnformatted)}
</Text>
<Text variant="heading-md/medium" color="text-muted" style={styles.tenureRequirements}>
{getTenureBadgeRequirementString(tieredTenureBadgeData.id, tieredTenureBadgeData.tenureReqNumMonths)}
</Text>
</View>
{r18 != null && <Text variant="heading-sm/normal" color="text-muted">{r18}</Text>}
</View>;
return <PremiumPerkCard title={intl.string(t.rnsqpa)} titleStyle={styles.title} bodyComponent={bodyComponent} cta={intl.string(t.VsY8ZW)} buttonOnPress={callback} headerComponent={<View style={styles.imageContainer}>
<FastImage resizeMode="contain" style={[styles.image, tieredTenureBadgeData.status === TieredTenureBadgeStatus.UPCOMING && styles.upcomingBadge]} source={{
uri
}} />
</View>} pillText={pillText} />;
}
@@ -0,0 +1,74 @@
// Metro module 8398 (f8399).
import { TieredTenureBadge } from "../../../PremiumConstants";
import Module8399 from "../../../../../_bundle/Module8399";
import Module8400 from "../../../../../_bundle/Module8400";
import Module8401 from "../../../../../_bundle/Module8401";
import Module8402 from "../../../../../_bundle/Module8402";
import Module8403 from "../../../../../_bundle/Module8403";
import Module8404 from "../../../../../_bundle/Module8404";
import Module8405 from "../../../../../_bundle/Module8405";
import Module8406 from "../../../../../_bundle/Module8406";
import Module8407 from "../../../../../_bundle/Module8407";
import Module8408 from "../../../../../_bundle/Module8408";
import Module8409 from "../../../../../_bundle/Module8409";
import Module8410 from "../../../../../_bundle/Module8410";
import Module8411 from "../../../../../_bundle/Module8411";
import Module8412 from "../../../../../_bundle/Module8412";
import Module8413 from "../../../../../_bundle/Module8413";
import Module8414 from "../../../../../_bundle/Module8414";
import Module8415 from "../../../../../_bundle/Module8415";
import Module8416 from "../../../../../_bundle/Module8416";
import Module8417 from "../../../../../_bundle/Module8417";
import Module8418 from "../../../../../_bundle/Module8418";
import Module8419 from "../../../../../_bundle/Module8419";
import Module8420 from "../../../../../_bundle/Module8420";
import Module8421 from "../../../../../_bundle/Module8421";
import Module8422 from "../../../../../_bundle/Module8422";
const r16 = {};
r16[TieredTenureBadge.PREMIUM_TENURE_1_MONTH] = {
small: Module8399,
medium: Module8400,
large: Module8401
};
r16[TieredTenureBadge.PREMIUM_TENURE_3_MONTH] = {
small: Module8402,
medium: Module8403,
large: Module8404
};
r16[TieredTenureBadge.PREMIUM_TENURE_6_MONTH] = {
small: Module8405,
medium: Module8406,
large: Module8407
};
r16[TieredTenureBadge.PREMIUM_TENURE_12_MONTH] = {
small: Module8408,
medium: Module8409,
large: Module8410
};
r16[TieredTenureBadge.PREMIUM_TENURE_24_MONTH] = {
small: Module8411,
medium: Module8412,
large: Module8413
};
r16[TieredTenureBadge.PREMIUM_TENURE_36_MONTH] = {
small: Module8414,
medium: Module8415,
large: Module8416
};
r16[TieredTenureBadge.PREMIUM_TENURE_60_MONTH] = {
small: Module8417,
medium: Module8418,
large: Module8419
};
r16[TieredTenureBadge.PREMIUM_TENURE_72_MONTH] = {
small: Module8420,
medium: Module8421,
large: Module8422
};
let c5388_0 = r16;
export function useMobileTenureBadgeImages(a0) {
return a0 != null ? c5388_0[a0] : null;
}
export function getMobileTenureBadgeImages(a0) {
return c5388_0[a0];
}
@@ -0,0 +1,45 @@
// Metro module 8394 (f8395).
import { useCallback } from "react";
import UserStore from "../../../../../stores/UserStore";
import { PremiumTypes } from "../../../PremiumConstants";
import { DEFAULT_PREMIUM_BADGE_ID } from "../../Constants";
import { AnalyticEvents, UserSettingsSections } from "../../../../../Constants";
import { UserProfileThemeTypes } from "../../../../user_profile/native/Constants";
import { useIsPremiumSubscriber } from "../../../useIsPremiumSubscriber";
import { getTieredTenureBadge } from "../../../../user_profile/TieredTenureBadgeUtils";
import { useStateFromStores } from "../../../../../_bundle/Module589";
import { openUserSettings } from "../../../../user_settings/core/native/openUserSettings";
import ActionSheetActionCreators from "../../../../action_sheet/native/ActionSheetActionCreators";
import { TIERED_TENURE_BADGE_ACTION_SHEET_KEY } from "../TieredTenureBadgeActionSheet";
import AnalyticsUtils from "../../../../../utils/AnalyticsUtils";
export function useTieredTenureBadgeClickHandler(a0, a1, a2) {
let isPremiumSubscriber2;
const badge = a0;
const userId = a1;
const isPremiumSubscriber = useIsPremiumSubscriber(PremiumTypes.TIER_2);
let r16 = typeof a0 === "string" ? getTieredTenureBadge(a0) != null : typeof a0 === "string";
const stateFromStores = useStateFromStores([UserStore], () => UserStore.getCurrentUser());
if (!r16) {
r16 = a0 === DEFAULT_PREMIUM_BADGE_ID && a1 === stateFromStores?.id && isPremiumSubscriber;
}
isPremiumSubscriber2 = r16;
const callback = useCallback(() => {
if (a2 === UserProfileThemeTypes.YOU_SCREEN) {
openUserSettings({
screen: UserSettingsSections.PREMIUM
});
} else {
ActionSheetActionCreators.openLazy(import("../TieredTenureBadgeActionSheet"), TIERED_TENURE_BADGE_ACTION_SHEET_KEY, {
userId
}, "stack");
}
if (isPremiumSubscriber2) {
AnalyticsUtils.track(AnalyticEvents.TIERED_TENURE_BADGE_CLICKED, {
badge,
viewed_user_id: userId,
premium_type: isPremiumSubscriber
});
}
}, [a2, a1, isPremiumSubscriber2, a0, isPremiumSubscriber]);
return isPremiumSubscriber2 ? callback : null;
}