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,6 @@
// Metro module 15713 (f15714).
import { EmptyState } from "../../../design/void/native";
import { Pending } from "../../../design/components/Illustration/native/redesign/generated/Pending";
export default function MessageRequestEmpty(props) {
return <EmptyState Illustration={Pending} body={props.bodyText} />;
};
@@ -0,0 +1,208 @@
// Metro module 15702 (f15703).
import { useCallback } from "react";
import { ActivityIndicator, FlatList, View } from "react-native";
import { AnalyticEvents } from "../../../Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { intl, t } from "../../../intl/index.native";
import ToastActionCreators from "../../toast/native/ToastActionCreators";
import Module9172 from "../../../_bundle/Module9172";
import { transitionToChannel } from "../../routing/transitionToChannel";
import ModalActionCreators from "../../../actions/ModalActionCreators";
import { useMessageRequestActions } from "../hooks/useMessageRequestActions";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import { PressableOpacity } from "../../../design/void/Pressables/native/Pressables";
import MessageRequestRowSenderDetails from "./MessageRequestRowSenderDetails";
import { Icon } from "../../../design/void/native";
import Module10356 from "../../../_bundle/Module10356";
import Module13954 from "../../../_bundle/Module13954";
import { FormDivider } from "../../../design/void/Form/native/index";
import useSafeAreaInsets_native from "../../safe_area/useSafeAreaInsets.native";
import useSortedMessageRequests from "../hooks/useSortedMessageRequests";
import { useListHasSingleMessageRequest } from "../hooks/useListHasSingleMessageRequest";
import { useIsMessageRequestRestrictedViewer } from "../hooks/useIsMessageRequestRestrictedViewer";
import MessageRequestEmpty from "./MessageRequestEmpty";
import { isAndroid } from "../../../utils/PlatformUtils";
import { Text } from "../../../design/components/Text/native/Text";
let useStyles, c11215_11;
const PendingMessageRequestRow = function PendingMessageRequestRow(props) {
let acceptMessageRequest, rejectMessageRequest;
const { messageRequest, goToMessageRequestPreview: goToMessageRequestPreview2, isLastRow, hasSingleMessageRequest, isRestricted = false } = props;
acceptMessageRequest = void 0;
rejectMessageRequest = void 0;
const styles2 = useStyles();
const { user, channel } = messageRequest;
const id = channel.id;
const callback = useCallback(() => {
ToastActionCreators.open({
key: "MESSAGE_REQUEST_REQUEST_ERROR_ALERT_TITLE",
content: intl.string(t["EDYbS+"]),
icon: Module9172
});
}, []);
const messageRequestActions = useMessageRequestActions({
user,
onAcceptSuccess: useCallback(() => {
if (hasSingleMessageRequest) {
transitionToChannel(id);
ModalActionCreators.pop();
}
}, [id, hasSingleMessageRequest]),
onError: callback
});
acceptMessageRequest = messageRequestActions.acceptMessageRequest;
rejectMessageRequest = messageRequestActions.rejectMessageRequest;
const { isAcceptLoading, isRejectLoading, isUserProfileLoading, isOptimisticAccepted, isOptimisticRejected } = messageRequestActions;
const disabled = isAcceptLoading || isRejectLoading || isUserProfileLoading || isOptimisticAccepted || isOptimisticRejected;
const props2 = {
onPress: function handleSelectRow() {
AnalyticsUtils.track(AnalyticEvents.MESSAGE_REQUEST_PREVIEW_VIEWED, {
is_spam: false,
channel_id: channel.id,
other_user_id: user.id
});
goToMessageRequestPreview2();
},
accessibilityRole: "button",
accessibilityActions: [{
name: c11215_11.ACCEPT_MESSAGE_REQUEST,
label: intl.string(t.hSLLWi)
}, {
name: c11215_11.IGNORE_MESSAGE_REQUEST,
label: intl.string(t.fIBuSD)
}, {
name: c11215_11.PREVIEW_MESSAGE_REQUEST,
label: intl.string(t.HjgsKJ)
}],
onAccessibilityAction: function onAccessibilityAction(a0) {
const actionName = a0.nativeEvent.actionName;
if (c11215_11.ACCEPT_MESSAGE_REQUEST === actionName) {
acceptMessageRequest(channel.id);
return void 0;
}
if (c11215_11.IGNORE_MESSAGE_REQUEST === actionName) {
rejectMessageRequest(channel.id);
return void 0;
}
if (c11215_11.PREVIEW_MESSAGE_REQUEST === actionName) {
AnalyticsUtils.track(AnalyticEvents.MESSAGE_REQUEST_PREVIEW_VIEWED, {
is_spam: false,
channel_id: channel.id,
other_user_id: user.id
});
goToMessageRequestPreview2();
return void 0;
}
},
style: styles2.pressableRow,
children: null
};
props2.children = [<View style={styles2.rowContainer}>
<MessageRequestRowSenderDetails channel={messageRequest.channel} otherUser={messageRequest.user} isRestricted={isRestricted} />
<View style={styles2.actionContainer}>
<PressableOpacity accessibilityRole="button" accessibilityLabel={intl.formatToPlainString(t["6p0yBo"], {
name: user == null ? void 0 : user.toString()
})} onPress={function handleAcceptMessageRequest() {
acceptMessageRequest(channel.id);
}} disabled={disabled} style={[styles2.actionButton, isRestricted ? styles2.acceptButtonRestricted : styles2.acceptButton]}>
{!isAcceptLoading && (!isUserProfileLoading && !isOptimisticAccepted) ? <Icon size={Icon.Sizes.SMALL} disableColor source={Module10356} /> : <ActivityIndicator style={styles2.activityIndicator} />}
</PressableOpacity>
<PressableOpacity accessibilityRole="button" accessibilityLabel={intl.formatToPlainString(t["C9Xe6+"], {
name: user == null ? void 0 : user.toString()
})} onPress={function handleRejectMessageRequest() {
rejectMessageRequest(channel.id);
}} disabled={disabled} style={styles2.actionButton}>
{!isRejectLoading && !isOptimisticRejected ? <Icon size={Icon.Sizes.SMALL} disableColor source={Module13954} /> : <ActivityIndicator style={styles2.activityIndicator} />}
</PressableOpacity>
</View>
</View>, isLastRow ? null : <FormDivider iconPush outer />];
return <PressableOpacity {...props2} />;
};
useStyles = createStyles({
sectionContainer: {
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
flexDirection: "row",
justifyContent: "space-between",
marginTop: 6,
marginBottom: 10
},
rowContainer: {
flexDirection: "row",
alignItems: "center",
justifyContent: "space-between",
marginTop: 14,
marginBottom: 12
},
actionContainer: {
flexDirection: "row",
alignItems: "flex-start",
height: "100%"
},
actionButton: {
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH,
tintColor: Module712.colors.INTERACTIVE_TEXT_DEFAULT,
borderRadius: Module712.radii.lg,
alignItems: "center",
justifyContent: "center",
height: 32,
width: 32
},
acceptButton: {
marginRight: 16
},
acceptButtonRestricted: {
marginRight: 12
},
pressableRow: {
borderRadius: Module712.radii.md
},
activityIndicator: {
height: 16,
width: 16
},
list: {
flex: 1,
paddingHorizontal: 16,
alignSelf: "stretch",
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
}
});
c11215_11 = {
ACCEPT_MESSAGE_REQUEST: "accept-message-request",
IGNORE_MESSAGE_REQUEST: "ignore-message-request",
PREVIEW_MESSAGE_REQUEST: "preview-message-request"
};
export default function MessageRequestList(props) {
const goToMessageRequestPreview3 = props.goToMessageRequestPreview;
const styles = useStyles();
const bottom = useSafeAreaInsets_native().bottom;
const sortedMessageRequests = useSortedMessageRequests();
let c22375_2 = sortedMessageRequests;
const listHasSingleMessageRequest = useListHasSingleMessageRequest();
const isMessageRequestRestrictedViewer = useIsMessageRequestRestrictedViewer("MessageRequestList");
if (sortedMessageRequests.length === 0) {
return <MessageRequestEmpty bodyText={intl.string(t.SXrqTf)} />;
}
const data = ["header-section", ...sortedMessageRequests];
return <FlatList style={[styles.list, {
marginBottom: isAndroid() ? bottom : 0
}]} scrollIndicatorInsets={{
right: 0.01
}} contentContainerStyle={{
paddingBottom: bottom,
paddingTop: 12
}} renderItem={function renderItem({ item }) {
if (typeof item === "string") {
return <View style={styles.sectionContainer}>
<Text variant="eyebrow" color="text-default">
{intl.format(t.evH4Yb, {
pendingRequestNumber: c22375_2.length
})}
</Text>
</View>;
}
const id2 = item.channel.id;
const r17 = c22375_2[c22375_2.length - 1];
return <PendingMessageRequestRow key={item.channel.id} messageRequest={item} goToMessageRequestPreview={() => goToMessageRequestPreview3(item.channel.id)} isLastRow={id2 === (r17 == null ? void 0 : r17.channel.id)} hasSingleMessageRequest={listHasSingleMessageRequest} isRestricted={isMessageRequestRestrictedViewer} />;
}} data={data} />;
};
@@ -0,0 +1,40 @@
// Metro module 15706 (f15707).
import { View } from "react-native";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import GuildIcon, { GuildIconSizes } from "../../guild/native/GuildIcon";
import { useMutualGuildsForMessageRequests } from "../hooks/useMutualGuilds";
import { intl, t } from "../../../intl/index.native";
import { GuildIconPile } from "../../../design/components/Pile/native/GuildIconPile.native";
import { Text } from "../../../design/components/Text/native/Text";
import { PressableOpacity } from "../../../design/void/Pressables/native/Pressables";
const useStyles = createStyles({
container: {
flexDirection: "row",
alignItems: "center",
gap: 4
},
label: {
flexShrink: 1
}
});
export default function MessageRequestMutualServers(props) {
const { userId, style, onPress, iconSize = GuildIconSizes.XXSMALL_12 } = props;
const XXSMALL_12 = iconSize;
const { textVariant = "text-xs/medium", suffix } = props;
const styles = useStyles();
const mutualGuildsForMessageRequests = useMutualGuildsForMessageRequests(userId);
const length = mutualGuildsForMessageRequests.length;
const r22 = mutualGuildsForMessageRequests.slice(0, 3);
const r19 = length > 0 ? intl.format(t.eE3oep, {
count: length
}) : intl.string(t.jpY0X5);
const r78 = <View style={[styles.container, style]}>
{length > 0 && <GuildIconPile size={XXSMALL_12} names={r22.map((item) => item.name)}>
{r22.map((item) => <GuildIcon key={item.id} guild={item} size={XXSMALL_12} />)}
</GuildIconPile>}
<Text variant={textVariant} color="text-muted" lineClamp={1} style={styles.label}>
{suffix != null ? `${r19} · ${suffix}` : r19}
</Text>
</View>;
return onPress != null ? length > 0 ? <PressableOpacity accessibilityRole="button" onPress={onPress}>{r78}</PressableOpacity> : r78 : r78;
};
@@ -0,0 +1,100 @@
// Metro module 15705 (f15706).
import { memo, useEffect } from "react";
import { View } from "react-native";
import RelationshipStore from "../../../stores/RelationshipStore";
import { AnalyticEvents, MessageFlags, Fonts } from "../../../Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import TextStyles from "../../rebrand/native/TextStyles";
import Module712 from "../../../_bundle/Module712";
import { useMessageRequestPreview } from "../hooks/useMessageRequestPreview";
import { useStateFromStoresObject } from "../../../_bundle/Module589";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import { intl, t } from "../../../intl/index.native";
import renderMessageMarkup from "../../messages/renderMessageMarkup";
import { getMessageStickers } from "../../stickers/StickersUtils";
import { LegacyText } from "../../../design/void/native";
const useStyles = createStyles({
systemContent: {
fontStyle: "italic",
...TextStyles(Fonts.PRIMARY_MEDIUM, Module712.colors.TEXT_DEFAULT, 12),
lineHeight: 16
},
messageContent: {
...TextStyles(Fonts.PRIMARY_MEDIUM, Module712.colors.TEXT_DEFAULT, 12),
lineHeight: 16
}
});
const r60 = memo(function MessageRequestPreview(props) {
let r2, r37, style, styles;
let channel, message;
L32: {
channel = props.channel;
style = props.style;
message = void 0;
styles = useStyles();
const messageRequestPreview = useMessageRequestPreview(channel);
const { loaded, error } = messageRequestPreview;
message = messageRequestPreview.message;
const stateFromStoresObject = useStateFromStoresObject([RelationshipStore], () => ({
isBlocked: message != null && RelationshipStore.isBlockedForMessage(message),
isIgnored: message != null && RelationshipStore.isIgnoredForMessage(message)
}), [message]);
const { isBlocked, isIgnored } = stateFromStoresObject;
useEffect(() => {
if (message != null) {
AnalyticsUtils.track(AnalyticEvents.MESSAGE_REQUEST_PREVIEW_VIEWED, {
is_spam: channel.isSpam,
channel_id: channel.id,
other_user_id: message.author.id
});
}
}, [channel, message]);
if (error) {
r37 = intl.string(t.BZHld2);
r2 = false;
} else {
r37 = null;
r2 = false;
if (loaded) {
if (message != null && isBlocked) {
r37 = intl.string(t["WPe+xL"]);
r2 = false;
break L32;
}
if (message != null && isIgnored) {
r37 = intl.string(t.uxrh1O);
r2 = false;
break L32;
}
if (message?.content != null && message.content !== "") {
const content = renderMessageMarkup(message, {
noStyleAndInteraction: true,
allowGameMentions: true
}).content;
if (!(Array.isArray(content) && content.length === 0)) {
const r108 = content == null;
r2 = true;
r37 = content;
if (!r108) {
break L32;
}
}
r37 = intl.string(t["262oPB"]);
r2 = false;
break L32;
}
if (message != null) {
r37 = getMessageStickers(message).length > 0 ? intl.string(t["zuI+by"]) : message.interaction != null ? intl.string(t["2v7kfl"]) : message.hasFlag(MessageFlags.IS_VOICE_MESSAGE) ? intl.string(t["6bhHrc"]) : message.hasFlag(MessageFlags.IS_COMPONENTS_V2) ? intl.string(t.Xxm5i3) : intl.string(t.LoMGlg);
r2 = false;
} else {
r37 = intl.string(t["0KfDxM"]);
r2 = false;
}
}
}
}
return <View style={style}>
<LegacyText style={r2 ? styles.messageContent : styles.systemContent} numberOfLines={3} ellipsizeMode="tail">{r37}</LegacyText>
</View>;
});
export default r60;
@@ -0,0 +1,109 @@
// Metro module 15703 (f15704).
import { View } from "react-native";
import RelationshipStore from "../../../stores/RelationshipStore";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { AVATAR_SIZE_MAP, AvatarSizes, Avatar } from "../../../design/void/native";
import Module712 from "../../../_bundle/Module712";
import { useStateFromStores } from "../../../_bundle/Module589";
import UserUtils, { getUserTag } from "../../../utils/UserUtils";
import { useMessageRequestRelativeTimestampText } from "../hooks/useMessageRequestTimestampText";
import AvatarUtils from "../../../utils/native/AvatarUtils";
import { Text } from "../../../design/components/Text/native/Text";
import { intl, t } from "../../../intl/index.native";
import MessageRequestPreview from "./MessageRequestPreview";
import MessageRequestMutualServers from "./MessageRequestMutualServers";
const useStyles = createStyles({
avatar: {
borderRadius: AVATAR_SIZE_MAP[AvatarSizes.NORMAL] / 2,
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH
},
avatarContainer: {
marginRight: 16,
alignItems: "flex-start",
height: "100%"
},
detailsContainer: {
marginRight: 8,
justifyContent: "flex-start",
alignItems: "flex-start",
flex: 1
},
messageDetails: {
flexDirection: "row",
alignItems: "center"
},
username: {
flexShrink: 1,
color: Module712.colors.MOBILE_TEXT_HEADING_PRIMARY
},
timestampSeparator: {
marginHorizontal: 6
},
messagePreview: {
marginTop: 2
},
usernameTextContainer: {
flexShrink: 1
}
});
export default function MessageRequestRowSenderDetails(props) {
const { channel, otherUser } = props;
let isRestricted = props.isRestricted;
if (isRestricted === void 0) {
isRestricted = false;
}
const styles = useStyles();
const stateFromStores = useStateFromStores([RelationshipStore], () => {
const r1 = otherUser == null;
let r8 = null;
if (!r1) {
let r9 = RelationshipStore.getNickname(otherUser.id);
if (r9 == null) {
r9 = UserUtils.getGlobalName(otherUser);
}
r8 = r9;
}
return r8;
});
const messageRequestRelativeTimestampText = useMessageRequestRelativeTimestampText(channel);
const source = AvatarUtils.DEFAULT_AVATARS[Math.floor(Math.random() * AvatarUtils.DEFAULT_AVATARS.length)];
const r63 = [<View style={styles.avatarContainer}>
<Avatar {...otherUser != null ? {
avatarStyle: styles.avatar,
user: otherUser,
guildId: void 0,
disablePlaceholder: true,
avatarDecoration: otherUser?.avatarDecoration
} : {
avatarStyle: styles.avatar,
source
}} />
</View>, ,];
let r75 = stateFromStores;
if (r75 == null) {
r75 = otherUser?.username;
}
if (r75 == null) {
r75 = intl.string(t["30mdIx"]);
}
const r109 = [<View style={styles.messageDetails}>
<Text lineClamp={1} variant="text-md/semibold" color="mobile-text-heading-primary" style={styles.usernameTextContainer}>
<Text variant="text-md/semibold" color="mobile-text-heading-primary" style={styles.username}>{r75}</Text>
{stateFromStores != null && <Text variant="text-md/medium" color="text-muted">
{" "}
{getUserTag(otherUser)}
</Text>}
</Text>
<Text style={styles.timestampSeparator} variant="text-xs/medium" color="text-muted">·</Text>
<Text variant="text-xs/semibold" color="text-muted">{messageRequestRelativeTimestampText}</Text>
</View>, isRestricted ? !isRestricted : <MessageRequestPreview style={styles.messagePreview} channel={channel} />, ,];
if (isRestricted) {
isRestricted = otherUser != null;
}
if (isRestricted) {
isRestricted = <MessageRequestMutualServers style={styles.messagePreview} userId={otherUser.id} suffix={intl.string(t.hTltPn)} />;
}
r109[2] = isRestricted;
r63[1] = <View style={styles.detailsContainer}>{r109}</View>;
return <>{r63}</>;
};
@@ -0,0 +1,38 @@
// Metro module 15728 (f15729).
import { useState, useCallback } from "react";
import { View } from "react-native";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { RESTRICTED_CONTENT_INSET } from "./RestrictedMessagePreviewLayout";
import Module712 from "../../../_bundle/Module712";
import { PressableOpacity } from "../../../design/void/Pressables/native/Pressables";
import { Text } from "../../../design/components/Text/native/Text";
import { intl, t } from "../../../intl/index.native";
const useStyles = createStyles({
toggle: {
marginLeft: RESTRICTED_CONTENT_INSET,
marginVertical: Module712.space.PX_8
}
});
export default function RestrictedBlockedMessageGroup(props) {
const { messages, renderMessage } = props;
const styles = useStyles();
let [expanded, setState] = useState(false);
const r49 = [<PressableOpacity style={styles.toggle} accessibilityRole="button" accessibilityState={{
expanded
}} onPress={useCallback(() => {
setState((prevState) => !prevState);
}, [])}>
<Text variant="text-sm/medium" color="text-muted">
{intl.format(t["+FcYM/"], {
count: messages.length
})}
</Text>
</PressableOpacity>, ,];
if (expanded) {
expanded = messages.map((message) => <View key={message.id}>
{renderMessage(message)}
</View>);
}
r49[1] = expanded;
return <View>{r49}</View>;
};
@@ -0,0 +1,143 @@
// Metro module 15724 (f15725).
import { useCallback } from "react";
import { View } from "react-native";
import RelationshipStore from "../../../stores/RelationshipStore";
import { AnalyticsPages, RelationshipTypes } from "../../../Constants";
import { BLOCK_CONFIRMATION_ACTION_SHEET_KEY } from "../../relationships/native/RestrictionConfirmationConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useDMMessageToReport } from "../../messages/useDMMessageToReport";
import { useStateFromStores } from "../../../_bundle/Module589";
import RelationshipActionCreators from "../../../actions/RelationshipActionCreators";
import PeopleUtils from "../../people/PeopleUtils";
import { confirmRemoveFriend } from "../../user_profile/native/UserProfileAlertUtils";
import UserUtils from "../../../utils/UserUtils";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import { showReportModalForFirstDM } from "../../in_app_reports/ReportModals";
import ChannelActionCreators from "../../../actions/ChannelActionCreators";
import { Button } from "../../../design/components/Button/native/Button.native";
import { intl, t } from "../../../intl/index.native";
import { Text } from "../../../design/components/Text/native/Text";
const useStyles = createStyles({
container: {
gap: Module712.space.PX_8,
marginVertical: Module712.space.PX_12
},
buttonRow: {
flexDirection: "row",
flexWrap: "wrap",
gap: Module712.space.PX_8
}
});
export default function RestrictedMessagePreviewActions(props) {
let r85, r105, r106, r107;
const { channel, user } = props;
const styles = useStyles();
const dMMessageToReport = useDMMessageToReport(channel, user.id, user.bot === true);
const { message, isReportable, isLoaded } = dMMessageToReport;
const stateFromStores = useStateFromStores([RelationshipStore], () => RelationshipStore.getRelationshipType(user.id), [user.id]);
const callback3 = useCallback(() => {
RelationshipActionCreators.addRelationship({
userId: user.id,
context: {
location: AnalyticsPages.DM_CHANNEL
}
});
}, [user.id]);
const callback4 = useCallback(() => {
PeopleUtils.maybeConfirmFriendRequestAccept({
userId: user.id,
location: AnalyticsPages.DM_CHANNEL
});
}, [user.id]);
const callback = useCallback(() => {
RelationshipActionCreators.cancelFriendRequest(user.id, {
location: AnalyticsPages.DM_CHANNEL
});
}, [user.id]);
const callback5 = useCallback(() => {
confirmRemoveFriend({
userDisplayName: UserUtils.getName(user),
onConfirm: () => {
RelationshipActionCreators.removeFriend(user.id, {
location: AnalyticsPages.DM_CHANNEL
});
}
});
}, [user]);
const callback2 = useCallback(() => {
ActionSheetActionCreators.openLazy(import("../../relationships/native/BlockConfirmationActionSheet"), BLOCK_CONFIRMATION_ACTION_SHEET_KEY, {
userId: user.id,
channelId: channel.id
});
}, [user.id, channel.id]);
const callback6 = useCallback(() => {
RelationshipActionCreators.unblockUser(user.id, {
location: AnalyticsPages.DM_CHANNEL
});
}, [user.id]);
const callback7 = useCallback(() => {
if (message != null) {
showReportModalForFirstDM(message, () => {
ChannelActionCreators.closePrivateChannel(channel.id, true);
});
}
}, [message, channel.id]);
const r74 = stateFromStores !== RelationshipTypes.BLOCKED ? <Button size="sm" variant="secondary" text={intl.string(t.l4Emac)} onPress={callback2} /> : null;
L6: {
r85 = null;
if (isReportable) {
if (message == null) {
r85 = null;
if (isLoaded) {
break L6;
}
}
r85 = <Button size="sm" variant="destructive" text={intl.string(t.HHZmDn)} disabled={message == null} onPress={callback7} />;
}
}
if (RelationshipTypes.NONE === stateFromStores) {
const bot = user.bot;
r105 = null;
r106 = null;
r107 = null;
if (!bot) {
r106 = <Button size="sm" variant="active" text={intl.string(t["PMsq/b"])} onPress={callback3} />;
r105 = null;
r107 = null;
}
} else if (RelationshipTypes.PENDING_INCOMING === stateFromStores) {
r107 = intl.format(t.uIomXw, {
username: UserUtils.getName(user)
});
r106 = <Button size="sm" variant="active" text={intl.string(t["+WbSn5"])} onPress={callback4} />;
r105 = <Button size="sm" variant="secondary" text={intl.string(t.rQSndv)} onPress={callback} />;
} else if (RelationshipTypes.FRIEND === stateFromStores) {
r106 = <Button size="sm" variant="secondary" text={intl.string(t.cvSt1J)} onPress={callback5} />;
r105 = null;
r107 = null;
} else if (RelationshipTypes.PENDING_OUTGOING === stateFromStores) {
r106 = <Button size="sm" variant="active" text={intl.string(t.xMH6vD)} disabled onPress={void 0} />;
r105 = null;
r107 = null;
} else {
const BLOCKED = RelationshipTypes.BLOCKED;
r105 = null;
r106 = null;
r107 = null;
if (BLOCKED === stateFromStores) {
r106 = <Button size="sm" variant="secondary" text={intl.string(t.XyHpKH)} onPress={callback6} />;
r105 = null;
r107 = null;
}
}
return <View style={styles.container}>
{r107 != null && <Text variant="text-sm/normal" color="text-default">{r107}</Text>}
<View style={styles.buttonRow}>
{r106}
{r105}
{r74}
{r85}
</View>
</View>;
};
@@ -0,0 +1,83 @@
// Metro module 15723 (f15724).
import { useCallback } from "react";
import { View } from "react-native";
import { MOBILE_MESSAGE_REQUESTS_MODAL_KEY } from "../MessageRequestConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import useAnalyticsLocations from "../../app_analytics/useAnalyticsLocations";
import UserUtils from "../../../utils/UserUtils";
import showUserProfileActionSheet from "../../user_profile/native/showUserProfileActionSheet";
import { copy } from "../../../utils/ClipboardUtils.native";
import { presentUsernameCopied } from "../../toast/native/ToastUtils";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import { trackUserProfileAction } from "../../user_profile/UserProfileAnalyticsUtils";
import { transitionToGuild } from "../../routing/transitionToGuild.native";
import ModalActionCreators from "../../../actions/ModalActionCreators";
import { PressableOpacity } from "../../../design/void/Pressables/native/Pressables";
import { intl, t } from "../../../intl/index.native";
import { Avatar, AvatarSizes } from "../../../design/void/native";
import { Text } from "../../../design/components/Text/native/Text";
import MessageRequestMutualServers from "./MessageRequestMutualServers";
import { GuildIconSizes } from "../../guild/native/GuildIcon";
import RestrictedMessagePreviewActions from "./RestrictedMessagePreviewActions";
const useStyles = createStyles({
container: {
alignItems: "flex-start",
gap: Module712.space.PX_8,
paddingVertical: Module712.space.PX_12
},
avatar: {
marginBottom: Module712.space.PX_4
}
});
export default function RestrictedMessagePreviewHeader(props) {
const { channel, user } = props;
const styles = useStyles();
const analyticsLocations = useAnalyticsLocations().analyticsLocations;
const name = UserUtils.getName(user);
const userTag = UserUtils.getUserTag(user, {
decoration: "never",
identifiable: "always"
});
const callback2 = useCallback(() => {
showUserProfileActionSheet({
userId: user.id,
channelId: channel.id,
sourceAnalyticsLocations: analyticsLocations
});
}, [user.id, channel.id, analyticsLocations]);
const callback3 = useCallback(() => {
copy(userTag);
presentUsernameCopied();
}, [userTag]);
const callback = useCallback(() => {
ActionSheetActionCreators.openLazy(import("../../user_profile/native/UserProfileMutualGuildsActionSheet"), "MutualGuildsActionSheet", {
user,
onPressMutualGuild: (a0) => {
trackUserProfileAction({
action: "PRESS_MUTUAL_GUILD"
});
transitionToGuild(a0);
ActionSheetActionCreators.hideActionSheet();
ModalActionCreators.popWithKey(MOBILE_MESSAGE_REQUESTS_MODAL_KEY);
}
});
}, [user]);
const r70 = [<PressableOpacity accessibilityRole="button" accessibilityLabel={intl.string(t.iXAna6)} onPress={callback2}>
<Avatar style={styles.avatar} user={user} guildId={channel.guild_id} size={AvatarSizes.XXLARGE} avatarDecoration={user.avatarDecoration} />
</PressableOpacity>, <PressableOpacity accessibilityRole="button" accessibilityLabel={intl.string(t.iXAna6)} onPress={callback2}>
<Text variant="heading-xxl/extrabold" color="mobile-text-heading-primary">{name}</Text>
</PressableOpacity>, , , , ,];
const isProvisional = user.isProvisional;
r70[2] = isProvisional ? !isProvisional : <PressableOpacity accessibilityRole="button" accessibilityHint={intl.string(t.y5MwJy)} onPress={callback3}>
<Text variant="heading-lg/medium" color="text-default">{userTag}</Text>
</PressableOpacity>;
r70[3] = <Text variant="text-md/medium" color="text-default">
{intl.formatToPlainString(t["Qvg+6+"], {
username: name
})}
</Text>;
r70[4] = <MessageRequestMutualServers userId={user.id} onPress={callback} iconSize={GuildIconSizes.XSMALL} textVariant="text-md/medium" />;
r70[5] = <RestrictedMessagePreviewActions channel={channel} user={user} />;
return <View style={styles.container}>{r70}</View>;
};
@@ -0,0 +1,6 @@
// Metro module 15726 (f15727).
import { AVATAR_SIZE_MAP, AvatarSizes } from "../../../design/void/native";
const r18 = AVATAR_SIZE_MAP[AvatarSizes.NORMAL];
const r19 = r18 + 18;
export { r18 as RESTRICTED_AVATAR_SIZE };
export { r19 as RESTRICTED_CONTENT_INSET };
@@ -0,0 +1,193 @@
// Metro module 15725 (f15726).
import { useCallback, useMemo } from "react";
import { View } from "react-native";
import MessageStore from "../../../stores/MessageStore";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { RESTRICTED_CONTENT_INSET, RESTRICTED_AVATAR_SIZE } from "./RestrictedMessagePreviewLayout";
import Module712 from "../../../_bundle/Module712";
import { ImageWarningIcon } from "../../../design/components/Icon/native/redesign/generated/ImageWarningIcon";
import { Text } from "../../../design/components/Text/native/Text";
import { intl, t } from "../../../intl/index.native";
import { CircleInformationIcon } from "../../../design/components/Icon/native/redesign/generated/CircleInformationIcon";
import { isSameDay, dateFormat } from "../../../utils/DateUtils";
import useAnalyticsLocations from "../../app_analytics/useAnalyticsLocations";
import { useStateFromStoresArray } from "../../../_bundle/Module589";
import showUserProfileActionSheet from "../../user_profile/native/showUserProfileActionSheet";
import RowGenerator from "../../messages/native/renderer/RowGenerator";
import getRestrictedHiddenMediaCount from "../getRestrictedHiddenMediaCount";
import ChatItem from "../../../components_native/chat/ChatItem";
import { PressableOpacity } from "../../../design/void/Pressables/native/Pressables";
import RestrictedBlockedMessageGroup from "./RestrictedBlockedMessageGroup";
let c11235_9, useStyles;
const HiddenMedia = function HiddenMedia(props) {
const count = props.count;
const styles = useStyles();
return <View>
{Array.from({
length: count
}, (a0, a1) => <View key={a1} style={styles.mediaPlaceholderCard}>
<ImageWarningIcon size="lg" color="text-muted" />
<Text variant="text-sm/medium" color="text-muted">
{intl.string(t.B2xSxL)}
</Text>
</View>)}
<View style={styles.mediaHiddenRow}>
<CircleInformationIcon size="sm" color="text-muted" />
<Text variant="text-sm/normal" color="text-muted">
{intl.string(t["VGf+K3"])}
</Text>
</View>
</View>;
};
c11235_9 = {
renderEmbeds: false,
renderReactions: false,
inlineEmbedMedia: false,
inlineAttachmentMedia: false,
animateEmoji: false,
gifAutoPlay: false,
timestampHourCycle: 0,
renderCodedLinks: false,
renderGiftCode: false,
renderActivityInstanceEmbed: false,
renderActivityInviteEmbed: false,
renderComponents: false,
renderThreadEmbeds: false,
renderReplies: false,
renderCommunicationDisabled: false,
renderAttachments: false,
renderExecutedCommands: false,
renderPolls: false,
renderSharedClientTheme: false,
renderForumPostActions: false,
ignoreMentioned: false,
ignoreEmbedDescriptionCache: false,
forceHideSimpleEmbedContent: false,
enableSwipeActions: false,
useAlternateEmbedColors: false,
restrictedPreview: true
};
useStyles = createStyles({
container: {
flexDirection: "column"
},
hiddenMedia: {
marginLeft: RESTRICTED_CONTENT_INSET
},
messageRow: {
position: "relative"
},
avatarHitbox: {
position: "absolute",
top: 0,
left: 0,
width: RESTRICTED_CONTENT_INSET,
height: RESTRICTED_AVATAR_SIZE
},
dateDivider: {
flexDirection: "row",
alignItems: "center",
gap: Module712.space.PX_8,
marginVertical: Module712.space.PX_12
},
dividerLine: {
flex: 1,
height: 1,
backgroundColor: Module712.colors.BORDER_SUBTLE
},
mediaPlaceholderCard: {
alignItems: "center",
justifyContent: "center",
gap: Module712.space.PX_8,
height: 160,
marginTop: Module712.space.PX_8,
borderRadius: Module712.radii.md,
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH
},
mediaHiddenRow: {
flexDirection: "row",
alignItems: "center",
gap: Module712.space.PX_8,
marginTop: Module712.space.PX_8,
marginBottom: Module712.space.PX_4
}
});
export default function RestrictedMessagePreviewList(props) {
let callback, memo, callback2, c22394_6;
const channelId = props.channelId;
callback = void 0;
memo = void 0;
callback2 = void 0;
c22394_6 = void 0;
const styles2 = useStyles();
const analyticsLocations = useAnalyticsLocations().analyticsLocations;
const stateFromStoresArray = useStateFromStoresArray([MessageStore], () => MessageStore.getMessages(channelId).toArray(), [channelId]);
callback = useCallback((a0) => {
showUserProfileActionSheet({
userId: a0,
channelId,
sourceAnalyticsLocations: analyticsLocations
});
}, [channelId, analyticsLocations]);
memo = useMemo(() => {
const rowGenerator = new RowGenerator();
rowGenerator.setOptions(c11235_9);
return rowGenerator;
}, []);
callback2 = useCallback((a0) => {
const restrictedHiddenMediaCount = getRestrictedHiddenMediaCount(a0);
return <>
<View style={styles2.messageRow}>
<ChatItem pointerEvents="none" message={a0} rowGenerator={memo} />
<PressableOpacity style={styles2.avatarHitbox} accessibilityRole="button" accessibilityLabel={intl.string(t.iXAna6)} onPress={() => callback(a0.author.id)} />
</View>
{restrictedHiddenMediaCount > 0 && <View style={styles2.hiddenMedia}>
<HiddenMedia count={restrictedHiddenMediaCount} />
</View>}
</>;
}, [styles2, memo, callback]);
const r37 = (function groupMessages(a0) {
const r0 = [];
for (const item of a0) {
const message = item;
if (item.blocked) {
const r36 = r0[r0.length - 1];
const r39 = r36 != null ? r36.type === "blocked" ? r36 : null : null;
if (r39 != null) {
if (isSameDay(r39.messages[r39.messages.length - 1].timestamp, message.timestamp)) {
r39.messages.push(message);
continue;
}
}
r0.push({
type: "blocked",
messages: [message]
});
} else {
r0.push({
type: "message",
message
});
}
}
return r0;
})(stateFromStoresArray);
c22394_6 = r37;
return <View style={styles2.container}>
{r37.map((item, index) => {
const r23 = item.type === "message" ? item.message : item.messages[0];
const r9 = c22394_6[index - 1];
const r24 = r9 == null ? null : r9.type === "message" ? r9.message : r9.messages[r9.messages.length - 1];
return <View key={item.type === "message" ? item.message.id : `blocked-${r23.id}`}>
{(r24 == null || !isSameDay(r24.timestamp, r23.timestamp)) && <View style={styles2.dateDivider}>
<View style={styles2.dividerLine} />
<Text variant="text-xs/semibold" color="text-muted">
{dateFormat(r23.timestamp, "LL")}
</Text>
<View style={styles2.dividerLine} />
</View>}
{item.type === "message" ? callback2(item.message) : <RestrictedBlockedMessageGroup messages={item.messages} renderMessage={callback2} />}
</View>;
})}
</View>;
};
@@ -0,0 +1,85 @@
// Metro module 15722 (f15723).
import { useRef, useState, useEffect } from "react";
import { ScrollView, View } from "react-native";
import ChannelStore from "../../../stores/ChannelStore";
import MessageStore from "../../../stores/MessageStore";
import UserStore from "../../../stores/UserStore";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import useSafeAreaInsets_native from "../../safe_area/useSafeAreaInsets.native";
import { useStateFromStores } from "../../../_bundle/Module589";
import RestrictedMessagePreviewHeader from "./RestrictedMessagePreviewHeader";
import RestrictedMessagePreviewList from "./RestrictedMessagePreviewList";
import ChatInputGuardMessageRequest from "../../chat_input/native/guard/ChatInputGuardMessageRequest";
const useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
},
scroll: {
flex: 1
},
hidden: {
opacity: 0
},
scrollContent: {
paddingHorizontal: Module712.space.PX_16,
paddingTop: Module712.space.PX_8,
paddingBottom: Module712.space.PX_8
},
footer: {
paddingHorizontal: Module712.space.PX_12
}
});
export default function RestrictedMessageRequestPreview(props) {
let c22390_6;
const channelId = props.channelId;
c22390_6 = void 0;
const styles = useStyles();
const bottom = useSafeAreaInsets_native().bottom;
const ref = useRef(null);
const ref2 = useRef(false);
const [state, setState] = useState(false);
const stateFromStores = useStateFromStores([MessageStore], () => MessageStore.getMessages(channelId).length > 0, [channelId]);
const stateFromStores3 = useStateFromStores([ChannelStore], () => ChannelStore.getChannel(channelId), [channelId]);
const r46 = stateFromStores3 == null;
let r47 = void 0;
if (!r46) {
const recipients = stateFromStores3.recipients;
r47 = recipients == null ? void 0 : recipients[0];
}
c22390_6 = r47;
const stateFromStores2 = useStateFromStores([UserStore], () => c22390_6 != null ? UserStore.getUser(c22390_6) : void 0, [r47]);
useEffect(() => {
if (state) {
return void 0;
}
let c28141_0 = setTimeout(() => setState(true), 1000);
return () => clearTimeout(c28141_0);
}, [state]);
return stateFromStores3 == null ? null : stateFromStores2 == null ? null : <View style={styles.container}>
<ScrollView ref={ref} style={[styles.scroll, state ? null : styles.hidden]} contentContainerStyle={styles.scrollContent} onScrollBeginDrag={() => {
ref2.current = true;
}} onContentSizeChange={() => {
if (!ref2.current) {
const current = ref.current;
if (current != null) {
current.scrollToEnd({
animated: false
});
}
}
if (state ? !state : stateFromStores) {
requestAnimationFrame(() => setState(true));
}
}}>
<RestrictedMessagePreviewHeader channel={stateFromStores3} user={stateFromStores2} />
<RestrictedMessagePreviewList channelId={channelId} />
</ScrollView>
<View style={[styles.footer, {
paddingBottom: Module712.space.PX_8 + bottom
}]}>
<ChatInputGuardMessageRequest channel={stateFromStores3} />
</View>
</View>;
};
@@ -0,0 +1,26 @@
// Metro module 13047 (f13048).
import { useCallback } from "react";
import { MessageRequestRestrictedGuildIds, RestrictedGuildIds } from "../../../user_settings/UserSettings";
import { getSanitizedMessageRequestRestrictedGuilds } from "../../../../utils/UserSettingsUtils";
import { ActionSheetSwitchRow } from "../../../../design/components/Sheet/native/ActionSheetRow.native";
import { intl, t } from "../../../../intl/index.native";
import useIsStricterMessageRequests from "../../hooks/useIsStricterMessageRequests";
const MessageRequestRestrictedGuildPrivacyOption = function MessageRequestRestrictedGuildPrivacyOption(props) {
const guild = props.guild;
const id = guild.id;
const r8 = MessageRequestRestrictedGuildIds.useSetting().includes(id);
const disabled = RestrictedGuildIds.useSetting().includes(guild.id);
const callback = useCallback((a0) => {
const sanitizedMessageRequestRestrictedGuilds = getSanitizedMessageRequestRestrictedGuilds();
if (a0) {
sanitizedMessageRequestRestrictedGuilds.delete(id);
} else {
sanitizedMessageRequestRestrictedGuilds.add(id);
}
MessageRequestRestrictedGuildIds.updateSetting(Array.from(sanitizedMessageRequestRestrictedGuilds));
}, [id]);
return <ActionSheetSwitchRow label={intl.string(t["7UgSGP"])} subLabel={intl.string(t.INRaYb)} value={disabled ? !disabled : !r8} onValueChange={callback} disabled={disabled} />;
};
export function useMessageRequestPrivacyOption({ guild }) {
return useIsStricterMessageRequests() ? null : <MessageRequestRestrictedGuildPrivacyOption guild={guild} />;
}
@@ -0,0 +1,83 @@
// Metro module 11539 (f11540).
import { useState } from "react";
import { View } from "react-native";
import UserStore from "../../../../stores/UserStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { useMessageRequestActions } from "../../hooks/useMessageRequestActions";
import ToastActionCreators from "../../../toast/native/ToastActionCreators";
import { intl, t } from "../../../../intl/index.native";
import Module9172 from "../../../../_bundle/Module9172";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import { BottomSheetTitleHeader } from "../../../../design/components/Sheet/native/BottomSheetTitleHeader.native";
import { ActionSheetCloseButton } from "../../../../design/components/Sheet/native/ActionSheetCloseButton.native";
import { FormSwitchRow } from "../../../../design/void/Form/native/index";
import { Button } from "../../../../design/components/Button/native/Button.native";
const useStyles = createStyles({
header: {
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH
},
container: {
marginTop: Module712.space.PX_24,
paddingHorizontal: Module712.space.PX_16
},
buttonContainer: {
marginTop: Module712.space.PX_24
},
switch: {
paddingHorizontal: 0
}
});
export default function SpamMessageRequestHamActionSheet(props) {
let acceptMessageRequest;
const { channel, onConfirm, onCancel } = props;
acceptMessageRequest = void 0;
const styles = useStyles();
const [state, setState] = useState(false);
const messageRequestActions = useMessageRequestActions({
user: useStateFromStores([UserStore], () => UserStore.getUser(channel.getRecipientId())),
onError: function onError() {
ToastActionCreators.open({
key: "MESSAGE_REQUEST_REQUEST_ERROR_ALERT_TITLE",
content: intl.string(t["EDYbS+"]),
icon: Module9172
});
},
onAcceptSuccess: function onAcceptSuccess() {
ActionSheetActionCreators.hideActionSheet();
}
});
acceptMessageRequest = messageRequestActions.acceptMessageRequest;
let isAcceptLoading = messageRequestActions.isAcceptLoading;
const { isUserProfileLoading, isOptimisticAccepted } = messageRequestActions;
const r68 = [<BottomSheetTitleHeader title={intl.string(t["9ty6yc"])} trailing={<ActionSheetCloseButton onPress={function onPress() {
ActionSheetActionCreators.hideActionSheet();
onCancel();
}} />} backgroundColor={styles.header} />, ,];
const r87 = [<FormSwitchRow style={styles.switch} label={intl.string(t.ZhGpNQ)} value={state} switchProps={{
renderIosBackground: true
}} onValueChange={(value) => setState(value)} />, ,];
const props2 = {
size: "md",
onPress: function onPress() {
onConfirm(state);
acceptMessageRequest(channel.id);
},
text: intl.string(t.olZgw5),
disabled: (isAcceptLoading ? isAcceptLoading : isUserProfileLoading) || isOptimisticAccepted,
loading: null
};
if (!isAcceptLoading) {
isAcceptLoading = isOptimisticAccepted;
}
props2.loading = isAcceptLoading;
r87[1] = <View style={styles.buttonContainer}>
<Button {...props2} />
</View>;
r68[1] = <View style={styles.container}>{r87}</View>;
return <BottomSheet onDismiss={function onDismiss() {
onCancel();
}}>{r68}</BottomSheet>;
};
@@ -0,0 +1,221 @@
// Metro module 15718 (f15719).
import { useCallback } from "react";
import { ActivityIndicator, FlatList, View } from "react-native";
import { AnalyticEvents } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { intl, t } from "../../../../intl/index.native";
import { useLongestChannelMessageBeforeReply } from "../../../messages/useLongestChannelMessageBeforeReply";
import ToastActionCreators from "../../../toast/native/ToastActionCreators";
import Module9172 from "../../../../_bundle/Module9172";
import { transitionToChannel } from "../../../routing/transitionToChannel";
import ModalActionCreators from "../../../../actions/ModalActionCreators";
import { useMessageRequestActions } from "../../hooks/useMessageRequestActions";
import AnalyticsUtils from "../../../../utils/AnalyticsUtils";
import { PressableOpacity } from "../../../../design/void/Pressables/native/Pressables";
import MessageRequestRowSenderDetails from "../MessageRequestRowSenderDetails";
import { Icon } from "../../../../design/void/native";
import Module10356 from "../../../../_bundle/Module10356";
import Module13954 from "../../../../_bundle/Module13954";
import { FormDivider } from "../../../../design/void/Form/native/index";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import { useSpamMessageRequestCount } from "../../hooks/useSpamMessageRequestsCount";
import useSortedSpamMessageRequests from "../../hooks/useSortedSpamMessageRequests";
import { useListHasSingleSpamMessageRequest } from "../../hooks/useListHasSingleMessageRequest";
import useMountEffect from "../../../../hooks/useMountEffect";
import MonitoringAgent from "../../../monitoring/MonitoringAgent";
import { MetricEvents } from "../../../../_bundle/Module5872";
import MessageRequestEmpty from "../MessageRequestEmpty";
import { isAndroid } from "../../../../utils/PlatformUtils";
import { Text } from "../../../../design/components/Text/native/Text";
let useStyles, c11228_11;
const PendingSpamMessageRequestRow = function PendingSpamMessageRequestRow(props) {
let rejectMessageRequest, markAsNotSpam;
const { messageRequest, goToMessageRequestPreview: goToMessageRequestPreview2, isLastRow, hasSingleMessageRequest } = props;
rejectMessageRequest = void 0;
markAsNotSpam = void 0;
const styles2 = useStyles();
const { user, channel } = messageRequest;
const id = channel.id;
const longestChannelMessageBeforeReply = useLongestChannelMessageBeforeReply(id, channel.getRecipientId());
const callback = useCallback(() => {
ToastActionCreators.open({
key: "MESSAGE_REQUESTS_SPAM_ERROR_ALERT_TITLE",
content: intl.string(t.pIQ3h4),
icon: Module9172
});
}, []);
const messageRequestActions = useMessageRequestActions({
user,
onAcceptSuccess: useCallback(() => {
if (hasSingleMessageRequest) {
transitionToChannel(id);
ModalActionCreators.pop();
}
}, [id, hasSingleMessageRequest]),
onError: callback
});
rejectMessageRequest = messageRequestActions.rejectMessageRequest;
const { isAcceptLoading, isRejectLoading, isUserProfileLoading, isOptimisticAccepted, isOptimisticRejected } = messageRequestActions;
markAsNotSpam = messageRequestActions.markAsNotSpam;
const disabled = isAcceptLoading || isRejectLoading || isUserProfileLoading || isOptimisticAccepted || isOptimisticRejected;
const props2 = {
onPress: function handleSelectRow() {
AnalyticsUtils.track(AnalyticEvents.MESSAGE_REQUEST_PREVIEW_VIEWED, {
is_spam: true,
channel_id: channel.id,
other_user_id: user.id
});
goToMessageRequestPreview2();
},
accessibilityRole: "button",
accessibilityActions: [{
name: c11228_11.ACCEPT_SPAM_MESSAGE,
label: intl.string(t.apePSa)
}, {
name: c11228_11.IGNORE_SPAM_MESSAGE,
label: intl.string(t.MWOV9D)
}, {
name: c11228_11.PREVIEW_SPAM_MESSAGE,
label: intl.string(t.I6PFLB)
}],
onAccessibilityAction: function onAccessibilityAction(a0) {
const actionName = a0.nativeEvent.actionName;
if (c11228_11.ACCEPT_SPAM_MESSAGE === actionName) {
markAsNotSpam(channel, longestChannelMessageBeforeReply);
return void 0;
}
if (c11228_11.IGNORE_SPAM_MESSAGE === actionName) {
rejectMessageRequest(channel.id);
return void 0;
}
if (c11228_11.PREVIEW_SPAM_MESSAGE === actionName) {
AnalyticsUtils.track(AnalyticEvents.MESSAGE_REQUEST_PREVIEW_VIEWED, {
is_spam: true,
channel_id: channel.id,
other_user_id: user.id
});
goToMessageRequestPreview2();
return void 0;
}
},
style: styles2.pressableRow,
children: null
};
props2.children = [<View style={styles2.rowContainer}>
<MessageRequestRowSenderDetails channel={messageRequest.channel} otherUser={messageRequest.user} />
<View style={styles2.actionContainer}>
<PressableOpacity accessibilityRole="button" accessibilityLabel={intl.formatToPlainString(t["6p0yBo"], {
name: user == null ? void 0 : user.toString()
})} onPress={function handleAcceptMessageRequest() {
markAsNotSpam(channel, longestChannelMessageBeforeReply);
}} disabled={disabled} style={[styles2.actionButton, styles2.acceptButton]}>
{!isAcceptLoading && (!isUserProfileLoading && !isOptimisticAccepted) ? <Icon size={Icon.Sizes.SMALL} disableColor source={Module10356} /> : <ActivityIndicator style={styles2.activityIndicator} />}
</PressableOpacity>
<PressableOpacity accessibilityRole="button" accessibilityLabel={intl.formatToPlainString(t["C9Xe6+"], {
name: user == null ? void 0 : user.toString()
})} onPress={function handleRejectMessageRequest() {
rejectMessageRequest(channel.id);
}} disabled={disabled} style={styles2.actionButton}>
{!isRejectLoading && !isOptimisticRejected ? <Icon size={Icon.Sizes.SMALL} disableColor source={Module13954} /> : <ActivityIndicator style={styles2.activityIndicator} />}
</PressableOpacity>
</View>
</View>, isLastRow ? null : <FormDivider iconPush outer />];
return <PressableOpacity {...props2} />;
};
useStyles = createStyles({
sectionContainer: {
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
flexDirection: "row",
justifyContent: "space-between",
marginTop: 6,
marginBottom: 10
},
rowContainer: {
flexDirection: "row",
alignItems: "center",
justifyContent: "space-between",
marginTop: 14,
marginBottom: 12
},
actionContainer: {
flexDirection: "row",
alignItems: "flex-start",
height: "100%"
},
actionButton: {
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH,
tintColor: Module712.colors.INTERACTIVE_TEXT_DEFAULT,
borderRadius: Module712.radii.lg,
alignItems: "center",
justifyContent: "center",
height: 32,
width: 32
},
acceptButton: {
marginRight: 16
},
pressableRow: {
borderRadius: Module712.radii.md
},
activityIndicator: {
height: 16,
width: 16
},
list: {
flex: 1,
paddingHorizontal: 16,
alignSelf: "stretch",
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
}
});
c11228_11 = {
ACCEPT_SPAM_MESSAGE: "accept-spam-message-request",
IGNORE_SPAM_MESSAGE: "ignore-spam-message-request",
PREVIEW_SPAM_MESSAGE: "preview-spam-message-request"
};
export default function SpamMessageList(props) {
const goToMessageRequestPreview3 = props.goToMessageRequestPreview;
const styles = useStyles();
const bottom = useSafeAreaInsets_native().bottom;
const spamMessageRequestCount = useSpamMessageRequestCount();
const sortedSpamMessageRequests = useSortedSpamMessageRequests();
let c22386_3 = sortedSpamMessageRequests;
const listHasSingleSpamMessageRequest = useListHasSingleSpamMessageRequest();
useMountEffect(() => {
AnalyticsUtils.track(AnalyticEvents.SPAM_MESSAGE_REQUESTS_VIEWED, {
num_spam_message_requests: spamMessageRequestCount
});
MonitoringAgent.increment({
name: MetricEvents.SPAM_MESSAGE_REQUEST_VIEW
});
});
if (sortedSpamMessageRequests.length === 0) {
return <MessageRequestEmpty bodyText={intl.string(t.hasFPQ)} />;
}
const data = ["header-section", ...sortedSpamMessageRequests];
return <FlatList style={[styles.list, {
marginBottom: isAndroid() ? bottom : 0
}]} scrollIndicatorInsets={{
right: 0.01
}} contentContainerStyle={{
paddingBottom: bottom,
paddingTop: 12
}} renderItem={function renderItem({ item }) {
let r29;
if (typeof item === "string") {
r29 = <View style={styles.sectionContainer}>
<Text variant="eyebrow" color="text-default">
{intl.format(t.aNh5Kf, {
count: c22386_3.length
})}
</Text>
</View>;
} else {
const id2 = item.channel.id;
const r21 = c22386_3[c22386_3.length - 1];
r29 = <PendingSpamMessageRequestRow key={item.channel.id} messageRequest={item} goToMessageRequestPreview={() => goToMessageRequestPreview3(item.channel.id)} isLastRow={id2 === (r21 == null ? void 0 : r21.channel.id)} hasSingleMessageRequest={listHasSingleSpamMessageRequest} />;
}
return r29;
}} data={data} />;
};