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,367 @@
// Metro module 14144 (f14145).
import Module19, { useState } from "react";
import { View } from "react-native";
import QuestStore from "../../QuestStore";
import { QuestTaskPlatform, QuestsExperimentLocations } from "../../QuestConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { getQuestLogger } from "../../lib/getQuestLogger";
import { manuallyStartConsoleQuest } from "../../QuestActionCreators";
import ToastActionCreators from "../../../toast/native/ToastActionCreators";
import { intl, t } from "../../../../intl/index.native";
import Module9172 from "../../../../_bundle/Module9172";
import { useQuestTaskDetails, useIsQuestProgressing, useTaskPlatformScreen, useConnectedAccounts, useQuestHowToHelpArticle } from "../../hooks/QuestHooks";
import { supportedConsoles } from "../../utils/QuestPlatformUtils";
import { TaskPlatformScreen, QuestContent } from "../../QuestTypes";
import { useHasWatchVideoOnMobileTasks, useMobileActivityQuest } from "../QuestHooks.native";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { QuestContentImpressionTrackerNative } from "../QuestContentImpressionTracker.native";
import * as _QuestTaskUtils from "../../utils/QuestTaskUtils";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import QuestBottomSheetHeader from "./QuestBottomSheetHeader";
import QuestBottomSheetFooter from "./QuestBottomSheetFooter";
import { useTrackQuestContentClickedWithImpression } from "../../lib/analytics/AnalyticsHooks";
import { useQuestImpressionId } from "../../lib/analytics/ContentImpressionTrackerHooks";
import { QuestContentCTA } from "../../lib/analytics/AnalyticsTypes";
import { shouldMigrateToAdAnalyticsInterface, AdAnalyticsInterfaceExperimentStep } from "../../experiments/AdAnalyticsInterfaceExperiment";
import { captureAdUserAction } from "../../../ads/analytics/captureAdUserAction";
import { AdUserActionType } from "../../../ads/analytics/captureAdUserActionTypes";
import { AdCreativeType } from "../../../../_bundle/Module6013";
import { QuestBottomSheetProgressCardWatchTask, QuestBottomSheetProgressCardInGameTask, QuestBottomSheetProgressCardPlayStreamTask } from "./QuestBottomSheetProgressCard";
import QuestBottomSheetTaskSelect from "./QuestBottomSheetTaskSelect";
import QuestBottomSheetConsoleConnect from "./QuestBottomSheetConsoleConnect";
import { isSponsoredPlayQuest } from "../../utils/QuestUtils";
import { WarningIcon } from "../../../../design/components/Icon/native/redesign/generated/WarningIcon";
import { Text } from "../../../../design/components/Text/native/Text";
let c9898_13, useStyles, useEnrolledQuestContentProps, QuestBottomSheetContent, MicrophoneUnit, context;
const QuestBottomSheet = function QuestBottomSheet(props) {
let state, r55, Provider, defibrillator, footer, handleTaskSelect2, props2, quest5, showMicrophone, sourceQuestContent4, step, styles;
let setState;
L4: {
quest5 = props.quest;
const initialStep2 = props.initialStep;
sourceQuestContent4 = props.sourceQuestContent;
setState = void 0;
styles = useStyles();
const enrolledQuestContentProps = useEnrolledQuestContentProps({
quest: quest5,
initialStep: initialStep2,
location: QuestsExperimentLocations.QUEST_HOME_MOBILE,
sourceQuestContent: sourceQuestContent4
});
step = enrolledQuestContentProps.step;
defibrillator = enrolledQuestContentProps.defibrillator;
const stepActions = enrolledQuestContentProps.stepActions;
handleTaskSelect2 = enrolledQuestContentProps.handleTaskSelect;
showMicrophone = enrolledQuestContentProps.showMicrophone;
const hasWatchVideoOnMobileTasks3 = useHasWatchVideoOnMobileTasks(quest5.config);
const hasWatchVideoTasks = _QuestTaskUtils.hasWatchVideoTasks(quest5);
const isInGameQuest = _QuestTaskUtils.isInGameQuest(quest5);
let state;
[state, setState] = useState(0);
const memo4 = Module19.useMemo(() => ({
isInQuestBottomSheet: true
}), []);
Provider = context.Provider;
r55 = {
value: memo4,
children: null
};
props2 = {
header: <QuestBottomSheetHeader quest={quest5} step={step} location={QuestsExperimentLocations.QUEST_HOME_MOBILE} />,
footer: null,
startExpanded: true,
children: null
};
footer = null;
if (!isInGameQuest) {
if (hasWatchVideoTasks) {
footer = null;
if (!hasWatchVideoOnMobileTasks3) {
break L4;
}
}
footer = <QuestBottomSheetFooter quest={quest5} sourceQuestContent={sourceQuestContent4} step={step} isDefibrilating={defibrillator.isActive} onLayout={function onLayout(event) {
setState(event.nativeEvent.layout.height);
}} onBack={stepActions.onBack} onDefib={defibrillator.start} onConnectConsoleNext={stepActions.onNext} />;
}
}
props2.footer = footer;
props2.children = <View style={[styles.contentContainer, {
paddingBottom: step !== c9898_13.TASK_SELECT ? state : 0
}]}>
<QuestBottomSheetContent defibrillator={defibrillator} quest={quest5} handleTaskSelect={handleTaskSelect2} location={QuestsExperimentLocations.QUEST_HOME_MOBILE} showMicrophone={showMicrophone} sourceQuestContent={sourceQuestContent4} step={step} />
</View>;
r55.children = <BottomSheet {...props2} />;
return <Provider {...r55} />;
};
useEnrolledQuestContentProps = function useEnrolledQuestContentProps(a0) {
let xboxAndPlaystationAccounts, c20940_2, c20940_3, c20940_4, state, setState2, c20940_7, callback, hideConsoleSelect2, memo, memo2, memo3, hasWatchVideoOnMobileTasks, isMobileActivityQuest;
const { quest, initialStep: initialStep2 } = a0;
a0.location;
const sourceQuestContent = a0.sourceQuestContent;
const trackQuestContentClickedWithImpression = useTrackQuestContentClickedWithImpression();
const questImpressionId = useQuestImpressionId();
const questTaskDetails = useQuestTaskDetails(quest);
const isQuestProgressing = useIsQuestProgressing(quest);
let [r14, , c20939_4] = useTaskPlatformScreen(quest, questTaskDetails);
const hasWatchVideoOnMobileTasks3 = useHasWatchVideoOnMobileTasks(quest.config);
const quest2 = quest;
xboxAndPlaystationAccounts = void 0;
c20940_2 = void 0;
c20940_3 = void 0;
c20940_4 = void 0;
state = void 0;
setState2 = void 0;
c20940_7 = void 0;
callback = void 0;
memo = void 0;
memo2 = void 0;
memo3 = void 0;
hasWatchVideoOnMobileTasks = void 0;
isMobileActivityQuest = void 0;
const showConsoleSelect2 = function showConsoleSelect() {
return setState2(true);
};
hideConsoleSelect2 = function hideConsoleSelect() {
return setState2(false);
};
const r57 = quest.userStatus?.completedAt != null;
xboxAndPlaystationAccounts = useConnectedAccounts().xboxAndPlaystationAccounts;
const memo4 = Module19.useMemo(() => supportedConsoles(quest2).filter((c31707_0) => xboxAndPlaystationAccounts.find((xboxAndPlaystationAccount) => xboxAndPlaystationAccount.type === c31707_0) != null), [quest, xboxAndPlaystationAccounts]);
const questTaskDetails2 = useQuestTaskDetails(quest);
let r20 = useIsQuestProgressing(quest);
const [r26, r25, r77] = useTaskPlatformScreen(quest, questTaskDetails2);
c20940_2 = r26;
c20940_3 = r25;
c20940_4 = r77;
[state, setState2] = Module19.useState(memo4.length === 0 && !r57 && r26 === TaskPlatformScreen.CONSOLE || initialStep2 === c9898_13.CONSOLE_CONNECT);
if (!r20) {
r20 = questTaskDetails2.progressSeconds > 0;
}
c20940_7 = r20;
if (!(memo4.length !== 0 || r57 || r26 !== TaskPlatformScreen.CONSOLE || state)) {
setState2(true);
}
callback = Module19.useCallback(() => {
setState2(false);
c20940_4(null);
}, [r77]);
memo = Module19.useMemo(() => [{
type: c9898_13.TASK_STATUS,
shouldShow: true
}], []);
memo2 = Module19.useMemo(() => [{
type: c9898_13.CONSOLE_CONNECT,
shouldShow: state,
onNext: hideConsoleSelect2
}, {
type: c9898_13.TASK_STATUS,
shouldShow: true,
onBack: c20940_7 ? void 0 : showConsoleSelect2
}], [state, r20]);
memo3 = Module19.useMemo(() => {
const TASK_SELECT = c9898_13.TASK_SELECT;
const r15 = [{
type: TASK_SELECT,
shouldShow: c20940_2 === TaskPlatformScreen.SELECT
}, , ,];
const shouldShow = c20940_2 === TaskPlatformScreen.CONSOLE && state;
let r23 = callback;
r15[1] = {
type: c9898_13.CONSOLE_CONNECT,
shouldShow,
onBack: callback,
onNext: hideConsoleSelect2
};
let onBack = void 0;
if (!c20940_7) {
if (c20940_2 === TaskPlatformScreen.CONSOLE) {
r23 = showConsoleSelect2;
}
onBack = r23;
}
r15[2] = {
type: c9898_13.TASK_STATUS,
shouldShow: true,
onBack
};
return r15;
}, [r26, state, r20, callback]);
hasWatchVideoOnMobileTasks = useHasWatchVideoOnMobileTasks(quest.config);
isMobileActivityQuest = useMobileActivityQuest(quest).isMobileActivityQuest;
const memo5 = Module19.useMemo(() => {
let r16;
const r5 = c20940_3.length === 1 && c20940_3.includes(QuestTaskPlatform.DESKTOP);
const r12 = c20940_3.length === 1 && c20940_3.includes(QuestTaskPlatform.CONSOLE);
L10: {
r16 = memo3;
if (!r5 && (!hasWatchVideoOnMobileTasks && !isMobileActivityQuest)) {
if (!r12) {
break L10;
}
r16 = memo2;
} else {
r16 = memo;
}
}
let r21 = r16.find((item) => item.shouldShow);
const r23 = r16;
if (r21 == null) {
r21 = r23.at(-1);
}
return r21;
}, [r25, memo3, memo, memo2, hasWatchVideoOnMobileTasks, isMobileActivityQuest]);
const r130 = [memo5.type, ,];
const onBack = memo5?.onBack;
const onNext = memo5?.onNext;
r130[1] = {
onBack,
onNext
};
const [step, stepActions] = r130;
const quest3 = quest;
const questLogger = getQuestLogger({
quest,
location: QuestsExperimentLocations.QUEST_HOME_MOBILE
});
const [errorHints, setState3] = useState([]);
const [isActive, setState4] = useState(false);
return {
quest,
defibrillator: {
errorHints,
isActive,
start: Module19.useCallback(() => {
setState4(true);
manuallyStartConsoleQuest(quest3.id).then((result) => setState3(result.errorHints)).catch((error) => {
setState3([]);
questLogger.error("Failed to start console quest", error);
ToastActionCreators.open({
key: "START_DEFIBRILLATOR_ERROR",
content: intl.string(t.CKsXk3),
icon: Module9172
});
}).finally(() => setState4(false));
}, [quest, questLogger, setState4, setState3])
},
step,
stepActions,
showMicrophone: !(quest.userStatus?.completedAt != null) && !isQuestProgressing && r14 === TaskPlatformScreen.CONSOLE && !hasWatchVideoOnMobileTasks3,
handleTaskSelect: function handleTaskSelect(a0) {
const questContentCTA = a0 === QuestTaskPlatform.CONSOLE ? QuestContentCTA.SELECT_CONSOLE_PLATFORM : a0 === QuestTaskPlatform.DESKTOP ? QuestContentCTA.SELECT_DESKTOP_PLATFORM : QuestContentCTA.DESELECT_PLATFORM;
if (shouldMigrateToAdAnalyticsInterface(AdAnalyticsInterfaceExperimentStep.STEP_2_CLICKED_INTERNAL, "quest_bottom_sheet")) {
captureAdUserAction({
type: AdUserActionType.CLICK_INTERNAL,
adCreativeType: AdCreativeType.QUEST,
adCreativeId: quest.id,
questContentCTA,
surfaceId: QuestContent.QUEST_BOTTOM_SHEET,
sourceQuestContent,
impressionId: questImpressionId
});
} else {
trackQuestContentClickedWithImpression({
questId: quest.id,
questContent: QuestContent.QUEST_BOTTOM_SHEET,
questContentCTA,
sourceQuestContent
});
}
c20939_4(a0);
}
};
};
QuestBottomSheetContent = function QuestBottomSheetContent(props) {
const { defibrillator, quest: quest4, handleTaskSelect: handleTaskSelect2 } = props;
let showMicrophone = props.showMicrophone;
if (showMicrophone === void 0) {
showMicrophone = false;
}
const { sourceQuestContent: sourceQuestContent2, step } = props;
const hasWatchVideoOnMobileTasks2 = useHasWatchVideoOnMobileTasks(quest4.config);
const memo4 = Module19.useMemo(() => hasWatchVideoOnMobileTasks2 ? <QuestBottomSheetProgressCardWatchTask quest={quest4} sourceQuestContent={sourceQuestContent2} /> : _QuestTaskUtils.isInGameQuest(quest4) ? <QuestBottomSheetProgressCardInGameTask quest={quest4} sourceQuestContent={sourceQuestContent2} /> : <QuestBottomSheetProgressCardPlayStreamTask quest={quest4} sourceQuestContent={sourceQuestContent2} />, [quest4, hasWatchVideoOnMobileTasks2, sourceQuestContent2]);
const r33 = [step === c9898_13.TASK_SELECT && <QuestBottomSheetTaskSelect onTaskSelect={handleTaskSelect2} />, step === c9898_13.CONSOLE_CONNECT && <QuestBottomSheetConsoleConnect quest={quest4} step={step} sourceQuestContent={sourceQuestContent2} />, ,];
let r42 = step === c9898_13.TASK_STATUS;
if (r42) {
const r44 = [memo4, ,];
if (showMicrophone) {
showMicrophone = !hasWatchVideoOnMobileTasks2;
}
if (showMicrophone) {
showMicrophone = <MicrophoneUnit quest={quest4} errorHints={defibrillator?.errorHints} />;
}
r44[1] = showMicrophone;
r42 = <View>{r44}</View>;
}
r33[2] = r42;
return <>{r33}</>;
};
MicrophoneUnit = function MicrophoneUnit(props) {
const { quest: quest5, errorHints } = props;
const styles = useStyles();
const message = useQuestHowToHelpArticle().message;
let r27 = errorHints?.length;
if (r27 == null) {
r27 = 0;
}
const r28 = r27 > 0;
const r47 = r28 && errorHints != null ? [...errorHints.map((errorHint) => errorHint.message), message] : [isSponsoredPlayQuest(quest5) ? intl.string(t.bUyEZZ) : intl.formatToPlainString(t.GXqvC1, {
gameTitle: quest5.config.messages.gameTitle
})];
return <View style={styles.microphoneUnit}>
<View style={styles.microphoneUnitHeader}>
<WarningIcon color={r28 ? "text-feedback-critical" : "text-feedback-warning"} />
<Text variant="text-md/medium" color="mobile-text-heading-primary">
{r28 ? intl.formatToPlainString(t["28Ql27"], {
gameTitle: quest5.config.messages.gameTitle
}) : intl.string(t.YstzGO)}
</Text>
</View>
{r47.map((item, index) => <Text key={index} variant="text-sm/normal">
{item}
</Text>)}
</View>;
};
c9898_13 = {
TASK_SELECT: "TASK_SELECT",
CONSOLE_CONNECT: "CONSOLE_CONNECT",
TASK_STATUS: "TASK_STATUS"
};
useStyles = createStyles({
contentContainer: {
display: "flex",
paddingHorizontal: Module712.space.PX_16,
gap: Module712.space.PX_24
},
microphoneUnit: {
display: "flex",
gap: Module712.space.PX_8,
marginHorizontal: -Module712.space.PX_16,
paddingHorizontal: Module712.space.PX_16,
marginTop: Module712.space.PX_16,
paddingTop: Module712.space.PX_16,
borderTopWidth: 1,
borderTopColor: Module712.colors.BORDER_SUBTLE
},
microphoneUnitHeader: {
display: "flex",
flexDirection: "row",
alignItems: "center",
gap: Module712.space.PX_8
}
});
context = Module19.createContext({
isInQuestBottomSheet: false
});
export default function QuestBottomSheetConnected(props) {
const { questId, initialStep, sourceQuestContent: sourceQuestContent3, questContentPosition } = props;
const stateFromStores = useStateFromStores([QuestStore], () => QuestStore.getQuest(questId));
return stateFromStores != null ? <QuestContentImpressionTrackerNative overrideVisibility questOrQuests={stateFromStores} questContent={QuestContent.QUEST_BOTTOM_SHEET} questContentPosition={questContentPosition} sourceQuestContent={sourceQuestContent3}>
{() => <QuestBottomSheet quest={stateFromStores} initialStep={initialStep} sourceQuestContent={sourceQuestContent3} />}
</QuestContentImpressionTrackerNative> : null;
};
export { c9898_13 as QuestBottomSheetStep };
export { useEnrolledQuestContentProps };
export { QuestBottomSheetContent };
export { context as QuestBottomSheetContext };
@@ -0,0 +1,135 @@
// Metro module 14186 (f14187).
import { useMemo } from "react";
import { View } from "react-native";
import { PlatformTypes, UserSettingsSections } from "../../../../Constants";
import { jsxs, Fragment } from "react/jsx-runtime";
import Module712 from "../../../../_bundle/Module712";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { useConnectedAccounts } from "../../hooks/QuestHooks";
import { useTrackQuestContentClickedWithImpression } from "../../lib/analytics/AnalyticsHooks";
import { useQuestImpressionId } from "../../lib/analytics/ContentImpressionTrackerHooks";
import { supportedConsoles } from "../../utils/QuestPlatformUtils";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import { openUserSettings } from "../../../user_settings/core/native/openUserSettings";
import { shouldMigrateToAdAnalyticsInterface, AdAnalyticsInterfaceExperimentStep } from "../../experiments/AdAnalyticsInterfaceExperiment";
import { captureAdUserAction } from "../../../ads/analytics/captureAdUserAction";
import { AdUserActionType } from "../../../ads/analytics/captureAdUserActionTypes";
import { AdCreativeType } from "../../../../_bundle/Module6013";
import { QuestContentCTA } from "../../lib/analytics/AnalyticsTypes";
import { QuestContent } from "../../QuestTypes";
import authorizeConnection_native from "../../../connections/authorizeConnection.native";
import { TableRowGroup } from "../../../../design/components/TableRow/native/TableRowGroup.native";
import { TableRow } from "../../../../design/components/TableRow/native/TableRow.native";
import { PlaystationNeutralIcon } from "../../../../design/components/Icon/native/redesign/generated/PlaystationNeutralIcon";
import { intl, t } from "../../../../intl/index.native";
import { XboxNeutralIcon } from "../../../../design/components/Icon/native/redesign/generated/XboxNeutralIcon";
let ConsoleRow;
const NonInlineConsoleConnection = function NonInlineConsoleConnection(props) {
const { consoles, onConsoleSelect: onConsoleSelect2 } = props;
return <TableRowGroup hasIcons>
{consoles.map((console) => <ConsoleRow key={console.type} {...console} onPress={onConsoleSelect2} />)}
</TableRowGroup>;
};
ConsoleRow = function ConsoleRow(props) {
const { onPress: onPress2, ...rest } = props;
let c21017_1 = rest;
const type = rest.type;
if (PlatformTypes.PLAYSTATION === type) {
return <TableRow arrow icon={<PlaystationNeutralIcon />} label={intl.string(t.JafL6p)} subLabel={rest.account != null ? intl.string(t["u30/ut"]) : void 0} onPress={() => onPress2(c21017_1)} />;
}
if (PlatformTypes.XBOX === type) {
return <TableRow arrow icon={<XboxNeutralIcon />} label={intl.string(t.Nfvo72)} subLabel={rest.account != null ? intl.string(t["u30/ut"]) : void 0} onPress={() => onPress2(c21017_1)} />;
}
return null;
};
View;
jsxs;
Fragment;
Module712.unsafe_rawColors.PLATFORM_XBOX;
Module712.unsafe_rawColors.PLATFORM_PLAYSTATION;
createStyles({
platformButtonsContainer: {
display: "flex",
flexDirection: "row",
gap: Module712.space.PX_16,
justifyContent: "space-between"
},
platformButton: {
flex: 1,
display: "flex",
justifyContent: "center",
alignItems: "center"
}
});
export default function QuestBottomSheetConsoleConnect(props) {
let xboxAndPlaystationAccounts, trackQuestContentClickedWithImpression, questImpressionId;
const { quest, step, sourceQuestContent } = props;
xboxAndPlaystationAccounts = void 0;
trackQuestContentClickedWithImpression = void 0;
questImpressionId = void 0;
const openQuestBottomSheet2 = function openQuestBottomSheet() {
ActionSheetActionCreators.openLazy(import("./QuestBottomSheet"), "QuestBottomSheet", {
questId: quest.id,
initialStep: step,
sourceQuestContent
});
};
xboxAndPlaystationAccounts = useConnectedAccounts().xboxAndPlaystationAccounts;
trackQuestContentClickedWithImpression = useTrackQuestContentClickedWithImpression();
questImpressionId = useQuestImpressionId();
return <NonInlineConsoleConnection consoles={useMemo(() => supportedConsoles(quest).map((item) => {
return {
type: item,
account: xboxAndPlaystationAccounts.find((xboxAndPlaystationAccount) => xboxAndPlaystationAccount.type === item)
};
}), [quest, xboxAndPlaystationAccounts])} onConsoleSelect={function onConsoleSelect(event) {
if (event.account != null) {
if (shouldMigrateToAdAnalyticsInterface(AdAnalyticsInterfaceExperimentStep.STEP_2_CLICKED_INTERNAL, "quest_bottom_sheet_console_connect")) {
captureAdUserAction({
type: AdUserActionType.CLICK_INTERNAL,
adCreativeType: AdCreativeType.QUEST,
adCreativeId: quest.id,
questContentCTA: QuestContentCTA.VIEW_CONSOLE_CONNECTIONS,
surfaceId: QuestContent.QUEST_BOTTOM_SHEET,
sourceQuestContent,
impressionId: questImpressionId
});
} else {
trackQuestContentClickedWithImpression({
questId: quest.id,
questContent: QuestContent.QUEST_BOTTOM_SHEET,
questContentCTA: QuestContentCTA.VIEW_CONSOLE_CONNECTIONS,
sourceQuestContent
});
}
ActionSheetActionCreators.hideActionSheet();
openUserSettings({
screen: UserSettingsSections.CONNECTIONS
});
return void 0;
}
if (shouldMigrateToAdAnalyticsInterface(AdAnalyticsInterfaceExperimentStep.STEP_2_CLICKED_INTERNAL, "quest_bottom_sheet_console_connect")) {
captureAdUserAction({
type: AdUserActionType.CLICK_INTERNAL,
adCreativeType: AdCreativeType.QUEST,
adCreativeId: quest.id,
questContentCTA: QuestContentCTA.CONNECT_CONSOLE,
surfaceId: QuestContent.QUEST_BOTTOM_SHEET,
sourceQuestContent,
impressionId: questImpressionId
});
} else {
trackQuestContentClickedWithImpression({
questId: quest.id,
questContent: QuestContent.QUEST_BOTTOM_SHEET,
questContentCTA: QuestContentCTA.CONNECT_CONSOLE,
sourceQuestContent
});
}
authorizeConnection_native({
platformType: event.type,
location: "quests",
onClose: openQuestBottomSheet2
});
}} />;
};
@@ -0,0 +1,316 @@
// Metro module 14146 (f14147).
import { useMemo, useCallback, useEffect } from "react";
import { View } from "react-native";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import UserStore from "../../../../stores/UserStore";
import QuestStore from "../../QuestStore";
import { ACTION_SHEET_MINIMUM_BOTTOM_PADDING } from "../../../action_sheet/native/ActionSheetConstants";
import Module712 from "../../../../_bundle/Module712";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { QuestContent, TaskPlatformScreen } from "../../QuestTypes";
import { useProgressState, QuestProgressState, useQuestTaskDetails, useIsQuestProgressing, useTaskPlatformScreen, useConnectedAccounts } from "../../hooks/QuestHooks";
import * as _QuestRewardUtils from "../../utils/QuestRewardUtils";
import { getDefaultReward } from "../../utils/QuestCopyUtils";
import { useFetchCollectiblesProduct } from "../../../collectibles/hooks/useFetchCollectiblesProduct";
import { useStateFromStoresObject, useStateFromStores } from "../../../../_bundle/Module589";
import { useToken } from "../../../../design/tokens/native/useToken";
import tinycolor from "../../../../_bundle/tinycolor";
import { handleRewardClaimThenView, getPrimaryCtaIcon } from "../QuestUtils.native";
import { useWatchTaskPressHandler, useMobileActivityPressHandler } from "./QuestBottomSheetHooks";
import { Button } from "../../../../design/components/Button/native/Button.native";
import { getVideoQuestWatchCtaText } from "../../utils/MobileQuestVideoWatchCtaCopy";
import { supportedConsoles } from "../../utils/QuestPlatformUtils";
import { useHasWatchVideoOnMobileTasks, useMobileActivityQuest } from "../QuestHooks.native";
import { usePrimaryCtaCopy } from "../../hooks/QuestCopyHooks";
import { QuestBottomSheetStep } from "./QuestBottomSheet";
import { IconButton } from "../../../../design/components/Button/native/IconButton.native";
import { intl, t } from "../../../../intl/index.native";
import { ArrowLargeLeftIcon } from "../../../../design/components/Icon/native/redesign/generated/ArrowLargeLeftIcon";
import { useTrackQuestContentClickedWithImpression } from "../../lib/analytics/AnalyticsHooks";
import { useQuestImpressionId } from "../../lib/analytics/ContentImpressionTrackerHooks";
import { RefreshIcon } from "../../../../design/components/Icon/native/redesign/generated/RefreshIcon";
import { shouldMigrateToAdAnalyticsInterface, AdAnalyticsInterfaceExperimentStep } from "../../experiments/AdAnalyticsInterfaceExperiment";
import { captureAdUserAction } from "../../../ads/analytics/captureAdUserAction";
import { AdUserActionType } from "../../../ads/analytics/captureAdUserActionTypes";
import { AdCreativeType } from "../../../../_bundle/Module6013";
import { QuestContentCTA } from "../../lib/analytics/AnalyticsTypes";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import useWindowDimensions_native from "../../../screen/useWindowDimensions.native";
import * as _ReanimatedRexport from "../../../reanimated/ReanimatedRexport";
import ReanimatedRexport, { useSharedValue, useAnimatedStyle } from "../../../reanimated/ReanimatedRexport";
import { withTiming } from "../../../../design/animation/reanimated/timing/timing";
import { LARGE_BUTTON_HEIGHT } from "../../../../design/components/Button/native/ButtonConstants.native";
let PX_16, useStyles, WatchTaskButton, NextButton, DefibButton, ClaimButton, __initData, __initData2, AnimatedFooter;
const useQuestRewardClaimHandler = function useQuestRewardClaimHandler(a0) {
let product, isFetching, isFetchingRewardCode, stateFromStores, stateFromStores2;
const { quest, hideActionSheet: hideActionSheet2 = true } = a0;
const hideActionSheet = hideActionSheet2;
let questContent = a0.questContent;
if (questContent === void 0) {
questContent = QuestContent.QUEST_BOTTOM_SHEET;
}
const QUEST_BOTTOM_SHEET = questContent;
const { onSuccess, sourceQuestContent } = a0;
product = void 0;
isFetching = void 0;
isFetchingRewardCode = void 0;
stateFromStores = void 0;
stateFromStores2 = void 0;
const progressState = useProgressState(quest);
const hasCollectiblesQuestReward = _QuestRewardUtils.hasCollectiblesQuestReward(quest.config);
const memo = useMemo(() => getDefaultReward(quest.config).skuId, [quest.config]);
const fetchCollectiblesProduct = useFetchCollectiblesProduct(progressState === QuestProgressState.COMPLETED ? hasCollectiblesQuestReward ? memo : null : null);
product = fetchCollectiblesProduct.product;
isFetching = fetchCollectiblesProduct.isFetching;
const stateFromStoresObject = useStateFromStoresObject([QuestStore], () => ({
isFetchingRewardCode: QuestStore.isFetchingRewardCode(quest.id),
isClaimingReward: QuestStore.isClaimingReward(quest.id)
}));
const isClaimingReward = stateFromStoresObject.isClaimingReward;
isFetchingRewardCode = stateFromStoresObject.isFetchingRewardCode;
stateFromStores = useStateFromStores([UserStore], () => {
const currentUser = UserStore.getCurrentUser();
return currentUser == null ? void 0 : currentUser.hasVerifiedEmailOrPhone();
});
stateFromStores2 = useStateFromStores([UserStore], () => UserStore.getCurrentUser()?.verified);
const memo2 = useMemo(() => {
let r0 = isFetching;
if (!isFetching) {
r0 = isFetchingRewardCode;
}
return r0;
}, [isFetching, isFetchingRewardCode]);
const token = useToken(Module712.colors.BACKGROUND_BASE_LOWER);
const token2 = useToken(Module712.colors.BACKGROUND_BASE_LOW);
const token3 = useToken(Module712.colors.BACKGROUND_BASE_LOWEST);
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)]
};
}
return {
isLoading: memo2,
isClaiming: isClaimingReward,
claim: useCallback(() => handleRewardClaimThenView({
quest,
product,
hideActionSheet,
questContent: QUEST_BOTTOM_SHEET,
currentUserHasVerifiedEmailOrPhone: stateFromStores,
currentUserHasVerifiedEmail: stateFromStores2,
onSuccess,
sourceQuestContent
}), [quest, product, stateFromStores, stateFromStores2, hideActionSheet, QUEST_BOTTOM_SHEET, onSuccess, sourceQuestContent])
};
};
WatchTaskButton = function WatchTaskButton(props) {
const { questId: questId3, sourceQuestContent: sourceQuestContent4, taskDetails } = props;
return <Button grow size="lg" onPress={useWatchTaskPressHandler({
questId: questId3,
sourceQuestContent: sourceQuestContent4
})} text={getVideoQuestWatchCtaText(taskDetails)} />;
};
NextButton = function NextButton(props) {
return <Button grow size="lg" onPress={props.onPress} disabled={props.disabled} text={intl.string(t.a9OfTN)} />;
};
DefibButton = function DefibButton(props) {
const { questId, loading, disabled, onPress: onPress2, sourceQuestContent: sourceQuestContent2 } = props;
const trackQuestContentClickedWithImpression = useTrackQuestContentClickedWithImpression();
const questImpressionId = useQuestImpressionId();
return <Button grow size="lg" variant="secondary" loading={loading} disabled={disabled} icon={<RefreshIcon />} iconPosition="end" onPress={function onPress(event) {
if (shouldMigrateToAdAnalyticsInterface(AdAnalyticsInterfaceExperimentStep.STEP_2_CLICKED_INTERNAL, "quest_bottom_sheet_footer")) {
captureAdUserAction({
type: AdUserActionType.CLICK_INTERNAL,
adCreativeType: AdCreativeType.QUEST,
adCreativeId: questId,
questContentCTA: QuestContentCTA.DEFIBRILLATOR,
surfaceId: QuestContent.QUEST_BOTTOM_SHEET,
sourceQuestContent: sourceQuestContent2,
impressionId: questImpressionId
});
} else {
trackQuestContentClickedWithImpression({
questId,
questContent: QuestContent.QUEST_BOTTOM_SHEET,
questContentCTA: QuestContentCTA.DEFIBRILLATOR,
sourceQuestContent: sourceQuestContent2
});
}
if (onPress2 != null) {
onPress2(event);
}
}} text={intl.string(t.nPThNb)} />;
};
ClaimButton = function ClaimButton(props) {
const { questId: questId2, disabled, loading, onPress: onPress3, sourceQuestContent: sourceQuestContent3 } = props;
const trackQuestContentClickedWithImpression2 = useTrackQuestContentClickedWithImpression();
const questImpressionId2 = useQuestImpressionId();
return <Button grow size="lg" disabled={disabled} loading={loading} onPress={function onPress() {
if (shouldMigrateToAdAnalyticsInterface(AdAnalyticsInterfaceExperimentStep.STEP_2_CLICKED_INTERNAL, "quest_bottom_sheet_footer")) {
captureAdUserAction({
type: AdUserActionType.CLICK_INTERNAL,
adCreativeType: AdCreativeType.QUEST,
adCreativeId: questId2,
questContentCTA: QuestContentCTA.CLAIM_REWARD,
surfaceId: QuestContent.QUEST_BOTTOM_SHEET,
sourceQuestContent: sourceQuestContent3,
impressionId: questImpressionId2
});
} else {
trackQuestContentClickedWithImpression2({
questId: questId2,
questContent: QuestContent.QUEST_BOTTOM_SHEET,
questContentCTA: QuestContentCTA.CLAIM_REWARD,
sourceQuestContent: sourceQuestContent3
});
}
onPress3();
}} text={intl.string(t.cfY4PE)} />;
};
AnimatedFooter = function AnimatedFooter(props) {
const { onLayout, ctaButton, backButton, style } = props;
let withSafeArea = props.withSafeArea;
if (withSafeArea === void 0) {
withSafeArea = true;
}
let sharedValue;
sharedValue = void 0;
const r25 = backButton != null && backButton !== false;
let c20949_0 = r25;
const bottom = useSafeAreaInsets_native().bottom;
const styles = useStyles();
const width = useWindowDimensions_native().width;
const stateFromStores3 = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
sharedValue = useSharedValue(r25 ? 1 : 0);
useEffect(() => {
sharedValue.set(withTiming(c20949_0 ? 1 : 0, {
duration: stateFromStores3 ? 0 : 200
}));
}, [r25, stateFromStores3, sharedValue]);
const y = () => ({
opacity: sharedValue.get(),
position: "absolute",
top: 0,
left: 0,
transform: [{
translateX: PX_16
}]
});
y.__closure = {
animation: sharedValue,
H_PADDING_PX: PX_16
};
y.__workletHash = 7564903336036;
y.__initData = __initData;
const animatedStyle = useAnimatedStyle(y);
const B = () => ({
width: _ReanimatedRexport.interpolate(sharedValue.get(), [0, 1], [width - 2 * PX_16, width - 2.5 * PX_16 - LARGE_BUTTON_HEIGHT]),
alignSelf: "flex-end"
});
B.__closure = {
interpolate: _ReanimatedRexport.interpolate,
animation: sharedValue,
windowWidth: width,
H_PADDING_PX: PX_16,
ICON_SIZE_PX: LARGE_BUTTON_HEIGHT
};
B.__workletHash = 9095621288509;
B.__initData = __initData2;
const animatedStyle2 = useAnimatedStyle(B);
const paddingBottom = Math.max(bottom, ACTION_SHEET_MINIMUM_BOTTOM_PADDING);
const style2 = [styles.container, , ,];
if (withSafeArea) {
withSafeArea = {
paddingBottom
};
}
style2[1] = withSafeArea;
style2[2] = style;
return <View style={style2} onLayout={onLayout}>
<ReanimatedRexport.View style={animatedStyle}>{backButton}</ReanimatedRexport.View>
<ReanimatedRexport.View style={animatedStyle2}>{ctaButton}</ReanimatedRexport.View>
</View>;
};
PX_16 = Module712.space.PX_16;
useStyles = createStyles({
container: {
display: "flex",
flexGrow: 1,
flexShrink: 1,
paddingHorizontal: Module712.space.PX_16
}
});
__initData = {
code: "function QuestBottomSheetFooterTsx1(){const{animation,H_PADDING_PX}=this.__closure;return{opacity:animation.get(),position:'absolute',top:0,left:0,transform:[{translateX:H_PADDING_PX}]};}"
};
__initData2 = {
code: "function QuestBottomSheetFooterTsx2(){const{interpolate,animation,windowWidth,H_PADDING_PX,ICON_SIZE_PX}=this.__closure;return{width:interpolate(animation.get(),[0,1],[windowWidth-H_PADDING_PX*2,windowWidth-H_PADDING_PX*2.5-ICON_SIZE_PX]),alignSelf:'flex-end'};}"
};
export default function QuestBottomSheetFooter(props) {
let r101, ctaButton;
const { quest: quest2, onLayout, step, isDefibrilating = false, onConnectConsoleNext, onBack, onDefib, style, withSafeArea, sourceQuestContent: sourceQuestContent4 } = props;
const questRewardClaimHandler = useQuestRewardClaimHandler({
quest: quest2,
sourceQuestContent: sourceQuestContent4
});
const questTaskDetails = useQuestTaskDetails(quest2);
const isQuestProgressing = useIsQuestProgressing(quest2);
const [r28] = useTaskPlatformScreen(quest2, questTaskDetails);
const xboxAndPlaystationAccounts = useConnectedAccounts().xboxAndPlaystationAccounts;
const memo = useMemo(() => supportedConsoles(quest2).filter((c30707_0) => xboxAndPlaystationAccounts.find((xboxAndPlaystationAccount) => xboxAndPlaystationAccount.type === c30707_0) != null), [quest2, xboxAndPlaystationAccounts]);
const hasWatchVideoOnMobileTasks = useHasWatchVideoOnMobileTasks(quest2.config);
const mobileActivityQuest = useMobileActivityQuest(quest2);
const { isMobileActivityQuest, launchMobileActivity } = mobileActivityQuest;
const primaryCtaCopy = usePrimaryCtaCopy({
quest: quest2,
application: mobileActivityQuest.questApplication
});
const mobileActivityPressHandler = useMobileActivityPressHandler({
questId: quest2.id,
sourceQuestContent: sourceQuestContent4,
launchMobileActivity
});
const r4 = quest2.userStatus?.completedAt != null;
const disabled = quest2.userStatus?.claimedAt != null;
const TASK_SELECT = QuestBottomSheetStep.TASK_SELECT;
let r82 = null;
if (step !== TASK_SELECT) {
if (QuestBottomSheetStep.CONSOLE_CONNECT === step) {
ctaButton = <NextButton onPress={onConnectConsoleNext} disabled={memo.length === 0} />;
} else {
const TASK_STATUS = QuestBottomSheetStep.TASK_STATUS;
ctaButton = null;
if (TASK_STATUS === step) {
L24: {
if (r4) {
r101 = <ClaimButton questId={quest2.id} onPress={questRewardClaimHandler.claim} disabled={disabled} loading={questRewardClaimHandler.isLoading || questRewardClaimHandler.isClaiming} sourceQuestContent={sourceQuestContent4} />;
} else if (hasWatchVideoOnMobileTasks) {
r101 = <WatchTaskButton questId={quest2.id} taskDetails={questTaskDetails} sourceQuestContent={sourceQuestContent4} />;
} else if (isMobileActivityQuest) {
r101 = <Button grow size="lg" onPress={mobileActivityPressHandler} text={primaryCtaCopy} icon={getPrimaryCtaIcon(quest2)} />;
} else {
if (r28 === TaskPlatformScreen.CONSOLE && !isQuestProgressing) {
r101 = <DefibButton questId={quest2.id} loading={isDefibrilating} disabled={isDefibrilating} onPress={onDefib} sourceQuestContent={sourceQuestContent4} />;
break L24;
}
r101 = <ClaimButton questId={quest2.id} onPress={questRewardClaimHandler.claim} disabled sourceQuestContent={sourceQuestContent4} />;
}
}
ctaButton = r101;
}
}
r82 = <AnimatedFooter onLayout={onLayout} ctaButton={ctaButton} backButton={onBack != null && <IconButton accessibilityLabel={intl.string(t["13/7kX"])} variant="secondary" icon={<ArrowLargeLeftIcon />} onPress={onBack} size="lg" />} style={style} withSafeArea={withSafeArea} />;
}
return r82;
};
export { useQuestRewardClaimHandler };
@@ -0,0 +1,149 @@
// Metro module 14145 (f14146).
import { useMemo, useRef, useEffect } from "react";
import { View } from "react-native";
import UserStore from "../../../../stores/UserStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useQuestTaskDetails, useTaskPlatformScreen } from "../../hooks/QuestHooks";
import * as _QuestTaskUtils from "../../utils/QuestTaskUtils";
import { hasStreamOnDesktopTask, getDefaultInGameTask } from "../../utils/QuestTaskUtils";
import { useHasWatchVideoOnMobileTasks } from "../QuestHooks.native";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { getDefaultRewardNameWithArticle } from "../../utils/QuestRewardUtils";
import * as _QuestUtils from "../../utils/QuestUtils";
import { intl, t } from "../../../../intl/index.native";
import { QuestBottomSheetStep } from "./QuestBottomSheet";
import { TaskPlatformScreen } from "../../QuestTypes";
import { useActionSheetPressHandler } from "../QuestDock/QuestDockHooks";
import { useIsScreenReaderEnabled } from "../../../a11y/native/useIsScreenReaderEnabled.native";
import { setAccessibilityFocus } from "../../../a11y/native/setAccessibilityFocus.android";
import { Text } from "../../../../design/components/Text/native/Text";
import { PressableOpacity } from "../../../../design/void/Pressables/native/Pressables";
import { MoreHorizontalIcon } from "../../../../design/components/Icon/native/redesign/generated/MoreHorizontalIcon";
const useStyles = createStyles({
container: {
display: "flex",
gap: 6,
paddingHorizontal: Module712.space.PX_16,
paddingTop: Module712.space.PX_8
},
containerWithActionSheet: {
alignItems: "center",
flexDirection: "row",
paddingHorizontal: Module712.space.PX_8
},
title: {
textAlign: "center"
},
titleWithActionSheet: {
textAlign: "left",
flex: 1
},
actionSheetButton: {
flexGrow: 0,
flexShrink: 0
}
});
export default function QuestBottomSheetHeader(props) {
const { quest: quest2, step: step2 } = props;
let withActionSheet = props.withActionSheet;
if (withActionSheet === void 0) {
withActionSheet = false;
}
let isScreenReaderEnabled, ref;
let hasWatchVideoOnMobileTasks, defaultRewardNameWithArticle, isSponsoredPlayQuest;
props.location;
isScreenReaderEnabled = void 0;
ref = void 0;
const styles = useStyles();
const actionSheetPressHandler = useActionSheetPressHandler(quest2);
const quest = quest2;
const step = step2;
hasWatchVideoOnMobileTasks = void 0;
defaultRewardNameWithArticle = void 0;
isSponsoredPlayQuest = void 0;
const r32 = quest.userStatus?.completedAt != null;
let c20945_2 = r32;
const gameTitle = quest.config.messages.gameTitle;
const questTaskDetails = useQuestTaskDetails(quest);
const hasWatchVideoTasks = _QuestTaskUtils.hasWatchVideoTasks(quest);
const isInGameQuest = _QuestTaskUtils.isInGameQuest(quest);
const [r23] = useTaskPlatformScreen(quest, questTaskDetails);
let c20945_6 = r23;
const targetMinutes = questTaskDetails.targetMinutes;
const memo = useMemo(() => hasStreamOnDesktopTask({
quest
}), [quest]);
hasWatchVideoOnMobileTasks = useHasWatchVideoOnMobileTasks(quest.config);
defaultRewardNameWithArticle = getDefaultRewardNameWithArticle(quest.config, useStateFromStores([UserStore], () => UserStore.getCurrentUser()));
isSponsoredPlayQuest = _QuestUtils.isSponsoredPlayQuest(quest);
const memo2 = useMemo(() => {
let r56;
if (c20945_2) {
return intl.string(t["ij5E/5"]);
}
if (hasWatchVideoTasks) {
return hasWatchVideoOnMobileTasks ? intl.formatToPlainString(t.ttFsLj, {
reward: defaultRewardNameWithArticle
}) : intl.formatToPlainString(t.IpoqqA, {
questReward: defaultRewardNameWithArticle
});
}
if (isInGameQuest) {
const defaultInGameTask = getDefaultInGameTask(quest.config);
if (defaultInGameTask != null) {
return defaultInGameTask.messages.taskDescription;
}
}
L17: {
if (step === QuestBottomSheetStep.TASK_SELECT) {
r56 = intl.string(t.drVw4T);
} else if (step === QuestBottomSheetStep.CONSOLE_CONNECT) {
r56 = intl.string(t.svdwbA);
} else if (isSponsoredPlayQuest) {
r56 = intl.formatToPlainString(t["2GJLK2"], {
targetMinutes,
rewardNameWithArticle: defaultRewardNameWithArticle
});
} else {
if (c20945_6 === TaskPlatformScreen.DESKTOP && memo) {
r56 = intl.formatToPlainString(t["hkJ+Gs"], {
gameTitle,
questReward: defaultRewardNameWithArticle,
streamingDurationRequirement: targetMinutes
});
break L17;
}
r56 = intl.formatToPlainString(t.NIimTt, {
gameTitle,
rewardNameWithArticle: defaultRewardNameWithArticle,
targetMinutes
});
}
}
return r56;
}, [r32, hasWatchVideoTasks, step, r23, memo, gameTitle, defaultRewardNameWithArticle, targetMinutes, hasWatchVideoOnMobileTasks, isInGameQuest, isSponsoredPlayQuest, quest.config]);
isScreenReaderEnabled = useIsScreenReaderEnabled();
ref = useRef(null);
useEffect(() => {
let r1 = isScreenReaderEnabled;
if (isScreenReaderEnabled) {
r1 = ref.current != null;
}
if (r1) {
setAccessibilityFocus({
ref,
delay: 100
});
}
}, [isScreenReaderEnabled]);
const style = [styles.container, withActionSheet ? styles.containerWithActionSheet : withActionSheet];
const r102 = [memo2 != null && <Text ref={ref} variant="redesign/heading-18/bold" color="mobile-text-heading-primary" accessibilityRole="header" style={[styles.title, withActionSheet ? styles.titleWithActionSheet : withActionSheet]}>{memo2}</Text>, ,];
if (withActionSheet) {
withActionSheet = <PressableOpacity accessibilityRole="button" accessibilityLabel={intl.string(t["UKOtz+"])} onPress={actionSheetPressHandler} style={styles.actionSheetButton}>
<MoreHorizontalIcon color={Module712.colors.INTERACTIVE_TEXT_DEFAULT} />
</PressableOpacity>;
}
r102[1] = withActionSheet;
return <View style={style}>{r102}</View>;
};
@@ -0,0 +1,113 @@
// Metro module 14147 (f14148).
import { useContext, useCallback } from "react";
import "../../QuestConstants";
import { QuestDockExternalCoordinationContext } from "../QuestDock/QuestDockExternalCoordinationContext";
import { QuestBottomSheetContext } from "./QuestBottomSheet";
import { useQuestImpression } from "../../lib/analytics/ContentImpressionTrackerHooks";
import openVideoQuestModal from "../VideoQuestModal/openVideoQuestModal";
import { shouldMigrateToAdAnalyticsInterface, AdAnalyticsInterfaceExperimentStep } from "../../experiments/AdAnalyticsInterfaceExperiment";
import { captureAdUserAction } from "../../../ads/analytics/captureAdUserAction";
import { AdUserActionType } from "../../../ads/analytics/captureAdUserActionTypes";
import { AdCreativeType } from "../../../../_bundle/Module6013";
import { QuestContentCTA } from "../../lib/analytics/AnalyticsTypes";
import { QuestContent } from "../../QuestTypes";
import { trackQuestContentClicked } from "../../lib/analytics/AnalyticsActions";
function $mk92907($env) {
return () => {
const r2 = $env;
const r3 = r2[1];
const r1 = $env.$parent;
if (r3) {
(0, r1[1])(r1[2][5]).hideActionSheet("QuestBottomSheet");
} else {
(0, r2[0])(r1[5].COLLAPSED);
}
};
}
let env9901 = {};
export function useWatchTaskPressHandler({ questId, sourceQuestContent }) {
let env20952;
const r6 = env20952 = {
$parent: env9901
};
env20952[0] = void 0;
env20952[1] = void 0;
const setRestingQuestDockMode = useContext(QuestDockExternalCoordinationContext).setRestingQuestDockMode;
env20952[0] = setRestingQuestDockMode;
const isInQuestBottomSheet = useContext(QuestBottomSheetContext).isInQuestBottomSheet;
env20952[1] = isInQuestBottomSheet;
const callback = useCallback($mk92907(r6), [isInQuestBottomSheet, setRestingQuestDockMode]);
const questImpression = useQuestImpression();
return useCallback(() => {
callback();
openVideoQuestModal({
questId,
questContentPosition: questImpression == null ? void 0 : questImpression.getQuestContentPosition(),
sourceQuestContent
});
if (shouldMigrateToAdAnalyticsInterface(AdAnalyticsInterfaceExperimentStep.STEP_2_CLICKED_INTERNAL, "quest_bottom_sheet_watch_task")) {
captureAdUserAction({
type: AdUserActionType.CLICK_INTERNAL,
adCreativeType: AdCreativeType.QUEST,
adCreativeId: questId,
questContentCTA: QuestContentCTA.WATCH_VIDEO,
surfaceId: QuestContent.QUEST_BOTTOM_SHEET,
sourceQuestContent,
impressionId: questImpression == null ? void 0 : questImpression.getId(),
questContentPosition: questImpression == null ? void 0 : questImpression.getQuestContentPosition()
});
} else {
trackQuestContentClicked({
questId,
questContent: QuestContent.QUEST_BOTTOM_SHEET,
questContentCTA: QuestContentCTA.WATCH_VIDEO,
questContentPosition: questImpression == null ? void 0 : questImpression.getQuestContentPosition(),
impressionId: questImpression == null ? void 0 : questImpression.getId(),
sourceQuestContent
});
}
}, [questId, callback, questImpression, sourceQuestContent]);
}
export function useMobileActivityPressHandler({ questId: questId2, sourceQuestContent: sourceQuestContent2, launchMobileActivity }) {
let env20954;
const r8 = env20954 = {
$parent: env9901
};
env20954[0] = void 0;
env20954[1] = void 0;
const setRestingQuestDockMode = useContext(QuestDockExternalCoordinationContext).setRestingQuestDockMode;
env20954[0] = setRestingQuestDockMode;
const isInQuestBottomSheet = useContext(QuestBottomSheetContext).isInQuestBottomSheet;
env20954[1] = isInQuestBottomSheet;
const callback2 = useCallback($mk92907(r8), [isInQuestBottomSheet, setRestingQuestDockMode]);
const questImpression2 = useQuestImpression();
return useCallback(async () => {
let c27645_0;
c27645_0 = void 0;
callback2();
await launchMobileActivity();
if (shouldMigrateToAdAnalyticsInterface(AdAnalyticsInterfaceExperimentStep.STEP_2_CLICKED_INTERNAL, "quest_bottom_sheet_mobile_activity")) {
const impressionId = questImpression2 == null ? void 0 : questImpression2.getId();
captureAdUserAction({
type: AdUserActionType.CLICK_INTERNAL,
adCreativeType: AdCreativeType.QUEST,
adCreativeId: questId2,
questContentCTA: QuestContentCTA.LAUNCH_MOBILE_ACTIVITY,
surfaceId: QuestContent.QUEST_BOTTOM_SHEET,
sourceQuestContent: sourceQuestContent2,
impressionId,
questContentPosition: questImpression2 == null ? void 0 : questImpression2.getQuestContentPosition()
});
} else {
const questContentPosition = questImpression2 == null ? void 0 : questImpression2.getQuestContentPosition();
trackQuestContentClicked({
questId: questId2,
questContent: QuestContent.QUEST_BOTTOM_SHEET,
questContentCTA: QuestContentCTA.LAUNCH_MOBILE_ACTIVITY,
questContentPosition,
impressionId: questImpression2 == null ? void 0 : questImpression2.getId(),
sourceQuestContent: sourceQuestContent2
});
}
}, [questId2, callback2, launchMobileActivity, questImpression2, sourceQuestContent2]);
}
@@ -0,0 +1,203 @@
// Metro module 14183 (f14184).
import { useMemo } from "react";
import { StyleSheet, View } from "react-native";
import UserStore from "../../../../stores/UserStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useQuestTaskDetails, useIsQuestProgressing, useQuestFormattedDate, useThirdPartyTaskDetails } from "../../hooks/QuestHooks";
import { supportedTaskPlatforms } from "../../utils/QuestPlatformUtils";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { getDefaultRewardName } from "../../utils/QuestRewardUtils";
import * as _QuestUtils from "../../utils/QuestUtils";
import { intl, t } from "../../../../intl/index.native";
import { Text } from "../../../../design/components/Text/native/Text";
import { FirstPartyQuestTaskTypes, FirstPartyQuestTaskTypesSets } from "../../../../_bundle/Module5040";
import { Card } from "../../../../design/components/Card/native/Card.native";
import QuestProgressIndicator from "../QuestProgressIndicator";
import { getQuestAsset, QuestAssetType } from "../../lib/AssetUtils";
import { useWatchTaskPressHandler } from "./QuestBottomSheetHooks";
import { isHeroVideoSupported } from "../QuestUtils.native";
import { PressableOpacity } from "../../../../design/void/Pressables/native/Pressables";
import { VideoComponent } from "../../../../components_native/common/Video";
import Module4611 from "../../../../_bundle/Module4611";
import FastImage from "../../../../components_native/common/FastImage";
import QuestDockBlurredContentBackground from "../QuestDock/QuestDockBlurredContentBackground";
import { PlayIcon } from "../../../../design/components/Icon/native/redesign/generated/PlayIcon";
const useStyles = createStyles({
card: {
padding: 0
},
cardWatchTask: {
justifyContent: "flex-end",
height: 210
},
content: {
padding: Module712.space.PX_16
},
contentWatchTask: {
alignItems: "flex-end"
},
footer: {
padding: 12,
display: "flex",
flexDirection: "row",
justifyContent: "center",
alignItems: "center",
backgroundColor: Module712.colors.BACKGROUND_MOD_MUTED,
borderBottomLeftRadius: Module712.modules.mobile.CARD_DEFAULT_RADIUS,
borderBottomRightRadius: Module712.modules.mobile.CARD_DEFAULT_RADIUS,
borderWidth: 1,
borderColor: Module712.colors.BORDER_MUTED
},
instructionsText: {
marginTop: Module712.space.PX_12,
textAlign: "center"
},
videoPreviewWrapper: {
...StyleSheet.absoluteFillObject,
borderRadius: Module712.modules.mobile.CARD_DEFAULT_RADIUS,
overflow: "hidden"
},
videoPreview: {
...StyleSheet.absoluteFillObject
},
playVideoIconWrapper: {
alignItems: "center",
justifyContent: "center",
borderRadius: Module712.radii.round,
position: "absolute",
left: "50%",
overflow: "hidden",
top: "50%",
width: 60,
height: 60,
transform: [{
translateX: -30
}, {
translateY: -30
}]
}
});
export function QuestBottomSheetProgressCardPlayStreamTask(props) {
let isSponsoredPlayQuest;
const quest2 = props.quest;
isSponsoredPlayQuest = void 0;
const styles = useStyles();
const questTaskDetails = useQuestTaskDetails(quest2);
let r7 = useIsQuestProgressing(quest2);
const isQuestProgressing = r7;
let r15 = quest2.userStatus?.completedAt != null;
let c21012_2 = r15;
const r31 = quest2.userStatus?.claimedAt != null;
let c21012_3 = r31;
const r12 = supportedTaskPlatforms(quest2);
let c21012_4 = r12;
const questFormattedDate = useQuestFormattedDate(quest2.config.rewardsConfig.rewardsExpireAt);
const gameTitle = quest2.config.messages.gameTitle;
const defaultRewardName = getDefaultRewardName(quest2.config, useStateFromStores([UserStore], () => UserStore.getCurrentUser()));
isSponsoredPlayQuest = _QuestUtils.isSponsoredPlayQuest(quest2);
const memo = useMemo(() => {
if (c21012_2 && !c21012_3) {
return intl.format(t.e3OlfB, {
rewardHook: () => <Text variant="text-sm/semibold" color="text-strong">{defaultRewardName}</Text>,
date: questFormattedDate
});
}
if (isQuestProgressing) {
return intl.format(t.aFaRso, {
minutesLeft: Math.ceil((questTaskDetails.targetSeconds - questTaskDetails.progressSeconds) / 60),
minutesHook: (a0) => <Text variant="text-sm/semibold" color="text-strong">
{a0}
</Text>
});
}
return isSponsoredPlayQuest ? intl.string(t["04ateG"]) : c21012_4.length > 1 ? intl.formatToPlainString(t.E2R8VX, {
gameName: gameTitle
}) : questTaskDetails.taskType === FirstPartyQuestTaskTypes.STREAM_ON_DESKTOP ? intl.formatToPlainString(t.boMftC, {
gameName: gameTitle
}) : questTaskDetails.taskType === FirstPartyQuestTaskTypes.PLAY_ON_DESKTOP ? intl.formatToPlainString(t["9Peldf"], {
gameName: gameTitle
}) : FirstPartyQuestTaskTypesSets.CONSOLE.has(questTaskDetails.taskType) ? intl.formatToPlainString(t["+8JB6Y"], {
gameTitle
}) : null;
}, [questTaskDetails, r15, r31, gameTitle, defaultRewardName, isQuestProgressing, r12, questFormattedDate, isSponsoredPlayQuest]);
if (!r15) {
r15 = isQuestProgressing;
}
const r86 = [<View style={styles.content}>
<QuestProgressIndicator quest={quest2} size="lg" progress={questTaskDetails.percentComplete} loading={!r15} hasConfetti />
{memo != null && <Text style={styles.instructionsText} variant="text-sm/semibold" color="text-subtle">{memo}</Text>}
</View>, ,];
if (isQuestProgressing) {
r7 = <View style={styles.footer}>
<Text color="text-feedback-positive" variant="text-sm/semibold">
{intl.format(t.lIFg6I, {
gameName: quest2.config.messages.gameTitle
})}
</Text>
</View>;
}
r86[1] = r7;
return <Card style={styles.card} border="subtle">{r86}</Card>;
}
export function QuestBottomSheetProgressCardWatchTask(props) {
const { quest, sourceQuestContent } = props;
const styles = useStyles();
const questTaskDetails2 = useQuestTaskDetails(quest);
const memo = useMemo(() => getQuestAsset(quest, QuestAssetType.QUEST_BAR_HERO_VIDEO), [quest]);
const memo3 = useMemo(() => getQuestAsset(quest, QuestAssetType.VIDEO_PLAYER_THUMBNAIL, void 0, true), [quest]);
const memo2 = useMemo(() => getQuestAsset(quest, QuestAssetType.QUEST_BAR_HERO_IMAGE), [quest]);
const watchTaskPressHandler = useWatchTaskPressHandler({
questId: quest.id,
sourceQuestContent
});
const r11 = memo != null && isHeroVideoSupported(memo);
return <PressableOpacity onPress={watchTaskPressHandler} accessibilityRole="button" accessibilityLabel={intl.string(quest.userStatus?.completedAt != null ? t.YsCuyF : t["74KqrR"])}>
<Card style={[styles.card, styles.cardWatchTask]} border="subtle">
{r11 && <View style={styles.videoPreviewWrapper}>
<VideoComponent style={styles.videoPreview} poster={memo3?.url} posterResizeMode="cover" source={{
uri: memo.url
}} resizeMode="cover" muted disableFocus preventsDisplaySleepDuringVideoPlayback={false} />
<Module4611 start={{
x: 0.5,
y: 0.5
}} end={{
x: 1,
y: 1
}} style={StyleSheet.absoluteFill} colors={["rgba(0, 0, 0, 0)", "rgba(0, 0, 0, 1)"]} />
</View>}
{(r11 ? !r11 : memo2 != null) && <View style={styles.videoPreviewWrapper}>
<FastImage style={styles.videoPreview} source={{
uri: memo2.url
}} resizeMode="cover" />
<Module4611 start={{
x: 0.5,
y: 0.5
}} end={{
x: 1,
y: 1
}} style={StyleSheet.absoluteFill} colors={["rgba(0, 0, 0, 0)", "rgba(0, 0, 0, 1)"]} />
</View>}
<View style={styles.playVideoIconWrapper}>
<QuestDockBlurredContentBackground blurTheme="light" />
<PlayIcon color={Module712.colors.WHITE} />
</View>
<View style={[styles.content, styles.contentWatchTask]}>
<QuestProgressIndicator quest={quest} size="x-sm" progress={questTaskDetails2.percentComplete} hasConfetti />
</View>
</Card>
</PressableOpacity>;
}
export function QuestBottomSheetProgressCardInGameTask(props) {
const quest2 = props.quest;
const styles = useStyles();
let progress = useThirdPartyTaskDetails(quest2)?.percentComplete;
if (progress == null) {
progress = 0;
}
return <Card style={styles.card} border="subtle">
<View style={styles.content}>
<QuestProgressIndicator quest={quest2} size="lg" progress={progress} hasConfetti />
</View>
</Card>;
}
@@ -0,0 +1,14 @@
// Metro module 14185 (f14186).
import { QuestTaskPlatform } from "../../QuestConstants";
import { TableRowGroup } from "../../../../design/components/TableRow/native/TableRowGroup.native";
import { TableRow } from "../../../../design/components/TableRow/native/TableRow.native";
import { ScreenIcon } from "../../../../design/components/Icon/native/redesign/generated/ScreenIcon";
import { intl, t } from "../../../../intl/index.native";
import { GameControllerIcon } from "../../../../design/components/Icon/native/redesign/generated/GameControllerIcon";
export default function QuestBottomSheetTaskSelect(props) {
const onTaskSelect = props.onTaskSelect;
return <TableRowGroup hasIcons>
<TableRow arrow icon={<ScreenIcon />} label={intl.string(t["QXc01+"])} onPress={() => onTaskSelect == null ? void 0 : onTaskSelect(QuestTaskPlatform.DESKTOP)} />
<TableRow arrow icon={<GameControllerIcon />} label={intl.string(t["8lAfuB"])} onPress={() => onTaskSelect == null ? void 0 : onTaskSelect(QuestTaskPlatform.CONSOLE)} />
</TableRowGroup>;
};