From da843adfe301ce3fb86f60cc3bb8363e819433c2 Mon Sep 17 00:00:00 2001 From: rngsurrounded Date: Sat, 1 Mar 2025 20:14:52 +0900 Subject: [PATCH] fix: merge conflicts --- services/frontend/src/App.tsx | 14 +- .../index.tsx | 19 +- .../pages/CompetitionPreviewPage/index.tsx | 106 ----------- .../src/pages/CompetitionSession/index.tsx | 164 ------------------ .../index.tsx | 5 +- .../utils/utils.ts | 0 .../components/CompetitionCard/index.tsx | 7 - .../modules/CompetitionGrid/index.tsx | 2 +- 8 files changed, 26 insertions(+), 291 deletions(-) rename services/frontend/src/pages/{Competition => CompetitionPreview}/index.tsx (72%) delete mode 100644 services/frontend/src/pages/CompetitionPreviewPage/index.tsx delete mode 100644 services/frontend/src/pages/CompetitionSession/index.tsx rename services/frontend/src/pages/{CompetitionRunnerPage => CompetitionSesssion}/index.tsx (98%) rename services/frontend/src/pages/{CompetitionRunnerPage => CompetitionSesssion}/utils/utils.ts (100%) diff --git a/services/frontend/src/App.tsx b/services/frontend/src/App.tsx index 9c7f555..11abf83 100644 --- a/services/frontend/src/App.tsx +++ b/services/frontend/src/App.tsx @@ -1,19 +1,19 @@ import { Routes, Route } from "react-router"; import "./styles/globals.css"; -import CompetitionsPage from "./pages/Competitions"; -import CompetitionPage from "./pages/Competition"; -import CompetitionRunnerPage from "./pages/CompetitionSession"; +import Competitions from "./pages/Competitions"; +import CompetitionPreview from './pages/CompetitionPreview' +import CompetitionSession from "./pages/CompetitionSesssion"; import { NavbarLayout } from "./widgets/navbar-layout"; const App = () => { return ( }> - } /> - } /> + } /> + } /> } + path="/competition/:id/tasks/:taskId" + element={} /> diff --git a/services/frontend/src/pages/Competition/index.tsx b/services/frontend/src/pages/CompetitionPreview/index.tsx similarity index 72% rename from services/frontend/src/pages/Competition/index.tsx rename to services/frontend/src/pages/CompetitionPreview/index.tsx index bdddd5a..1f07d24 100644 --- a/services/frontend/src/pages/Competition/index.tsx +++ b/services/frontend/src/pages/CompetitionPreview/index.tsx @@ -1,16 +1,29 @@ + import { useState } from "react"; -import { useParams, Link } from "react-router-dom"; +import { useParams, Link, useNavigate } from "react-router-dom"; import { Button } from "@/components/ui/button"; import { ArrowLeft } from "lucide-react"; import { Competition } from "@/shared/types"; -import { mockCompetitions } from "@/shared/mocks/mocks"; +import { mockCompetitions, mockTasks } from "@/shared/mocks/mocks"; const CompetitionPage = () => { const { id } = useParams<{ id: string }>(); + const navigate = useNavigate(); const [competition] = useState( mockCompetitions.find((comp) => comp.id === id)!, ); + const handleContinue = () => { + if (competition?.id) { + if (mockTasks && mockTasks.length > 0) { + const firstTaskId = mockTasks[0].id; + navigate(`/competition/${competition.id}/tasks/${firstTaskId}`); + } else { + navigate(`/competition/${competition.id}/tasks`); + } + } + }; + return (
{
- +
diff --git a/services/frontend/src/pages/CompetitionPreviewPage/index.tsx b/services/frontend/src/pages/CompetitionPreviewPage/index.tsx deleted file mode 100644 index 15bcdc8..0000000 --- a/services/frontend/src/pages/CompetitionPreviewPage/index.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import { useEffect, useState } from "react"; -import { useParams, useNavigate } from "react-router-dom"; -import Navbar from "@/widgets/Navbar"; -import { Button } from "@/components/ui/button"; -import { ArrowLeft } from "lucide-react"; -import { Competition } from "@/shared/types"; -import { mockCompetitions, mockTasks } from "@/shared/mocks/mocks"; - -const CompetitionPreview = () => { - const { id } = useParams<{ id: string }>(); - const navigate = useNavigate(); - const [competition, setCompetition] = useState(null); - const [isLoading, setIsLoading] = useState(true); - - useEffect(() => { - const fetchCompetition = async () => { - try { - setTimeout(() => { - const found = mockCompetitions.find((comp) => comp.id === id); - setCompetition(found || null); - setIsLoading(false); - }, 500); - } catch (error) { - console.error("Error fetching competition:", error); - setIsLoading(false); - } - }; - - fetchCompetition(); - }, [id]); - - const handleBack = () => { - navigate(-1); - }; - - const handleContinue = () => { - if (competition?.id) { - if (mockTasks && mockTasks.length > 0) { - const firstTaskId = mockTasks[0].id; - navigate(`/competition/${competition.id}/tasks/${firstTaskId}`); - } else { - navigate(`/competition/${competition.id}/tasks`); - } - } - }; - - return ( - <> - -
- - - {isLoading ? ( -
-

Загрузка...

-
- ) : competition ? ( -
-
- {competition.name} -
- -
-
-

- {competition.name} -

- -
- -
-

{competition.description}

-
-
-
- ) : ( -
-

- Соревнование не найдено -

-

- Запрошенное соревнование не существует или было удалено. -

-
- )} -
- - ); -}; - -export default CompetitionPreview; diff --git a/services/frontend/src/pages/CompetitionSession/index.tsx b/services/frontend/src/pages/CompetitionSession/index.tsx deleted file mode 100644 index f554a58..0000000 --- a/services/frontend/src/pages/CompetitionSession/index.tsx +++ /dev/null @@ -1,164 +0,0 @@ -import { useState, useEffect } from "react"; -import { useParams, useNavigate } from "react-router-dom"; -import { Task } from "@/shared/types"; -import { getTaskBgColor, getTaskTextColor } from "./utils/utils"; -import { mockTasks } from "@/shared/mocks/mocks"; -import { Button } from "@/components/ui/button"; -import { Calendar } from "lucide-react"; - -const CompetitionRunnerPage = () => { - const { id, taskId } = useParams<{ id: string; taskId?: string }>(); - const navigate = useNavigate(); - const [competitionTitle, setCompetitionTitle] = useState( - "Олимпиада DANO 2025. Индивидуальный этап", - ); - const [tasks] = useState(mockTasks); - const [selectedTaskId, setSelectedTaskId] = useState( - taskId || null, - ); - const [answer, setAnswer] = useState(""); - - useEffect(() => { - if (taskId) { - setSelectedTaskId(taskId); - } else if (tasks.length > 0) { - navigate(`/competition/${id}/tasks/${tasks[0].id}`, { replace: true }); - } - }, [taskId, tasks, id, navigate]); - - const handleTaskClick = (taskId: string) => { - if (selectedTaskId !== taskId) { - setSelectedTaskId(taskId); - navigate(`/competition/${id}/tasks/${taskId}`); - } - }; - - const currentTask = tasks.find((t) => t.id === selectedTaskId); - - const handleSubmit = () => { - console.log("Submitting answer:", answer); - // Submit logic here - }; - - const handleHistoryClick = () => { - console.log("View history"); - }; - - return ( -<<<<<<< HEAD:services/frontend/src/pages/CompetitionRunnerPage/index.tsx - <> -
-
-
-

{competitionTitle}

-======= - <> -
-
-
-

- {competitionTitle} -

->>>>>>> 58f493250150ba62ac4f325a0708b96eb88661e9:services/frontend/src/pages/CompetitionSession/index.tsx -
- -
- {tasks.map((task) => ( -
handleTaskClick(task.id)} - > - {task.number} -
- ))} -
-
-
- -
-
- {currentTask ? ( -
- {/* Left Container - Task Description */} -
-

- Задача {currentTask.number} -

- -
-

- Рассмотрим последовательность чисел 2, 3, 5, 9, 17, 33, 65, - 129, ... Каждый член этой последовательности, начиная с - третьего, равен сумме двух предыдущих членов. -

-

- Найдите сумму первых 15 членов этой последовательности. -

-

В ответе укажите целое число.

-
-
- - {/* Right Container - Solution Area */} -
- {/* Solution Status Card */} -
-
- - Решение 12345 - - - Зачтено 5/10 баллов - -
-
- 1 марта, 08:41 -
-
- - {/* Answer Input */} -
-