125 lines
5.2 KiB
TypeScript
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} />;
|
|
};
|