diff --git a/FRONTEND_V2/src/components/CompetitionCard.jsx b/FRONTEND_V2/src/components/CompetitionCard.jsx
index ea535e4..6acbedd 100644
--- a/FRONTEND_V2/src/components/CompetitionCard.jsx
+++ b/FRONTEND_V2/src/components/CompetitionCard.jsx
@@ -1,16 +1,38 @@
import React from 'react';
import Card from "./bootstrap/Card.jsx";
import PropTypes from "prop-types";
+import {
+ competitionStatusesCssColor, competitionStatusesCssColorText,
+ 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)
+
+ if (startedAt === undefined || endedAt === undefined) {
+ status = undefined
+ }
+
+
+ const statusCssBg = competitionStatusesCssColor[status]
+ const statusCssText = competitionStatusesCssColorText[status]
+ const statusText = competitionStatusesTranslate[status]
+
-export const CompetitionCard = ({name, description, children, id}) => {
return (
- Идет
+ {statusText}
{name}
id={id || "0000"}
{description}
+ Начало: {formatDate(startedAt)}
+
+ Конец: {formatDate(endedAt)}
+
{children}
);
@@ -21,4 +43,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/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/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..fc8e76e
--- /dev/null
+++ b/FRONTEND_V2/src/utils/competitionStatuses.js
@@ -0,0 +1,40 @@
+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 competitionStatusesCssColorText = {
+ NOT_STARTED: "text-dark",
+ IN_PROGRESS: "",
+ ENDED: "",
+}
+
+
+
+
+
+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/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', {
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
//