Files
discord-decomp/modules/checkout/native/gifting/UnifiedGiftModalDetailsScreen.tsx
T
2026-11-01 12:12:55 +02:00

126 lines
5.0 KiB
TypeScript

// Metro module 8775 (f8776).
import * as Module19 from "react";
import { useState, useCallback, useMemo, useEffect, useRef } from "react";
import { ScrollView, View } from "react-native";
import { AnalyticEvents } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useNavigation } from "../../../../design/components/Navigator/native/useNavigation.native";
import { UnifiedGiftModalScreens } from "./UnifiedGiftModalTypes";
import useAnalyticsLocations from "../../../app_analytics/useAnalyticsLocations";
import useInitialValue from "../../../../hooks/useInitialValue";
import { v4 } from "../../../../_bundle/Module514";
import AnalyticsUtils from "../../../../utils/AnalyticsUtils";
import { useGiftStyles } from "../../../premium/gifting/hooks/useGiftStyles";
import { GiftBackgroundSelect } from "../../../premium/native/gifting/PremiumGiftBackgroundSelect";
import { Text } from "../../../../design/components/Text/native/Text";
import { intl, t } from "../../../../intl/index.native";
import LockedRecipientField from "./LockedRecipientField";
import SelectedUserField from "./SelectedUserField";
import { GiftCustomMessage } from "../../../premium/native/gifting/PremiumGiftCustomMessage";
const useStyles = createStyles({
container: {
flex: 1,
paddingTop: Module712.space.PX_12,
alignItems: "stretch"
},
scrollView: {
paddingBottom: Module712.space.PX_24
},
sectionHeader: {
marginTop: Module712.space.PX_24,
marginBottom: Module712.space.PX_8,
paddingHorizontal: Module712.space.PX_16,
textTransform: "capitalize"
}
});
const r58 = Module19.memo(function({ skuId, applicationId, recipientUser, setRecipientUser, lockedRecipient, validateRecipient, renderProductDetails, renderPurchaseSection }) {
let analyticsLocations, load_id, memo, state, ref, state2, state3;
analyticsLocations = void 0;
load_id = void 0;
memo = void 0;
state = void 0;
ref = void 0;
state2 = void 0;
state3 = void 0;
const styles = useStyles();
const navigation = useNavigation();
const [isValidRecipient, setState] = useState(true);
const [state4, setState2] = useState(false);
const callback2 = useCallback(() => {
navigation.navigate(UnifiedGiftModalScreens.RECIPENT_SELECT);
}, [navigation]);
analyticsLocations = useAnalyticsLocations().analyticsLocations;
load_id = useInitialValue(() => v4());
memo = useMemo(() => ({
is_gift: true,
location_stack: analyticsLocations,
payment_type: "sku",
sku_id: skuId,
application_id: applicationId,
load_id
}), [analyticsLocations, skuId, applicationId, load_id]);
useEffect(() => {
setState(true);
if (recipientUser != null) {
setState2(true);
validateRecipient(recipientUser.id).then((result) => {
setState(result);
}).finally(() => {
setState2(false);
});
}
}, [recipientUser, skuId, validateRecipient]);
useEffect(() => {
AnalyticsUtils.track(AnalyticEvents.PAYMENT_FLOW_STARTED, memo);
AnalyticsUtils.track(AnalyticEvents.PAYMENT_FLOW_LOADED, {
...memo,
initial_step: "gift_customization"
});
}, [memo]);
let setGiftStyle;
[state, setGiftStyle] = useState(useGiftStyles()[0]);
ref = useRef(null);
let setMessagePosition;
[state2, setMessagePosition] = useState(0);
let setCustomGiftMessage;
[state3, setCustomGiftMessage] = useState(void 0);
const callback = useCallback(() => {
setTimeout(() => {
const current = ref.current;
return current == null ? void 0 : current.scrollTo({
y: state2,
animated: true
});
}, 100);
}, [state2]);
const memo2 = useMemo(() => ({
gift_style: state,
recipient_id: recipientUser?.id,
custom_message: state3
}), [state, recipientUser, state3]);
return <View style={styles.container}>
<ScrollView ref={ref} contentContainerStyle={styles.scrollView} showsVerticalScrollIndicator={false}>
<GiftBackgroundSelect giftStyle={state} setGiftStyle={setGiftStyle} withConsistentHeight={false} />
<Text variant="text-sm/semibold" style={styles.sectionHeader}>
{intl.string(t.xFn72s)}
</Text>
{lockedRecipient && recipientUser != null ? <LockedRecipientField user={recipientUser} /> : <SelectedUserField selectedUser={recipientUser} onPress={callback2} setSelectedUser={setRecipientUser} />}
<Text variant="text-sm/semibold" style={styles.sectionHeader}>
{intl.string(t.PpoJzt)}
</Text>
{renderProductDetails({
recipientUser,
isValidRecipient
})}
<GiftCustomMessage onFocusMessage={callback} setMessagePosition={setMessagePosition} customGiftMessage={state3} setCustomGiftMessage={setCustomGiftMessage} />
</ScrollView>
{renderPurchaseSection({
isPurchaseDisabled: recipientUser == null || state4 || !isValidRecipient,
giftOptions: memo2,
baseAnalyticsFields: memo
})}
</View>;
});
export default r58;