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

708 lines
29 KiB
TypeScript

// Metro module 14117 (f14118).
import * as Module19 from "react";
import { useMemo, useCallback, useEffect } from "react";
import { Image as Image2, View, StyleSheet } from "react-native";
import UserStore from "../../../stores/UserStore";
import QuestStore from "../QuestStore";
import { QuestsExperimentLocations } from "../QuestConstants";
import { NOOP } from "../../../_bundle/Module505";
import { Fragment } from "react/jsx-runtime";
import Module712 from "../../../_bundle/Module712";
import { experimental_createToken, createStyles, createStyleProperties } from "../../../design/components/Styles/native/createStyles";
import * as _Module4004 from "../../../_bundle/Module4004";
import { hexOpacityToRgba } from "../../../utils/ColorUtils";
import { QuestContent } from "../QuestTypes";
import { getQuestLogger } from "../lib/getQuestLogger";
import { useTrackQuestContentClickedWithImpression } from "../lib/analytics/AnalyticsHooks";
import { useQuestTaskDetails, useQuestCompletionDetails, useQuestFormattedDate, useShouldShowBonusOrbsUX } from "../hooks/QuestHooks";
import useWindowDimensions_native from "../../screen/useWindowDimensions.native";
import { getQuestAsset, QuestAssetType, getScaledFirstFrameImageUrl, getScaledImageUrl } from "../lib/AssetUtils";
import { useQuestGameLogotypeAssetUrl, useHasWatchVideoOnMobileTasks, useMobileActivityQuest } from "./QuestHooks.native";
import { useRecyclingState } from "../../../_bundle/noop_6676";
import MonitoringAgent from "../../monitoring/MonitoringAgent";
import { MetricEvents } from "../../../_bundle/Module5872";
import { getQuestContentName, QuestContentCTA } from "../lib/analytics/AnalyticsTypes";
import { useStateFromStores, useStateFromStoresObject } from "../../../_bundle/Module589";
import * as _QuestRewardUtils from "../utils/QuestRewardUtils";
import { getDefaultRewardNameWithArticle, hasCollectiblesQuestReward, getVirtualCurrencyRewardOrbQuantity, getQuestOrbRewardQuantityForUser, getDefaultRewardName } from "../utils/QuestRewardUtils";
import * as _QuestTaskUtils from "../utils/QuestTaskUtils";
import * as _QuestDataUtils from "../utils/QuestDataUtils";
import { getIsQuestExpiredButWithinThirtyDayLookback } from "../utils/QuestDataUtils";
import { getDefaultReward, getCtaLink, getExternalCtaLabel } from "../utils/QuestCopyUtils";
import useTheme from "../../../hooks/useTheme";
import { useFetchCollectiblesProduct } from "../../collectibles/hooks/useFetchCollectiblesProduct";
import { useToken } from "../../../design/tokens/native/useToken";
import { useGetQuestImpressionId } from "../lib/analytics/ContentImpressionTrackerHooks";
import { shouldMigrateToAdAnalyticsInterface, AdAnalyticsInterfaceExperimentStep } from "../experiments/AdAnalyticsInterfaceExperiment";
import { captureAdUserAction } from "../../ads/analytics/captureAdUserAction";
import { AdUserActionType } from "../../ads/analytics/captureAdUserActionTypes";
import { AdCreativeType } from "../../../_bundle/Module6013";
import { openGameLinkDirectly } from "../utils/QuestPlatformUtils";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import { usePrimaryCtaCopy, useQuestDescription } from "../hooks/QuestCopyHooks";
import tinycolor from "../../../_bundle/tinycolor";
import { intl, t } from "../../../intl/index.native";
import { viewReward, handleRewardClaimThenView, getPrimaryCtaIcon, dismissOverlayScreens } from "./QuestUtils.native";
import { getVideoQuestWatchCtaText, getVideoQuestWatchCtaAccessibilityLabel } from "../utils/MobileQuestVideoWatchCtaCopy";
import openVideoQuestModal from "./VideoQuestModal/openVideoQuestModal";
import { enrollInQuest } from "../QuestActionCreators";
import { useQuestOrbMultiplierEligibility } from "../hooks/QuestOrbMultiplierHooks";
import { QuestOrbMultiplierEligibilityType } from "../utils/QuestOrbMultiplierUtils";
import { useFontScale } from "../../screen/native/useFontScale";
import { useScaledTextLineHeight } from "../../screen/native/useScaledTextLineHeight.android";
import { GameProfileSources } from "../../game_profile/GameProfileAnalyticUtils";
import { isFabric } from "../../../utils/native/FabricUtils";
import { isAndroid } from "../../../utils/PlatformUtils";
import { OrbsIcon } from "../../../design/components/Icon/native/redesign/generated/OrbsIcon";
import { Text } from "../../../design/components/Text/native/Text";
import { VideoQuestModalSteps } from "./VideoQuestModal/VideoQuestModal";
import { Card } from "../../../design/components/Card/native/Card.native";
import PremiumRewardGradient from "./PremiumRewardGradient";
import FastImage from "../../../components_native/common/FastImage";
import Module4611 from "../../../_bundle/Module4611";
import { VerticalGradient } from "../../../ConstantsIOS";
import QuestGameLogotype from "./QuestGameLogotype";
import { Stack } from "../../../design/components/Stack/native/Stack.native";
import Module8466 from "../../../_bundle/Module8466";
import QuestProgressIndicator from "./QuestProgressIndicator";
import QuestRewardTile from "./QuestRewardTile";
import { QuestOrbMultiplierPerkPill } from "./QuestOrbMultiplierPerkPill";
import { Button } from "../../../design/components/Button/native/Button.native";
import { IconButton } from "../../../design/components/Button/native/IconButton.native";
import Module9972 from "../../../_bundle/Module9972";
import QuestContextMenu from "./QuestContextMenu";
let PX_16, useStyles, styleProperties;
const BACKGROUND_SURFACE_HIGH = Module712.colors.BACKGROUND_SURFACE_HIGH;
const BORDER_SUBTLE = Module712.colors.BORDER_SUBTLE;
const gradientStart = experimental_createToken(({ theme }) => hexOpacityToRgba(Module712.internal.resolveSemanticColor(theme, _Module4004.isThemeDark(theme) ? Module712.colors.BACKGROUND_SURFACE_HIGH : Module712.colors.BLACK), 0));
const gradientMid = experimental_createToken(({ theme }) => {
const isThemeDark = _Module4004.isThemeDark(theme);
return hexOpacityToRgba(Module712.internal.resolveSemanticColor(theme, isThemeDark ? Module712.colors.BACKGROUND_SURFACE_HIGH : Module712.colors.BLACK), isThemeDark ? 0.8 : 0.5);
});
const gradientEnd = experimental_createToken((a0) => _Module4004.isThemeDark(a0.theme) ? Module712.colors.BACKGROUND_SURFACE_HIGH : Module712.colors.BLACK);
PX_16 = Module712.space.PX_16;
useStyles = createStyles({
container: {
position: "relative",
padding: 0,
borderRadius: Module712.radii.sm,
backgroundColor: BACKGROUND_SURFACE_HIGH,
marginBottom: Module712.space.PX_16,
overflow: "hidden"
},
heroContainer: {
display: "flex",
flexDirection: "column",
justifyContent: "flex-end",
padding: Module712.space.PX_12
},
heroImg: {
resizeMode: "cover",
...StyleSheet.absoluteFillObject
},
heroLinearGradientOverlay: StyleSheet.absoluteFillObject,
previewBadge: {
position: "absolute",
top: Module712.space.PX_8,
right: Module712.space.PX_8,
backgroundColor: Module712.colors.BACKGROUND_BRAND,
padding: Module712.space.PX_4,
borderRadius: Module712.radii.sm,
...Module712.shadows.SHADOW_LOW
},
rewardImgContainer: {
height: 64,
width: 64,
marginRight: Module712.space.PX_12
},
heroFooterContainer: {
display: "flex",
flexDirection: "row",
flexWrap: "wrap",
justifyContent: "space-between",
alignItems: "flex-end"
},
heroFooterLeftContainer: {
display: "flex",
flexDirection: "column",
alignItems: "flex-start"
},
detailsWrapper: {
display: "flex",
padding: Module712.space.PX_12
},
detailsContainer: {
display: "flex",
flexDirection: "row"
},
questName: {
marginBottom: Module712.space.PX_4
},
bodyContainer: {
display: "flex",
flexDirection: "column",
gap: Module712.space.PX_4
},
subtitleRow: {
flexDirection: "row",
alignItems: "center",
rowGap: Module712.space.PX_4,
columnGap: Module712.space.PX_8,
flexWrap: "wrap"
},
orbWithAmountRow: {
flexDirection: "row",
alignItems: "center"
},
detailsTextContainer: {
flex: 1,
justifyContent: "center"
},
buttonContainers: {
borderTopWidth: 1,
borderTopColor: BORDER_SUBTLE,
display: "flex",
flexDirection: "row",
alignItems: "center",
padding: Module712.space.PX_12
},
equalWidthContainer: {
flexBasis: 0,
flexGrow: 1,
flexShrink: 1
}
});
styleProperties = createStyleProperties({
gradientStart,
gradientMid,
gradientEnd
});
const r166 = Module19.memo(function(a0) {
let props, props3;
let onLayout2, quest, QUEST_HOME_MOBILE, questContentPosition, sourceQuestContent, questLogger, trackQuestContentClickedWithImpression, styles, width, height, c20919_10, c20919_11, defaultRewardNameWithArticle, questEnrollmentBlockedUntil, hasWatchVideoTasks, hasWatchVideoOnMobileTasks, c20919_16, product, stateFromStores, stateFromStores2, isMobileActivityQuest, launchMobileActivity, getQuestImpressionId, showQuestBottomSheet2, c20919_25, hasVirtualCurrencyReward, virtualCurrencyRewardOrbQuantity, questOrbRewardQuantityForUser, defaultRewardName, scaledTextLineHeight, width2, callback;
const trackClick2 = function trackClick(a0) {
if (shouldMigrateToAdAnalyticsInterface(AdAnalyticsInterfaceExperimentStep.STEP_2_CLICKED_INTERNAL, "quest_card")) {
captureAdUserAction({
type: AdUserActionType.CLICK_INTERNAL,
adCreativeType: AdCreativeType.QUEST,
adCreativeId: quest.id,
questContentCTA: a0,
surfaceId: QUEST_HOME_MOBILE,
sourceQuestContent,
impressionId: getQuestImpressionId()
});
} else {
trackQuestContentClickedWithImpression({
questId: quest.id,
questContent: QUEST_HOME_MOBILE,
questContentCTA: a0,
sourceQuestContent
});
}
};
showQuestBottomSheet2 = function showQuestBottomSheet() {
ActionSheetActionCreators.openLazy(import("./QuestBottomSheet/QuestBottomSheet"), "QuestBottomSheet", {
questId: quest.id,
questContentPosition,
sourceQuestContent
});
};
const containerPadding = a0.containerPadding;
onLayout2 = a0.onLayout;
quest = a0.quest;
let questContent = a0.questContent;
if (questContent === void 0) {
questContent = QuestContent.QUEST_HOME_MOBILE;
}
QUEST_HOME_MOBILE = questContent;
questContentPosition = a0.questContentPosition;
sourceQuestContent = a0.sourceQuestContent;
questLogger = getQuestLogger({
quest,
location: QuestsExperimentLocations.QUEST_HOME_MOBILE
});
trackQuestContentClickedWithImpression = useTrackQuestContentClickedWithImpression();
const questTaskDetails = useQuestTaskDetails(quest);
const completedRatio = useQuestCompletionDetails(quest).completedRatio;
const r9 = quest.userStatus?.enrolledAt != null;
styles = useStyles();
width = useWindowDimensions_native().width - 2 * PX_16;
height = 0.2803030303030303 * width;
const memo = useMemo(() => {
let r28;
const questAsset = getQuestAsset(quest, QuestAssetType.HERO);
const isAnimated = questAsset.isAnimated;
const r18 = {
...questAsset
};
if (isAnimated) {
let url = getScaledFirstFrameImageUrl({
assetUrl: questAsset.url,
width,
height
});
if (url == null) {
url = questAsset.url;
}
r18.url = url;
r28 = r18;
} else {
r18.url = getScaledImageUrl({
assetUrl: questAsset.url,
width,
height
});
r28 = r18;
}
return r28;
}, [quest, width, height]);
const questGameLogotypeAssetUrl = useQuestGameLogotypeAssetUrl(quest);
const r103 = styleProperties();
const { gradientStart, gradientMid, gradientEnd } = r103;
const [r111, r112] = useRecyclingState(null, [quest.id]);
c20919_10 = r111;
c20919_11 = r112;
const callback2 = useCallback(() => {
c20919_11(false);
}, [r112]);
useEffect(() => {
if (c20919_10 === false) {
MonitoringAgent.increment({
name: MetricEvents.QUEST_CONTENT_RENDERING_FAILURE,
tags: [`quest_id:${quest.id}`, `quest_content:${getQuestContentName(QUEST_HOME_MOBILE)}`, "reason:asset_loading_error"]
});
}
}, [r111, quest.id, QUEST_HOME_MOBILE]);
const stateFromStores3 = useStateFromStores([UserStore], () => UserStore.getCurrentUser());
defaultRewardNameWithArticle = getDefaultRewardNameWithArticle(quest.config, stateFromStores3);
const stateFromStoresObject = useStateFromStoresObject([QuestStore], () => ({
reward: QuestStore.getRewards(quest.id),
isFetchingRewardCode: QuestStore.isFetchingRewardCode(quest.id),
isClaimingReward: QuestStore.isClaimingReward(quest.id),
isEnrolling: QuestStore.isEnrolling(quest.id),
questEnrollmentBlockedUntil: QuestStore.questEnrollmentBlockedUntil
}));
const isFetchingRewardCode = stateFromStoresObject.isFetchingRewardCode;
let isClaimingReward = stateFromStoresObject.isClaimingReward;
const isEnrolling = stateFromStoresObject.isEnrolling;
questEnrollmentBlockedUntil = stateFromStoresObject.questEnrollmentBlockedUntil;
const questFormattedDate = useQuestFormattedDate(quest.userStatus?.completedAt, {
year: "numeric",
month: "long",
day: "numeric"
});
hasWatchVideoTasks = _QuestTaskUtils.hasWatchVideoTasks(quest);
hasWatchVideoOnMobileTasks = useHasWatchVideoOnMobileTasks(quest.config);
const r7 = quest.userStatus?.enrolledAt != null;
let r26 = quest.userStatus?.completedAt != null;
const r161 = quest.userStatus?.claimedAt != null;
c20919_16 = r161;
const isQuestExpired = _QuestDataUtils.isQuestExpired(quest);
const isQuestExpiredButWithinThirtyDayLookback = getIsQuestExpiredButWithinThirtyDayLookback(quest);
const skuId = getDefaultReward(quest.config).skuId;
const isThemeDark = _Module4004.isThemeDark(useTheme());
const fetchCollectiblesProduct = useFetchCollectiblesProduct(hasCollectiblesQuestReward(quest.config) ? r26 ? skuId : null : null);
product = fetchCollectiblesProduct.product;
const isFetching = fetchCollectiblesProduct.isFetching;
stateFromStores = useStateFromStores([UserStore], () => {
const currentUser = UserStore.getCurrentUser();
return currentUser == null ? void 0 : currentUser.hasVerifiedEmailOrPhone();
});
stateFromStores2 = useStateFromStores([UserStore], () => UserStore.getCurrentUser()?.verified);
const mobileActivityQuest = useMobileActivityQuest(quest);
isMobileActivityQuest = mobileActivityQuest.isMobileActivityQuest;
const questApplication = mobileActivityQuest.questApplication;
launchMobileActivity = mobileActivityQuest.launchMobileActivity;
const token = useToken(Module712.colors.BACKGROUND_BASE_LOWER);
const token2 = useToken(Module712.colors.BACKGROUND_BASE_LOW);
const token3 = useToken(Module712.colors.BACKGROUND_BASE_LOWEST);
const r4 = questEnrollmentBlockedUntil != null && !r7 && !r26 && !r161;
const questFormattedDate2 = useQuestFormattedDate(quest.config.expiresAt, {
month: "numeric",
day: "numeric"
});
getQuestImpressionId = useGetQuestImpressionId();
const callback3 = useCallback(() => {
openGameLinkDirectly(quest, {
content: QUEST_HOME_MOBILE,
ctaContent: QuestContentCTA.OPEN_GAME_LINK,
impressionId: getQuestImpressionId(),
sourceQuestContent
});
}, [quest, QUEST_HOME_MOBILE, getQuestImpressionId, sourceQuestContent]);
const primaryCtaCopy = usePrimaryCtaCopy({
quest,
application: questApplication,
shortText: true
});
if (product != null) {
let buttonColors = product.styles?.buttonColors;
if (buttonColors == null) {
buttonColors = [];
}
let confettiColors = product.styles?.confettiColors;
if (confettiColors == null) {
confettiColors = [];
}
product.styles = {
buttonColors,
confettiColors,
backgroundColors: [tinycolor(token2), tinycolor(token), tinycolor(token3)]
};
}
L67: {
if (r161) {
props = {
text: intl.string(t.vTgCWx),
loading: isFetching,
onPress: () => {
trackClick2(QuestContentCTA.SHOW_REWARD);
viewReward({
product,
quest,
questContent: QUEST_HOME_MOBILE,
questContentPosition,
sourceQuestContent
});
}
};
} else {
L35: {
if (r26) {
if (isQuestExpired && !isQuestExpiredButWithinThirtyDayLookback) {
break L35;
}
const r326 = {
text: intl.string(t.cfY4PE),
loading: null,
onPress: null
};
if (!isClaimingReward) {
isClaimingReward = isFetchingRewardCode;
}
if (!isClaimingReward) {
isClaimingReward = isFetching;
}
r326.loading = isClaimingReward;
r326.onPress = () => {
trackClick2(QuestContentCTA.CLAIM_REWARD);
handleRewardClaimThenView({
product,
quest,
questContent: QUEST_HOME_MOBILE,
questContentPosition,
currentUserHasVerifiedEmailOrPhone: stateFromStores,
currentUserHasVerifiedEmail: stateFromStores2,
sourceQuestContent
});
};
props = r326;
break L67;
}
}
if (isQuestExpired) {
props = {
text: intl.formatToPlainString(t["6p8BZx"], {
expiryDate: questFormattedDate2
}),
loading: (isClaimingReward ? isClaimingReward : isFetchingRewardCode) || isFetching,
disabled: true,
variant: "secondary",
onPress: NOOP
};
} else {
if (r7 && hasWatchVideoTasks) {
props = {
text: getVideoQuestWatchCtaText(questTaskDetails),
accessibilityLabel: getVideoQuestWatchCtaAccessibilityLabel(questTaskDetails),
disabled: false,
onPress: () => {
questLogger.log("Navigating to video quest bottom sheet");
trackClick2(QuestContentCTA.WATCH_VIDEO);
if (hasWatchVideoOnMobileTasks) {
openVideoQuestModal({
questId: quest.id,
sourceQuestContent
});
} else {
ActionSheetActionCreators.openLazy(import("./QuestBottomSheet/QuestBottomSheet"), "QuestBottomSheet", {
questId: quest.id,
questContentPosition,
sourceQuestContent
});
}
}
};
break L67;
}
if (r7 && isMobileActivityQuest) {
props = {
text: primaryCtaCopy,
icon: getPrimaryCtaIcon(quest),
disabled: false,
onPress: () => {
trackClick2(QuestContentCTA.LAUNCH_MOBILE_ACTIVITY);
callback();
}
};
break L67;
}
if (r7 && !hasWatchVideoTasks && !isMobileActivityQuest) {
props = {
text: intl.string(t.JiosAn),
variant: "secondary",
disabled: false,
onPress: () => {
questLogger.log("Navigating to console connection action sheet");
trackClick2(QuestContentCTA.VIEW_REQUIREMENTS);
ActionSheetActionCreators.openLazy(import("./QuestBottomSheet/QuestBottomSheet"), "QuestBottomSheet", {
questId: quest.id,
questContentPosition,
sourceQuestContent
});
}
};
break L67;
}
const accessibilityLabel = hasWatchVideoTasks ? getVideoQuestWatchCtaAccessibilityLabel(questTaskDetails) : void 0;
const icon = isMobileActivityQuest ? getPrimaryCtaIcon(quest) : void 0;
c20919_25 = async () => {
let c27638_0;
L17: {
c27638_0 = void 0;
questLogger.log("Enrolling in quest");
await enrollInQuest(quest.id, {
questContent: QUEST_HOME_MOBILE,
questContentCTA: !isMobileActivityQuest && !hasWatchVideoTasks ? QuestContentCTA.ACCEPT_QUEST : QuestContentCTA.START_QUEST,
sourceQuestContent
});
if (hasWatchVideoTasks && hasWatchVideoOnMobileTasks) {
openVideoQuestModal({
questId: quest.id,
sourceQuestContent
});
break L17;
}
if (isMobileActivityQuest) {
(0, callback)();
} else {
(0, showQuestBottomSheet2)();
}
}
};
props = {
text: primaryCtaCopy,
disabled: false,
loading: isEnrolling,
accessibilityLabel,
icon,
onPress: function() {
return c20919_25.apply(this, arguments);
}
};
}
}
}
const r351 = intl.formatToPlainString(t.EAYZAr, {
questName: quest.config.messages.questName
});
hasVirtualCurrencyReward = _QuestRewardUtils.hasVirtualCurrencyReward(quest.config);
const questOrbMultiplierEligibility = useQuestOrbMultiplierEligibility();
let r364 = useShouldShowBonusOrbsUX(quest, questOrbMultiplierEligibility);
const visible = r364 ? questOrbMultiplierEligibility === QuestOrbMultiplierEligibilityType.NITRO : r364;
let r372 = quest.userStatus?.orbQuantityClaimed;
if (r372 == null) {
r372 = getVirtualCurrencyRewardOrbQuantity(quest.config);
}
virtualCurrencyRewardOrbQuantity = r372;
questOrbRewardQuantityForUser = getQuestOrbRewardQuantityForUser(quest.config, stateFromStores3);
defaultRewardName = getDefaultRewardName(quest.config, stateFromStores3);
const fontScale = useFontScale();
scaledTextLineHeight = useScaledTextLineHeight("text-md/semibold");
const questDescription = useQuestDescription(quest, sourceQuestContent, QuestsExperimentLocations.QUEST_HOME_MOBILE, GameProfileSources.QuestHome);
width2 = 16 * Math.min(fontScale, 1.3);
const memo2 = useMemo(() => {
let r54;
let r10 = isFabric();
const translateY = r10 ? isAndroid() ? 16 / scaledTextLineHeight : 0 : 0;
const marginRight = width2 / 8;
const transform = r10 ? [{
translateY
}] : void 0;
const props = {
variant: "text-md/semibold",
color: "mobile-text-heading-primary"
};
const style = {
width: width2,
height: width2,
marginRight,
marginTop: 0,
transform
};
if (c20919_16 && hasVirtualCurrencyReward) {
const r126 = [<OrbsIcon size="custom" color="mobile-text-heading-primary" style={style} />, , ,];
if (r10) {
r10 = <View style={{
width: marginRight
}} />;
}
r126[1] = r10;
const r143 = t["nLXlh+"];
let orbAmount2 = virtualCurrencyRewardOrbQuantity;
if (virtualCurrencyRewardOrbQuantity == null) {
orbAmount2 = 0;
}
r126[2] = <Text {...props}>
{intl.format(r143, {
orbAmount: orbAmount2
})}
</Text>;
r54 = <View style={styles.orbWithAmountRow}>{r126}</View>;
} else if (c20919_16) {
r54 = <Text {...props}>{defaultRewardName}</Text>;
} else if (hasVirtualCurrencyReward) {
const r75 = [<Text {...props}>
{intl.format(t["0IUT4Y"], {
rewardWithArticleHook: () => null
})}
</Text>, ,];
const r83 = [<OrbsIcon size="custom" color="mobile-text-heading-primary" style={style} />, r10 ? <View style={{
width: marginRight
}} /> : r10, ,];
const r100 = t["nLXlh+"];
let orbAmount = questOrbRewardQuantityForUser;
if (questOrbRewardQuantityForUser == null) {
orbAmount = 0;
}
r83[2] = <Text {...props}>
{intl.format(r100, {
orbAmount
})}
</Text>;
r75[1] = <View style={styles.orbWithAmountRow}>{r83}</View>;
r54 = <View style={styles.orbWithAmountRow}>{r75}</View>;
} else {
r54 = <Text {...props}>
{intl.format(t["0IUT4Y"], {
rewardWithArticleHook: () => defaultRewardNameWithArticle
})}
</Text>;
}
return r54;
}, [r161, hasVirtualCurrencyReward, questOrbRewardQuantityForUser, virtualCurrencyRewardOrbQuantity, defaultRewardName, defaultRewardNameWithArticle, width2, scaledTextLineHeight, styles.orbWithAmountRow]);
const r416 = isQuestExpired && r26 && !r161 ? intl.formatToPlainString(t["l1jCM/"], {
date: questFormattedDate
}) : questDescription;
const ctaLink = getCtaLink(quest.config);
const callback4 = useCallback(() => {
openVideoQuestModal({
questId: quest.id,
initialStep: VideoQuestModalSteps.WATCH_VIDEO,
sourceQuestContent
});
}, [quest.id, sourceQuestContent]);
callback = useCallback(async () => {
dismissOverlayScreens();
await launchMobileActivity();
}, [launchMobileActivity]);
const props2 = {
style: [styles.container, {
marginHorizontal: PX_16 - containerPadding
}],
onLayout: (a0) => {
if (onLayout2 != null) {
onLayout2(a0, quest.id);
}
},
children: null
};
const r471 = [<FastImage source={{
uri: memo.url
}} style={styles.heroImg} onError={callback2} accessible accessibilityRole="image" accessibilityLabel={quest.config.messages.questName} />, <Module4611 style={styles.heroLinearGradientOverlay} start={VerticalGradient.START} end={VerticalGradient.END} colors={[gradientStart, gradientMid, gradientEnd]} />, quest.preview && <View style={styles.previewBadge}>
<Text variant="eyebrow" color="text-overlay-light">
{intl.string(t.SKNnqq)}
</Text>
</View>, ,];
const r511 = [<QuestGameLogotype assetUrl={questGameLogotypeAssetUrl} onError={callback2} />, ,];
let color = "text-overlay-light";
r511[1] = <Stack direction="horizontal" align="center" spacing={4}>
<Text variant="text-xs/medium" color={isThemeDark ? "text-muted" : "text-overlay-light"}>
{intl.string(t.VAbKhK)}
</Text>
<Image2 source={Module8466} style={{
height: 16,
width: 16
}} accessible accessibilityRole="image" accessibilityLabel={intl.string(t.OfMjx9)} />
<Text variant="text-xs/medium" color="text-overlay-light">{quest.config.messages.gamePublisher}</Text>
</Stack>;
const r555 = [<View style={styles.heroFooterLeftContainer}>{r511}</View>, ,];
let r556 = isQuestExpired ? !isQuestExpired : !r161;
if (r556) {
if (isThemeDark) {
color = "text-default";
}
r556 = <Text variant="text-xs/medium" color={color}>
{intl.format(t["7D8r4F"], {
expiryDate: questFormattedDate2
})}
</Text>;
}
r555[1] = r556;
r471[3] = <View style={styles.heroFooterContainer}>{r555}</View>;
const r573 = [<View style={[styles.heroContainer, {
height
}]}>{r471}</View>, , ,];
const r588 = [<View style={styles.rewardImgContainer}>
{r9 ? <QuestProgressIndicator quest={quest} progress={completedRatio} size="sm" /> : <QuestRewardTile quest={quest} height={64} width={64} />}
</View>, ,];
const r597 = [<Text variant="eyebrow" color="text-brand" style={styles.questName} accessibilityRole="header">{r351}</Text>, ,];
const r602 = [memo2, ,];
if (r364) {
r364 = <QuestOrbMultiplierPerkPill questId={quest.config.id} orbMultiplierEligibility={questOrbMultiplierEligibility} />;
}
r602[1] = r364;
r597[1] = <View style={styles.bodyContainer}>
<View style={styles.subtitleRow}>{r602}</View>
{r416 != null && <Text variant="text-sm/medium" color="text-muted">{r416}</Text>}
</View>;
r588[1] = <View style={styles.detailsTextContainer}>{r597}</View>;
r573[1] = <View style={styles.detailsWrapper}>
<View style={styles.detailsContainer}>{r588}</View>
</View>;
const r630 = {
children: null
};
if (r4) {
r630.children = [<Button grow onPress={NOOP} variant="secondary" disabled text={intl.string(t.V293qn)} />, <Button onPress={function onPress() {
ActionSheetActionCreators.openLazy(import("./QuestEnrollmentBlockedBottomSheet/QuestEnrollmentBlockedBottomSheet"), "QuestEnrollmentBlockedBottomSheet", {
questId: quest.id,
questEnrollmentBlockedUntil,
sourceQuestContent
});
}} variant="tertiary" text={intl.string(t.vY9GgG)} />];
props3 = r630;
} else {
r630.children = [ctaLink !== "" && !r4 && !isQuestExpired && !r161 && !r26 && <View style={styles.equalWidthContainer}>
<Button grow variant="secondary" text={getExternalCtaLabel(quest)} onPress={callback3} />
</View>, <View style={styles.equalWidthContainer}>
<Button grow {...props} />
</View>];
props3 = r630;
}
const r689 = [<Fragment {...props3} />, (r26 ? hasWatchVideoTasks : r26) && hasWatchVideoOnMobileTasks && <IconButton accessibilityLabel={intl.string(t.YsCuyF)} icon={Module9972} onPress={callback4} variant="secondary" />, , ,];
if (r26) {
r26 = isMobileActivityQuest;
}
if (r26) {
r26 = <IconButton accessibilityLabel={intl.string(t.CkUzLd)} icon={Module9972} onPress={callback} variant="secondary" />;
}
r689[2] = r26;
r689[3] = <QuestContextMenu quest={quest} showShareLink={!isQuestExpired} location={QuestsExperimentLocations.QUESTS_CARD} sourceQuestContent={sourceQuestContent} />;
r573[2] = <Stack direction="horizontal" align="center" spacing={Module712.space.PX_8} style={styles.buttonContainers}>{r689}</Stack>;
props2.children = <PremiumRewardGradient visible={visible} glow>{r573}</PremiumRewardGradient>;
return <Card {...props2} />;
});
export const ESTIMATED_CARD_HEIGHT = 348;
export { r166 as QuestCard };