feat: add friend requests

This commit is contained in:
Kentai Radiquum 2024-08-25 23:31:46 +05:00
parent 6aa6424508
commit 8c1e00fe97
Signed by: Radiquum
GPG key ID: 858E8EE696525EED
4 changed files with 106 additions and 17 deletions

View file

@ -24,13 +24,10 @@
### Профиль
- [ ] Оценки релизов
- [ ] Динамика просмотра серий
- [ ] Значки команд озвучки\перевода и т.д.
- [ ] Просмотр комментариев пользователя к релизам и коллекциям.
- [ ] Редактирование профиля.
- [ ] Уважение настроек приватности пользователя.
- [ ] Добавление друзей.
- [ ] Просмотр всех оценок
- [ ] Просмотр всех списков
## Баги

View file

@ -1,20 +1,108 @@
"use client";
import { ENDPOINTS } from "#/api/config";
import { Card, Button } from "flowbite-react";
import { useRouter } from "next/navigation";
import { useState } from "react";
// null - не друзья
// 0 - заявка в друзья authUserId < profileId
// 1 - заявка в друзья authUserId > profileId
// 2 - друзья
// если id профиля больше id юзера, то 0 иначе 1
export const ProfileActions = (props: {
isMyProfile: boolean;
isFriendRequestsDisallowed: boolean;
profile_id: number;
my_profile_id: number;
friendStatus: number;
token: string;
}) => {
const router = useRouter();
const z2 = props.my_profile_id < props.profile_id;
let profileIdIsSmaller = z2 ? true : false;
const [friendRequestDisabled, setfriendRequestDisabled] = useState(false);
function _getFriendStatus() {
const num = props.friendStatus;
if (num == null) {
return null;
}
let z = true;
if (num == 2) {
return 1;
}
let z3 = (num == 0 && z2) || (num == 1 && !z2);
if ((num != 1 || z2) && (num != 0 || !z2)) {
z = false;
}
if (z3) {
return 2;
}
if (z) {
return 3;
}
return 0;
}
const FriendStatus = _getFriendStatus();
const isRequestedStatus =
FriendStatus != null
? profileIdIsSmaller
? profileIdIsSmaller && FriendStatus != 0
: !profileIdIsSmaller && FriendStatus == 2
: null;
// ^ This is some messed up shit
function _addToFriends() {
let url = `${ENDPOINTS.user.profile}/friend/request`;
setfriendRequestDisabled(true);
FriendStatus == 1
? (url += "/remove/")
: isRequestedStatus
? (url += "/remove/")
: (url += "/send/");
url += `${props.profile_id}?token=${props.token}`;
fetch(url).then((res) => {
setTimeout(() => {
window.location.reload();
}, 1000);
});
}
return (
<Card className="h-fit">
{isRequestedStatus != null && !isRequestedStatus && FriendStatus != 1 && (
<p>Отправил(-а) вам заявку в друзья</p>
)}
<div className="flex gap-2">
{props.isMyProfile && <Button color={"blue"}>Редактировать</Button>}
{!props.isMyProfile && (
<>
{!props.isFriendRequestsDisallowed && (
<Button color={"blue"}>Добавить в друзья</Button>
{(!props.isFriendRequestsDisallowed ||
FriendStatus == 1 ||
isRequestedStatus) && (
<Button
disabled={friendRequestDisabled}
color={
FriendStatus == 1
? "red"
: isRequestedStatus
? "light"
: "blue"
}
onClick={() => _addToFriends()}
>
{FriendStatus == 1
? "Удалить из друзей"
: isRequestedStatus
? "Заявка отправлена"
: "Добавить в друзья"}
</Button>
)}
<Button color={"red"}>Заблокировать</Button>
</>

View file

@ -34,7 +34,6 @@ export const ProfileUser = (props: {
rating: number;
}) => {
const router = useRouter();
console.log(props.chips);
return (
<Card className="h-fit">
{props.chips.hasChips && (

View file

@ -16,7 +16,7 @@ import { ProfileReleaseRatings } from "#/components/Profile/Profile.ReleaseRatin
import { ProfileReleaseHistory } from "#/components/Profile/Profile.ReleaseHistory";
export const ProfilePage = (props: any) => {
const authUser = useUserStore((state) => state);
const authUser = useUserStore();
const [user, setUser] = useState(null);
const [isMyProfile, setIsMyProfile] = useState(false);
@ -136,7 +136,7 @@ export const ProfilePage = (props: any) => {
/>
)}
{!user.is_stats_hidden && (
<div className="hidden xl:flex flex-col gap-2">
<div className="flex-col hidden gap-2 xl:flex">
{user.votes && user.votes.length > 0 && (
<ProfileReleaseRatings ratings={user.votes} />
)}
@ -146,12 +146,17 @@ export const ProfilePage = (props: any) => {
</div>
)}
</div>
<div className="flex flex-col gap-2 w-full xl:flex-1 xl:w-auto ">
<ProfileActions
isMyProfile={isMyProfile}
profile_id={user.id}
isFriendRequestsDisallowed={user.is_friend_requests_disallowed}
/>
<div className="flex flex-col w-full gap-2 xl:flex-1 xl:w-auto ">
{authUser.token && (
<ProfileActions
isMyProfile={isMyProfile}
profile_id={user.id}
isFriendRequestsDisallowed={user.is_friend_requests_disallowed}
friendStatus={user.friend_status}
my_profile_id={authUser.user.id}
token={authUser.token}
/>
)}
{!user.is_stats_hidden && (
<>
<ProfileStats
@ -166,7 +171,7 @@ export const ProfilePage = (props: any) => {
watched_time={user.watched_time}
/>
<ProfileWatchDynamic watchDynamic={user.watch_dynamics || []} />
<div className="xl:hidden flex flex-col gap-2">
<div className="flex flex-col gap-2 xl:hidden">
{user.votes && user.votes.length > 0 && (
<ProfileReleaseRatings ratings={user.votes} />
)}