This commit is contained in:
janisslsm committed 2026-11-01 12:12:55 +02:00
1 parent 1781d25a15
commit 732c0ad767
33051 files changed
+2591613 -3019689

No files matched your search

@@ -0,0 +1,147 @@
// Metro module 11848 (f11849).
import { useState, useLayoutEffect, useCallback } from "react";
import { ScrollView, View } from "react-native";
import GuildChannelStore from "../../../../stores/GuildChannelStore";
import GuildStore from "../../../../stores/GuildStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { NAV_BAR_HEIGHT } from "../../../../design/components/Navigator/native/NavigatorConstants.native";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { useNavigation } from "../../../../design/components/Navigator/native/useNavigation.native";
import { getHeaderBackButton, getHeaderTextButton } from "../../../../design/components/Navigator/native/NavigatorHeader.native";
import { intl, t } from "../../../../intl/index.native";
import ChannelActionCreators from "../../../../actions/ChannelActionCreators";
import { APIError } from "../../../../errors/index";
import { SafeAreaPaddingView } from "../../../../components_native/common/SafeAreaView";
import GuildIcon from "../../../guild/native/GuildIcon";
import AvatarUtils from "../../../../utils/AvatarUtils";
import { Text } from "../../../../design/components/Text/native/Text";
import FreeFormInputGroup from "../../../../design/void/Form/native/FreeFormInputGroup";
import { Button } from "../../../../design/components/Button/native/Button.native";
import FreeFormErrorLabel from "../../../../design/void/Form/native/FreeFormErrorLabel";
const useStyles = createStyles({
flex: {
flex: 1
},
safePadding: {
marginTop: NAV_BAR_HEIGHT,
flex: 1
},
contentContainer: {
paddingHorizontal: 16
},
guildIcon: {
alignSelf: "center"
},
guildName: {
marginTop: 8,
textAlign: "center"
},
title: {
marginTop: 16,
textAlign: "center"
},
subTitle: {
marginTop: 8,
textAlign: "center"
},
topicInput: {
marginTop: 24
},
buttonWrapper: {
marginTop: 8
},
error: {
marginTop: 4
}
});
export default function ChannelPrompt(props) {
let state, setState, setState2, navigation;
const { guildId, buttonText, hasBack, hasSkip, onCancel, onSuccess } = props;
state = void 0;
setState = void 0;
setState2 = void 0;
navigation = void 0;
const styles = useStyles();
const stateFromStores = useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId));
let onChangeText;
[state, onChangeText] = useState("");
let loading;
[loading, setState] = useState(false);
let state2;
[state2, setState2] = useState(null);
navigation = useNavigation();
useLayoutEffect(() => {
navigation.setOptions({
headerLeft: hasBack ? getHeaderBackButton(onCancel) : () => null,
headerRight: hasSkip ? getHeaderTextButton(intl.string(t["5Wxrcd"]), onSuccess) : () => null
});
}, [navigation, hasBack, hasSkip, onCancel, onSuccess]);
const callback = useCallback(async () => {
let c27196_2;
let c27196_3 = 0;
let c30470_0;
L12: {
try {
setState2(null);
setState(true);
const defaultChannel = GuildChannelStore.getDefaultChannel(guildId);
c27196_3 = 1;
await ChannelActionCreators.createTextChannel(guildId, state, defaultChannel?.parent_id, intl.formatToPlainString(t.V4lepJ, {
topic: state
}));
(0, onSuccess)();
c27196_3 = 0;
(0, setState)(false);
} catch ($e) {
const r34 = $e;
let r7 = r34;
c27196_2 = r34;
if (c27196_3 !== 0) {
while (true) {
try {
const r94 = c27196_2;
c27196_3 = 0;
c30470_0 = r94;
setState2(new APIError(c30470_0));
(0, setState)(false);
break L12;
} catch (r90) {
r7 = r90;
c27196_2 = r90;
if (c27196_3 === 0) {
break;
}
}
}
}
throw r7;
}
}
}, [guildId, onSuccess, state]);
return stateFromStores == null ? null : <SafeAreaPaddingView top style={styles.safePadding}>
<ScrollView style={styles.flex} contentInset={{
top: 0
}} automaticallyAdjustContentInsets={false} keyboardShouldPersistTaps="handled" alwaysBounceVertical={false} contentContainerStyle={styles.contentContainer}>
<GuildIcon style={styles.guildIcon} value={stateFromStores.name} icon={stateFromStores.icon != null ? AvatarUtils.getGuildIconURL({
id: stateFromStores.id,
icon: stateFromStores.icon,
canAnimate: true,
size: 128
}) : null} selected />
<Text style={styles.guildName} lineClamp={1} variant="text-sm/semibold" color="mobile-text-heading-primary">{stateFromStores.name}</Text>
<Text style={styles.title} accessibilityRole="header" variant="heading-xl/extrabold" color="mobile-text-heading-primary">
{intl.string(t["8VRa7d"])}
</Text>
<Text style={styles.subTitle} variant="text-sm/medium" color="text-default">
{intl.string(t["+855Pm"])}
</Text>
<FreeFormInputGroup style={styles.topicInput} label={intl.string(t.bY20tU)} value={state} error={state2 == null ? void 0 : state2.getFirstFieldErrorMessage("name")} onChangeText={onChangeText} onSubmitEditing={callback} maxLength={100} placeholder={intl.string(t.xGOYA8)} returnKeyType="done" autoFocus />
<View style={styles.buttonWrapper}>
<Button size="md" text={buttonText} onPress={callback} loading={loading} disabled={loading} grow />
</View>
{(state2 == null ? void 0 : state2.hasFieldErrors()) ? <FreeFormErrorLabel style={styles.error}>
{state2 == null ? void 0 : state2.getAnyErrorMessage()}
</FreeFormErrorLabel> : null}
</ScrollView>
</SafeAreaPaddingView>;
};
@@ -0,0 +1,100 @@
// Metro module 16279 (f16280).
import { useRef, useEffect } from "react";
import { View } from "react-native";
import { AnalyticEvents } from "../../../../Constants";
import { FamilyCenterAction } from "../../../parent_tools/FamilyCenterConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import { useConnectGuardianGate } from "../../../parent_tools/hooks/useConnectGuardianGate";
import AnalyticsUtils from "../../../../utils/AnalyticsUtils";
import { ActivityIndicator } from "../../../../design/components/ActivityIndicator/native/ActivityIndicator.native";
import { Text } from "../../../../design/components/Text/native/Text";
import { intl, t } from "../../../../intl/index.native";
import FamilyCenter_messages from "../../../parent_tools/FamilyCenter.messages";
import { ConnectGuardianCard } from "../../../parent_tools/native/ConnectGuardianCard";
import { Button } from "../../../../design/components/Button/native/Button.native";
const useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
},
centered: {
flex: 1,
alignItems: "center",
justifyContent: "center",
paddingHorizontal: Module712.space.PX_16
},
header: {
marginBottom: Module712.space.PX_40
},
title: {
paddingHorizontal: Module712.space.PX_16,
marginBottom: Module712.space.PX_8,
textAlign: "center"
},
description: {
paddingHorizontal: Module712.space.PX_16,
textAlign: "center"
},
cardSection: {
alignItems: "center"
},
scanPrompt: {
paddingHorizontal: Module712.space.PX_16,
marginBottom: Module712.space.PX_24,
textAlign: "center"
},
grow: {
flexGrow: 1
},
footer: {
paddingHorizontal: Module712.space.PX_16
}
});
export default function ConnectGuardianModal(props) {
const route = props.route;
const onComplete = route.params.onComplete;
const styles = useStyles();
const bottom = useSafeAreaInsets_native().bottom;
const connectGuardianGate = useConnectGuardianGate();
const ref = useRef(false);
useEffect(() => {
if (!(connectGuardianGate.state !== "error" || ref.current)) {
ref.current = true;
AnalyticsUtils.track(AnalyticEvents.FAMILY_CENTER_ACTION, {
action: FamilyCenterAction.NufConsentGateLinkCodeError,
source: "NUF Connect Guardian"
});
if (onComplete != null) {
onComplete(true);
}
}
}, [connectGuardianGate.state, onComplete]);
return connectGuardianGate.state !== "gate" ? <View style={[styles.container, styles.centered]}>
<ActivityIndicator />
</View> : <View style={styles.container}>
<View style={styles.header}>
<Text style={styles.title} variant="heading-xl/bold" color="text-default">
{intl.string(FamilyCenter_messages.ITlV6p)}
</Text>
<Text style={styles.description} variant="text-sm/medium" color="text-muted">
{intl.format(FamilyCenter_messages.F4GT2S, {
link: "https://support.discord.com/hc/articles/14155060633623"
})}
</Text>
</View>
<View style={styles.cardSection}>
<Text style={styles.scanPrompt} variant="text-md/semibold" color="text-default">
{intl.string(FamilyCenter_messages.Mi60fm)}
</Text>
<ConnectGuardianCard shareActions="compact" linkCode={connectGuardianGate.linkCode} expiresAt={connectGuardianGate.expiresAt} onRefresh={connectGuardianGate.refresh} />
</View>
<View style={styles.grow} />
<View style={[styles.footer, {
paddingBottom: bottom + Module712.space.PX_16
}]}>
<Button variant="primary" size="lg" text={intl.string(t["3PatSz"])} onPress={() => onComplete == null ? void 0 : onComplete(false)} />
</View>
</View>;
};
@@ -0,0 +1,79 @@
// Metro module 11852 (f11853).
import { useCallback } from "react";
import { View } from "react-native";
import { setAllowEmail, setAllowPhone, setAllowSync, useContactSyncModalStore } from "../../../contact_sync/native/ContactSyncModalStore";
import { Fonts } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { FormRow, FormText, FormTitle } from "../../../../design/void/Form/native/index";
import { intl, t } from "../../../../intl/index.native";
import { Text } from "../../../../design/components/Text/native/Text";
import { handleOpenLearnMoreLink } from "../../../contact_sync/native/ContactSyncUtils";
import { ActionSheet } from "../../../../design/components/Sheet/native/ActionSheet.native";
const useStyles = createStyles({
container: {
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
paddingBottom: 16
},
formRow: {
marginTop: 8,
paddingVertical: 16,
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH
},
syncRow: {
marginTop: 24
},
formText: {
fontFamily: Fonts.PRIMARY_SEMIBOLD,
color: Module712.colors.INTERACTIVE_TEXT_ACTIVE
},
info: {
marginTop: 8,
fontSize: 14,
lineHeight: 18,
paddingHorizontal: 16,
color: Module712.colors.TEXT_SUBTLE
}
});
export default function DiscoverabilityActionSheet() {
const styles = useStyles();
const contactSyncModalStore = useContactSyncModalStore();
const { allowPhone, allowEmail } = contactSyncModalStore;
const allowEmail2 = allowPhone ? allowPhone : allowEmail;
const callback = useCallback(() => {
setAllowSync(!allowEmail2);
}, [allowEmail2]);
const callback3 = useCallback(() => {
setAllowPhone(!allowPhone);
}, [allowPhone]);
const callback2 = useCallback(() => {
setAllowEmail(!allowEmail);
}, [allowEmail]);
return <ActionSheet startExpanded>
<View style={styles.container}>
<FormRow DEPRECATED_style={[styles.formRow, styles.syncRow]} label={<FormRow.Label style={styles.formText} text={intl.string(t.gMUgpv)} />} onPress={callback} trailing={<FormRow.Checkbox selected={allowEmail2} />} />
<FormText style={styles.info}>
{intl.string(t.pfjsB5)}
</FormText>
<FormText style={styles.info}>
{intl.string(t.cW1nr9)}
</FormText>
<FormText style={styles.info}>
{intl.format(t.eswIfi, {
learnMoreHook: function learnMoreHook(a0, a1) {
return <Text key={a1} onPress={handleOpenLearnMoreLink} variant="text-sm/medium" color="text-link">
{a0}
</Text>;
}
})}
</FormText>
<FormTitle title={intl.string(t["0t2wRW"])} thinTitle />
<FormRow DEPRECATED_style={styles.formRow} label={<FormRow.Label style={styles.formText} text={intl.string(t["eJnn0+"])} />} subLabel={<Text variant="text-sm/medium" color="text-default">
{intl.string(t.X7pIKN)}
</Text>} onPress={callback3} trailing={<FormRow.Checkbox selected={allowPhone} />} />
<FormRow DEPRECATED_style={styles.formRow} label={<FormRow.Label style={styles.formText} text={intl.string(t.dI4d4S)} />} subLabel={<Text variant="text-sm/medium" color="text-default">
{intl.string(t.ilGsHE)}
</Text>} onPress={callback2} trailing={<FormRow.Checkbox selected={allowEmail} />} />
</View>
</ActionSheet>;
};
@@ -0,0 +1,123 @@
// Metro module 11851 (f11852).
import { useCallback } from "react";
import { ScrollView, View } from "react-native";
import { useContactSyncModalStore } from "../../../contact_sync/native/ContactSyncModalStore";
import { Fonts } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import TextStyles from "../../../rebrand/native/TextStyles";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import { NAV_BAR_HEIGHT } from "../../../../design/components/Navigator/native/NavigatorConstants.native";
import FastImage from "../../../../components_native/common/FastImage";
import Module11853 from "../../../../_bundle/Module11853";
import { Text } from "../../../../design/components/Text/native/Text";
import { intl, t } from "../../../../intl/index.native";
import { FormRow, FormCheckboxRow } from "../../../../design/void/Form/native/index";
import { toggleDiscoverabilityForUser } from "../NUFActionCreators";
import { Button } from "../../../../design/components/Button/native/Button.native";
const useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
},
headerContainer: {
flexGrow: 0,
justifyContent: "center",
marginBottom: 24
},
header: {
paddingHorizontal: 16,
alignItems: "center"
},
image: {
width: "100%",
marginHorizontal: 0
},
button: {
flexGrow: 0,
marginHorizontal: 16,
marginBottom: 24
},
title: {
textAlign: "center",
marginTop: 16
},
subtitle: {
textAlign: "center",
marginTop: 8
},
formRow: {
paddingVertical: 16,
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH
},
formText: {
...TextStyles(Fonts.PRIMARY_SEMIBOLD, Module712.colors.INTERACTIVE_TEXT_ACTIVE, 16)
},
footerContainer: {
flexGrow: 1,
width: "100%"
},
info: {
paddingHorizontal: 16,
marginTop: 8,
marginBottom: 24
}
});
export default function DiscoverabilityLanding(props) {
const styles = useStyles();
const onNext = props.onNext;
const contactSyncModalStore = useContactSyncModalStore();
let allowEmail2 = contactSyncModalStore.allowEmail;
const allowEmail = allowEmail2;
const allowPhone = contactSyncModalStore.allowPhone;
const bottom = useSafeAreaInsets_native().bottom;
const callback = useCallback(() => {
ActionSheetActionCreators.openLazy(import("./DiscoverabilityActionSheet"), "Discoverability Landing", {
allowPhone,
allowEmail
});
}, [allowPhone, allowEmail]);
const r82 = [<View style={styles.headerContainer}>
<View style={styles.header}>
<FastImage resizeMode="contain" style={styles.image} source={Module11853} />
<Text style={styles.title} accessibilityRole="header" variant="heading-xl/extrabold" color="mobile-text-heading-primary">
{intl.string(t.n8nw6j)}
</Text>
<Text style={styles.subtitle} variant="text-sm/medium" color="text-subtle">
{intl.string(t.KMW0kP)}
</Text>
</View>
</View>, ,];
const props2 = {
DEPRECATED_style: styles.formRow,
label: <FormRow.Label style={styles.formText} text={intl.string(t.gMUgpv)} />,
onPress: toggleDiscoverabilityForUser,
selected: null
};
if (!allowEmail) {
allowEmail2 = allowPhone;
}
props2.selected = allowEmail2;
r82[1] = <View style={styles.footerContainer}>
<FormCheckboxRow {...props2} />
<Text style={styles.info} variant="heading-deprecated-12/medium" color="text-default">
{intl.string(t["DGZg+k"])}
{" "}
{intl.format(t.QmF5z4, {
learnMoreHook: function learnMoreHook(a0, a1) {
return <Text key={a1} onPress={callback} variant="text-sm/medium" color="text-link">
{a0}
</Text>;
}
})}
</Text>
<View style={styles.button}>
<Button text={intl.string(t.PDTjLN)} onPress={() => onNext()} grow />
</View>
</View>;
return <ScrollView style={styles.container} contentContainerStyle={{
paddingTop: NAV_BAR_HEIGHT + 32,
paddingBottom: bottom + 16
}}>{r82}</ScrollView>;
};
@@ -0,0 +1,95 @@
// Metro module 11850 (f11851).
import { useCallback, useEffect, useMemo } from "react";
import { View } from "react-native";
import { useContactSyncModalStore } from "../../../contact_sync/native/ContactSyncModalStore";
import UserStore from "../../../../stores/UserStore";
import { ModalAnimation } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { NAV_BAR_HEIGHT } from "../../../../design/components/Navigator/native/NavigatorConstants.native";
import { useNavigation } from "../../../../design/components/Navigator/native/useNavigation.native";
import { useStateFromStores } from "../../../../_bundle/Module589";
import ContactSyncActionCreators from "../../../contact_sync/native/ContactSyncActionCreators";
import { DiscoverabilityScenes } from "../../../../ConstantsIOS";
import { closeDiscoverabilityModal, startContactSyncForDiscoverability } from "../NUFActionCreators";
import DiscoverabilityLanding from "./DiscoverabilityLanding";
import ContactSyncNameInput from "../../../contact_sync/native/components/ContactSyncNameInput";
import { ImpressionNames } from "../../../../_bundle/Module503";
import { Navigator } from "../../../../design/components/Navigator/native/Navigator.native";
import { intl, t } from "../../../../intl/index.native";
let useStyles, DiscoverabilityNameScene;
const DiscoverabilityLandingScene = function DiscoverabilityLandingScene() {
let allowPhone, allowEmail, allowEmail2;
const navigation = useNavigation();
const stateFromStores = useStateFromStores([UserStore], () => UserStore.getCurrentUser()?.phone);
const contactSyncModalStore = useContactSyncModalStore();
allowPhone = contactSyncModalStore.allowPhone;
allowEmail = contactSyncModalStore.allowEmail;
allowEmail2 = allowPhone ? allowPhone : allowEmail;
return <DiscoverabilityLanding onNext={useCallback(() => {
ContactSyncActionCreators.updateDiscoverability({
phone: allowPhone,
email: allowEmail
});
if (allowEmail2 && (stateFromStores != null && allowPhone)) {
navigation.push(DiscoverabilityScenes.NAME);
} else {
closeDiscoverabilityModal(false);
}
}, [navigation, stateFromStores, allowEmail, allowPhone, allowEmail2])} />;
};
DiscoverabilityNameScene = function DiscoverabilityNameScene() {
const styles = useStyles();
const contactSyncModalStore = useContactSyncModalStore();
let name = contactSyncModalStore.name;
const allowPhone2 = contactSyncModalStore.allowPhone;
useEffect(() => {
if (!allowPhone2) {
closeDiscoverabilityModal(false);
}
}, [allowPhone2]);
const callback = useCallback((a0) => {
startContactSyncForDiscoverability(a0);
closeDiscoverabilityModal(false);
}, []);
if (name == null) {
name = "";
}
return <View style={styles.container}>
<ContactSyncNameInput onNext={callback} loading={false} initialName={name} />
</View>;
};
const DiscoverabilityModal = function DiscoverabilityModal() {
return <Navigator screens={useMemo(() => {
const r1 = {};
r1[DiscoverabilityScenes.LANDING] = {
ignoreKeyboard: true,
impressionName: ImpressionNames.DISCOVERABILITY,
fullscreen: true,
headerLeft: () => null,
headerTitle: () => null,
render: () => <DiscoverabilityLandingScene />
};
r1[DiscoverabilityScenes.NAME] = {
ignoreKeyboard: true,
impressionName: ImpressionNames.DISCOVERABILITY,
fullscreen: true,
headerTitle: () => null,
render: () => <DiscoverabilityNameScene />
};
return r1;
}, [])} initialRouteName={DiscoverabilityScenes.LANDING} headerBackTitle={intl.string(t["13/7kX"])} />;
};
useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
justifyContent: "center",
paddingBottom: 44,
paddingTop: NAV_BAR_HEIGHT + 32
}
});
DiscoverabilityModal.modalConfig = {
animation: ModalAnimation.SLIDE_IN_OUT
};
export default DiscoverabilityModal;
@@ -0,0 +1,130 @@
// Metro module 11797 (f11798).
import { useMemo } from "react";
import { Keyboard } from "react-native";
import DefaultRouteStore from "../../../../stores/DefaultRouteStore";
import { AnalyticEvents, AnalyticsSections, NOOP } from "../../../../Constants";
import { GuildTemplateId } from "../../../create_guild/CreateGuildConstants";
import { CreateGuildModalStates, GuildTemplateTriggers, NUXGuildTemplatesAnalytics } from "../../../create_guild/native/CreateGuildConstants";
import GuildActionCreators from "../../../../actions/GuildActionCreators";
import { createGuildProgress } from "../../../guild_progress/native/GuildProgressUtils";
import navigateToLastChannel from "../../../main_tabs_v2/native/navigateToLastChannel";
import CreateGuildModalActionCreators from "../../../create_guild/native/CreateGuildModalActionCreators";
import { showInstantInviteModal } from "../../../../actions/native/CreateGuildActionCreators";
import AnalyticsUtils from "../../../../utils/AnalyticsUtils";
import { ImpressionGroups, ImpressionNames } from "../../../../_bundle/Module503";
import { getHeaderCloseButton } from "../../../../design/components/Navigator/native/NavigatorHeader.native";
import { trackNUFStep } from "../NewUserAnalyticsUtils";
import { transitionTo } from "../../../routing/router_utils";
import GuildTemplates from "../../../create_guild/native/components/GuildTemplates";
import CreationIntent from "../../../create_guild/native/components/CreationIntent";
import CreateGuildContainer from "../../../create_guild/native/components/CreateGuildContainer";
import { intl, t } from "../../../../intl/index.native";
import JoinServer from "../../../create_guild/native/components/JoinServer";
import AcceptInviteContainer from "../../../create_guild/native/components/AcceptInviteContainer";
import ChannelPrompt from "./ChannelPrompt";
import HubEmailConnectionModal from "../../../hub/native/components/HubEmailConnectionModal";
import { Navigator } from "../../../../design/components/Navigator/native/Navigator.native";
let _onCreateServer, impressionProperties;
const onCreateGuild = async function onCreateGuild(c27170_0) {
let c27170_2;
c27170_2 = void 0;
let c30453_0 = c27170_0;
await GuildActionCreators.transitionToGuildSync(c27170_0);
createGuildProgress(c30453_0);
navigateToLastChannel();
CreateGuildModalActionCreators.closeCreateGuildOnboardingModal();
showInstantInviteModal(c30453_0);
AnalyticsUtils.track(AnalyticEvents.USER_FLOW_TRANSITION, {
flow_type: AnalyticsSections.GUILD_CREATE_MODAL,
from_step: CreateGuildModalStates.CREATE_SERVER,
to_step: "modal_closed"
});
};
_onCreateServer = function _onCreateServer() {
const r8 = async (c27171_0, guildId, c27171_2) => {
L12: {
if (c27171_2.id !== GuildTemplateId.CREATE) {
await onCreateGuild(guildId);
break L12;
}
c27171_0.push(CreateGuildModalStates.CHANNEL_PROMPT, {
guildId
});
return void 0;
}
};
_onCreateServer = r8;
return r8.apply(this, arguments);
};
impressionProperties = {
impression_group: ImpressionGroups.GUILD_ADD_FLOW
};
export default function NUFGuildTemplates() {
return <Navigator screens={useMemo(() => {
const r1 = {};
r1[CreateGuildModalStates.GUILD_TEMPLATES] = {
impressionName: ImpressionNames.GUILD_ADD_LANDING,
impressionProperties,
fullscreen: true,
headerTitle: () => null,
headerLeft: getHeaderCloseButton(() => {
trackNUFStep(NUXGuildTemplatesAnalytics.STEP_GUILD_TEMPLATE, NUXGuildTemplatesAnalytics.STEP_FRIEND_LIST, {
skip: true
});
transitionTo(DefaultRouteStore.fallbackRoute);
CreateGuildModalActionCreators.closeCreateGuildOnboardingModal();
}),
render: () => <GuildTemplates trigger={GuildTemplateTriggers.NUF} />
};
r1[CreateGuildModalStates.CREATION_INTENT] = {
impressionName: ImpressionNames.GUILD_ADD_INTENT_SELECTION,
impressionProperties,
fullscreen: true,
headerTitle: () => null,
render: (a0) => <CreationIntent guildTemplate={a0.guildTemplate} trigger={GuildTemplateTriggers.NUF} />
};
r1[CreateGuildModalStates.CREATE_SERVER] = {
impressionName: ImpressionNames.GUILD_ADD_CUSTOMIZE,
impressionProperties,
fullscreen: true,
headerTitle: () => null,
render: (a0, c27172_1) => {
return <CreateGuildContainer {...a0} onCreate={(event) => (function onCreateServer() {
return _onCreateServer.apply(this, arguments);
})(c27172_1, event.guild.id, a0.guildTemplate)} customTitle={intl.string(t["5HZu07"])} />;
}
};
r1[CreateGuildModalStates.JOIN_SERVER] = {
impressionName: ImpressionNames.GUILD_ADD_JOIN,
impressionProperties,
fullscreen: true,
headerTitle: () => null,
render: () => <JoinServer location="Onboarding Join Guild Modal" onClose={CreateGuildModalActionCreators.closeCreateGuildModal} />
};
r1[CreateGuildModalStates.ACCEPT_INVITE] = {
impressionName: ImpressionNames.GUILD_ADD_ACCEPT_INVITE,
impressionProperties,
fullscreen: true,
headerTitle: () => null,
headerLeft: () => null,
render: (a0) => <AcceptInviteContainer code={a0.code} onPressClose={CreateGuildModalActionCreators.closeCreateGuildModal} />
};
r1[CreateGuildModalStates.CHANNEL_PROMPT] = {
impressionName: ImpressionNames.GUILD_ADD_CHANNEL_PROMPT,
impressionProperties,
fullscreen: true,
headerTitle: () => null,
render: ({ guildId: guildId2 }) => <ChannelPrompt hasSkip hasBack={false} onCancel={NOOP} onSuccess={() => onCreateGuild(guildId2)} guildId={guildId2} buttonText={intl.string(t["uHXB+F"])} />
};
r1[CreateGuildModalStates.JOIN_STUDENT_HUB] = {
impressionName: void 0,
impressionProperties,
fullscreen: true,
ignoreKeyboard: true,
headerTitle: () => null,
headerLeft: () => null,
render: () => <HubEmailConnectionModal isNestedNavigator />
};
return r1;
}, [])} onWillFocus={Keyboard.dismiss} headerBackTitle={intl.string(t["13/7kX"])} initialRouteName={CreateGuildModalStates.GUILD_TEMPLATES} />;
};
@@ -0,0 +1,98 @@
// Metro module 16274 (f16275).
import { useState, useRef, useCallback, lazy } from "react";
import { NativeModules } from "react-native";
import { jsx } from "react/jsx-runtime";
import { createNativeStackNavigator } from "../../../../_bundle/Module9109";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { openAlert } from "../../../../design/components/AlertModal/native/useAlertStore.native";
import { useAccessibilityNativeStackOptions } from "../../../../design/components/Navigator/native/Navigator.native";
import { getNextOnboardingStep, continueToNextStep } from "../NewUserUtils";
import ModalActionCreators from "../../../../actions/ModalActionCreators";
import { NEW_USER_MODAL_KEY } from "./NewUserModalTypes";
import { useNavigatorBackPressHandler } from "../../../../design/components/Navigator/native/useNavigatorBackPressHandler.native";
import { isAndroid } from "../../../../utils/PlatformUtils";
import { RedesignNotificationScreen } from "./notification/RedesignNotificationModal";
import * as _RedesignAddAvatarModal from "../../../avatar/native/components/RedesignAddAvatarModal";
import SkipHeaderButton from "./SkipHeaderButton";
import { ContactSyncOnboardingModal } from "../../../contact_sync/native/components/RedesignContactSyncModal";
import * as _RedesignDiscoverabilityModal from "./RedesignDiscoverabilityModal";
import * as _ConnectGuardianModal from "./ConnectGuardianModal";
const nativeStackNavigator = createNativeStackNavigator();
const useStyles = createStyles({
header: {
borderBottomWidth: 0,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
shadowColor: "transparent"
}
});
export default function NewUserModal(props) {
let initialRouteName = props.initialRouteName;
const initialOnboardingStepIndex = props.initialOnboardingStepIndex;
const styles = useStyles();
const [state, setState] = useState(initialOnboardingStepIndex);
const [state2, setState2] = useState(initialOnboardingStepIndex);
const ref = useRef(null);
const accessibilityNativeStackOptions = useAccessibilityNativeStackOptions();
const callback = useCallback((a0) => {
getNextOnboardingStep(a0 == null ? false : a0, state2, state).then(({ lastShownStepIndex, onboardingStepIndex, continueNavigation }) => {
setState(onboardingStepIndex);
setState2(lastShownStepIndex);
if (continueNavigation && ref.current != null) {
continueToNextStep(onboardingStepIndex, ref.current);
} else {
ModalActionCreators.popWithKey(NEW_USER_MODAL_KEY);
}
});
}, [state2, state]);
useNavigatorBackPressHandler(() => {
NativeModules.MinimizeApp.minimizeApp();
return true;
});
const Navigator = nativeStackNavigator.Navigator;
if (initialRouteName == null) {
initialRouteName = "choose-avatar";
}
return <Navigator screenOptions={(a0) => {
ref.current = a0.navigation;
return {
headerStyle: styles.header,
headerShadowVisible: false,
title: "",
headerLeft: () => null,
headerRight: () => null,
fullScreenGestureEnabled: false,
presentation: isAndroid() ? "transparentModal" : "card",
animation: "slide_from_right",
headerBackVisible: false,
...accessibilityNativeStackOptions
};
}} initialRouteName={initialRouteName}>
<nativeStackNavigator.Screen name="enable-notification" getComponent={() => RedesignNotificationScreen} initialParams={{
onComplete: callback
}} />
<nativeStackNavigator.Screen name="choose-avatar" getComponent={() => _RedesignAddAvatarModal.default} options={() => ({
headerRight: (a0) => <SkipHeaderButton {...a0} onPress={() => {
const callback2 = callback;
openAlert("skip-avatar-upload", jsx(lazy(() => import("../../../avatar/native/components/RedesignSkipAvatarUploadAlertModal")), {
onConfirm: () => callback2(true)
}));
}} />
})} initialParams={{
onComplete: callback
}} />
<nativeStackNavigator.Screen name="contact-sync" options={{
headerShown: false
}} getComponent={() => ContactSyncOnboardingModal} initialParams={{
onComplete: callback
}} />
<nativeStackNavigator.Screen name="discoverability" options={{
headerShown: false
}} getComponent={() => _RedesignDiscoverabilityModal.default} initialParams={{
onComplete: callback
}} />
<nativeStackNavigator.Screen name="connect-guardian" getComponent={() => _ConnectGuardianModal.default} initialParams={{
onComplete: callback
}} />
</Navigator>;
};
@@ -0,0 +1,2 @@
// Metro module 16273 (f16274).
export const NEW_USER_MODAL_KEY = "new-user-modal";
@@ -0,0 +1,83 @@
// Metro module 11779 (f11780).
import { ScrollView, View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { NAV_BAR_HEIGHT } from "../../../../design/components/Navigator/native/NavigatorConstants.native";
import Module712 from "../../../../_bundle/Module712";
import { Text } from "../../../../design/components/Text/native/Text";
import { Button } from "../../../../design/components/Button/native/Button.native";
import { intl, t } from "../../../../intl/index.native";
const useStyles = createStyles({
scrollContainer: {
minHeight: "100%"
},
container: {
flexGrow: 1,
alignItems: "center",
justifyContent: "center"
},
alertContainer: {
paddingTop: 80 + NAV_BAR_HEIGHT
},
alert: {
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH,
borderRadius: Module712.radii.xl,
borderWidth: 1,
borderColor: Module712.colors.INTERACTIVE_BACKGROUND_ACTIVE,
alignItems: "center",
maxWidth: 290,
...Module712.shadows.SHADOW_HIGH
},
alertContent: {
paddingVertical: 24,
paddingHorizontal: 24,
alignItems: "center"
},
alertTitle: {
paddingBottom: 8,
textAlign: "center"
},
alertSubtitle: {
paddingBottom: Module712.space.PX_16,
textAlign: "center"
},
buttonWrapper: {
flexDirection: "row"
},
primaryButtonContainer: {
marginBottom: Module712.space.PX_12
},
trailing: {
flexGrow: 0,
padding: Module712.space.PX_16
}
});
export default function NewUserPermissionsOnboarding(props) {
const { title, subtitle, header, trailing, loading } = props;
let showSkip = props.showSkip;
if (showSkip === void 0) {
showSkip = true;
}
const { onAllow, onDontAllow } = props;
const styles = useStyles();
const r31 = [header, ,];
const r39 = [<Text style={styles.alertTitle} variant="heading-lg/bold" color="text-default">{title}</Text>, <Text style={styles.alertSubtitle} variant="text-sm/medium" color="text-default">{subtitle}</Text>, <View style={[styles.buttonWrapper, showSkip ? styles.primaryButtonContainer : showSkip]}>
<Button variant="primary" size="md" text={intl.string(t["2nYlT2"])} onPress={onAllow} loading={loading} grow />
</View>, ,];
if (showSkip) {
showSkip = <View style={styles.buttonWrapper}>
<Button variant="secondary" text={intl.string(t["5Wxrcd"])} onPress={onDontAllow} grow />
</View>;
}
r39[3] = showSkip;
r31[1] = <View style={styles.alert}>
<View style={styles.alertContent}>{r39}</View>
</View>;
return <ScrollView contentContainerStyle={styles.scrollContainer}>
<View style={styles.container}>
<View style={styles.alertContainer}>
<View>{r31}</View>
</View>
</View>
<View style={styles.trailing}>{trailing}</View>
</ScrollView>;
};
@@ -0,0 +1,74 @@
// Metro module 16278 (f16279).
import { ScrollView, View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import { NAV_BAR_HEIGHT } from "../../../../design/components/Navigator/native/NavigatorConstants.native";
import { Text } from "../../../../design/components/Text/native/Text";
import { intl, t } from "../../../../intl/index.native";
import FastImage from "../../../../components_native/common/FastImage";
import Module11853 from "../../../../_bundle/Module11853";
import { handleOpenLearnMoreLink } from "../../../contact_sync/native/ContactSyncUtils";
import { Button } from "../../../../design/components/Button/native/Button.native";
const useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
},
topContainer: {
paddingTop: Module712.space.PX_16
},
growContainer: {
flexGrow: 2
},
image: {
width: "100%",
marginBottom: Module712.space.PX_32
},
title: {
textAlign: "center",
marginBottom: Module712.space.PX_16
},
subtitle: {
textAlign: "center",
marginBottom: Module712.space.PX_32
},
info: {
paddingHorizontal: 16,
marginTop: 8,
marginBottom: 24,
textAlign: "center"
}
});
export default function RedesignDiscoverabilityLanding(props) {
const styles = useStyles();
const onNext = props.onNext;
return <ScrollView style={styles.container} alwaysBounceVertical={false} contentContainerStyle={{
flexGrow: 2,
paddingTop: NAV_BAR_HEIGHT + 32,
paddingBottom: useSafeAreaInsets_native().bottom + 16,
paddingHorizontal: Module712.space.PX_16
}}>
<View style={styles.topContainer} />
<Text style={styles.title} accessibilityRole="header" variant="heading-xl/extrabold" color="mobile-text-heading-primary">
{intl.string(t.n8nw6j)}
</Text>
<Text variant="text-sm/medium" color="text-default" style={styles.subtitle}>
{intl.string(t.KMW0kP)}
</Text>
<FastImage resizeMode="contain" style={styles.image} source={Module11853} />
<Text style={styles.info} variant="text-sm/medium" color="text-default">
{intl.string(t.ci12MJ)}
{" "}
{intl.format(t.VcSQ4n, {
learnMoreHook: function learnMoreHook(a0, a1) {
return <Text key={a1} onPress={handleOpenLearnMoreLink} variant="text-sm/medium" color="text-link">
{a0}
</Text>;
}
})}
</Text>
<View style={styles.growContainer} />
<Button variant="primary" size="lg" text={intl.string(t.gHPk3I)} onPress={onNext} />
</ScrollView>;
};
@@ -0,0 +1,115 @@
// Metro module 16277 (f16278).
import { useCallback, useEffect, useMemo } from "react";
import { View } from "react-native";
import { useContactSyncModalStore } from "../../../contact_sync/native/ContactSyncModalStore";
import UserStore from "../../../../stores/UserStore";
import { ModalAnimation } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { NAV_BAR_HEIGHT } from "../../../../design/components/Navigator/native/NavigatorConstants.native";
import { useNavigation } from "../../../../design/components/Navigator/native/useNavigation.native";
import { useStateFromStores } from "../../../../_bundle/Module589";
import ContactSyncActionCreators from "../../../contact_sync/native/ContactSyncActionCreators";
import { DiscoverabilityScenes } from "../../../../ConstantsIOS";
import RedesignDiscoverabilityLanding from "./RedesignDiscoverabilityLanding";
import { startContactSyncForDiscoverability } from "../NUFActionCreators";
import ContactSyncNameInput from "../../../contact_sync/native/components/ContactSyncNameInput";
import { ImpressionNames } from "../../../../_bundle/Module503";
import SkipHeaderButton from "./SkipHeaderButton";
import { Navigator } from "../../../../design/components/Navigator/native/Navigator.native";
import { intl, t } from "../../../../intl/index.native";
let useStyles, DiscoverabilityNameScene;
const DiscoverabilityLandingScene = function DiscoverabilityLandingScene(props) {
let allowPhone, name, allowEmail, allowEmail2;
const onComplete = props.onComplete;
allowPhone = void 0;
name = void 0;
allowEmail = void 0;
allowEmail2 = void 0;
const navigation = useNavigation();
const stateFromStores = useStateFromStores([UserStore], () => UserStore.getCurrentUser()?.phone);
const contactSyncModalStore = useContactSyncModalStore();
allowPhone = contactSyncModalStore.allowPhone;
name = contactSyncModalStore.name;
allowEmail = contactSyncModalStore.allowEmail;
allowEmail2 = allowPhone ? allowPhone : allowEmail;
return <RedesignDiscoverabilityLanding onNext={useCallback(() => {
ContactSyncActionCreators.updateDiscoverability({
phone: allowPhone,
email: allowEmail
});
if (allowEmail2 && (stateFromStores != null && (allowPhone && name == null))) {
navigation.push(DiscoverabilityScenes.NAME);
} else {
onComplete();
}
}, [allowPhone, allowEmail, allowEmail2, stateFromStores, name, navigation, onComplete])} />;
};
DiscoverabilityNameScene = function DiscoverabilityNameScene(props) {
const onComplete2 = props.onComplete;
const styles = useStyles();
const contactSyncModalStore = useContactSyncModalStore();
let name2 = contactSyncModalStore.name;
const allowPhone2 = contactSyncModalStore.allowPhone;
useEffect(() => {
if (!allowPhone2) {
onComplete2();
}
}, [allowPhone2, onComplete2]);
const callback = useCallback((a0) => {
startContactSyncForDiscoverability(a0);
onComplete2();
}, [onComplete2]);
if (name2 == null) {
name2 = "";
}
return <View style={styles.container}>
<ContactSyncNameInput onNext={callback} loading={false} initialName={name2} />
</View>;
};
const RedesignDiscoverabilityModal = function RedesignDiscoverabilityModal(props) {
const onComplete3 = props.route.params.onComplete;
return <Navigator headerStyle={useStyles().header} screens={useMemo(() => {
let r8 = onComplete3;
if (onComplete3 == null) {
r8 = () => {};
}
const onComplete4 = r8;
const r10 = {};
r10[DiscoverabilityScenes.LANDING] = {
ignoreKeyboard: true,
impressionName: ImpressionNames.DISCOVERABILITY,
fullscreen: true,
headerLeft: () => null,
headerTitle: () => null,
headerRight: (a0) => <SkipHeaderButton insideNavigator {...a0} onPress={() => onComplete4(true)} />,
render: () => <DiscoverabilityLandingScene onComplete={onComplete4} />
};
r10[DiscoverabilityScenes.NAME] = {
ignoreKeyboard: true,
impressionName: ImpressionNames.DISCOVERABILITY,
fullscreen: true,
headerTitle: () => null,
render: () => <DiscoverabilityNameScene onComplete={onComplete4} />
};
return r10;
}, [onComplete3])} initialRouteName={DiscoverabilityScenes.LANDING} headerBackTitle={intl.string(t["13/7kX"])} />;
};
useStyles = createStyles({
header: {
borderBottomWidth: 0,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
shadowColor: "transparent"
},
container: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
justifyContent: "center",
paddingBottom: 44,
paddingTop: NAV_BAR_HEIGHT + 32
}
});
RedesignDiscoverabilityModal.modalConfig = {
animation: ModalAnimation.SLIDE_IN_OUT
};
export default RedesignDiscoverabilityModal;
@@ -0,0 +1,21 @@
// Metro module 11787 (f11788).
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { intl, t } from "../../../../intl/index.native";
import { HeaderTextButton } from "../../../main_tabs_v2/native/shared_components/HeaderShared";
const useStyles = createStyles({
button: {
color: Module712.colors.INTERACTIVE_TEXT_DEFAULT
},
insideNavigatorButton: {
paddingRight: 16
}
});
export default function SkipHeaderButton(props) {
const styles = useStyles();
let label = props.label;
if (label == null) {
label = intl.string(t["5Wxrcd"]);
}
return <HeaderTextButton {...props} labelStyle={[styles.button, props.insideNavigator ? styles.insideNavigatorButton : void 0]} label={label} accessibilityLabel={label} />;
};
@@ -0,0 +1,80 @@
// Metro module 15394 (f15395).
import { useRef, useState, useEffect } from "react";
import GuildMemberStore from "../../../../../stores/GuildMemberStore";
import GuildStore from "../../../../../stores/GuildStore";
import SelectedGuildStore from "../../../../../stores/SelectedGuildStore";
import UserGuildSettingsStore from "../../../../../stores/UserGuildSettingsStore";
import PushNotificationPermissionStore, { PermissionPromptType } from "../../../../../stores/native/PushNotificationPermissionStore";
import { EventActionLocation, NotificationNudgeSurface } from "./NotificationPermissionConstants";
import { UserNotificationSettings, ZERO_STRING_GUILD_ID } from "../../../../../Constants";
import { useStateFromStores } from "../../../../../_bundle/Module589";
import NotificationNudgeBottomSheet from "./NotificationNudgeBottomSheet";
import { intl, t } from "../../../../../intl/index.native";
import ContextualOptInNudgeHoldoutExperiment from "../../ContextualOptInNudgeHoldoutExperiment";
import { useCanSeePushNotificationNudge } from "../../NotificationPermissionUtil";
import { isBlockedByOnboarding } from "../../../../guild_onboarding/GuildOnboardingUtils";
import { isPseudoGuildId } from "../../../../routing/RouteUtils";
import { useSelectedTimeRecurringGuildDismissibleContent } from "../../../../dismissible_content/hooks/useSelectedDismissibleContent";
import { DismissibleContent } from "../../../../../_bundle/Module1358";
import { setPushPermissionReactivationSeen } from "../../../../../actions/native/PushNotificationActionCreators";
import ActionSheetActionCreators from "../../../../action_sheet/native/ActionSheetActionCreators";
let c10946_16 = "guild-open-notification-nudge-key";
let c10946_17 = {
cooldownDurationMs: 5184000000
};
export default function GuildOpenNotificationNudge(props) {
const { guildId, markAsDismissed: markAsDismissed2, onHide } = props;
return <NotificationNudgeBottomSheet title={intl.formatToPlainString(t.tyWHMY, {
guildName: useStateFromStores([GuildStore], () => {
let r8 = GuildStore.getGuild(guildId)?.name;
if (r8 == null) {
r8 = "";
}
return r8;
})
})} body={intl.string(t["ehJH+P"])} actionLocation={EventActionLocation.GUILD_OPEN} surface={NotificationNudgeSurface.GUILD_OPEN_BOTTOM_SHEET} markAsDismissed={markAsDismissed2} onHide={onHide} />;
};
export const GUILD_OPEN_NOTIFICATION_NUDGE_KEY = "guild-open-notification-nudge-key";
export function useGuildOpenNudge() {
let stateFromStores2, ref, c21955_4;
const stateFromStores = useStateFromStores([SelectedGuildStore], () => {
let r4 = SelectedGuildStore.getGuildId();
if (r4 == null) {
r4 = null;
}
return r4;
});
const inHoldout = ContextualOptInNudgeHoldoutExperiment.useConfig({
location: "useGuildOpenNudge"
}).inHoldout;
const canSeePushNotificationNudge = useCanSeePushNotificationNudge();
const stateFromStores3 = useStateFromStores([UserGuildSettingsStore], () => stateFromStores == null || UserGuildSettingsStore.isMuted(stateFromStores));
const stateFromStores4 = useStateFromStores([UserGuildSettingsStore], () => stateFromStores != null ? UserGuildSettingsStore.getMessageNotifications(stateFromStores) : UserNotificationSettings.NO_MESSAGES);
stateFromStores2 = useStateFromStores([GuildStore, GuildMemberStore], () => stateFromStores != null && isBlockedByOnboarding(GuildStore.getGuild(stateFromStores), GuildMemberStore.getSelfMember(stateFromStores)));
ref = useRef(stateFromStores);
const [state, setState] = useState(stateFromStores2);
useEffect(() => {
const current = ref.current;
ref.current = stateFromStores;
if (current !== stateFromStores) {
setState(stateFromStores2);
} else if (stateFromStores2) {
setState(true);
}
}, [stateFromStores, stateFromStores2]);
const stateFromStores5 = useStateFromStores([PushNotificationPermissionStore], () => {
const r6 = PushNotificationPermissionStore.getState().promptLastSeen[PermissionPromptType.GUILD_OPEN_BOTTOM_SHEET];
return r6 == null || Date.now() - new Date(r6).getTime() >= 604800000;
});
let [r85, markAsDismissed] = useSelectedTimeRecurringGuildDismissibleContent(stateFromStores != null && !isPseudoGuildId(stateFromStores) && !inHoldout && canSeePushNotificationNudge && !state && !stateFromStores3 && stateFromStores4 !== UserNotificationSettings.NO_MESSAGES && stateFromStores5 ? DismissibleContent.NOTIFICATION_NUDGE_GUILD_OPEN_PER_GUILD : null, stateFromStores == null ? ZERO_STRING_GUILD_ID : stateFromStores, c10946_17);
c21955_4 = r85;
useEffect(() => {
if (stateFromStores != null && c21955_4 != null) {
setPushPermissionReactivationSeen(PermissionPromptType.GUILD_OPEN_BOTTOM_SHEET);
ActionSheetActionCreators.openLazy(import("./GuildOpenNotificationNudge"), c10946_16, {
guildId: stateFromStores,
markAsDismissed
});
}
}, [stateFromStores, markAsDismissed, r85]);
}
@@ -0,0 +1,86 @@
// Metro module 15395 (f15396).
import { useEffect, useCallback } from "react";
import { View } from "react-native";
import { EventActionType, NotificationNudgeAnalyticsAction } from "./NotificationPermissionConstants";
import { AnalyticEvents } from "../../../../../Constants";
import { ContentDismissActionType } from "../../../../dismissible_content/DismissibleContentConstants";
import { createStyles } from "../../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../../_bundle/Module712";
import AnalyticsUtils from "../../../../../utils/AnalyticsUtils";
import ActionSheetActionCreators from "../../../../action_sheet/native/ActionSheetActionCreators";
import { requestPushNotificationPermission } from "../../NotificationPermissionUtil";
import { BottomSheet } from "../../../../../design/components/Sheet/native/BottomSheet.native";
import { BellSpotIllustration } from "../../../../../design/assets/native";
import { Text } from "../../../../../design/components/Text/native/Text";
import { ButtonGroup } from "../../../../../design/components/ButtonGroup/native/ButtonGroup.native";
import { Button } from "../../../../../design/components/Button/native/Button.native";
import { intl, t } from "../../../../../intl/index.native";
const useStyles = createStyles({
container: {
marginHorizontal: Module712.space.PX_24,
alignItems: "center"
},
illustration: {
marginVertical: Module712.space.PX_24
},
title: {
textAlign: "center"
},
body: {
textAlign: "center",
marginTop: Module712.space.PX_8
},
buttonsContainer: {
marginTop: Module712.space.PX_8,
width: "100%"
}
});
export default function NotificationNudgeBottomSheet(props) {
let callback;
const { title, body, actionLocation, surface, markAsDismissed, onHide } = props;
callback = void 0;
const styles = useStyles();
useEffect(() => {
AnalyticsUtils.track(AnalyticEvents.CONTEXTUAL_REMINDER_ACTION, {
action: NotificationNudgeAnalyticsAction.IMPRESSION,
prompt_type: surface
});
}, [surface]);
callback = useCallback(() => {
ActionSheetActionCreators.hideActionSheet();
if (onHide != null) {
onHide();
}
}, [onHide]);
const callback3 = useCallback(() => {
AnalyticsUtils.track(AnalyticEvents.CONTEXTUAL_REMINDER_ACTION, {
action: NotificationNudgeAnalyticsAction.ACCEPT,
prompt_type: surface
});
markAsDismissed(ContentDismissActionType.USER_DISMISS);
requestPushNotificationPermission(EventActionType.ALLOW_TO_REQUEST, actionLocation, callback);
}, [surface, actionLocation, callback, markAsDismissed]);
const callback2 = useCallback(() => {
AnalyticsUtils.track(AnalyticEvents.CONTEXTUAL_REMINDER_ACTION, {
action: NotificationNudgeAnalyticsAction.DISMISS,
prompt_type: surface
});
markAsDismissed(ContentDismissActionType.USER_DISMISS);
callback();
}, [surface, callback, markAsDismissed]);
return <BottomSheet>
<View style={styles.container}>
<View style={styles.illustration}>
<BellSpotIllustration scale={0.8} />
</View>
<Text style={styles.title} variant="heading-xl/bold" accessibilityRole="header">{title}</Text>
<Text style={styles.body} variant="text-sm/medium" color="text-default">{body}</Text>
<View style={styles.buttonsContainer}>
<ButtonGroup>
<Button text={intl.string(t["+7MDbQ"])} onPress={callback3} />
<Button text={intl.string(t.L5eIZ2)} onPress={callback2} variant="secondary" />
</ButtonGroup>
</View>
</View>
</BottomSheet>;
};
@@ -0,0 +1,46 @@
// Metro module 11505 (f11506).
const r11 = {
SKIP_STEP: "skip_step",
ALLOW_TO_REQUEST: "allow_to_request",
REQUEST: "request",
TO_SETTINGS: "to_settings",
REQUEST_PROVISIONAL: "request_provisional",
DISMISS: "dismiss"
};
const r17 = {
ALERT: "alert",
AUTO_PROMPT: "auto_prompt",
NAV: "nav",
FOOTER: "footer",
CTA: "cta",
DM_LIST: "dm_list",
MESSAGE_SENT: "message_sent",
USER_SETTING: "user_setting",
NOTIFICATION_SETTING: "notification_setting",
INVITE_ACCEPTED: "invite_accepted",
FRIEND_REQUEST_SENT: "friend_request_sent",
FRIEND_REQUEST_ACCEPTED: "friend_request_accepted",
NOTIFICATION_CENTER: "notification_center",
CHANNEL_BANNER: "channel_banner",
POST_REACTION: "post_reaction",
GUILD_OPEN: "guild_open",
CALL_DISCONNECT: "call_disconnect"
};
const r35 = {
CHANNEL_BANNER: "channel_banner",
NOTIFICATION_CENTER_BANNER: "notification_center_banner",
POST_REACTION_BANNER: "post_reaction_banner",
NOTIFICATION_SETTINGS_PERMISSION_HEADER: "notification_settings_permission_header",
GUILD_OPEN_BOTTOM_SHEET: "guild_open_bottom_sheet",
CALL_DISCONNECT_BOTTOM_SHEET: "call_disconnect_bottom_sheet"
};
const r41 = {
IMPRESSION: "impression",
DISMISS: "dismiss",
ACCEPT: "accept"
};
export { r11 as EventActionType };
export { r17 as EventActionLocation };
export const NOTIFICATION_REACTIVATION_ACTIONSHEET_KEY = "notification-reactivation-actionsheet-key";
export { r35 as NotificationNudgeSurface };
export { r41 as NotificationNudgeAnalyticsAction };
@@ -0,0 +1,68 @@
// Metro module 16282 (f16283).
import { useCallback } from "react";
import { Image as Image2, View } from "react-native";
import { EventActionType } from "./NotificationPermissionConstants";
import { AnalyticEvents } from "../../../../../Constants";
import { createStyles } from "../../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../../_bundle/Module712";
import AnalyticsUtils from "../../../../../utils/AnalyticsUtils";
import { requestPushNotificationPermission } from "../../NotificationPermissionUtil";
import ActionSheetActionCreators from "../../../../action_sheet/native/ActionSheetActionCreators";
import { BottomSheet } from "../../../../../design/components/Sheet/native/BottomSheet.native";
import Module16283 from "../../../../../_bundle/Module16283";
import { Text } from "../../../../../design/components/Text/native/Text";
import { intl, t } from "../../../../../intl/index.native";
import { ButtonGroup } from "../../../../../design/components/ButtonGroup/native/ButtonGroup.native";
import { Button } from "../../../../../design/components/Button/native/Button.native";
const useStyles = createStyles({
container: {
marginHorizontal: Module712.space.PX_24,
alignItems: "center"
},
image: {
marginVertical: Module712.space.PX_24,
height: 120
},
title: {
textAlign: "center"
},
subtitle: {
textAlign: "center",
marginTop: Module712.space.PX_8
},
buttons: {
marginTop: Module712.space.PX_8
}
});
export default function NotificationReactivationActionSheet(props) {
const location2 = props.location;
const styles = useStyles();
const callback = useCallback(() => {
requestPushNotificationPermission(EventActionType.ALLOW_TO_REQUEST, location2, () => {
ActionSheetActionCreators.hideActionSheet();
});
}, [location2]);
const callback2 = useCallback(() => {
AnalyticsUtils.track(AnalyticEvents.NOTIFICATION_PERMISSION_PREPROMPT_ACKED, {
action_type: EventActionType.SKIP_STEP,
action_location: location2,
permission_granted: void 0
});
ActionSheetActionCreators.hideActionSheet();
}, [location2]);
return <BottomSheet>
<View style={styles.container}>
<Image2 style={styles.image} source={Module16283} resizeMode="contain" />
<Text style={styles.title} variant="heading-xl/bold" accessibilityRole="header">
{intl.string(t.a4bgO0)}
</Text>
<Text style={styles.subtitle} variant="text-sm/medium" color="text-default">
{intl.string(t["rW5gw/"])}
</Text>
<ButtonGroup style={styles.buttons}>
<Button text={intl.string(t.a4bgO0)} onPress={callback} />
<Button text={intl.string(t["/L3kom"])} onPress={callback2} variant="secondary" />
</ButtonGroup>
</View>
</BottomSheet>;
};
@@ -0,0 +1,50 @@
// Metro module 15396 (f15397).
import { useRef, useState, useEffect } from "react";
import SelectedChannelStore from "../../../../../stores/SelectedChannelStore";
import VoiceStateStore from "../../../../../stores/VoiceStateStore";
import { PermissionPromptType } from "../../../../../stores/native/PushNotificationPermissionStore";
import { EventActionLocation, NotificationNudgeSurface } from "./NotificationPermissionConstants";
import NotificationNudgeBottomSheet from "./NotificationNudgeBottomSheet";
import { intl, t } from "../../../../../intl/index.native";
import ContextualOptInNudgeHoldoutExperiment from "../../ContextualOptInNudgeHoldoutExperiment";
import { useCanSeePushNotificationNudge } from "../../NotificationPermissionUtil";
import { useStateFromStores } from "../../../../../_bundle/Module589";
import { useSelectedTimeRecurringDismissibleContent } from "../../../../dismissible_content/hooks/useSelectedDismissibleContent";
import { DismissibleContent } from "../../../../../_bundle/Module1358";
import { setPushPermissionReactivationSeen } from "../../../../../actions/native/PushNotificationActionCreators";
import ActionSheetActionCreators from "../../../../action_sheet/native/ActionSheetActionCreators";
let c10948_11 = "post-call-disconnect-nudge-key";
let c10948_12 = {
cooldownDurationMs: 604800000
};
export default function PostCallDisconnectNudge(props) {
const { markAsDismissed: markAsDismissed2, onHide } = props;
return <NotificationNudgeBottomSheet title={intl.string(t.pJbYq1)} body={intl.string(t.vegtFT)} actionLocation={EventActionLocation.CALL_DISCONNECT} surface={NotificationNudgeSurface.CALL_DISCONNECT_BOTTOM_SHEET} markAsDismissed={markAsDismissed2} onHide={onHide} />;
};
export const POST_CALL_DISCONNECT_NUDGE_KEY = "post-call-disconnect-nudge-key";
export function usePostCallDisconnectNudge() {
let stateFromStores2, ref, c21957_4;
const inHoldout = ContextualOptInNudgeHoldoutExperiment.useConfig({
location: "usePostCallDisconnectNudge"
}).inHoldout;
const canSeePushNotificationNudge = useCanSeePushNotificationNudge();
const stateFromStores = useStateFromStores([VoiceStateStore], () => VoiceStateStore.getCurrentClientVoiceChannelId(null));
stateFromStores2 = useStateFromStores([SelectedChannelStore], () => SelectedChannelStore.getChannelId());
ref = useRef(stateFromStores);
const [state, setState] = useState(false);
useEffect(() => {
const current = ref.current;
ref.current = stateFromStores;
setState(current != null && stateFromStores == null && current === stateFromStores2);
}, [stateFromStores, stateFromStores2]);
let [r55, markAsDismissed] = useSelectedTimeRecurringDismissibleContent(state ? inHoldout ? null : canSeePushNotificationNudge ? DismissibleContent.NOTIFICATION_NUDGE_POST_CALL_DISCONNECT : null : null, c10948_12);
c21957_4 = r55;
useEffect(() => {
if (c21957_4 != null) {
setPushPermissionReactivationSeen(PermissionPromptType.CALL_DISCONNECT_BOTTOM_SHEET);
ActionSheetActionCreators.openLazy(import("./PostCallDisconnectNudge"), c10948_11, {
markAsDismissed
});
}
}, [r55, markAsDismissed]);
}
@@ -0,0 +1,57 @@
// Metro module 14913 (f14914).
import { useCallback } from "react";
import { Image as Image2, View } from "react-native";
import { PermissionStateType } from "../../../../../stores/native/PushNotificationPermissionStore";
import { EventActionLocation, EventActionType } from "./NotificationPermissionConstants";
import { AnalyticEvents } from "../../../../../Constants";
import { createStyles } from "../../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../../_bundle/Module712";
import { requestPushNotificationPermission, enableProvisionalPushNotification } from "../../NotificationPermissionUtil";
import AnalyticsUtils from "../../../../../utils/AnalyticsUtils";
import { setPushPermissionState } from "../../../../../actions/native/PushNotificationActionCreators";
import NewUserPermissionsOnboarding_android from "../NewUserPermissionsOnboarding.android";
import Module14914 from "../../../../../_bundle/Module14914";
import { intl, t } from "../../../../../intl/index.native";
let useStyles;
const RedesignNotificationModal = function RedesignNotificationModal(props) {
const onComplete = props.onComplete;
const styles = useStyles();
return <View style={styles.container}>
<NewUserPermissionsOnboarding_android onAllow={useCallback(() => {
requestPushNotificationPermission(EventActionType.ALLOW_TO_REQUEST, EventActionLocation.ALERT, () => {
if (onComplete != null) {
onComplete();
}
});
}, [onComplete])} onDontAllow={useCallback(() => {
AnalyticsUtils.track(AnalyticEvents.NOTIFICATION_PERMISSION_PREPROMPT_ACKED, {
action_type: EventActionType.SKIP_STEP,
action_location: EventActionLocation.ALERT
});
setPushPermissionState(PermissionStateType.PROMPT_SKIPPED);
enableProvisionalPushNotification();
if (onComplete != null) {
onComplete(true);
}
}, [onComplete])} header={<Image2 resizeMode="contain" style={styles.notificationHeaderImage} source={Module14914} />} title={intl.string(t["3nx0b5"])} subtitle={intl.string(t.Gf7U1T)} />
</View>;
};
useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
marginTop: -Module712.space.PX_48
},
notificationHeaderImage: {
position: "absolute",
alignSelf: "center",
zIndex: 2,
top: -140,
height: 156,
width: 150
}
});
export default RedesignNotificationModal;
export function RedesignNotificationScreen(props) {
return <RedesignNotificationModal onComplete={props.route.params.onComplete} />;
}