Files
discord-decomp/modules/guild_automod/native/ModerateUserActionSheet.tsx
T
2026-11-01 12:12:55 +02:00

133 lines
6.6 KiB
TypeScript

// Metro module 11024 (f11025).
import { memo, Fragment } from "react";
import GuildMemberStore from "../../../stores/GuildMemberStore";
import GuildStore from "../../../stores/GuildStore";
import PermissionStore from "../../../stores/PermissionStore";
import UserStore from "../../../stores/UserStore";
import { Permissions } from "../../../Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { useStateFromStores, useStateFromStoresObject } from "../../../_bundle/Module589";
import { canKickMember, canBanMember } from "../../guild_member/GuildMemberUtils";
import { canToggleCommunicationDisableOnUser } from "../../guild_communication_disabled/useCanToggleCommunicationDisableOnUser";
import NicknameUtils from "../../../utils/NicknameUtils";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import { ActionSheetRow } from "../../../design/components/Sheet/native/ActionSheetRow.native";
import { intl, t } from "../../../intl/index.native";
import { SettingsIcon } from "../../../design/components/Icon/native/redesign/generated/SettingsIcon";
import ModalActionCreators from "../../../actions/ModalActionCreators";
import showModerateUserActionSheet from "./showModerateUserActionSheet";
import * as _CommunicationDisabledUtils from "../../guild_communication_disabled/CommunicationDisabledUtils";
import { ClockWarningIcon } from "../../../design/components/Icon/native/redesign/generated/ClockWarningIcon";
import { openEnableCommunication, openDisableCommunication } from "../../guild_communication_disabled/GuildDisableCommunicationActionCreators.native";
import { UserMinusIcon } from "../../../design/components/Icon/native/redesign/generated/UserMinusIcon";
import showKickConfirmModal from "../../guild_moderation/native/showKickConfirmModal";
import { HammerIcon } from "../../../design/components/Icon/native/redesign/generated/HammerIcon";
import showBanConfirmModal from "../../guild_moderation/native/showBanConfirmModal";
import { BottomSheet } from "../../../design/components/Sheet/native/BottomSheet.native";
import { BottomSheetTitleHeader } from "../../../design/components/Sheet/native/BottomSheetTitleHeader.native";
import MemberRolesList from "../../../components_native/MemberRolesList";
import { TableRowGroup } from "../../../design/components/TableRow/native/TableRowGroup.native";
const useStyles = createStyles({
container: {
padding: 16,
gap: 16
},
memberRoles: {
justifyContent: "flex-start"
}
});
const r39 = memo(function({ user, guild }) {
let hideActionSheet, isMemberCommunicationDisabled;
hideActionSheet = void 0;
isMemberCommunicationDisabled = void 0;
const styles = useStyles();
const stateFromStores = useStateFromStores([GuildMemberStore], () => GuildMemberStore.getMember(guild?.id, user.id), [user, guild]);
const userRoles = stateFromStores != null ? stateFromStores.roles : [];
const stateFromStoresObject = useStateFromStoresObject([PermissionStore, UserStore, GuildStore], () => ({
canKickUser: guild != null && canKickMember(user, guild),
canBanUser: guild != null && canBanMember(user, guild),
canChangeNick: guild != null && PermissionStore.canManageUser(Permissions.MANAGE_NICKNAMES, user, guild),
canManageRoles: guild != null && PermissionStore.can(Permissions.MANAGE_ROLES, guild),
canModerateMembers: guild != null && canToggleCommunicationDisableOnUser(guild.id, user.id, [UserStore, GuildStore, PermissionStore])
}), [user, guild]);
const { canKickUser, canBanUser, canChangeNick, canManageRoles, canModerateMembers } = stateFromStoresObject;
if (guild != null && stateFromStores != null) {
const name = NicknameUtils.getName(guild.id, void 0, user);
hideActionSheet = ActionSheetActionCreators.hideActionSheet;
const r47 = stateFromStores != null && ((canKickUser ? canKickUser : canBanUser) || canChangeNick || canManageRoles) && !user.isNonUserBot();
const r51 = [];
if (r47) {
r51.push(<ActionSheetRow label={intl.string(t.HxrBOZ)} icon={<ActionSheetRow.Icon IconComponent={SettingsIcon} />} onPress={() => {
hideActionSheet();
ModalActionCreators.pushLazy(import("../../guild_settings/native/GuildSettingsModalMemberEdit"), {
userId: user.id,
guildId: guild.id,
onClose: () => {
ModalActionCreators.pop();
showModerateUserActionSheet({
guild,
user
});
},
onRemove: () => {
ModalActionCreators.pop();
}
});
}} />);
}
if (stateFromStores != null && canModerateMembers) {
isMemberCommunicationDisabled = _CommunicationDisabledUtils.isMemberCommunicationDisabled(stateFromStores);
r51.push(<ActionSheetRow label={isMemberCommunicationDisabled ? intl.string(t.qXtNtS) : intl.string(t.xpsADY)} icon={<ActionSheetRow.Icon IconComponent={ClockWarningIcon} />} onPress={() => {
hideActionSheet();
if (isMemberCommunicationDisabled) {
openEnableCommunication({
guildId: stateFromStores.guildId,
userId: stateFromStores.userId
});
} else {
openDisableCommunication({
guildId: stateFromStores.guildId,
userId: stateFromStores.userId
});
}
}} />);
}
if (stateFromStores != null && canKickUser) {
r51.push(<ActionSheetRow label={intl.string(t["3glT6Z"])} icon={<ActionSheetRow.Icon IconComponent={UserMinusIcon} />} variant="danger" onPress={() => {
showKickConfirmModal({
guildId: guild.id,
userId: user.id,
cancelButtonCallback: () => showModerateUserActionSheet({
guild,
user
})
});
}} />);
}
if (stateFromStores != null && canBanUser) {
r51.push(<ActionSheetRow label={intl.string(t["5MBJ5M"])} icon={<ActionSheetRow.Icon IconComponent={HammerIcon} />} variant="danger" onPress={() => {
showBanConfirmModal({
guildId: guild.id,
userId: user.id,
cancelButtonCallback: () => showModerateUserActionSheet({
guild,
user
})
});
}} />);
}
return <BottomSheet header={<BottomSheetTitleHeader title={intl.formatToPlainString(t["792QKT"], {
nick: name
})} />} bodyStyles={styles.container}>
<MemberRolesList style={[styles.memberRoles]} guild={guild} userRoles={userRoles} />
<TableRowGroup hasIcons>
{r51.map((item, index) => <Fragment key={`action_${index}`}>
{item}
</Fragment>)}
</TableRowGroup>
</BottomSheet>;
}
return null;
});
export default r39;