From d406191cefec5b392b12aedb39427156964bb27e Mon Sep 17 00:00:00 2001 From: doctorixx <61980858+windows-up@users.noreply.github.com> Date: Fri, 30 May 2025 22:13:46 +0300 Subject: [PATCH 1/3] frontend: competition status (ended, started, etc) --- .../src/components/CompetitionCard.jsx | 26 +++++++++++++-- FRONTEND_V2/src/pages/user/ChampsPage.jsx | 15 +++++++-- FRONTEND_V2/src/utils/competitionStatuses.js | 32 +++++++++++++++++++ FRONTEND_V2/src/utils/settings.js | 2 +- 4 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 FRONTEND_V2/src/utils/competitionStatuses.js diff --git a/FRONTEND_V2/src/components/CompetitionCard.jsx b/FRONTEND_V2/src/components/CompetitionCard.jsx index ea535e4..e8cc440 100644 --- a/FRONTEND_V2/src/components/CompetitionCard.jsx +++ b/FRONTEND_V2/src/components/CompetitionCard.jsx @@ -1,16 +1,36 @@ import React from 'react'; import Card from "./bootstrap/Card.jsx"; import PropTypes from "prop-types"; +import { + competitionStatusesCssColor, + competitionStatusesTranslate, + getCompetitionStatusByDates +} from "../utils/competitionStatuses.js"; + +export const CompetitionCard = ({name, description, children, id, startedAt, endedAt}) => { + let status = getCompetitionStatusByDates(startedAt,endedAt) + + if (startedAt === undefined || endedAt === undefined) { + status = undefined + } + + + const statusCss = competitionStatusesCssColor[status] + const statusText = competitionStatusesTranslate[status] + -export const CompetitionCard = ({name, description, children, id}) => { return ( -
Идет
+
{statusText}

{name}

id={id || "0000"}

{description}

+ Начало: {startedAt} +
+ Конец: {endedAt} +

{children} ); @@ -21,4 +41,6 @@ CompetitionCard.propTypes = { description: PropTypes.string.isRequired, children: PropTypes.node, id: PropTypes.string, + startedAt: PropTypes.string, + endedAt: PropTypes.string, } \ No newline at end of file diff --git a/FRONTEND_V2/src/pages/user/ChampsPage.jsx b/FRONTEND_V2/src/pages/user/ChampsPage.jsx index 1933e0f..c1e20ab 100644 --- a/FRONTEND_V2/src/pages/user/ChampsPage.jsx +++ b/FRONTEND_V2/src/pages/user/ChampsPage.jsx @@ -5,10 +5,12 @@ import BreadcrumbsElement from "../../components/BreadcrumbsElement.jsx"; import BreadcrumbsRoot from "../../components/BreadcrumpsRoot.jsx"; import UserLoginRequired from "../../components/UserLoginRequired.jsx"; import {CompetitionCard} from "../../components/CompetitionCard.jsx"; +import {competitionStatuses, getCompetitionStatusByDates} from "../../utils/competitionStatuses.js"; const ChampsPage = () => { - const [data, update] = useCachedGetAPI("/api/competitions/me",() => {}, []); + const [data, update] = useCachedGetAPI("/api/competitions/me", () => { + }, []); useEffect(() => { update() @@ -18,7 +20,7 @@ const ChampsPage = () => { return ( <> - + @@ -26,12 +28,19 @@ const ChampsPage = () => { { data?.map(elem => { + const status = getCompetitionStatusByDates(elem.startedAt, elem.endedAt) + return - Войти + {status === competitionStatuses.IN_PROGRESS && + <> + Войти + } }) } diff --git a/FRONTEND_V2/src/utils/competitionStatuses.js b/FRONTEND_V2/src/utils/competitionStatuses.js new file mode 100644 index 0000000..20e4da8 --- /dev/null +++ b/FRONTEND_V2/src/utils/competitionStatuses.js @@ -0,0 +1,32 @@ +export const competitionStatuses = { + NOT_STARTED: "NOT_STARTED", + IN_PROGRESS: "IN_PROGRESS", + ENDED: "ENDED", +} + +export const competitionStatusesTranslate = { + NOT_STARTED: "Не началось", + IN_PROGRESS: "Идет", + ENDED: "Завершено", +} + +export const competitionStatusesCssColor = { + NOT_STARTED: "bg-warning", + IN_PROGRESS: "bg-success", + ENDED: "bg-danger", +} + + + +export const getCompetitionStatusByDates = (start_time_str, end_time_str) => { + const startTimeDate = new Date(start_time_str); + const endTimeDate = new Date(end_time_str); + + const now = new Date(); + + if (startTimeDate > now) return competitionStatuses.NOT_STARTED; + if (endTimeDate < now) return competitionStatuses.ENDED; + + return competitionStatuses.IN_PROGRESS; + +} \ No newline at end of file diff --git a/FRONTEND_V2/src/utils/settings.js b/FRONTEND_V2/src/utils/settings.js index 99b8bb1..06e676b 100644 --- a/FRONTEND_V2/src/utils/settings.js +++ b/FRONTEND_V2/src/utils/settings.js @@ -2,7 +2,7 @@ import axios from "axios"; // const productionBuild = import.meta.env.VITE_ENV === "production"; // if (!productionBuild) { -// axios.defaults.baseURL = `${document.location.protocol}//${document.location.hostname}:${8080}` + axios.defaults.baseURL = `https://codebattles.school30nn.ru` // } // const baseUrl = import.meta.env.VITE_API_ENDPOINT // From f87715a318b509b828ad95e03de9c693ac28c5d5 Mon Sep 17 00:00:00 2001 From: doctorixx <61980858+windows-up@users.noreply.github.com> Date: Fri, 30 May 2025 22:41:26 +0300 Subject: [PATCH 2/3] frontend: fix yellow badge --- FRONTEND_V2/src/components/CompetitionCard.jsx | 7 ++++--- FRONTEND_V2/src/utils/competitionStatuses.js | 8 ++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/FRONTEND_V2/src/components/CompetitionCard.jsx b/FRONTEND_V2/src/components/CompetitionCard.jsx index e8cc440..a4ad7c2 100644 --- a/FRONTEND_V2/src/components/CompetitionCard.jsx +++ b/FRONTEND_V2/src/components/CompetitionCard.jsx @@ -2,7 +2,7 @@ import React from 'react'; import Card from "./bootstrap/Card.jsx"; import PropTypes from "prop-types"; import { - competitionStatusesCssColor, + competitionStatusesCssColor, competitionStatusesCssColorText, competitionStatusesTranslate, getCompetitionStatusByDates } from "../utils/competitionStatuses.js"; @@ -15,13 +15,14 @@ export const CompetitionCard = ({name, description, children, id, startedAt, end } - const statusCss = competitionStatusesCssColor[status] + const statusCssBg = competitionStatusesCssColor[status] + const statusCssText = competitionStatusesCssColorText[status] const statusText = competitionStatusesTranslate[status] return ( -

{statusText}
+
{statusText}

{name}

id={id || "0000"}
diff --git a/FRONTEND_V2/src/utils/competitionStatuses.js b/FRONTEND_V2/src/utils/competitionStatuses.js index 20e4da8..fc8e76e 100644 --- a/FRONTEND_V2/src/utils/competitionStatuses.js +++ b/FRONTEND_V2/src/utils/competitionStatuses.js @@ -16,6 +16,14 @@ export const competitionStatusesCssColor = { ENDED: "bg-danger", } +export const competitionStatusesCssColorText = { + NOT_STARTED: "text-dark", + IN_PROGRESS: "", + ENDED: "", +} + + + export const getCompetitionStatusByDates = (start_time_str, end_time_str) => { From 4695711d707d2aabd7048bfb35e658ccb1d7fdd9 Mon Sep 17 00:00:00 2001 From: doctorixx <61980858+windows-up@users.noreply.github.com> Date: Fri, 30 May 2025 22:50:19 +0300 Subject: [PATCH 3/3] frontend: admin cards display times --- FRONTEND_V2/src/components/CompetitionCard.jsx | 5 +++-- FRONTEND_V2/src/pages/champs/AdminChampsDetailPage.jsx | 2 ++ FRONTEND_V2/src/pages/champs/AdminChampsPage.jsx | 2 ++ FRONTEND_V2/src/utils/format.js | 2 ++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/FRONTEND_V2/src/components/CompetitionCard.jsx b/FRONTEND_V2/src/components/CompetitionCard.jsx index a4ad7c2..6acbedd 100644 --- a/FRONTEND_V2/src/components/CompetitionCard.jsx +++ b/FRONTEND_V2/src/components/CompetitionCard.jsx @@ -6,6 +6,7 @@ import { competitionStatusesTranslate, getCompetitionStatusByDates } from "../utils/competitionStatuses.js"; +import {formatDate} from "../utils/format.js"; export const CompetitionCard = ({name, description, children, id, startedAt, endedAt}) => { let status = getCompetitionStatusByDates(startedAt,endedAt) @@ -28,9 +29,9 @@ export const CompetitionCard = ({name, description, children, id, startedAt, end

{description}

- Начало: {startedAt} + Начало: {formatDate(startedAt)}
- Конец: {endedAt} + Конец: {formatDate(endedAt)}

{children} diff --git a/FRONTEND_V2/src/pages/champs/AdminChampsDetailPage.jsx b/FRONTEND_V2/src/pages/champs/AdminChampsDetailPage.jsx index d82652d..f78d295 100644 --- a/FRONTEND_V2/src/pages/champs/AdminChampsDetailPage.jsx +++ b/FRONTEND_V2/src/pages/champs/AdminChampsDetailPage.jsx @@ -71,6 +71,8 @@ export const AdminChampsDetailPage = () => { name={data.name} description={data.description} id={data.id} + startedAt={data.startedAt} + endedAt={data.endedAt} />


diff --git a/FRONTEND_V2/src/pages/champs/AdminChampsPage.jsx b/FRONTEND_V2/src/pages/champs/AdminChampsPage.jsx index d9914e6..05e3bc2 100644 --- a/FRONTEND_V2/src/pages/champs/AdminChampsPage.jsx +++ b/FRONTEND_V2/src/pages/champs/AdminChampsPage.jsx @@ -35,6 +35,8 @@ export const AdminChampsPage = () => { key={elem.id} id={elem.id} name={elem.name} + startedAt={elem.startedAt} + endedAt={elem.endedAt} description={elem.description}> Управлять diff --git a/FRONTEND_V2/src/utils/format.js b/FRONTEND_V2/src/utils/format.js index 3d8e84a..57c9cdd 100644 --- a/FRONTEND_V2/src/utils/format.js +++ b/FRONTEND_V2/src/utils/format.js @@ -1,4 +1,6 @@ export const formatDate = (dateString) => { + if (!dateString) return undefined + const date = new Date(dateString); return date.toLocaleString('ru-RU', {