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

150 lines
7.4 KiB
TypeScript

// Metro module 14069 (f14070).
import { useCallback } from "react";
import { Pressable, StyleSheet, View } from "react-native";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import { QuestsExperimentLocations } from "../../QuestConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import * as _timing from "../../../../design/animation/reanimated/timing/timing";
import * as _timingPresets from "../../../../design/animation/reanimated/timing/timingPresets";
import { useIsBountiesVerticalScrollExperimentEnabled } from "../../experiments/BountiesVerticalScrollExperiment";
import { getBountyCtaInfo } from "./BountyCtaHelpers";
import * as _index_native from "../../../../intl/index.native";
import { intl } from "../../../../intl/index.native";
import ReanimatedRexport, { useAnimatedStyle } from "../../../reanimated/ReanimatedRexport";
import Module4611 from "../../../../_bundle/Module4611";
import BountiesEndCardPressableCta from "./BountiesEndCardPressableCta";
import BountiesModalEndedCtaButtons from "./BountiesModalEndedCtaButtons";
import { Text } from "../../../../design/components/Text/native/Text";
import { RetryIcon } from "../../../../design/components/Icon/native/redesign/generated/RetryIcon";
import { useIsBountiesModalTransitionsRefactorEnabled } from "../../experiments/BountiesModalTransitionsRefactorExperiment";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { useVisibilityTransition } from "./useVisibilityTransition";
import AnimatedEnterExitItem from "../../../../design/components/AnimatedEnterExitItem/native/AnimatedEnterExitItem";
let useStyles, t, n, __initData;
const BountiesScrollEndCardContent = function BountiesScrollEndCardContent(props) {
const { bounty, visible, onReplay, isActive, isScrollingInBoundsSharedValue, sourceQuestContent, opacityStyle } = props;
const styles = useStyles();
const isBountiesVerticalScrollExperimentEnabled = useIsBountiesVerticalScrollExperimentEnabled("BountiesScrollEndCard");
const bountyCtaInfo = getBountyCtaInfo(bounty);
const accessibilityLabel = intl.string(_index_native.t["9UtZAY"]);
const y = function y() {
const r4 = isScrollingInBoundsSharedValue == null ? void 0 : isScrollingInBoundsSharedValue.get();
return {
opacity: _timing.withTiming(isActive ? r4 !== true ? 1 : 0 : 0, _timingPresets.timingStandard)
};
};
y.__closure = {
isScrollingInBoundsSharedValue,
withTiming: _timing.withTiming,
isActive,
timingStandard: _timingPresets.timingStandard
};
y.__workletHash = 4903386092677;
y.__initData = __initData;
const animatedStyle = useAnimatedStyle(y);
return <ReanimatedRexport.View style={[styles.container, opacityStyle]} pointerEvents="box-none">
<View style={styles.backdropTint} pointerEvents="none" />
<Module4611 colors={["rgba(0, 0, 0, 0.48)", "rgba(0, 0, 0, 0.8)"]} style={styles.backdropGradient} pointerEvents="none" />
{isBountiesVerticalScrollExperimentEnabled ? <ReanimatedRexport.View style={[styles.overlayContent, animatedStyle]} pointerEvents="box-none">
<BountiesEndCardPressableCta bounty={bounty} sourceQuestContent={sourceQuestContent} disabled={!isActive} />
<View style={styles.endedCtaButtonsContainer} pointerEvents="box-none">
<BountiesModalEndedCtaButtons bounty={bounty} visible={visible} sourceQuestContent={sourceQuestContent} onClose={() => {}} showCloseButton={false} disabled={!isActive} />
</View>
</ReanimatedRexport.View> : <Pressable onPress={isActive ? onReplay : void 0} disabled={!isActive} accessibilityRole="button" accessibilityLabel={accessibilityLabel} style={styles.pressable}>
<ReanimatedRexport.View style={[styles.overlayContent, animatedStyle]}>
<View style={styles.textBlock}>
<Text variant="heading-md/semibold" color="text-strong">{bountyCtaInfo.label}</Text>
<Text variant="heading-sm/medium" color="text-default">{accessibilityLabel}</Text>
</View>
<RetryIcon accessible={false} color={Module712.colors.CONTROL_OVERLAY_SECONDARY_TEXT_DEFAULT} style={styles.replayIcon} />
</ReanimatedRexport.View>
</Pressable>}
</ReanimatedRexport.View>;
};
useStyles = createStyles(() => ({
container: {
...StyleSheet.absoluteFillObject
},
backdropTint: {
...StyleSheet.absoluteFillObject,
backgroundColor: "rgba(0, 0, 0, 0.6)"
},
backdropGradient: {
...StyleSheet.absoluteFillObject
},
overlayContent: {
...StyleSheet.absoluteFillObject,
justifyContent: "center",
alignItems: "center"
},
pressable: {
...StyleSheet.absoluteFillObject,
justifyContent: "center",
alignItems: "center"
},
textBlock: {
alignItems: "center",
gap: Module712.space.PX_4
},
replayIcon: {
margin: Module712.space.PX_12
},
endedCtaButtonsContainer: {
position: "absolute",
left: Module712.space.PX_16,
right: Module712.space.PX_16,
bottom: Module712.space.PX_16
}
}));
const r36 = function t(a0) {
return {
opacity: _timing.withTiming(a0, _timingPresets.timingStandard, "respect-motion-settings")
};
};
r36.__closure = {
withTiming: _timing.withTiming,
timingStandard: _timingPresets.timingStandard
};
r36.__workletHash = 12127714049951;
r36.__initData = {
code: "function BountiesScrollEndCardTsx1(visible){const{withTiming,timingStandard}=this.__closure;return{opacity:withTiming(visible,timingStandard,'respect-motion-settings')};}"
};
t = r36;
const r45 = function n(a0, a1) {
return {
opacity: _timing.withTiming(a0, _timingPresets.timingStandard, "respect-motion-settings", a1)
};
};
r45.__closure = {
withTiming: _timing.withTiming,
timingStandard: _timingPresets.timingStandard
};
r45.__workletHash = 7470211880124;
r45.__initData = {
code: "function BountiesScrollEndCardTsx2(visible,cleanUp){const{withTiming,timingStandard}=this.__closure;return{opacity:withTiming(visible,timingStandard,'respect-motion-settings',cleanUp)};}"
};
n = r45;
__initData = {
code: "function BountiesScrollEndCardTsx3(){const{isScrollingInBoundsSharedValue,withTiming,isActive,timingStandard}=this.__closure;var _isScrollingInBoundsS;const isScrollingInBounds=((_isScrollingInBoundsS=isScrollingInBoundsSharedValue)===null||_isScrollingInBoundsS===void 0?void 0:_isScrollingInBoundsS.get())===true;return{opacity:withTiming(isActive&&!isScrollingInBounds?1:0,timingStandard)};}"
};
export default function BountiesScrollEndCard(props) {
const visible = props.visible;
const isBountiesModalTransitionsRefactorEnabled = useIsBountiesModalTransitionsRefactorEnabled(QuestsExperimentLocations.VIDEO_MODAL_MOBILE);
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const callback = useCallback((a0, a1) => <BountiesScrollEndCardContent {...a0} opacityStyle={a1} />, []);
const visibilityTransition = useVisibilityTransition({
visible,
entranceTiming: _timingPresets.timingStandard,
exitTiming: _timingPresets.timingStandard
});
const opacityStyle = visibilityTransition.opacityStyle;
let shouldRender = visibilityTransition.shouldRender;
if (isBountiesModalTransitionsRefactorEnabled) {
shouldRender = <AnimatedEnterExitItem useReducedMotion={stateFromStores} item={visible ? props : void 0} entering={t} exiting={n} renderItem={callback} />;
} else if (shouldRender) {
shouldRender = <BountiesScrollEndCardContent {...props} opacityStyle={opacityStyle} />;
}
return shouldRender;
};