Files
discord-decomp/modules/hub/native/components/HubEmailConnectionGuildSelect.tsx
T
2026-11-01 12:12:55 +02:00

195 lines
7.1 KiB
TypeScript

// Metro module 11839 (f11840).
import { useLayoutEffect, useCallback, useState } from "react";
import { FlatList, View } from "react-native";
import { HubEmailConnectionSteps } from "../../HubConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { FormRow } from "../../../../design/void/Form/native/index";
import GuildIcon from "../../../guild/native/GuildIcon";
import { fromGuildBasic } from "../../../../utils/GuildRecordUtils";
import { Text } from "../../../../design/components/Text/native/Text";
import { intl, t } from "../../../../intl/index.native";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import { Button } from "../../../../design/components/Button/native/Button.native";
import { LegacyText } from "../../../../design/void/native";
import { useNavigation } from "../../../../design/components/Navigator/native/useNavigation.native";
import { HeaderActionButton } from "../../../../design/components/Navigator/native/HeaderActionButton.native";
import { MagnifyingGlassIcon } from "../../../../design/components/Icon/native/redesign/generated/MagnifyingGlassIcon";
import HubActionCreators from "../../../../actions/HubActionCreators";
import { APIError } from "../../../../errors/index";
import { HubEmailConnectionScreen } from "./HubEmailConnectionModal";
let useStyles, HubEmailConnectionGuildSelectHeader, HubEmailConnectionGuildSelectFooter;
const HubEmailConnectionGuildSelectRow = function HubEmailConnectionGuildSelectRow(props) {
const { guildInfo, signup, loading } = props;
const styles2 = useStyles();
return <FormRow onPress={signup} disabled={loading} DEPRECATED_style={styles2.rowContainer} label={guildInfo.name} leading={<GuildIcon style={styles2.guildIcon} guild={fromGuildBasic({
...guildInfo,
features: []
})} />} trailing={<FormRow.Arrow />} />;
};
HubEmailConnectionGuildSelectHeader = function HubEmailConnectionGuildSelectHeader() {
const styles2 = useStyles();
return <View style={styles2.header}>
<Text style={styles2.title} accessibilityRole="header" variant="heading-xl/extrabold" color="mobile-text-heading-primary">
{intl.string(t.mOMeiR)}
</Text>
</View>;
};
HubEmailConnectionGuildSelectFooter = function HubEmailConnectionGuildSelectFooter(props) {
const { errors, loading, onFooterButtonPressed } = props;
const styles2 = useStyles();
return <View style={[styles2.footerSafeAreaContainer, {
paddingBottom: useSafeAreaInsets_native().bottom
}]}>
<View style={styles2.footerContainer}>
<Button variant="secondary" loading={loading} disabled={loading} grow text={intl.string(t.G3Zk7V)} onPress={onFooterButtonPressed} />
{errors != null && <LegacyText style={styles2.error}>
{errors == null ? void 0 : errors.getAnyErrorMessage()}
</LegacyText>}
</View>
</View>;
};
useStyles = createStyles({
rowContainer: {
marginHorizontal: 16,
borderRadius: Module712.radii.sm,
padding: 12,
backgroundColor: Module712.colors.BACKGROUND_MOD_NORMAL
},
guildIcon: {
borderRadius: Module712.radii.sm
},
separator: {
height: 8
},
header: {
padding: 16,
alignItems: "center",
justifyContent: "center"
},
title: {
marginBottom: 8,
textAlign: "center"
},
footerSafeAreaContainer: {
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
position: "absolute",
bottom: 0,
width: "100%"
},
footerContainer: {
paddingHorizontal: 16,
height: 110,
justifyContent: "center",
alignItems: "center"
},
error: {
color: Module712.unsafe_rawColors.RED_400,
alignSelf: "center",
fontSize: 14,
marginVertical: 8
}
});
export default function HubEmailConnectionGuildSelect(props) {
let setState, state, setState2;
const { onClose, email, guildsInfo } = props;
setState = void 0;
state = void 0;
setState2 = void 0;
const styles = useStyles();
const navigation = useNavigation();
useLayoutEffect(() => {
navigation.setOptions({
headerRight: () => <HeaderActionButton IconComponent={MagnifyingGlassIcon} onPress={() => {
navigation.push(HubEmailConnectionSteps.SELECT_SCHOOL_SEARCH, {
email,
onClose,
guildsInfo
});
}} accessibilityLabel={intl.string(t["5h0QOP"])} />
});
}, [email, guildsInfo, navigation, onClose]);
const callback = useCallback(() => {
navigation.push(HubEmailConnectionSteps.SUBMIT_SCHOOL, {
email,
onClose
});
}, [email, navigation, onClose]);
const bottom = useSafeAreaInsets_native().bottom;
let errors;
[errors, setState] = useState(null);
[state, setState2] = useState(false);
return <HubEmailConnectionScreen>
<FlatList data={guildsInfo} ListHeaderComponent={() => <HubEmailConnectionGuildSelectHeader />} renderItem={({ item }) => {
const id = item.id;
return <HubEmailConnectionGuildSelectRow guildInfo={item} signup={async () => {
let c30465_2;
let c30465_3 = 0;
let c31645_0;
L10: {
try {
setState(null);
setState2(true);
c30465_3 = 2;
await HubActionCreators.sendVerificationEmail(email, true, id);
navigation.push(HubEmailConnectionSteps.VERIFY_PIN, {
email,
onClose,
guildId: id
});
c30465_3 = 1;
c30465_3 = 0;
(0, setState2)(false);
} catch ($e) {
const r33 = $e;
let r7 = r33;
c30465_2 = r33;
let r34 = c30465_3;
if (r34 !== 0) {
while (true) {
if (r34 === 1) {
try {
const r108 = c30465_2;
c30465_3 = 0;
(0, setState2)(false);
throw r108;
} catch (r106) {
r7 = r106;
c30465_2 = r106;
r34 = c30465_3;
if (r34 === 0) {
break;
}
}
} else {
try {
const r85 = c30465_2;
c30465_3 = 1;
c31645_0 = r85;
setState(new APIError(c31645_0));
c30465_3 = 0;
(0, setState2)(false);
break L10;
} catch (r82) {
r7 = r82;
c30465_2 = r82;
r34 = c30465_3;
if (r34 === 0) {
break;
}
}
}
}
}
throw r7;
}
}
}} loading={state} />;
}} ItemSeparatorComponent={() => <View style={styles.separator} />} contentContainerStyle={{
paddingBottom: 110 + bottom + 8
}} />
<HubEmailConnectionGuildSelectFooter errors={errors} loading={state} onFooterButtonPressed={callback} />
</HubEmailConnectionScreen>;
};
export { HubEmailConnectionGuildSelectRow };