diff --git a/src/renderer/src/pages/user/user-add-friends-modal.tsx b/src/renderer/src/pages/user/user-add-friends-modal.tsx index a872abcf..4306936d 100644 --- a/src/renderer/src/pages/user/user-add-friends-modal.tsx +++ b/src/renderer/src/pages/user/user-add-friends-modal.tsx @@ -1,11 +1,11 @@ import { Button, Modal, TextField } from "@renderer/components"; import { PendingFriendRequest } from "@types"; -import * as styles from "./user.css"; import { SPACING_UNIT } from "@renderer/theme.css"; import { useEffect, useState } from "react"; import { useToast, useUserDetails } from "@renderer/hooks"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; +import { UserFriendPendingRequest } from "./user-friend-pending-request"; export interface UserAddFriendsModalProps { visible: boolean; @@ -26,14 +26,11 @@ export const UserAddFriendsModal = ({ const navigate = useNavigate(); - const { sendFriendRequest } = useUserDetails(); + const { userDetails, sendFriendRequest } = useUserDetails(); const { showSuccessToast, showErrorToast } = useToast(); - const handleAddFriend: React.FormEventHandler = async ( - event - ) => { - event.preventDefault(); + const handleClickAddFriend = () => { setIsAddingFriend(true); sendFriendRequest(friendCode) .then(() => { @@ -47,12 +44,46 @@ export const UserAddFriendsModal = ({ }); }; - useEffect(() => { - setPendingRequests([]); - }); + const handleClickFriend = (userId: string) => { + navigate(userId); + }; - const handleSeeProfileClick = () => { - navigate(`profile/${friendCode}`); + useEffect(() => { + setPendingRequests([ + { + AId: "abcd1234", + ADisplayName: "Punheta Master 123", + AProfileImageUrl: + "https://cdn.discordapp.com/avatars/1239959140785455295/4aff4b901c7a9f5f814b4379b6cfd58a.webp", + BId: "BMmNRmP3", + BDisplayName: "Hydra", + BProfileImageUrl: null, + }, + { + AId: "BMmNRmP3", + ADisplayName: "Hydra", + AProfileImageUrl: null, + BId: "12345678", + BDisplayName: "Deyvis0n", + BProfileImageUrl: null, + }, + ]); + }, []); + + const handleClickSeeProfile = () => { + // navigate(`profile/${friendCode}`); + }; + + const handleClickCancelFriendRequest = (userId: string) => { + console.log(userId); + }; + + const handleClickAcceptFriendRequest = (userId: string) => { + console.log(userId); + }; + + const handleClickRefuseFriendRequest = (userId: string) => { + console.log(userId); }; const resetModal = () => { @@ -71,51 +102,89 @@ export const UserAddFriendsModal = ({ title={t("add_friends")} onClose={cleanFormAndClose} > -
- setFriendCode(e.target.value)} - /> - - - + setFriendCode(e.target.value)} + /> + + + -
- {pendingRequests.map((request) => { - return ( -

- {request.AId} - {request.BId} -

- ); - })} +
+

Pendentes

+ {pendingRequests.map((request) => { + if (request.AId === userDetails?.id) { + return ( + + ); + } + + return ( + + ); + })} +
diff --git a/src/renderer/src/pages/user/user-content.tsx b/src/renderer/src/pages/user/user-content.tsx index 8e973e7f..9d9b9415 100644 --- a/src/renderer/src/pages/user/user-content.tsx +++ b/src/renderer/src/pages/user/user-content.tsx @@ -17,7 +17,6 @@ import { buildGameDetailsPath, steamUrlBuilder } from "@renderer/helpers"; import { PersonAddIcon, PersonIcon, - PlusCircleIcon, TelescopeIcon, } from "@primer/octicons-react"; import { Button, Link } from "@renderer/components"; @@ -79,6 +78,10 @@ export function UserContent({ setShowEditProfileModal(true); }; + const handleOnClickFriend = (userId: string) => { + console.log(userId); + }; + const handleConfirmSignout = async () => { await signOut(); @@ -359,6 +362,7 @@ export function UserContent({ > diff --git a/src/renderer/src/pages/user/user-friend-pending-request.tsx b/src/renderer/src/pages/user/user-friend-pending-request.tsx new file mode 100644 index 00000000..40f4bf19 --- /dev/null +++ b/src/renderer/src/pages/user/user-friend-pending-request.tsx @@ -0,0 +1,81 @@ +import { CheckCircleIcon, XCircleIcon } from "@primer/octicons-react"; +import { SPACING_UNIT, vars } from "@renderer/theme.css"; +import * as styles from "./user.css"; +import cn from "classnames"; + +export interface UserFriendPendingRequestProps { + userId: string; + profileImageUrl: string | null; + displayName: string; + isRequestSent: boolean; + onClickCancelRequest: (userId: string) => void; + onClickAcceptRequest: (userId: string) => void; + onClickRefuseRequest: (userId: string) => void; + onClickRequest: (userId: string) => void; +} + +export const UserFriendPendingRequest = ({ + userId, + profileImageUrl, + displayName, + isRequestSent, + onClickCancelRequest, + onClickAcceptRequest, + onClickRefuseRequest, + onClickRequest, +}: UserFriendPendingRequestProps) => { + return ( + + ) : ( + <> + + + + )} + + ); +}; diff --git a/src/renderer/src/pages/user/user.css.ts b/src/renderer/src/pages/user/user.css.ts index 0128ec90..16a4d44f 100644 --- a/src/renderer/src/pages/user/user.css.ts +++ b/src/renderer/src/pages/user/user.css.ts @@ -245,3 +245,30 @@ export const profileBackground = style({ top: "0", borderRadius: "4px", }); + +export const friendRequestItem = style({ + color: vars.color.body, + ":hover": { + backgroundColor: "rgba(255, 255, 255, 0.15)", + }, +}); + +export const acceptRequestButton = style({ + cursor: "pointer", + color: vars.color.body, + width: "28px", + height: "28px", + ":hover": { + color: vars.color.success, + }, +}); + +export const cancelRequestButton = style({ + cursor: "pointer", + color: vars.color.body, + width: "28px", + height: "28px", + ":hover": { + color: vars.color.danger, + }, +}); diff --git a/src/types/index.ts b/src/types/index.ts index 17925ac0..396a3029 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -277,7 +277,11 @@ export interface UserFriend { export interface PendingFriendRequest { AId: string; + ADisplayName: string; + AProfileImageUrl: string | null; BId: string; + BDisplayName: string; + BProfileImageUrl: string | null; } export interface UserProfile {