From 9438cdcc694c443c8337a33898bf80dfd245daca Mon Sep 17 00:00:00 2001
From: M-Farmaha <115003821+M-Farmaha@users.noreply.github.com>
Date: Tue, 23 Apr 2024 23:35:18 +0300
Subject: [PATCH] add tournament page
---
src/Api/ApiRequest.js | 5 ++
src/Api/members.json | 2 +-
src/Api/tournaments.json | 55 +++++++++++++
src/App.js | 5 ++
src/components/AppBar/AppBar.jsx | 9 +++
src/components/ChartSection/ChartSection.jsx | 2 +-
src/components/Filters/MembersFilterBar.jsx | 2 +-
.../LastUpdateSection/LastUpdateSection.jsx | 2 +-
src/components/Logo/Logo-styled.jsx | 10 +--
src/components/Logo/Logo.jsx | 22 +++--
.../TournamentsList/TournamentsItem.jsx | 21 +++++
.../TournamentsList-styled.jsx | 81 +++++++++++++++++++
.../TournamentsList/TournamentsList.jsx | 21 +++++
src/helpers/getColorByType.js | 2 +-
.../TournamentsPage-styled.jsx | 0
src/pages/TournamentsPage/TournamentsPage.jsx | 23 ++++++
src/sprite.svg | 13 +++
17 files changed, 256 insertions(+), 19 deletions(-)
create mode 100644 src/Api/tournaments.json
create mode 100644 src/components/TournamentsList/TournamentsItem.jsx
create mode 100644 src/components/TournamentsList/TournamentsList-styled.jsx
create mode 100644 src/components/TournamentsList/TournamentsList.jsx
create mode 100644 src/pages/TournamentsPage/TournamentsPage-styled.jsx
create mode 100644 src/pages/TournamentsPage/TournamentsPage.jsx
diff --git a/src/Api/ApiRequest.js b/src/Api/ApiRequest.js
index 672a366..5fcfc63 100644
--- a/src/Api/ApiRequest.js
+++ b/src/Api/ApiRequest.js
@@ -1,5 +1,6 @@
import photos from "./photos.json";
import members from "./members.json";
+import tournaments from "./tournaments.json"
export const photosApi = () => {
return photos;
@@ -8,3 +9,7 @@ export const photosApi = () => {
export const membersApi = () => {
return members;
};
+
+export const tournamentsApi = () => {
+ return tournaments;
+};
diff --git a/src/Api/members.json b/src/Api/members.json
index 3b4e9aa..cecfc7a 100644
--- a/src/Api/members.json
+++ b/src/Api/members.json
@@ -500,7 +500,7 @@
"avatar": "https://raw.githubusercontent.com/M-Farmaha/100-club/main/src/components/MembersList/avatars/39.jpg",
"sex": "male",
"hometown": "Львів",
- "type": "Чемпіон",
+ "type": "Легенда",
"category": null,
"forhand": "Зліва",
"backhand": "Одноручний",
diff --git a/src/Api/tournaments.json b/src/Api/tournaments.json
new file mode 100644
index 0000000..56766b3
--- /dev/null
+++ b/src/Api/tournaments.json
@@ -0,0 +1,55 @@
+[
+ {
+ "id": "2023_1",
+ "year": 2023,
+ "name": "Kosyk's Open 2023",
+ "logo": "logo-KO",
+ "status": "Завершений",
+ "stages": [
+ {
+ "date": "2023-06-25",
+ "players": [
+ { "member_id": "42", "win": 1, "defeat": 1 },
+ { "member_id": "1", "win": 8, "defeat": 3 },
+ { "member_id": "76", "win": 3, "defeat": 6 },
+ { "member_id": "39", "win": 13, "defeat": 1 },
+ { "member_id": "85", "win": 0, "defeat": 6 },
+ { "member_id": "11", "win": 2, "defeat": 6 },
+ { "member_id": "57", "win": 2, "defeat": 6 }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "2024_1",
+ "year": 2024,
+ "name": "Kosyk's Open 2024",
+ "logo": "logo-KO",
+ "status": "Активний",
+ "stages": [
+ {
+ "date": "2024-04-7",
+ "players": [
+ { "member_id": "1", "win": 6, "defeat": 3 },
+ { "member_id": "39", "win": 7, "defeat": 3 },
+ { "member_id": "76", "win": 4, "defeat": 5 },
+ { "member_id": "20", "win": 1, "defeat": 3 },
+ { "member_id": "5", "win": 0, "defeat": 5 },
+ { "member_id": "57", "win": 5, "defeat": 4 }
+ ]
+ },
+ {
+ "date": "2024-04-21",
+ "players": [
+ { "member_id": "1", "win": 13, "defeat": 1 },
+ { "member_id": "39", "win": 10, "defeat": 4 },
+ { "member_id": "76", "win": 1, "defeat": 10 },
+ { "member_id": "20", "win": 0, "defeat": 1 },
+ { "member_id": "11", "win": 8, "defeat": 4 },
+ { "member_id": "5", "win": 0, "defeat": 5 },
+ { "member_id": "31", "win": 0, "defeat": 1 }
+ ]
+ }
+ ]
+ }
+]
diff --git a/src/App.js b/src/App.js
index ec60022..4466588 100644
--- a/src/App.js
+++ b/src/App.js
@@ -7,6 +7,7 @@ import Layout from "./Layout/Layout";
import { ImageGalleryModal } from "./components/ImageGallery/ImageGalleryModal";
import { MembersModal } from "./components/MembersList/MembersModal";
+import TournamentsPage from "./pages/TournamentsPage/TournamentsPage";
function App() {
return (
@@ -16,6 +17,10 @@ function App() {
}>
} />
+ }>
+ } />
+
+
}>
} />
diff --git a/src/components/AppBar/AppBar.jsx b/src/components/AppBar/AppBar.jsx
index f8cf603..61b8dc3 100644
--- a/src/components/AppBar/AppBar.jsx
+++ b/src/components/AppBar/AppBar.jsx
@@ -43,6 +43,15 @@ export const AppBar = () => {
+
+
+
+
+
+ Турніри
+
+
+
diff --git a/src/components/ChartSection/ChartSection.jsx b/src/components/ChartSection/ChartSection.jsx
index eeaa7a1..d360322 100644
--- a/src/components/ChartSection/ChartSection.jsx
+++ b/src/components/ChartSection/ChartSection.jsx
@@ -5,7 +5,7 @@ import { Section, Subtitle } from "./ChartSection-styled";
export const ChartSection = ({ membersArray }) => {
const optionsByType = [
"Аматор",
- "Чемпіон",
+ "Легенда",
"Напів професіонал",
"Професіонал",
"Тренер",
diff --git a/src/components/Filters/MembersFilterBar.jsx b/src/components/Filters/MembersFilterBar.jsx
index 73401a0..1693b99 100644
--- a/src/components/Filters/MembersFilterBar.jsx
+++ b/src/components/Filters/MembersFilterBar.jsx
@@ -18,7 +18,7 @@ export const MembersFilterBar = ({ membersArray, setVisibleMembersArray }) => {
"Аматор",
"Напів професіонал",
"Професіонал",
- "Чемпіон",
+ "Легенда",
"Тренер",
"Дитяча група",
"Тенісна мама",
diff --git a/src/components/LastUpdateSection/LastUpdateSection.jsx b/src/components/LastUpdateSection/LastUpdateSection.jsx
index 6b085b0..566191c 100644
--- a/src/components/LastUpdateSection/LastUpdateSection.jsx
+++ b/src/components/LastUpdateSection/LastUpdateSection.jsx
@@ -11,7 +11,7 @@ export const LastUpdateSection = () => {
- Останнє оновлення: 11.04.2024
+ Останнє оновлення: 23.04.2024
>
diff --git a/src/components/Logo/Logo-styled.jsx b/src/components/Logo/Logo-styled.jsx
index c9528cd..2d714e6 100644
--- a/src/components/Logo/Logo-styled.jsx
+++ b/src/components/Logo/Logo-styled.jsx
@@ -1,14 +1,6 @@
import styled from "styled-components";
-export const LogoWWrap = styled.div`
- width: 80px;
- height: 80px;
- display: flex;
- align-items: center;
- justify-content: center;
-`;
-
-export const LogoWWrapAlt = styled.div`
+export const LogoWrap = styled.div`
width: 80px;
height: 80px;
display: flex;
diff --git a/src/components/Logo/Logo.jsx b/src/components/Logo/Logo.jsx
index e915bb6..512d4a1 100644
--- a/src/components/Logo/Logo.jsx
+++ b/src/components/Logo/Logo.jsx
@@ -1,14 +1,14 @@
import sprite from "../../sprite.svg";
-import { LogoSvg, LogoWWrap, LogoWWrapAlt } from "./Logo-styled";
+import { LogoSvg, LogoWrap } from "./Logo-styled";
export const Logo = () => {
return (
<>
-
+
-
+
>
);
};
@@ -16,11 +16,23 @@ export const Logo = () => {
export const LogoAlt = () => {
return (
<>
-
+
-
+
+ >
+ );
+};
+
+export const TournamentLogo = ({ path }) => {
+ return (
+ <>
+
+
+
+
+
>
);
};
diff --git a/src/components/TournamentsList/TournamentsItem.jsx b/src/components/TournamentsList/TournamentsItem.jsx
new file mode 100644
index 0000000..0f87095
--- /dev/null
+++ b/src/components/TournamentsList/TournamentsItem.jsx
@@ -0,0 +1,21 @@
+import { TournamentLogo } from "../Logo/Logo";
+import {
+ Item,
+ MembersItemText,
+ MembersItemWrap,
+} from "./TournamentsList-styled";
+
+export const TournamentsItem = ({ el, index }) => {
+ return (
+ <>
+ -
+
+ {index + 1}.
+
+ {el.name}
+ {el.status}
+
+
+ >
+ );
+};
diff --git a/src/components/TournamentsList/TournamentsList-styled.jsx b/src/components/TournamentsList/TournamentsList-styled.jsx
new file mode 100644
index 0000000..3885450
--- /dev/null
+++ b/src/components/TournamentsList/TournamentsList-styled.jsx
@@ -0,0 +1,81 @@
+import styled from "styled-components";
+
+export const Section = styled.section`
+ padding-bottom: 50px;
+ min-height: 800px;
+ background-color: var(--secondary-white-color);
+`;
+
+export const List = styled.ul``;
+
+export const Item = styled.li`
+ position: relative;
+ overflow: hidden;
+ width: 100%;
+ height: 100px;
+
+ &:nth-child(odd) {
+ background-color: var(--primary-white-color);
+ }
+
+ &:nth-child(even) {
+ background-color: var(--secondary-white-color);
+ }
+
+ &:hover {
+ cursor: pointer;
+ }
+
+ @media screen and (min-width: 1200px) {
+ &:hover {
+ background-color: var(--primary-black-color);
+ color: var(--primary-white-color);
+ }
+ }
+`;
+
+export const MembersItemWrap = styled.div`
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ padding-left: 24px;
+ padding-right: 24px;
+ margin-left: auto;
+ margin-right: auto;
+ max-width: 1200px;
+ width: 100%;
+ height: 100%;
+`;
+
+export const MembersItemText = styled.p`
+ overflow: hidden;
+ display: flex;
+ justify-content: left;
+ align-items: center;
+ height: 100%;
+
+ font-size: 16px;
+ font-weight: 400;
+ line-height: 1.6;
+
+ &:nth-child(1) {
+ width: 35px;
+ }
+
+ &:nth-child(3) {
+ padding-left: 10px;
+ width: 120px;
+ flex-grow: 1;
+ }
+
+ &:nth-child(4) {
+ width: 120px;
+ justify-content: right;
+ text-align: right;
+
+ @media screen and (min-width: 450px) {
+ width: 150px;
+ }
+ }
+`;
diff --git a/src/components/TournamentsList/TournamentsList.jsx b/src/components/TournamentsList/TournamentsList.jsx
new file mode 100644
index 0000000..6f6c9b4
--- /dev/null
+++ b/src/components/TournamentsList/TournamentsList.jsx
@@ -0,0 +1,21 @@
+import { List, Section } from "./TournamentsList-styled";
+import { TournamentsItem } from "./TournamentsItem";
+import { TitleSection } from "../TitleSection/TitleSection";
+
+export const TournamentsList = ({ tournamentsArray }) => {
+ return (
+ <>
+
+
+
+ {tournamentsArray?.map((el, index) => (
+
+ ))}
+
+
+ >
+ );
+};
diff --git a/src/helpers/getColorByType.js b/src/helpers/getColorByType.js
index 3252c40..57b4dfe 100644
--- a/src/helpers/getColorByType.js
+++ b/src/helpers/getColorByType.js
@@ -12,7 +12,7 @@ export const getColorByType = (type) => {
return "var(--type-kid-color)";
case "Тенісна мама":
return "var(--type-tennismom-color)";
- case "Чемпіон":
+ case "Легенда":
return "var(--type-champion-color)";
case "male":
diff --git a/src/pages/TournamentsPage/TournamentsPage-styled.jsx b/src/pages/TournamentsPage/TournamentsPage-styled.jsx
new file mode 100644
index 0000000..e69de29
diff --git a/src/pages/TournamentsPage/TournamentsPage.jsx b/src/pages/TournamentsPage/TournamentsPage.jsx
new file mode 100644
index 0000000..ced972a
--- /dev/null
+++ b/src/pages/TournamentsPage/TournamentsPage.jsx
@@ -0,0 +1,23 @@
+import { useEffect, useState } from "react";
+
+import { tournamentsApi } from "../../Api/ApiRequest";
+import { TournamentsList } from "../../components/TournamentsList/TournamentsList";
+
+const TournamentsPage = () => {
+ const [tournamentsArray, setTournamentsArray] = useState([]);
+
+ useEffect(() => {
+ window.scrollTo(0, 0);
+ const tournaments = tournamentsApi();
+ tournaments?.sort((a, b) => a.name.localeCompare(b.name));
+ setTournamentsArray(tournaments);
+ }, []);
+
+ return (
+ <>
+
+ >
+ );
+};
+
+export default TournamentsPage;
diff --git a/src/sprite.svg b/src/sprite.svg
index 10ea7e2..651e393 100644
--- a/src/sprite.svg
+++ b/src/sprite.svg
@@ -629,6 +629,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+