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

139 lines
6.7 KiB
TypeScript

// Metro module 14217 (f14218).
import { useContext, useEffect, memo, useCallback } from "react";
import { View } from "react-native";
import QuestDockStore from "./QuestDockStore";
import { QuestDockMode, QuestsExperimentLocations } from "../../QuestConstants";
import * as _QuestDockConstants from "./QuestDockConstants";
import { QUEST_DOCK_EXPANDED_HEIGHT, QUEST_DOCK_EXPANDED_PADDING_BOTTOM } from "./QuestDockConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { QuestDockExternalCoordinationContext } from "./QuestDockExternalCoordinationContext";
import { QuestDockGestureContext } from "./QuestDockGestureContext";
import useStateFromSharedValue from "../../../reanimated/native/useStateFromSharedValue";
import { useHasWatchVideoOnMobileTasks } from "../QuestHooks.native";
import openVideoQuestModal from "../VideoQuestModal/openVideoQuestModal";
import { QuestContent } from "../../QuestTypes";
import QuestBottomSheetHeader from "../QuestBottomSheet/QuestBottomSheetHeader";
import { QuestBottomSheetStep, QuestBottomSheetContent, useEnrolledQuestContentProps } from "../QuestBottomSheet/QuestBottomSheet";
import QuestBottomSheetFooter from "../QuestBottomSheet/QuestBottomSheetFooter";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import { hasWatchVideoTasks } from "../../utils/QuestTaskUtils";
let useStyles, EnrolledBodyPlayStreamTask;
const EnrolledBodyWatchTask = function EnrolledBodyWatchTask(props) {
const quest = props.quest;
const styles = useStyles();
const context = useContext(QuestDockExternalCoordinationContext);
const { restingQuestDockMode, setRestingQuestDockMode } = context;
const questDockWrapperSpecs = useContext(QuestDockGestureContext).questDockWrapperSpecs;
const stateFromSharedValue = useStateFromSharedValue(restingQuestDockMode);
let c21044_3 = stateFromSharedValue;
const hasWatchVideoOnMobileTasks = useHasWatchVideoOnMobileTasks(quest.config);
useEffect(() => {
let _maybeOpenVideoQuestModal2 = function _maybeOpenVideoQuestModal() {
const r9 = async () => {
let c31720_0;
L17: {
c31720_0 = void 0;
if (questDockWrapperSpecs.get().prevDeltaY < 0 && c21044_3 === QuestDockMode.RESET_TO_PREVIOUS && QuestDockStore.prevRestingQuestDockMode === QuestDockMode.EXPANDED) {
await openVideoQuestModal({
questId: quest.id,
sourceQuestContent: QuestContent.QUEST_BAR_MOBILE
});
(0, setRestingQuestDockMode)(QuestDockMode.COLLAPSED);
break L17;
}
return void 0;
}
};
_maybeOpenVideoQuestModal2 = r9;
return r9.apply(this, arguments);
};
if (hasWatchVideoOnMobileTasks) {
(function maybeOpenVideoQuestModal() {
return _maybeOpenVideoQuestModal2.apply(this, arguments);
})();
}
}, [stateFromSharedValue, questDockWrapperSpecs, quest.id, setRestingQuestDockMode, hasWatchVideoOnMobileTasks]);
return <>
<View style={styles.headerWrapper}>
<QuestBottomSheetHeader quest={quest} step={QuestBottomSheetStep.TASK_STATUS} withActionSheet location={QuestsExperimentLocations.QUESTS_BAR_MOBILE} />
</View>
<View style={styles.contentWrapper}>
<QuestBottomSheetContent quest={quest} location={QuestsExperimentLocations.QUESTS_BAR_MOBILE} step={QuestBottomSheetStep.TASK_STATUS} sourceQuestContent={QuestContent.QUEST_BAR_MOBILE} />
</View>
<View style={styles.footerWrapper}>
<QuestBottomSheetFooter quest={quest} step={QuestBottomSheetStep.TASK_STATUS} style={styles.footer} withSafeArea={false} sourceQuestContent={QuestContent.QUEST_BAR_MOBILE} />
</View>
</>;
};
EnrolledBodyPlayStreamTask = function EnrolledBodyPlayStreamTask(props) {
const quest2 = props.quest;
const styles = useStyles();
const enrolledQuestContentProps = useEnrolledQuestContentProps({
quest: quest2,
location: QuestsExperimentLocations.QUESTS_BAR_MOBILE,
sourceQuestContent: QuestContent.QUEST_BAR_MOBILE
});
const { step, defibrillator, stepActions } = enrolledQuestContentProps;
return <>
<View style={styles.headerWrapper}>
<QuestBottomSheetHeader quest={quest2} step={step} withActionSheet location={QuestsExperimentLocations.QUESTS_BAR_MOBILE} />
</View>
<View style={styles.contentWrapper}>
<QuestBottomSheetContent defibrillator={defibrillator} quest={quest2} handleTaskSelect={enrolledQuestContentProps.handleTaskSelect} location={QuestsExperimentLocations.QUESTS_BAR_MOBILE} showMicrophone={enrolledQuestContentProps.showMicrophone} step={step} sourceQuestContent={QuestContent.QUEST_BAR_MOBILE} />
</View>
<View style={styles.footerWrapper}>
<QuestBottomSheetFooter quest={quest2} step={step} isDefibrilating={defibrillator.isActive} onBack={stepActions.onBack} onDefib={defibrillator.start} onConnectConsoleNext={stepActions.onNext} style={styles.footer} withSafeArea={false} sourceQuestContent={QuestContent.QUEST_BAR_MOBILE} />
</View>
</>;
};
const { QUEST_DOCK_EXPANDED_ENROLLED_PADDING_TOP, QUEST_DOCK_EXPANDED_PADDING_HORIZONTAL } = _QuestDockConstants;
useStyles = createStyles({
wrapper: {
flexGrow: 0,
flexShrink: 0,
paddingBottom: QUEST_DOCK_EXPANDED_PADDING_BOTTOM,
paddingTop: QUEST_DOCK_EXPANDED_ENROLLED_PADDING_TOP,
paddingHorizontal: QUEST_DOCK_EXPANDED_PADDING_HORIZONTAL
},
headerWrapper: {
marginBottom: Module712.space.PX_16
},
contentWrapper: {
display: "flex",
gap: Module712.space.PX_16,
flexGrow: 0,
flexShrink: 0
},
footer: {
marginTop: Module712.space.PX_16
},
footerWrapper: {
marginLeft: -1 * QUEST_DOCK_EXPANDED_PADDING_HORIZONTAL,
marginRight: -1 * QUEST_DOCK_EXPANDED_PADDING_HORIZONTAL
}
});
const r66 = memo(function QuestDockEnrolledBody(props) {
const quest2 = props.quest;
const styles = useStyles();
const minExpandedContentHeight = useContext(QuestDockGestureContext).minExpandedContentHeight;
const bottom = useSafeAreaInsets_native().bottom;
const callback = useCallback((a0) => {
const height = a0.nativeEvent.layout.height;
if (minExpandedContentHeight.get() !== height) {
minExpandedContentHeight.set(height);
}
}, [minExpandedContentHeight]);
useEffect(() => () => {
if (minExpandedContentHeight.get() !== QUEST_DOCK_EXPANDED_HEIGHT) {
minExpandedContentHeight.set(QUEST_DOCK_EXPANDED_HEIGHT);
}
}, [minExpandedContentHeight]);
return <View style={[styles.wrapper, {
paddingBottom: Math.max(bottom, QUEST_DOCK_EXPANDED_PADDING_BOTTOM)
}]} onLayout={callback}>
{hasWatchVideoTasks(quest2) ? <EnrolledBodyWatchTask quest={quest2} /> : <EnrolledBodyPlayStreamTask quest={quest2} />}
</View>;
});
export default r66;