diff --git a/src/components/Pages/MainPage.jsx b/src/components/Pages/MainPage.jsx index 7340ed26..e1a58a9c 100644 --- a/src/components/Pages/MainPage.jsx +++ b/src/components/Pages/MainPage.jsx @@ -1,66 +1,101 @@ -import React, { useEffect, useState } from 'react'; -import ProjectCards from '../Cards/ProjectCards'; -import './mainpage.css'; -import Dashboard from './Dashboard'; +import React, { useEffect, useState } from "react"; +import ProjectCards from "../Cards/ProjectCards"; +import "./mainpage.css"; +import Dashboard from "./Dashboard"; const MainPage = (props) => { - const { category, routes } = props; - if (category === '') return ; + const { category, routes, setProgress } = props; + if (category === "") return ; - const [projectsData, setProjectsData] = useState([]); - const [tag, setTag] = useState('All'); + const [projectsData, setProjectsData] = useState([]); + const [filteredData, setFilteredData] = useState([]); + const [tag, setTag] = useState("All"); - const getName = (category) => { - let filtered = routes.filter(obj => obj.path === `/${category}`); - return filtered[0].name; - } - const getTech = (category) => { - let filtered = routes.filter(obj => obj.path === `/${category}`); - return filtered[0].tech; - } + const getName = (category) => { + let filtered = routes.filter((obj) => obj.path === `/${category}`); + return filtered[0].name; + }; - useEffect(() => { - const fetchData = async () => { - props.setProgress(10); - try { - const response = await fetch(`https://raw.githubusercontent.com/Avdhesh-Varshney/WebMasterLog/main/database/${category}.json`); - if (!response.ok) { - throw new Error('Failed to fetch projects data'); - } - props.setProgress(30); - const data = await response.json(); - props.setProgress(50); - let filteredData = data; - if (tag !== 'All') { - filteredData = data.filter(project => project.tag === tag); - } - props.setProgress(80); - setProjectsData(filteredData); - } catch (error) { - console.error('Error fetching projects data:', error); - } - props.setProgress(100); - }; - fetchData(); - }, [tag]); + const getTech = (category) => { + let filtered = routes.filter((obj) => obj.path === `/${category}`); + return filtered[0].tech; + }; - const handleTagClick = (selectedTag) => { - setTag(selectedTag); - }; + useEffect(() => { + const fetchData = async () => { + setProgress(10); + try { + const response = await fetch( + `https://raw.githubusercontent.com/Avdhesh-Varshney/WebMasterLog/main/database/${category}.json` + ); + if (!response.ok) { + throw new Error("Failed to fetch projects data"); + } + setProgress(30); + const data = await response.json(); + setProgress(50); + setProjectsData(data); + setFilteredData(data); + setProgress(80); + } catch (error) { + console.error("Error fetching projects data:", error); + } + setProgress(100); + }; + fetchData(); + }, [category, setProgress]); - return ( - <> -

{`${getName(category)} Projects`}

-
- - - - -
+ useEffect(() => { + if (tag === "All") { + setFilteredData(projectsData); + } else { + setFilteredData(projectsData.filter((project) => project.tag === tag)); + } + }, [tag, projectsData]); - - - ); -} + const handleTagClick = (selectedTag) => { + setTag(selectedTag); + }; + + useEffect(() => { + const dropdown = document.querySelector(".custom-dropdown"); + if (dropdown) { + const colorMap = { + Basic: "green", + Intermediate: "yellow", + Advanced: "red", + All: "#1E90FF", + }; + dropdown.style.border = '1px solid '+colorMap[tag] || "blue"; + dropdown.style.color = colorMap[tag] || "blue"; + } + }, [tag]); + + return ( + <> +

{`${getName(category)} Projects`}

+
+ + + + +
+ + + +
+ +
+ + ); +}; export default MainPage; diff --git a/src/components/Pages/mainpage.css b/src/components/Pages/mainpage.css index e69de29b..eaf43175 100644 --- a/src/components/Pages/mainpage.css +++ b/src/components/Pages/mainpage.css @@ -0,0 +1,73 @@ +/* mainpage.css */ +.button-group { + display: flex; +} + +.dropdown { + display: none; + background: none; + width: 150px; + margin-left: auto; +} + +/* Main Page Styles */ + +.text-end { + text-align: end; +} + +.my-2 { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} + +.mx-3 { + margin-left: 1rem; + margin-right: 1rem; +} + +.d-flex { + display: flex; +} + +.justify-content-end { + justify-content: flex-end; +} + +.button-group button { + margin: 0 0.5rem; +} + +.custom-dropdown { + background-color: #222; + color: #fff; + border-radius: 4px; + padding: 0.5rem; + font-size: 1rem; + transition: all 0.3s ease; +} + +.custom-dropdown:focus { + border-color: #888; + outline: none; + box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2); +} + +.custom-dropdown option { + background-color: #222; + color: #fff; +} + +@media (max-width: 768px) { + .button-group { + display: none; + } + .dropdown { + display: block; + } +} + + +.dropdown select{ + background: none; +} \ No newline at end of file