feat: show confirm modal for block action

This commit is contained in:
Zamitto 2024-07-26 11:30:01 -03:00
parent 00c46bc981
commit 15269f3908
7 changed files with 64 additions and 8 deletions

View file

@ -260,6 +260,7 @@
"cancel_request": "Cancel request", "cancel_request": "Cancel request",
"undo_friendship": "Undo friendship", "undo_friendship": "Undo friendship",
"request_accepted": "Request accepted", "request_accepted": "Request accepted",
"user_blocked_successfully": "User blocked successfully" "user_blocked_successfully": "User blocked successfully",
"user_block_modal_text": "This will block {{displayName}}"
} }
} }

View file

@ -260,6 +260,7 @@
"cancel_request": "Cancelar pedido", "cancel_request": "Cancelar pedido",
"undo_friendship": "Desfazer amizade", "undo_friendship": "Desfazer amizade",
"request_accepted": "Pedido de amizade aceito", "request_accepted": "Pedido de amizade aceito",
"user_blocked_successfully": "Usuário bloqueado com sucesso" "user_blocked_successfully": "Usuário bloqueado com sucesso",
"user_block_modal_text": "Bloquear {{displayName}}"
} }
} }

View file

@ -5,7 +5,7 @@ const blockUser = async (
_event: Electron.IpcMainInvokeEvent, _event: Electron.IpcMainInvokeEvent,
userId: string userId: string
): Promise<void> => { ): Promise<void> => {
return HydraApi.get(`/user/${userId}/block`); return HydraApi.post(`/user/${userId}/block`);
}; };
registerEvent("block", blockUser); registerEvent("blockUser", blockUser);

View file

@ -5,7 +5,7 @@ const unblockUser = async (
_event: Electron.IpcMainInvokeEvent, _event: Electron.IpcMainInvokeEvent,
userId: string userId: string
): Promise<void> => { ): Promise<void> => {
return HydraApi.get(`/user/${userId}/unblock`); return HydraApi.post(`/user/${userId}/unblock`);
}; };
registerEvent("unblockUser", unblockUser); registerEvent("unblockUser", unblockUser);

View file

@ -0,0 +1,44 @@
import { Button, Modal } from "@renderer/components";
import * as styles from "./user.css";
import { useTranslation } from "react-i18next";
export interface UserBlockModalProps {
visible: boolean;
displayName: string;
onConfirm: () => void;
onClose: () => void;
}
export const UserBlockModal = ({
visible,
displayName,
onConfirm,
onClose,
}: UserBlockModalProps) => {
const { t } = useTranslation("user_profile");
return (
<>
<Modal
visible={visible}
title={t("sign_out_modal_title")}
onClose={onClose}
>
<div className={styles.signOutModalContent}>
<p style={{ fontFamily: "Fira Sans" }}>
{t("user_block_modal_text", { displayName })}
</p>
<div className={styles.signOutModalButtonsContainer}>
<Button onClick={onConfirm} theme="danger">
{t("block_user")}
</Button>
<Button onClick={onClose} theme="primary">
{t("cancel")}
</Button>
</div>
</div>
</Modal>
</>
);
};

View file

@ -28,6 +28,7 @@ import { Button, Link } from "@renderer/components";
import { UserEditProfileModal } from "./user-edit-modal"; import { UserEditProfileModal } from "./user-edit-modal";
import { UserSignOutModal } from "./user-signout-modal"; import { UserSignOutModal } from "./user-signout-modal";
import { UserFriendModalTab } from "../shared-modals/user-friend-modal"; import { UserFriendModalTab } from "../shared-modals/user-friend-modal";
import { UserBlockModal } from "./user-block-modal";
const MAX_MINUTES_TO_SHOW_IN_PLAYTIME = 120; const MAX_MINUTES_TO_SHOW_IN_PLAYTIME = 120;
@ -59,6 +60,7 @@ export function UserContent({
useState<string | undefined>(); useState<string | undefined>();
const [showEditProfileModal, setShowEditProfileModal] = useState(false); const [showEditProfileModal, setShowEditProfileModal] = useState(false);
const [showSignOutModal, setShowSignOutModal] = useState(false); const [showSignOutModal, setShowSignOutModal] = useState(false);
const [showUserBlockModal, setShowUserBlockModal] = useState(false);
const { gameRunning } = useAppSelector((state) => state.gameRunning); const { gameRunning } = useAppSelector((state) => state.gameRunning);
@ -150,6 +152,7 @@ export function UserContent({
const handleBlockUser = () => { const handleBlockUser = () => {
blockUser(userProfile.id) blockUser(userProfile.id)
.then(() => { .then(() => {
setShowUserBlockModal(false);
showSuccessToast(t("user_blocked_successfully")); showSuccessToast(t("user_blocked_successfully"));
navigate(-1); navigate(-1);
}) })
@ -204,7 +207,7 @@ export function UserContent({
{t("add_friend")} {t("add_friend")}
</Button> </Button>
<Button theme="danger" onClick={handleBlockUser}> <Button theme="danger" onClick={() => setShowUserBlockModal(true)}>
{t("block_user")} {t("block_user")}
</Button> </Button>
</> </>
@ -272,6 +275,13 @@ export function UserContent({
onConfirm={handleConfirmSignout} onConfirm={handleConfirmSignout}
/> />
<UserBlockModal
visible={showUserBlockModal}
onClose={() => setShowUserBlockModal(false)}
onConfirm={handleBlockUser}
displayName={userProfile.displayName}
/>
<section <section
className={styles.profileContentBox} className={styles.profileContentBox}
style={{ style={{

View file

@ -2,7 +2,7 @@ import { Button, Modal } from "@renderer/components";
import * as styles from "./user.css"; import * as styles from "./user.css";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
export interface UserEditProfileModalProps { export interface UserSignOutModalProps {
visible: boolean; visible: boolean;
onConfirm: () => void; onConfirm: () => void;
onClose: () => void; onClose: () => void;
@ -12,7 +12,7 @@ export const UserSignOutModal = ({
visible, visible,
onConfirm, onConfirm,
onClose, onClose,
}: UserEditProfileModalProps) => { }: UserSignOutModalProps) => {
const { t } = useTranslation("user_profile"); const { t } = useTranslation("user_profile");
return ( return (