Bhabananda Das
fff
bd903ab
import {
Avatar,
Box,
Flex,
Image,
Menu,
MenuButton,
MenuItem,
MenuList,
Portal,
Text,
} from "@chakra-ui/react";
import React, { useContext, useState } from "react";
import { NavLink } from "react-router-dom";
import { BsBell, BsCameraVideo } from "react-icons/bs";
import { MdOutlineCastConnected } from "react-icons/md";
import { BiSearch } from "react-icons/bi";
import { IoCompassOutline } from "react-icons/io5";
import { countries, sidebarData } from "../constants/Constants";
import YoutubeContext from "../../context/YoutubeContext";
import SearchBox from "./SearchBox";
const Header = () => {
const { setCountry, country } = useContext(YoutubeContext);
const [isOpen, setIsOpen] = useState(false);
const [flag, setFlag] = useState(
"https://t4.ftcdn.net/jpg/02/81/47/57/240_F_281475718_rlQONmoS2E3CJtv0zFv2HwZ1weGhxpff.jpg"
);
return (
<>
<Box zIndex={10} position={"sticky"} top={0}>
<Box
borderBottomWidth="1px"
borderColor={"#303030"}
padding={{ base: "0px 10px", sm: "0px 10px", md: "8px 35px" }}
borderStyle={"solid"}
bg={"#0f0f0f"}
>
<Flex justifyContent={"space-between"} alignItems={"center"}>
<NavLink to="/">
<Flex gap={""} alignItems={"center"}>
<Image
height={"7vh"}
objectFit={"cover"}
src={"/logo512.png"}
alt="logo"
/>
<Text color={"white"} fontWeight={"bold"}>
YouTube
</Text>
</Flex>
</NavLink>
<Box>
<SearchBox />
</Box>
<Box
display={"flex"}
gap={{ base: 4, sm: 4, md: 6 }}
alignItems={"center"}
>
<Text
display={{ base: "none", sm: "none", md: "block" }}
fontSize={"xl"}
color={"white"}
>
<BsCameraVideo />
</Text>
<Text
display={{ base: "block", sm: "block", md: "none" }}
fontSize={"xl"}
color={"white"}
>
<MdOutlineCastConnected />
</Text>
<Text fontSize={"xl"} color={"white"}>
<BsBell />
</Text>
<Text
display={{ base: "block", sm: "block", md: "none" }}
fontSize={"xl"}
color={"white"}
_hover={{ cursor: "pointer" }}
>
<NavLink to="/search/mobile">
<BiSearch />
</NavLink>
</Text>
<Menu>
<MenuButton>
<Avatar
display={{ base: "none", sm: "none", md: "block" }}
size={"xs"}
name="Coutry"
src={flag}
/>
</MenuButton>
<Portal>
<MenuList zIndex={11} bg={"#323232"}>
{countries.map((country) => (
<MenuItem
bg={"#323232"}
_hover={{ bg: "#5b5b5b" }}
color={"white"}
onClick={() => {
setFlag(country.url);
setCountry(country.countryCode);
}}
key={country.name}
>
{country.name}
</MenuItem>
))}
</MenuList>
</Portal>
</Menu>
<Avatar
display={{ base: "block", sm: "block", md: "none" }}
size={"xs"}
name="Avatar"
src={"https://cdn-icons-png.flaticon.com/128/2202/2202112.png"}
/>
</Box>
</Flex>
</Box>
<Box
bg={"#0f0f0f"}
display={{ base: "block", sm: "block", md: "none" }}
>
<Flex
className="hidden-scrollbar"
width={"100%"}
overflow={"scroll"}
align={"center"}
size={"xs"}
padding={"5px 10px"}
gap={2}
>
<Box
color="white"
bg={"#303030"}
_hover={{ bg: "#424242", cursor: "pointer" }}
_active={{ bg: "#ededed", color: "black" }}
fontSize={"2xl"}
padding={"4px 8px"}
borderRadius={"4px"}
onClick={() => setIsOpen(!isOpen)}
>
<IoCompassOutline />
</Box>
{countries.map((country_) => (
<Box
onClick={() => setCountry(country_.countryCode)}
key={country_.name}
_hover={{ cursor: "pointer" }}
color={country === country_.countryCode ? "black" : "white"}
bg={country === country_.countryCode ? "#ededed" : "#303030"}
padding={"4px 8px"}
borderRadius={"4px"}
>
{country_.name}
</Box>
))}
</Flex>
</Box>
</Box>
<MobileMenubar isOpen={isOpen} setIsOpen={setIsOpen} />
</>
);
};
export default Header;
const MobileMenubar = ({ isOpen, setIsOpen }) => (
<>
<Box
width={"100vh"}
height={"100vw"}
position={"fixed"}
top={0}
left={0}
display={isOpen ? "Block" : "none"}
bg={"#0000009b"}
onClick={() => setIsOpen(!isOpen)}
zIndex={120}
>
<Box
bg="#303030"
height="100vh"
transform={isOpen ? "" : "translateX(-100%)"}
width={"80vw"}
transition={"all 1s"}
display={isOpen ? "Block" : "none"}
boxShadow="0px -1px 10px rgba(0, 0, 0, 0.1)"
onClick={() => setIsOpen(!isOpen)}
>
<Box>
<Box marginBottom={"15px"} padding={"0px 10px"}>
<NavLink to="/">
<Flex alignItems={"center"}>
<Image
height={"7vh"}
objectFit={"cover"}
src={"/logo512.png"}
alt="logo"
/>
<Text color={"white"} fontWeight={"bold"}>
YouTube
</Text>
</Flex>
</NavLink>
</Box>
<Flex direction={"column"} gap="2">
{sidebarData.map((data) => (
<NavLink
key={data.name}
to={data.name === "Trending" ? "/" : `/?query=${data.name}`}
>
<Box
color="white"
display="flex"
gap={4}
padding="8px 20px"
alignItems="center"
_hover={{ background: "#3a3a3a" }}
>
{" "}
<Text fontSize="2xl">{data.icon} </Text>{" "}
<Text>{data.name}</Text>
</Box>
</NavLink>
))}
</Flex>
</Box>
</Box>
</Box>
</>
);