Files
discord-decomp/components_native/add_friend/AddFriendModal.tsx
T
2026-11-01 12:12:55 +02:00

125 lines
5.2 KiB
TypeScript

// Metro module 12991 (f12992).
import { useState, useCallback, useLayoutEffect, useMemo } from "react";
import { ScrollView, View } from "react-native";
import UserStore from "../../stores/UserStore";
import { AnalyticEvents, Fonts } from "../../Constants";
import { ContactPermissions } from "../../modules/contact_sync/native/ContactSyncConstants";
import { createStyles } from "../../design/components/Styles/native/createStyles";
import TextStyles from "../../modules/rebrand/native/TextStyles";
import Module712 from "../../_bundle/Module712";
import { useContactSyncAccount, isContactSyncEnabled, checkContactPermissions } from "../../modules/contact_sync/native/ContactSyncUtils";
import useMountEffect from "../../hooks/useMountEffect";
import AnalyticsUtils from "../../utils/AnalyticsUtils";
import { isAndroid } from "../../utils/PlatformUtils";
import { useNavigation } from "../../_bundle/Module1483";
import ModalActionCreators from "../../actions/ModalActionCreators";
import UserUtils from "../../utils/UserUtils";
import { intl, t } from "../../intl/index.native";
import { showShareActionSheet } from "../../modules/action_sheet/native/showShareActionSheet";
import { HeaderActionButton } from "../../design/components/Navigator/native/HeaderActionButton.native";
import Module12992 from "../../_bundle/Module12992";
import { getHeaderCloseButton } from "../../design/components/Navigator/native/NavigatorHeader.native";
import { Text } from "../../design/components/Text/native/Text";
import AddFriendById from "../../modules/main_tabs_v2/native/friends/screens/AddFriendById";
import ContactSyncUpsellCTA from "../../modules/contact_sync/native/components/ContactSyncUpsellCTA";
import useSafeAreaInsets_native from "../../modules/safe_area/useSafeAreaInsets.native";
import { Navigator } from "../../design/components/Navigator/native/Navigator.native";
let useStyles;
const AddFriendModalScene = function AddFriendModalScene(props) {
let navigation, callback, callback2;
const { onSkip, sourceMetadata } = props;
navigation = void 0;
callback = void 0;
callback2 = void 0;
const styles = useStyles();
const contactSyncAccount = useContactSyncAccount();
const [state, setState] = useState(!isContactSyncEnabled(contactSyncAccount));
useMountEffect(() => {
AnalyticsUtils.track(AnalyticEvents.FRIEND_ADD_VIEWED, sourceMetadata);
checkContactPermissions().then((result) => {
const NOT_DETERMINED = ContactPermissions.NOT_DETERMINED;
const r11 = isAndroid() && result === ContactPermissions.UNAUTHORIZED;
setState(result === NOT_DETERMINED || r11 || !isContactSyncEnabled(contactSyncAccount));
});
});
navigation = useNavigation();
callback = useCallback(() => {
if (onSkip != null) {
onSkip();
}
ModalActionCreators.pop();
}, [onSkip]);
callback2 = useCallback(() => {
const currentUser = UserStore.getCurrentUser();
const username = currentUser != null ? UserUtils.getUserTag(currentUser) : void 0;
AnalyticsUtils.track(AnalyticEvents.FRIEND_ADD_VIEWED, {
friend_add_type: "Invite",
source_page: "Add Friend Modal"
});
showShareActionSheet({
message: intl.formatToPlainString(t["6E9a1J"], {
url: "https://discord.com/",
username
})
}, "Add Friend Modal");
}, []);
useLayoutEffect(() => {
navigation.setOptions({
headerRight: () => <HeaderActionButton source={Module12992} onPress={callback2} accessibilityLabel={intl.string(t.RDE0Sc)} />,
headerLeft: getHeaderCloseButton(callback)
});
}, [callback, callback2, navigation]);
return <ScrollView keyboardShouldPersistTaps="handled">
<Text style={styles.headerText} accessibilityRole="header" variant="heading-xl/extrabold" color="mobile-text-heading-primary">
{intl.string(t.GWMTSE)}
</Text>
<Text style={styles.subheaderText} variant="text-sm/medium" color="text-default">
{intl.string(t["Rn/sLl"])}
</Text>
<AddFriendById style={styles.input} autoFocusInput={false} />
<View style={styles.otherOptionsContainer}>
<Text accessibilityRole="header" variant="eyebrow" color="text-default">
{intl.string(t.dukg0Z)}
</Text>
{state ? <ContactSyncUpsellCTA style={styles.rowContainer} location="Add Friend Modal" /> : null}
</View>
</ScrollView>;
};
useStyles = createStyles({
headerText: {
...TextStyles(Fonts.DISPLAY_EXTRABOLD, Module712.colors.MOBILE_TEXT_HEADING_PRIMARY, 24),
marginTop: 32,
marginHorizontal: 16,
textAlign: "center"
},
subheaderText: {
lineHeight: 18,
marginVertical: 8,
marginHorizontal: 16,
textAlign: "center"
},
input: {
marginTop: 16
},
otherOptionsContainer: {
marginTop: 16,
paddingHorizontal: 16
},
rowContainer: {
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH,
marginTop: 8
}
});
export default function AddFriendModal(props) {
const initialParams = props;
const top = useSafeAreaInsets_native().top;
return <Navigator screens={useMemo(() => ({
ADD_FRIEND: {
ignoreKeyboard: true,
title: intl.string(t.w5uwoI),
initialParams,
render: (a0) => <AddFriendModalScene {...a0} />
}
}), [props])} initialRouteName="ADD_FRIEND" headerStatusBarHeight={top} />;
};