feat: finish ui for modal showing pending requests

This commit is contained in:
Zamitto 2024-07-10 14:29:04 -03:00
parent 6cc8e8f5fe
commit 007da03837
4 changed files with 52 additions and 54 deletions

View file

@ -26,7 +26,7 @@ export const UserAddFriendsModal = ({
const navigate = useNavigate(); const navigate = useNavigate();
const { userDetails, sendFriendRequest } = useUserDetails(); const { sendFriendRequest } = useUserDetails();
const { showSuccessToast, showErrorToast } = useToast(); const { showSuccessToast, showErrorToast } = useToast();
@ -51,21 +51,17 @@ export const UserAddFriendsModal = ({
useEffect(() => { useEffect(() => {
setPendingRequests([ setPendingRequests([
{ {
AId: "abcd1234", userId: "abcd1234",
ADisplayName: "Punheta Master 123", displayName: "Punheta Master 123",
AProfileImageUrl: profileImageUrl:
"https://cdn.discordapp.com/avatars/1239959140785455295/4aff4b901c7a9f5f814b4379b6cfd58a.webp", "https://cdn.discordapp.com/avatars/1239959140785455295/4aff4b901c7a9f5f814b4379b6cfd58a.webp",
BId: "BMmNRmP3", type: "RECEIVED",
BDisplayName: "Hydra",
BProfileImageUrl: null,
}, },
{ {
AId: "BMmNRmP3", userId: "12345678",
ADisplayName: "Hydra", displayName: "Deyvis0n",
AProfileImageUrl: null, profileImageUrl: null,
BId: "12345678", type: "SENT",
BDisplayName: "Deyvis0n",
BProfileImageUrl: null,
}, },
]); ]);
}, []); }, []);
@ -154,29 +150,13 @@ export const UserAddFriendsModal = ({
> >
<h3>Pendentes</h3> <h3>Pendentes</h3>
{pendingRequests.map((request) => { {pendingRequests.map((request) => {
if (request.AId === userDetails?.id) {
return (
<UserFriendPendingRequest
key={request.AId}
displayName={request.BDisplayName}
isRequestSent={true}
profileImageUrl={request.BProfileImageUrl}
userId={request.BId}
onClickAcceptRequest={handleClickAcceptFriendRequest}
onClickCancelRequest={handleClickCancelFriendRequest}
onClickRefuseRequest={handleClickRefuseFriendRequest}
onClickRequest={handleClickFriend}
/>
);
}
return ( return (
<UserFriendPendingRequest <UserFriendPendingRequest
key={request.BId} key={request.userId}
displayName={request.ADisplayName} displayName={request.displayName}
isRequestSent={false} isRequestSent={request.type === "SENT"}
profileImageUrl={request.AProfileImageUrl} profileImageUrl={request.profileImageUrl}
userId={request.AId} userId={request.userId}
onClickAcceptRequest={handleClickAcceptFriendRequest} onClickAcceptRequest={handleClickAcceptFriendRequest}
onClickCancelRequest={handleClickCancelFriendRequest} onClickCancelRequest={handleClickCancelFriendRequest}
onClickRefuseRequest={handleClickRefuseFriendRequest} onClickRefuseRequest={handleClickRefuseFriendRequest}

View file

@ -1,5 +1,9 @@
import { CheckCircleIcon, XCircleIcon } from "@primer/octicons-react"; import {
import { SPACING_UNIT, vars } from "@renderer/theme.css"; CheckCircleIcon,
PersonIcon,
XCircleIcon,
} from "@primer/octicons-react";
import { SPACING_UNIT } from "@renderer/theme.css";
import * as styles from "./user.css"; import * as styles from "./user.css";
import cn from "classnames"; import cn from "classnames";
@ -30,16 +34,20 @@ export const UserFriendPendingRequest = ({
className={cn(styles.friendListItem, styles.profileContentBox)} className={cn(styles.friendListItem, styles.profileContentBox)}
onClick={() => onClickRequest(userId)} onClick={() => onClickRequest(userId)}
style={{ style={{
display: "flex", padding: "8px",
flexDirection: "row",
gap: `${SPACING_UNIT}px`,
alignItems: "center",
}} }}
> >
<img <div className={styles.pendingFriendRequestAvatarContainer}>
style={{ width: "32px", borderRadius: "50%" }} {profileImageUrl ? (
src={profileImageUrl || ""} <img
/> className={styles.profileAvatar}
alt={displayName}
src={profileImageUrl}
/>
) : (
<PersonIcon size={24} />
)}
</div>
<div <div
style={{ style={{
display: "flex", display: "flex",
@ -55,10 +63,10 @@ export const UserFriendPendingRequest = ({
</div> </div>
{isRequestSent ? ( {isRequestSent ? (
<button <button
style={{ color: vars.color.body }} className={styles.cancelRequestButton}
onClick={() => onClickCancelRequest(userId)} onClick={() => onClickCancelRequest(userId)}
> >
<XCircleIcon size={28} className={styles.cancelRequestButton} /> <XCircleIcon size={28} />
</button> </button>
) : ( ) : (
<> <>

View file

@ -35,6 +35,20 @@ export const profileAvatarContainer = style({
zIndex: 1, zIndex: 1,
}); });
export const pendingFriendRequestAvatarContainer = style({
width: "32px",
height: "32px",
borderRadius: "50%",
display: "flex",
justifyContent: "center",
alignItems: "center",
backgroundColor: vars.color.background,
overflow: "hidden",
border: `solid 1px ${vars.color.border}`,
boxShadow: "0px 0px 5px 0px rgba(0, 0, 0, 0.7)",
zIndex: 1,
});
export const profileAvatarEditContainer = style({ export const profileAvatarEditContainer = style({
width: "128px", width: "128px",
height: "128px", height: "128px",
@ -53,8 +67,6 @@ export const profileAvatarEditContainer = style({
export const profileAvatar = style({ export const profileAvatar = style({
height: "100%", height: "100%",
width: "100%", width: "100%",
borderRadius: "50%",
overflow: "hidden",
objectFit: "cover", objectFit: "cover",
}); });

View file

@ -276,12 +276,10 @@ export interface UserFriend {
} }
export interface PendingFriendRequest { export interface PendingFriendRequest {
AId: string; userId: string;
ADisplayName: string; displayName: string;
AProfileImageUrl: string | null; profileImageUrl: string | null;
BId: string; type: "SENT" | "RECEIVED";
BDisplayName: string;
BProfileImageUrl: string | null;
} }
export interface UserProfile { export interface UserProfile {