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