upload mission

This commit is contained in:
Виталий Лавшонок
2025-11-02 13:15:12 +03:00
parent 99018537c5
commit 59f89d5113
18 changed files with 312 additions and 115 deletions

View File

@@ -4,7 +4,7 @@ import { Input } from "../../../components/input/Input";
import { useAppDispatch, useAppSelector } from "../../../redux/hooks";
import { Link, useNavigate } from "react-router-dom";
import { loginUser } from "../../../redux/slices/auth";
import { cn } from "../../../lib/cn";
// import { cn } from "../../../lib/cn";
import { setMenuActivePage } from "../../../redux/slices/store";
import { Balloon } from "../../../assets/icons/auth";
import { SecondaryButton } from "../../../components/button/SecondaryButton";
@@ -18,13 +18,14 @@ const Login = () => {
const [password, setPassword] = useState<string>("");
const [submitClicked, setSubmitClicked] = useState<boolean>(false);
const { status, error, jwt } = useAppSelector((state) => state.auth);
const { status, jwt } = useAppSelector((state) => state.auth);
const [err, setErr] = useState<string>("");
// const [err, setErr] = useState<string>("");
// После успешного логина
useEffect(() => {
console.log(submitClicked);
dispatch(setMenuActivePage("account"))
}, []);

View File

@@ -4,7 +4,7 @@ import { Input } from "../../../components/input/Input";
import { useAppDispatch, useAppSelector } from "../../../redux/hooks";
import { useNavigate } from "react-router-dom";
import { registerUser } from "../../../redux/slices/auth";
import { cn } from "../../../lib/cn";
// import { cn } from "../../../lib/cn";
import { setMenuActivePage } from "../../../redux/slices/store";
import { Balloon } from "../../../assets/icons/auth";
import { Link } from "react-router-dom";
@@ -23,11 +23,12 @@ const Register = () => {
const [confirmPassword, setConfirmPassword] = useState<string>("");
const [submitClicked, setSubmitClicked] = useState<boolean>(false);
const { status, error, jwt } = useAppSelector((state) => state.auth);
const { status, jwt } = useAppSelector((state) => state.auth);
// После успешной регистрации — переход в систему
useEffect(() => {
console.log(submitClicked);
dispatch(setMenuActivePage("account"))
}, []);

View File

@@ -6,11 +6,12 @@ import { useAppSelector } from "../../../redux/hooks";
const Menu = () => {
const menuItems = [
{text: "Главная", href: "/home", icon: Home, page: "home" },
{text: "Задачи", href: "/home/problems", icon: Clipboard, page: "problems" },
{text: "Задачи", href: "/home/missions", icon: Clipboard, page: "missions" },
{text: "Статьи", href: "/home/articles", icon: Openbook, page: "articles" },
{text: "Группы", href: "/home/groups", icon: Users, page: "groups" },
{text: "Контесты", href: "/home/contests", icon: Cup, page: "contests" },
{text: "Аккаунт", href: "/home/account", icon: Account, page: "account" },
{text: "Загрузка", href: "/upload", icon: Account, page: "p" },
];
const activePage = useAppSelector((state) => state.store.menu.activePage);

View File

@@ -1,7 +1,7 @@
import { cn } from "../../../lib/cn";
import { IconError, IconSuccess } from "../../../assets/icons/problems";
import { IconError, IconSuccess } from "../../../assets/icons/missions";
export interface ProblemItemProps {
export interface MissionItemProps {
id: number;
authorId: number;
name: string;
@@ -26,7 +26,7 @@ export function formatBytesToMB(bytes: number): string {
return `${megabytes} МБ`;
}
const ProblemItem: React.FC<ProblemItemProps> = ({
const MissionItem: React.FC<MissionItemProps> = ({
id, name, difficulty, timeLimit, memoryLimit, type, status
}) => {
console.log(id);
@@ -66,4 +66,4 @@ const ProblemItem: React.FC<ProblemItemProps> = ({
);
};
export default ProblemItem;
export default MissionItem;

View File

@@ -1,11 +1,11 @@
import ProblemItem from "./ProblemItem";
import MissionItem from "./MissionItem";
import { SecondaryButton } from "../../../components/button/SecondaryButton";
import { useAppDispatch } from "../../../redux/hooks";
import { useEffect } from "react";
import { setMenuActivePage } from "../../../redux/slices/store";
export interface Problem {
export interface Mission {
id: number;
authorId: number;
name: string;
@@ -18,11 +18,11 @@ export interface Problem {
}
const Problems = () => {
const Missions = () => {
const dispatch = useAppDispatch();
const problems: Problem[] = [
const missions: Mission[] = [
{
"id": 1,
"authorId": 1,
@@ -466,7 +466,7 @@ const Problems = () => {
];
useEffect(() => {
dispatch(setMenuActivePage("problems"))
dispatch(setMenuActivePage("missions"))
}, []);
return (
@@ -490,8 +490,8 @@ const Problems = () => {
<div>
{problems.map((v, i) => (
<ProblemItem key={i} {...v} type={i % 2 == 0 ? "first" : "second"} status={i == 0 || i == 3 || i == 7 ? "success" : (i == 2 || i == 4 || i == 9 ? "error" : "empty")}/>
{missions.map((v, i) => (
<MissionItem key={i} {...v} type={i % 2 == 0 ? "first" : "second"} status={i == 0 || i == 3 || i == 7 ? "success" : (i == 2 || i == 4 || i == 9 ? "error" : "empty")}/>
))}
</div>
@@ -504,4 +504,4 @@ const Problems = () => {
);
};
export default Problems;
export default Missions;