{menuItems.map((v, i) => (
diff --git a/src/views/home/account/contests/Contests.tsx b/src/views/home/account/contests/Contests.tsx
index 67fdbb7..0c62c1a 100644
--- a/src/views/home/account/contests/Contests.tsx
+++ b/src/views/home/account/contests/Contests.tsx
@@ -22,8 +22,6 @@ const Contests = () => {
dispatch(fetchRegisteredContests({}));
}, []);
- console.log(myContestsState);
-
return (
{/* Контесты, в которых я участвую */}
diff --git a/src/views/home/articles/Filter.tsx b/src/views/home/articles/Filter.tsx
index ca01a9d..1d8a82f 100644
--- a/src/views/home/articles/Filter.tsx
+++ b/src/views/home/articles/Filter.tsx
@@ -36,13 +36,13 @@ const Filters = () => {
text: 'ID',
},
]}
- onChange={(v) => console.log(v)}
+ onChange={(v) => {}}
/>
console.log(values)}
+ onChange={(values) => {}}
/>
);
diff --git a/src/views/home/auth/Login.tsx b/src/views/home/auth/Login.tsx
index d83cea5..a660b35 100644
--- a/src/views/home/auth/Login.tsx
+++ b/src/views/home/auth/Login.tsx
@@ -27,7 +27,7 @@ const Login = () => {
// После успешного логина
useEffect(() => {
dispatch(setMenuActivePage('account'));
- console.log(submitClicked);
+ submitClicked;
}, []);
useEffect(() => {
diff --git a/src/views/home/auth/Register.tsx b/src/views/home/auth/Register.tsx
index d096422..4eee15a 100644
--- a/src/views/home/auth/Register.tsx
+++ b/src/views/home/auth/Register.tsx
@@ -38,7 +38,7 @@ const Register = () => {
const path = from ? from.pathname + from.search : '/home/account';
navigate(path, { replace: true });
}
- console.log(submitClicked);
+ submitClicked;
}, [jwt]);
const handleRegister = () => {
diff --git a/src/views/home/contests/ContestItem.tsx b/src/views/home/contests/ContestItem.tsx
index edf948e..1abbf4a 100644
--- a/src/views/home/contests/ContestItem.tsx
+++ b/src/views/home/contests/ContestItem.tsx
@@ -73,7 +73,6 @@ const ContestItem: React.FC
= ({
: ' bg-liquid-background',
)}
onClick={() => {
- console.log(456);
navigate(`/contest/${id}`);
}}
>
@@ -99,12 +98,7 @@ const ContestItem: React.FC = ({
{statusRegister == 'reg' ? (
<>
{' '}
- {
- console.log(123);
- }}
- text="Регистрация"
- />
+ {}} text="Регистрация" />
>
) : (
<>
diff --git a/src/views/home/group/Group.tsx b/src/views/home/group/Group.tsx
index cc6ad00..ef34d56 100644
--- a/src/views/home/group/Group.tsx
+++ b/src/views/home/group/Group.tsx
@@ -1,24 +1,50 @@
-import { FC } from 'react';
+import { FC, useEffect } from 'react';
import { cn } from '../../../lib/cn';
-import { useParams, Navigate } from 'react-router-dom';
+import { useParams, Navigate, Routes, Route } from 'react-router-dom';
+import { useAppDispatch, useAppSelector } from '../../../redux/hooks';
+import { fetchGroupById } from '../../../redux/slices/groups';
+import GroupMenu from './GroupMenu';
+import { Posts } from './posts/Posts';
+import { SearchInput } from '../../../components/input/SearchInput';
+import { Chat } from './chat/Chat';
+import { Contests } from './contests/Contests';
interface GroupsBlockProps {}
const Group: FC = () => {
- const { groupId } = useParams<{ groupId: string }>();
- const groupIdNumber = Number(groupId);
-
- if (!groupId || isNaN(groupIdNumber) || !groupIdNumber) {
+ const groupId = Number(useParams<{ groupId: string }>().groupId);
+ if (!groupId) {
return ;
}
+ const dispatch = useAppDispatch();
+ const group = useAppSelector((state) => state.groups.fetchGroupById.group);
+
+ useEffect(() => {
+ dispatch(fetchGroupById(groupId));
+ }, [groupId]);
+
+ console.log(group);
+
return (
- {groupIdNumber}
+
{group?.name}
+
+
+
+
+ } />
+ } />
+ } />
+ }
+ />
+
);
};
diff --git a/src/views/home/group/GroupMenu.tsx b/src/views/home/group/GroupMenu.tsx
new file mode 100644
index 0000000..081c9f2
--- /dev/null
+++ b/src/views/home/group/GroupMenu.tsx
@@ -0,0 +1,96 @@
+import { MessageChat, Home, Cup } from '../../../assets/icons/group';
+
+import React, { FC } from 'react';
+import { Link } from 'react-router-dom';
+import { useAppDispatch, useAppSelector } from '../../../redux/hooks';
+import {
+ setMenuActivePage,
+ setMenuActiveProfilePage,
+} from '../../../redux/slices/store';
+
+interface MenuItemProps {
+ icon: string;
+ text: string;
+ href: string;
+ page: string;
+ profilePage: string;
+ active?: boolean;
+}
+
+const MenuItem: React.FC = ({
+ icon,
+ text = '',
+ href = '',
+ active = false,
+ page = '',
+ profilePage = '',
+}) => {
+ const dispatch = useAppDispatch();
+
+ return (
+ {
+ dispatch(setMenuActivePage(page));
+ dispatch(setMenuActiveProfilePage(profilePage));
+ }}
+ >
+
+ {text}
+
+ );
+};
+
+interface GroupMenuProps {
+ groupId: number;
+}
+
+const GroupMenu: FC = ({ groupId }) => {
+ const menuItems = [
+ {
+ text: 'Главная',
+ href: `/group/${groupId}/home`,
+ icon: Home,
+ page: 'group',
+ profilePage: 'home',
+ },
+ {
+ text: 'Чат',
+ href: `/group/${groupId}/chat`,
+ icon: MessageChat,
+ page: 'group',
+ profilePage: 'chat',
+ },
+ {
+ text: 'Контесты',
+ href: `/group/${groupId}/contests`,
+ icon: Cup,
+ page: 'group',
+ profilePage: 'contests',
+ },
+ ];
+
+ const activeGroupPage = useAppSelector(
+ (state) => state.store.menu.activeGroupPage,
+ );
+
+ return (
+
+ {menuItems.map((v, i) => (
+
+ ))}
+
+ );
+};
+
+export default GroupMenu;
diff --git a/src/views/home/group/chat/Chat.tsx b/src/views/home/group/chat/Chat.tsx
new file mode 100644
index 0000000..7464e22
--- /dev/null
+++ b/src/views/home/group/chat/Chat.tsx
@@ -0,0 +1,12 @@
+import { useEffect } from 'react';
+import { useAppDispatch } from '../../../../redux/hooks';
+import { setMenuActiveGroupPage } from '../../../../redux/slices/store';
+
+export const Chat = () => {
+ const dispatch = useAppDispatch();
+
+ useEffect(() => {
+ dispatch(setMenuActiveGroupPage('chat'));
+ }, []);
+ return <>>;
+};
diff --git a/src/views/home/group/contests/Contests.tsx b/src/views/home/group/contests/Contests.tsx
new file mode 100644
index 0000000..39faea4
--- /dev/null
+++ b/src/views/home/group/contests/Contests.tsx
@@ -0,0 +1,12 @@
+import { useEffect } from 'react';
+import { useAppDispatch } from '../../../../redux/hooks';
+import { setMenuActiveGroupPage } from '../../../../redux/slices/store';
+
+export const Contests = () => {
+ const dispatch = useAppDispatch();
+
+ useEffect(() => {
+ dispatch(setMenuActiveGroupPage('contests'));
+ }, []);
+ return <>>;
+};
diff --git a/src/views/home/group/posts/PostItem.tsx b/src/views/home/group/posts/PostItem.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/src/views/home/group/posts/Posts.tsx b/src/views/home/group/posts/Posts.tsx
new file mode 100644
index 0000000..8e9a0b0
--- /dev/null
+++ b/src/views/home/group/posts/Posts.tsx
@@ -0,0 +1,83 @@
+import { FC, useEffect } from 'react';
+
+import { useAppSelector, useAppDispatch } from '../../../../redux/hooks';
+import { fetchGroupPosts } from '../../../../redux/slices/groupfeed';
+import { SearchInput } from '../../../../components/input/SearchInput';
+import { setMenuActiveGroupPage } from '../../../../redux/slices/store';
+
+interface PostsProps {
+ groupId: number;
+}
+
+export const Posts: FC = ({ groupId }) => {
+ const dispatch = useAppDispatch();
+
+ const { pages, status } = useAppSelector(
+ (state) => state.groupfeed.fetchPosts,
+ );
+
+ // Загружаем только первую страницу
+ useEffect(() => {
+ dispatch(fetchGroupPosts({ groupId, page: 0, pageSize: 20 }));
+ }, [groupId]);
+
+ useEffect(() => {
+ dispatch(setMenuActiveGroupPage('home'));
+ }, []);
+
+ const page0 = pages[0];
+
+ return (
+
+
+ {}}
+ placeholder="Поиск сообщений"
+ />
+
+
+ {status === 'loading' &&
Загрузка...
}
+ {status === 'failed' &&
Ошибка загрузки постов
}
+
+ {status == 'successful' &&
+ page0?.items &&
+ page0.items.length > 0 ? (
+
+ {page0.items.map((post) => (
+
+
+ ID: {post.id}
+
+
+ Название: {post.name}
+
+
+ Содержимое: {post.content}
+
+
+ Автор: {post.authorUsername}
+
+
+ Автор ID: {post.authorId}
+
+
+ Group ID: {post.groupId}
+
+
+ Создан: {post.createdAt}
+
+
+ Обновлён: {post.updatedAt}
+
+
+ ))}
+
+ ) : status === 'successful' ? (
+
Постов пока нет
+ ) : null}
+
+ );
+};
diff --git a/src/views/home/groupinviter/GroupInvite.tsx b/src/views/home/groupinviter/GroupInvite.tsx
index 893d817..1b3cc7c 100644
--- a/src/views/home/groupinviter/GroupInvite.tsx
+++ b/src/views/home/groupinviter/GroupInvite.tsx
@@ -63,9 +63,7 @@ const GroupInvite = () => {
if (!token) return;
try {
await dispatch(joinGroupByToken(token)).unwrap();
- } catch (err) {
- console.error('Failed to join group', err);
- }
+ } catch (err) {}
};
const handleCancel = () => {
diff --git a/src/views/home/groups/Filter.tsx b/src/views/home/groups/Filter.tsx
index ca01a9d..1d8a82f 100644
--- a/src/views/home/groups/Filter.tsx
+++ b/src/views/home/groups/Filter.tsx
@@ -36,13 +36,13 @@ const Filters = () => {
text: 'ID',
},
]}
- onChange={(v) => console.log(v)}
+ onChange={(v) => {}}
/>
console.log(values)}
+ onChange={(values) => {}}
/>
);