import API_URL from "../../config/api"; import styles from "./styles.module.css"; import { LuUser, LuMenu, LuSearch, LuLogOut, LuUsers, LuMail, LuGraduationCap, LuTvMinimalPlay, LuLayoutDashboard, LuCircleUser, LuPanelLeftClose, LuClock3, LuCalendar } from "react-icons/lu"; import { useEffect, useState } from "react"; import { useNavigate, Link, NavLink } from "react-router"; import { Button, Offcanvas } from "react-bootstrap"; import type { Workshop } from "../../types"; import type { Video } from "../../types"; import { CgSpinner } from "react-icons/cg"; import { useDebounce } from "../../hooks/useDebounce"; import { useGetVideos } from "../../hooks/useGetVideos"; import { useGetVideosSearch } from "../../hooks/useGetVideosSearch"; import { PiCheckCircleFill } from "react-icons/pi"; import { useGetWorkshopsSearch } from "../../hooks/useGetWorkshopsSearch"; import { imageSkeletonFadeStyle, onImageSkeletonLoad } from "../../utils/imageSkeleton"; import { motion, AnimatePresence } from "framer-motion"; /* import { useGetCurrentUser } from "../../hooks/useGetCurrentUser"; */ export default function Header() { const [showMenu, setShowMenu] = useState(false); const [showSearch, setShowSearch] = useState(false); const [search, setSearch] = useState(""); const [loading, setLoading] = useState(false); const [searchCompleted, setSearchCompleted] = useState(false); const [videosSearched, setVideosSearched] = useState([]); const [workshopsSearched, setWorkshopsSearched] = useState([]); const debouncedSearch = useDebounce(search, 500); const [showDropdown, setShowDropdown] = useState(false); const { getVideos } = useGetVideos(); const { getVideosSearch } = useGetVideosSearch(); const { getWorkshopsSearch } = useGetWorkshopsSearch(); /* const { getCurrentUser } = useGetCurrentUser(); */ const [role, _setRole] = useState(0); const [videosWatched, setVideosWatched] = useState(0); const [videosCount, setVideosCount] = useState(0); const navigate = useNavigate(); useEffect(() => { const fetchAll = async () => { const videosWatched = localStorage.getItem("videosWatched"); setVideosWatched(videosWatched ? parseInt(videosWatched) : 0); const videosCount = localStorage.getItem("videosCount"); setVideosCount(videosCount ? parseInt(videosCount) : 0); /* const userData = await getCurrentUser(); setRole(userData.data.role_id); */ }; fetchAll(); }, []); const handleCloseMenu = () => setShowMenu(false); const handleShowMenu = () => setShowMenu(true); const handleCloseSearch = () => setShowSearch(false); const handleShowSearch = () => setShowSearch(true); useEffect(() => { if (debouncedSearch.trim() === "") { setVideosSearched([]); setWorkshopsSearched([]); setLoading(false); setSearchCompleted(false); return; } setLoading(true); setSearchCompleted(false); const fetchAll = async () => { try { const [_videosData, videosSearchedData, workshopsData] = await Promise.all([ getVideos({ page: 1 }), getVideosSearch(debouncedSearch), getWorkshopsSearch(debouncedSearch), ]); if ("videos" in videosSearchedData) { setVideosSearched(videosSearchedData.videos); } else { setVideosSearched([]); } if ("workshops" in workshopsData) { setWorkshopsSearched(workshopsData.workshops); } else { setWorkshopsSearched([]); } setSearchCompleted(true); } catch (e) { setVideosSearched([]); setWorkshopsSearched([]); setSearchCompleted(true); } finally { setLoading(false); } }; fetchAll(); }, [debouncedSearch]); function handleSearch(event: React.FormEvent) { event.preventDefault(); const q = search.trim(); if (q === "") { setShowSearch(false); return; } navigate(`/search?q=${encodeURIComponent(q)}`); setShowSearch(false); } return (
<> Logo {role !== 1 && videosCount > 0 && (
Vídeos assistidos {videosWatched}/{videosCount}
)}
Logout
); }