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

192 lines
8.5 KiB
TypeScript

// Metro module 14066 (f14067).
import { useCallback } from "react";
import { StyleSheet, View, Pressable } from "react-native";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import { QuestsExperimentLocations } from "../../QuestConstants";
import * as _ReanimatedRexport from "../../../reanimated/ReanimatedRexport";
import ReanimatedRexport, { useSharedValue, useAnimatedStyle } from "../../../reanimated/ReanimatedRexport";
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 { getBountyCtaInfo } from "./BountyCtaHelpers";
import { getScaledImageUrl } from "../../lib/AssetUtils";
import { useButtonPressAnimationProps } from "../../../../design/components/Button/native/ButtonHooks.native";
import { useGetQuestImpressionId } from "../../lib/analytics/ContentImpressionTrackerHooks";
import { openAdGameLinkDirectly } from "../../utils/QuestPlatformUtils";
import { AdCreativeType } from "../../../../_bundle/Module6013";
import { QuestContentCTA } from "../../lib/analytics/AnalyticsTypes";
import { QuestContent } from "../../../../_bundle/Module5038";
import { BackgroundBlurView } from "../../../../design/components/experimental/BackgroundBlurView/native/BackgroundBlurView.native";
import FastImage from "../../../../components_native/common/FastImage";
import { Text } from "../../../../design/components/Text/native/Text";
import { Button } from "../../../../design/components/Button/native/Button.native";
import { useIsBountiesModalTransitionsRefactorEnabled } from "../../experiments/BountiesModalTransitionsRefactorExperiment";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { useVisibilityTransition } from "./useVisibilityTransition";
import AnimatedEnterExitItem from "../../../../design/components/AnimatedEnterExitItem/native/AnimatedEnterExitItem";
let _excluded, AnimatedComponent, useStyles, n, s2, __initData;
const BountiesModalAdvertiserCtaContent = function BountiesModalAdvertiserCtaContent(props) {
const { bounty, sourceQuestContent, opacityStyle, transformStyle } = props;
const styles = useStyles();
const bountyCtaInfo = getBountyCtaInfo(bounty);
const uri = bountyCtaInfo.iconImageUri != null ? getScaledImageUrl({
assetUrl: bountyCtaInfo.iconImageUri,
width: 40,
height: 40
}) : void 0;
const sharedValue = useSharedValue(0);
const buttonPressAnimationProps = useButtonPressAnimationProps(sharedValue);
const { style, ...rest } = buttonPressAnimationProps;
const getQuestImpressionId = useGetQuestImpressionId();
const callback = useCallback((a0) => {
openAdGameLinkDirectly({
adContentId: bounty.id,
adCreativeType: AdCreativeType.BOUNTY,
cta: bounty.cta
}, {
content: a0,
ctaContent: QuestContentCTA.OPEN_GAME_LINK,
impressionId: getQuestImpressionId(),
sourceQuestContent
});
}, [bounty.id, bounty.cta, sourceQuestContent, getQuestImpressionId]);
return <ReanimatedRexport.View style={[styles.outerContainer, opacityStyle, transformStyle]}>
<AnimatedComponent {...rest} onPress={useCallback(() => {
callback(QuestContent.VIDEO_MODAL_MOBILE);
}, [callback])} accessibilityRole="button" accessibilityLabel={bountyCtaInfo.label} style={[styles.ctaPressable, style]}>
<BackgroundBlurView blurTheme="dark" style={styles.cta} pressed={sharedValue}>
<View style={styles.ctaLogoContainer}>
<FastImage source={{
uri
}} style={styles.ctaLogo} resizeMode="cover" />
</View>
<View style={styles.ctaInfo}>
<Text lineClamp={2} variant="text-sm/semibold" color="text-default">{bountyCtaInfo.label}</Text>
<Text variant="text-xs/medium" color="text-default">{bountyCtaInfo.subtext}</Text>
</View>
<View accessible={false} importantForAccessibility="no-hide-descendants">
<Button variant="primary-overlay" text={bountyCtaInfo.buttonLabel} size="sm" onPress={useCallback(() => {
callback(QuestContent.VIDEO_MODAL_MOBILE_FOOTER);
}, [callback])} />
</View>
</BackgroundBlurView>
</AnimatedComponent>
</ReanimatedRexport.View>;
};
_excluded = ["style"];
AnimatedComponent = ReanimatedRexport.createAnimatedComponent(Pressable);
useStyles = createStyles(() => ({
outerContainer: {
position: "absolute",
bottom: 0,
left: 0,
right: 0,
paddingHorizontal: Module712.space.PX_16,
paddingBottom: Module712.space.PX_16,
alignItems: "center"
},
ctaPressable: {
...Module712.shadows.SHADOW_TOP_HIGH,
alignSelf: "stretch",
borderWidth: 1,
borderColor: "transparent",
borderRadius: Module712.radii.lg,
overflow: "hidden"
},
cta: {
flexDirection: "row",
alignItems: "center",
paddingLeft: Module712.space.PX_12,
paddingRight: Module712.space.PX_16,
paddingVertical: Module712.space.PX_12,
gap: Module712.space.PX_12
},
ctaLogoContainer: {
width: 40,
height: 40,
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH,
borderRadius: Module712.radii.md,
overflow: "hidden"
},
ctaLogo: {
...StyleSheet.absoluteFillObject
},
ctaInfo: {
flex: 1,
justifyContent: "center",
gap: 2
}
}));
const r43 = function n(a0) {
return {
opacity: _timing.withTiming(a0, _timingPresets.timingStandard, "respect-motion-settings")
};
};
r43.__closure = {
withTiming: _timing.withTiming,
timingStandard: _timingPresets.timingStandard
};
r43.__workletHash = 2981824910249;
r43.__initData = {
code: "function BountiesModalAdvertiserCtaTsx1(visible){const{withTiming,timingStandard}=this.__closure;return{opacity:withTiming(visible,timingStandard,'respect-motion-settings')};}"
};
n = r43;
const r52 = function(a0, a1) {
return {
opacity: _timing.withTiming(a0, _timingPresets.timingFast, "respect-motion-settings", a1)
};
};
r52.__closure = {
withTiming: _timing.withTiming,
timingFast: _timingPresets.timingFast
};
r52.__workletHash = 15850601331978;
r52.__initData = {
code: "function BountiesModalAdvertiserCtaTsx2(visible,cleanUp){const{withTiming,timingFast}=this.__closure;return{opacity:withTiming(visible,timingFast,'respect-motion-settings',cleanUp)};}"
};
s2 = r52;
__initData = {
code: "function BountiesModalAdvertiserCtaTsx3(){const{withTiming,interpolate,visibility,visible,timingStandard,timingFast}=this.__closure;return{transform:[{translateY:withTiming(interpolate(visibility,[0,1],[8,0]),visible?timingStandard:timingFast)}]};}"
};
export default function BountiesModalAdvertiserCta(props) {
let c20882_1, animatedStyle;
const { visible, ...props2 } = props;
c20882_1 = void 0;
animatedStyle = void 0;
const isBountiesModalTransitionsRefactorEnabled = useIsBountiesModalTransitionsRefactorEnabled(QuestsExperimentLocations.VIDEO_MODAL_MOBILE);
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const visibility = visible ? 1 : 0;
c20882_1 = visibility;
const r32 = () => ({
transform: [{
translateY: _timing.withTiming(_ReanimatedRexport.interpolate(c20882_1, [0, 1], [8, 0]), visible ? _timingPresets.timingStandard : _timingPresets.timingFast)
}]
});
r32.__closure = {
withTiming: _timing.withTiming,
interpolate: _ReanimatedRexport.interpolate,
visibility,
visible,
timingStandard: _timingPresets.timingStandard,
timingFast: _timingPresets.timingFast
};
r32.__workletHash = 252868467367;
r32.__initData = __initData;
animatedStyle = useAnimatedStyle(r32);
const callback2 = useCallback((a0, a1) => <BountiesModalAdvertiserCtaContent {...a0} opacityStyle={a1} transformStyle={animatedStyle} />, [animatedStyle]);
const visibilityTransition = useVisibilityTransition({
visible,
entranceTiming: _timingPresets.timingStandard,
exitTiming: _timingPresets.timingFast
});
const opacityStyle = visibilityTransition.opacityStyle;
let shouldRender = visibilityTransition.shouldRender;
if (isBountiesModalTransitionsRefactorEnabled) {
shouldRender = <AnimatedEnterExitItem useReducedMotion={stateFromStores} item={visible ? props2 : void 0} entering={n} exiting={s2} renderItem={callback2} />;
} else if (shouldRender) {
shouldRender = <BountiesModalAdvertiserCtaContent {...props2} opacityStyle={opacityStyle} transformStyle={animatedStyle} />;
}
return shouldRender;
};