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

202 lines
7.8 KiB
TypeScript

// Metro module 11806 (f11807).
import { memo } from "react";
import { View } from "react-native";
import ChannelStore from "../../../../stores/ChannelStore";
import CreateInviteModalStore from "../../../../stores/CreateInviteModalStore";
import GuildStore from "../../../../stores/GuildStore";
import InviteSuggestionsStore from "../../../../stores/InviteSuggestionsStore";
import UserStore from "../../../../stores/UserStore";
import { setSendState, useInstantInviteSendStates } from "../../InstantInviteSendStateStore";
import { InviteSendStates } from "../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useChannelName from "../../../channel/useChannelName";
import { RowTypes } from "../../../../utils/InstantInviteUtils";
import InviteQueue, { InvitePropertiesType } from "../../../../lib/InviteQueue";
import { PressableOpacity } from "../../../../design/void/Pressables/native/Pressables";
import { Avatar, AvatarSizes } from "../../../../design/void/native";
import DiscordTag from "../../../user_profile/native/DiscordTag";
import UserUtils from "../../../../utils/UserUtils";
import { intl, t } from "../../../../intl/index.native";
import AvatarUtils from "../../../../utils/AvatarUtils";
import { getAcronym } from "../../../../utils/StringUtils";
import { Text } from "../../../../design/components/Text/native/Text";
import { TableRow } from "../../../../design/components/TableRow/native/TableRow.native";
import InviteButton from "./InviteButton";
const useStyles = createStyles({
acronym: {
width: 32,
height: 32,
borderRadius: Module712.radii.lg,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
alignItems: "center",
justifyContent: "center",
overflow: "hidden",
marginTop: 0,
marginRight: 10,
borderColor: Module712.colors.BORDER_MUTED,
borderStyle: "solid",
borderWidth: 2
}
});
const r58 = memo(function InstantInviteRow(props) {
let accessibilityActions, icon, label, onAccessibilityAction;
const { row, code, onPressAvatar, onInviteSent, start, end, source } = props;
const styles = useStyles();
const id = row.item.id;
const stateFromStores2 = useStateFromStores([CreateInviteModalStore], () => CreateInviteModalStore.isSubmitting());
const stateFromStores3 = useStateFromStores([CreateInviteModalStore], () => CreateInviteModalStore.getError());
const instantInviteSendStates = useInstantInviteSendStates((a0) => {
const r1 = code != null;
let r2 = null;
if (r1) {
const r6 = a0[code];
r2 = r6 == null ? void 0 : r6[id];
}
return r2;
});
const stateFromStores = useStateFromStores([ChannelStore], () => ChannelStore.getChannel(id));
let r54 = useChannelName(stateFromStores);
if (code == null) {
return null;
}
L32: {
const type = row.type;
if (RowTypes.DM !== type && RowTypes.FRIEND !== type) {
if (RowTypes.GROUP_DM === type) {
const r117 = stateFromStores != null ? <Avatar source={AvatarUtils.makeSource(AvatarUtils.getChannelIconURL({
id: stateFromStores.id,
icon: stateFromStores.icon,
applicationId: stateFromStores.application_id,
size: 32
}))} size={AvatarSizes.REFRESH_MEDIUM_32} /> : null;
if (r54 == null) {
r54 = "";
}
label = r54;
onAccessibilityAction = void 0;
accessibilityActions = void 0;
icon = r117;
break L32;
}
if (RowTypes.CHANNEL === type) {
const r25 = stateFromStores?.guild_id != null ? GuildStore.getGuild(stateFromStores.guild_id) : void 0;
if (r25 == null) {
return null;
}
icon = r25.icon != null ? <Avatar source={AvatarUtils.makeSource(AvatarUtils.getGuildIconURL({
id: r25.id,
icon: r25.icon,
size: 32
}))} size={AvatarSizes.REFRESH_MEDIUM_32} /> : <View style={styles.acronym}>
<Text variant="text-sm/bold">
{getAcronym(r25.name)}
</Text>
</View>;
label = r54 == null ? "" : `#${r54}`;
onAccessibilityAction = void 0;
accessibilityActions = void 0;
break L32;
}
return null;
}
const user = UserStore.getUser(id);
let source2 = user == null ? void 0 : user.getAvatarSource(void 0);
if (source2 == null) {
source2 = null;
}
const r158 = <PressableOpacity importantForAccessibility="no-hide-descendants" accessibilityElementsHidden onPress={(event) => {
event.stopPropagation();
if (onPressAvatar != null) {
onPressAvatar(id);
}
}} style={{
padding: 8,
margin: -8
}}>
<Avatar source={source2} size={AvatarSizes.REFRESH_MEDIUM_32} />
</PressableOpacity>;
const r166 = <DiscordTag nick={UserUtils.getGlobalName(user)} user={user} />;
const r168 = onPressAvatar != null ? [{
name: "viewProfile",
label: intl.formatToPlainString(t.uCenkh, {
username: user?.tag
})
}] : void 0;
onAccessibilityAction = (a0) => {
if (a0.nativeEvent.actionName === "viewProfile" && onPressAvatar !== null && onPressAvatar != null) {
onPressAvatar(id);
}
};
accessibilityActions = r168;
label = r166;
icon = r158;
}
const handlePress = function handlePress() {
L11: {
if (code != null) {
const handleSendState = function handleSendState(a0) {
if (code != null) {
setSendState(code, id, a0 ? InviteSendStates.SENT : InviteSendStates.ERROR);
if (a0 && onInviteSent != null) {
onInviteSent();
}
}
};
setSendState(code, id, InviteSendStates.SENDING);
const type = row.type;
if (RowTypes.FRIEND !== type && RowTypes.DM !== type) {
if (RowTypes.GROUP_DM === type) {
if (code == null) {
break L11;
}
InviteQueue.enqueue({
inviteKey: code,
type: InvitePropertiesType.GROUP_DM,
channel: ChannelStore.getChannel(id),
location: "Invite Action Sheet",
inviteAnalyticsMetadata: {
suggestionData: InviteSuggestionsStore.getSelectedInviteMetadata(row),
source
}
}, handleSendState);
break L11;
}
if (RowTypes.CHANNEL !== type) {
break L11;
}
if (code == null) {
break L11;
}
InviteQueue.enqueue({
inviteKey: code,
type: InvitePropertiesType.CHANNEL,
channel: ChannelStore.getChannel(id),
location: "Invite Action Sheet",
inviteAnalyticsMetadata: {
suggestionData: InviteSuggestionsStore.getSelectedInviteMetadata(row),
source
}
}, handleSendState);
break L11;
}
if (code != null) {
InviteQueue.enqueue({
inviteKey: code,
type: InvitePropertiesType.USER,
user: UserStore.getUser(id),
location: "Invite Action Sheet",
inviteAnalyticsMetadata: {
suggestionData: InviteSuggestionsStore.getSelectedInviteMetadata(row),
source
}
}, handleSendState);
}
}
}
};
return <TableRow start={start} end={end} icon={icon} label={label} trailing={<InviteButton sendState={instantInviteSendStates} onPressSend={handlePress} />} onPress={handlePress} disabled={stateFromStores3 != null || stateFromStores2 || instantInviteSendStates === InviteSendStates.SENT} accessibilityActions={accessibilityActions} onAccessibilityAction={onAccessibilityAction} />;
});
export default r58;