diff --git a/src/main/events/index.ts b/src/main/events/index.ts index ab82eefd..dd5e3263 100644 --- a/src/main/events/index.ts +++ b/src/main/events/index.ts @@ -47,6 +47,7 @@ import "./profile/get-friend-requests"; import "./profile/get-me"; import "./profile/update-friend-request"; import "./profile/update-profile"; +import "./profile/send-friend-request"; ipcMain.handle("ping", () => "pong"); ipcMain.handle("getVersion", () => app.getVersion()); diff --git a/src/main/events/profile/send-friend-request.ts b/src/main/events/profile/send-friend-request.ts new file mode 100644 index 00000000..d696606f --- /dev/null +++ b/src/main/events/profile/send-friend-request.ts @@ -0,0 +1,11 @@ +import { registerEvent } from "../register-event"; +import { HydraApi } from "@main/services"; + +const sendFriendRequest = async ( + _event: Electron.IpcMainInvokeEvent, + userId: string +) => { + return HydraApi.post("/profile/friend-requests", { friendCode: userId }); +}; + +registerEvent("sendFriendRequest", sendFriendRequest); diff --git a/src/preload/index.ts b/src/preload/index.ts index 26601ebd..91722606 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -140,6 +140,8 @@ contextBridge.exposeInMainWorld("electron", { getFriendRequests: () => ipcRenderer.invoke("getFriendRequests"), updateFriendRequest: (userId: string, action: FriendRequestAction) => ipcRenderer.invoke("updateFriendRequest", userId, action), + sendFriendRequest: (userId: string) => + ipcRenderer.invoke("sendFriendRequest", userId), /* User */ getUser: (userId: string) => ipcRenderer.invoke("getUser", userId), diff --git a/src/renderer/src/declaration.d.ts b/src/renderer/src/declaration.d.ts index 747f8be4..2cc8afff 100644 --- a/src/renderer/src/declaration.d.ts +++ b/src/renderer/src/declaration.d.ts @@ -139,6 +139,7 @@ declare global { userId: string, action: FriendRequestAction ) => Promise; + sendFriendRequest: (userId: string) => Promise; } interface Window { diff --git a/src/renderer/src/hooks/use-user-details.ts b/src/renderer/src/hooks/use-user-details.ts index bdbfcf2c..ecf66276 100644 --- a/src/renderer/src/hooks/use-user-details.ts +++ b/src/renderer/src/hooks/use-user-details.ts @@ -8,7 +8,7 @@ import { setFriendRequests, } from "@renderer/features"; import { darkenColor } from "@renderer/helpers"; -import { UserDetails } from "@types"; +import { FriendRequestAction, UserDetails } from "@types"; export function useUserDetails() { const dispatch = useAppDispatch(); @@ -83,7 +83,7 @@ export function useUserDetails() { ); const sendFriendRequest = useCallback(async (userId: string) => { - console.log("sending friend request to", userId); + return window.electron.sendFriendRequest(userId); }, []); const updateFriendRequests = useCallback(async () => { @@ -91,6 +91,18 @@ export function useUserDetails() { dispatch(setFriendRequests(friendRequests)); }, [dispatch]); + const updateFriendRequestState = useCallback( + async (userId: string, action: FriendRequestAction) => { + return window.electron + .updateFriendRequest(userId, action) + .then(() => {}) + .catch(() => { + console.log("falha no updateFriendsRequestState"); + }); + }, + [updateFriendRequests] + ); + return { userDetails, profileBackground, @@ -102,5 +114,6 @@ export function useUserDetails() { patchUser, sendFriendRequest, updateFriendRequests, + updateFriendRequestState, }; } 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 c5a2d9ec..a5462c5b 100644 --- a/src/renderer/src/pages/user/user-add-friends-modal.tsx +++ b/src/renderer/src/pages/user/user-add-friends-modal.tsx @@ -22,8 +22,12 @@ export const UserAddFriendsModal = ({ const navigate = useNavigate(); - const { sendFriendRequest, updateFriendRequests, friendRequests } = - useUserDetails(); + const { + sendFriendRequest, + updateFriendRequests, + updateFriendRequestState, + friendRequests, + } = useUserDetails(); const { showSuccessToast, showErrorToast } = useToast(); @@ -43,27 +47,51 @@ export const UserAddFriendsModal = ({ }; const handleClickFriend = (userId: string) => { + console.log("click friend"); + onClose(); navigate(`/user/${userId}`); }; const handleClickSeeProfile = () => { + console.log("click see profile"); onClose(); navigate(`/user/${friendCode}`); }; - const handleClickCancelFriendRequest = (userId: string) => { - console.log(userId); - updateFriendRequests(); + const handleClickCancelFriendRequest = ( + event: React.MouseEvent, + userId: string + ) => { + console.log("cancel"); + event.preventDefault(); + updateFriendRequestState(userId, "CANCEL") + .then(() => { + console.log("sucesso"); + }) + .catch(() => { + showErrorToast("Falha ao cancelar convite"); + }); }; - const handleClickAcceptFriendRequest = (userId: string) => { - console.log(userId); - updateFriendRequests(); + const handleClickAcceptFriendRequest = ( + event: React.MouseEvent, + userId: string + ) => { + console.log("accept friend request"); + event.preventDefault(); + updateFriendRequestState(userId, "ACCEPTED").catch(() => { + showErrorToast("Falha ao aceitar convite"); + }); }; - const handleClickRefuseFriendRequest = (userId: string) => { - console.log(userId); - updateFriendRequests(); + const handleClickRefuseFriendRequest = ( + event: React.MouseEvent, + userId: string + ) => { + event.preventDefault(); + updateFriendRequestState(userId, "REFUSED").catch(() => { + showErrorToast("Falha ao recusar convite"); + }); }; const resetModal = () => { @@ -136,11 +164,11 @@ export const UserAddFriendsModal = ({ {friendRequests?.map((request) => { return ( void; - onClickAcceptRequest: (userId: string) => void; - onClickRefuseRequest: (userId: string) => void; + onClickCancelRequest: (event: React.MouseEvent, userId: string) => void; + onClickAcceptRequest: (event: React.MouseEvent, userId: string) => void; + onClickRefuseRequest: (event: React.MouseEvent, userId: string) => void; onClickRequest: (userId: string) => void; } @@ -59,7 +59,7 @@ export const UserFriendRequest = ({ {isRequestSent ? ( @@ -67,13 +67,13 @@ export const UserFriendRequest = ({ <> diff --git a/src/types/index.ts b/src/types/index.ts index 6768a840..3046a727 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -278,7 +278,7 @@ export interface UserFriend { } export interface FriendRequest { - userId: string; + id: string; displayName: string; profileImageUrl: string | null; type: "SENT" | "RECEIVED";