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

197 lines
8.6 KiB
TypeScript

// Metro module 15860 (f15861).
import { useCallback } from "react";
import { StyleSheet, View } from "react-native";
import QuestStore from "../QuestStore";
import { QuestsExperimentLocations } from "../QuestConstants";
import { ActivityPanelModes } from "../../activities/panel/ActivityPanelConstants";
import { createStyles, createStyleProperties } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useStateFromStores } from "../../../_bundle/Module589";
import { QuestContentImpressionTrackerNative } from "./QuestContentImpressionTracker.native";
import { QuestContent } from "../QuestTypes";
import { IconButton } from "../../../design/components/Button/native/IconButton.native";
import Module8964 from "../../../_bundle/Module8964";
import { intl, t } from "../../../intl/index.native";
import { useIsScreenLandscape } from "../../screen/useIsScreenLandscape.native";
import { useGetOrFetchApplication } from "../../applications/useGetOrFetchApplications";
import { getActivityApplicationId } from "../utils/QuestTaskUtils";
import useEmbeddedActivityBackground from "../../activities/utils/useEmbeddedActivityBackground";
import { useQuestTaskDetails } from "../hooks/QuestHooks";
import { useQuestsInstructionsToWinReward } from "../hooks/QuestCopyHooks";
import { useQuestRewardClaimHandler } from "./QuestBottomSheet/QuestBottomSheetFooter";
import FramesActionCreators_native from "../../frames/FramesActionCreators.native";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import { openQuestHome } from "./QuestUtils.native";
import { showShareActionSheet } from "../../action_sheet/native/showShareActionSheet";
import { getQuestUrl } from "../utils/QuestCopyUtils";
import { BottomSheet } from "../../../design/components/Sheet/native/BottomSheet.native";
import FastImage from "../../../components_native/common/FastImage";
import Module4611 from "../../../_bundle/Module4611";
import { VerticalGradient } from "../../../ConstantsIOS";
import QuestRewardTile from "./QuestRewardTile";
import Module12238 from "../../../_bundle/Module12238";
import QuestContextMenu from "./QuestContextMenu";
import { Stack } from "../../../design/components/Stack/native/Stack.native";
import { Text } from "../../../design/components/Text/native/Text";
import { Button } from "../../../design/components/Button/native/Button.native";
let useStyles, styleProperties, QuestProgressBottomSheet;
const contextMenuButton = function contextMenuButton(a0) {
return <IconButton {...a0} icon={Module8964} variant="secondary-overlay" accessibilityLabel={intl.string(t["UKOtz+"])} size="sm" />;
};
QuestProgressBottomSheet = function QuestProgressBottomSheet(props) {
const quest = props.quest;
const isScreenLandscape = useIsScreenLandscape();
const styles = useStyles(isScreenLandscape);
const gradientEnd = styleProperties().gradientEnd;
const url = useEmbeddedActivityBackground({
applicationId: useGetOrFetchApplication(getActivityApplicationId(quest))?.id,
size: 600,
names: ["embedded_cover"]
}).url;
const questTaskDetails = useQuestTaskDetails(quest);
const r26 = intl.formatToPlainString(t.EAYZAr, {
questName: quest.config.messages.questName
});
const questsInstructionsToWinReward = useQuestsInstructionsToWinReward({
quest,
taskDetails: questTaskDetails,
location: QuestsExperimentLocations.QUEST_ACTIVITY_BOTTOM_SHEET,
sourceQuestContent: QuestContent.RUNNING_ACTIVITY
});
const r77 = quest.userStatus?.completedAt != null && quest.userStatus?.claimedAt == null;
const questRewardClaimHandler = useQuestRewardClaimHandler({
quest,
questContent: QuestContent.RUNNING_ACTIVITY,
sourceQuestContent: QuestContent.RUNNING_ACTIVITY
});
let isClaiming = questRewardClaimHandler.isClaiming;
const { claim, isLoading } = questRewardClaimHandler;
const callback3 = useCallback(async () => {
let c28169_0;
c28169_0 = void 0;
if (await claim()) {
FramesActionCreators_native.updateFramePanelMode(ActivityPanelModes.PIP);
}
}, [claim]);
let onPress = useCallback(() => {
ActionSheetActionCreators.hideActionSheet();
FramesActionCreators_native.updateFramePanelMode(ActivityPanelModes.PIP);
openQuestHome({
scrollToQuestId: quest.id,
fromContent: QuestContent.QUEST_BOTTOM_SHEET
});
}, [quest.id]);
const callback = useCallback(() => {
ActionSheetActionCreators.hideActionSheet();
showShareActionSheet({
message: getQuestUrl(quest.id)
});
}, [quest.id]);
const callback2 = useCallback(() => {
ActionSheetActionCreators.hideActionSheet();
}, []);
const r123 = [url != null && <FastImage source={{
uri: url
}} style={styles.heroImg} />, <Module4611 style={styles.heroGradient} start={VerticalGradient.START} end={VerticalGradient.END} colors={["rgba(0, 0, 0, 0)", gradientEnd]} />, , ,];
let width = 80;
const height = isScreenLandscape ? 56 : 80;
if (isScreenLandscape) {
width = 56;
}
r123[2] = <View style={styles.gameTileContainer}>
<QuestRewardTile quest={quest} height={height} width={width} />
</View>;
r123[3] = <View style={styles.contextMenuContainer}>
<IconButton icon={Module12238} onPress={callback} variant="secondary-overlay" size="sm" accessibilityLabel={intl.string(t.RDE0Sc)} />
<QuestContextMenu quest={quest} showShareLink location={QuestsExperimentLocations.QUEST_ACTIVITY_BOTTOM_SHEET} sourceQuestContent={QuestContent.RUNNING_ACTIVITY}>{contextMenuButton}</QuestContextMenu>
</View>;
const r177 = [<View style={styles.heroContainer}>{r123}</View>, ,];
const r204 = [<Stack direction="vertical" spacing={Module712.space.PX_8} style={styles.textContainer}>
<Text variant={isScreenLandscape ? "heading-md/bold" : "heading-lg/bold"} color="mobile-text-heading-primary">{r26}</Text>
<Text style={styles.questDescription} variant={isScreenLandscape ? "text-sm/normal" : "text-md/normal"} color="text-muted">{questsInstructionsToWinReward}</Text>
</Stack>, ,];
const props2 = {
size: "lg",
text: intl.string(r77 ? t.cfY4PE : t.LLLLPD),
onPress: null,
loading: null,
grow: true
};
if (r77) {
onPress = callback3;
}
props2.onPress = onPress;
if (!isClaiming) {
isClaiming = isLoading;
}
props2.loading = isClaiming;
r204[1] = <Stack direction="vertical" spacing={Module712.space.PX_12} style={styles.buttonsContainer}>
<Button {...props2} />
<Button size="lg" text={intl.string(t.cpT0Cq)} onPress={callback2} variant="secondary" grow />
</Stack>;
r177[1] = <View style={styles.contentContainer}>{r204}</View>;
return <BottomSheet handleDisabled startExpanded>{r177}</BottomSheet>;
};
useStyles = createStyles((a0) => ({
contentContainer: {
display: "flex",
paddingHorizontal: Module712.space.PX_16,
paddingBottom: Module712.space.PX_16
},
heroContainer: {
height: a0 ? 125 : 140,
position: "relative",
marginBottom: a0 ? 0 : 52 + Module712.space.PX_8
},
heroImg: {
resizeMode: "cover",
...StyleSheet.absoluteFillObject,
borderTopLeftRadius: Module712.radii.lg,
borderTopRightRadius: Module712.radii.lg
},
heroGradient: {
...StyleSheet.absoluteFillObject,
borderTopLeftRadius: Module712.radii.lg,
borderTopRightRadius: Module712.radii.lg
},
gameTileContainer: {
position: "absolute",
bottom: a0 ? Module712.space.PX_12 : -52,
left: 0,
right: 0,
alignItems: "center"
},
contextMenuContainer: {
position: "absolute",
top: Module712.space.PX_16,
right: Module712.space.PX_16,
display: "flex",
flexDirection: "row",
gap: Module712.space.PX_16,
alignItems: "center"
},
textContainer: {
alignItems: "center",
paddingTop: a0 ? void 0 : Module712.space.PX_16,
gap: Module712.space.PX_8,
marginBottom: Module712.space.PX_16,
textAlign: "center"
},
questDescription: {
textAlign: "center"
},
buttonsContainer: {
paddingTop: a0 ? void 0 : Module712.space.PX_16
}
}));
styleProperties = createStyleProperties(() => ({
gradientEnd: Module712.colors.MOBILE_ACTIONSHEET_GRADIENT_BACKGROUND_DEFAULT
}));
export default function QuestProgressBottomSheetConnected(props) {
const questId = props.questId;
const stateFromStores = useStateFromStores([QuestStore], () => QuestStore.getQuest(questId));
return stateFromStores != null ? <QuestContentImpressionTrackerNative overrideVisibility questOrQuests={stateFromStores} questContent={QuestContent.RUNNING_ACTIVITY} sourceQuestContent={QuestContent.RUNNING_ACTIVITY}>
{() => <QuestProgressBottomSheet quest={stateFromStores} />}
</QuestContentImpressionTrackerNative> : null;
};