"use client"; import type React from "react"; import "../TitleBar/TitleBarStyle.css"; import { faHouse, faBars, faTimes, faChevronDown, faChevronUp, faSpinner, } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useState, useEffect } from "react"; import Link from "next/link"; interface TitleBarProps { title: string; redirectUrl?: string; showHomeButton?: boolean; backgroundColor?: string; } const TitleBar: React.FC = ({ title, redirectUrl, showHomeButton, backgroundColor, }) => { const [isSidebarOpen, setIsSidebarOpen] = useState(false); const [isMounted, setIsMounted] = useState(false); const [groupingData, setPhaseData] = useState<{ [key: string]: string[]; } | null>(null); const [collapsedSections, setCollapsedSections] = useState<{ [key: string]: boolean; }>({}); const [loadingMember, setLoadingMember] = useState(null); useEffect(() => { setIsMounted(true); const fetchPhaseData = async () => { const apiUrl = process.env.NEXT_PUBLIC_API_URL_TESTING; try { const response = await fetch(apiUrl + "/groups.json", { cache: 'no-store', headers: { 'Cache-Control': 'no-cache' } }); const data = await response.json(); setPhaseData(data); const initialCollapsedState = Object.keys(data).reduce( (acc, phase) => { acc[phase] = true; return acc; }, {} as { [key: string]: boolean }, ); setCollapsedSections(initialCollapsedState); } catch (error) { console.error("Error fetching phase data:", error); } }; fetchPhaseData(); }, []); const toggleSidebar = () => { setIsSidebarOpen(!isSidebarOpen); }; const toggleSection = (phase: string) => { setCollapsedSections((prevState) => ({ ...prevState, [phase]: !prevState[phase], })); }; const handleMemberClick = (member: string) => { setLoadingMember(member); }; if (!isMounted) { return null; } return ( <>
{title} {showHomeButton && ( )}
{/* Sidebar */}
PhaseTracker
  • Home
  • Twitch Table
  • About
  • Data
{isSidebarOpen && (
)} ); }; export default TitleBar;