import React, { useState, useRef, useEffect } from "react"; import styled, { keyframes } from "styled-components"; import { useLocation } from "react-router-dom"; import { useNavigationHelpers } from "../helpers/navigationHelpers"; import Switch from "react-switch"; const HeaderBar = styled.div` margin-top:${(props) => (props.HeaderMargin)}; display: flex; justify-content: space-between; align-items: center; padding: 20px 15px; color: black; background-color: white; z-index: 200; `; const Title = styled.h2` margin: 0; font-family: "Plus Jakarta Sans", sans-serif; font-weight: 500; font-style: normal; font-size:${(props) => (props.HeaderSize)}; color: rgba(88, 55, 50, 1); `; const ProfileName = styled.h2` position: absolute; font-family: "Plus Jakarta Sans", sans-serif; font-weight: 500; font-style: normal; font-size: 30px; z-index: 199; overflow: hidden; white-space: nowrap; animation: ${(props) => { if (props.animate === "grow") return gg; if (props.animate === "shrink") return ss; return nn; }} 0.5s forwards; text-align: left; `; const nn = keyframes` 0% { top: 20px; right: 30px; width: 0ch; height: 60px; } 100% { top: 20px; right: 30px; width: 0ch; height: 60px; } `; const gg = keyframes` 0% { top: 20px; right: 30px; width: 0ch; height: 60px; } 100% { top: 34px; right: 30px; width: 200px; /* Adjust this value based on the length of the text */ height: 60px; } `; const ss = keyframes` 0% { top: 34px; right: 30px; width: 200px; /* Adjust this value based on the length of the text */ height: 60px; } 100% { top: 20px; right: 30px; width: 0ch; height: 60px; } `; const ProfileImage = styled.img` position: relative; width: 60px; height: 60px; border-radius: 50%; object-fit: contain; cursor: pointer; z-index: 199; animation: ${(props) => { if (props.animate === "grow") return g; if (props.animate === "shrink") return s; return "none"; }} 0.5s forwards; `; const g = keyframes` 0% { top: 0px; right: 0px; width: 60px; height: 60px; } 100% { top: 10px; right: 220px; width: 60px; height: 60px; } `; const s = keyframes` 0% { top: 10px; right: 220px; width: 60px; height: 60px; } 100% { top: 0px; right: 0px; width: 60px; height: 60px; } `; const grow = keyframes` 0% { width: 60px; height: 60px; border-top-left-radius: 50%; border-bottom-left-radius: 50%; } 100% { width: 300px; height: auto; border-top-left-radius: 20px; border-bottom-left-radius: 20px; } `; const shrink = keyframes` 0% { width: 300px; height: auto; border-radius: 20px; } 100% { width: 60px; height: 60px; border-radius: 50%; } `; const Rectangle = styled.div` position: absolute; top: 45px; right: 15px; width: 200px; max-height: 87vh; /* or another appropriate value */ background-color: white; z-index: 198; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); animation: ${(props) => (props.animate === "grow" ? grow : shrink)} 0.5s forwards; overflow-y: auto; /* Enable vertical scrolling */ padding: 10px; box-sizing: border-box; overflow-x: hidden; `; const ChildContainer = styled.div` display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-end; flex-wrap: wrap; padding-top: 70px; `; const ChildWrapper = styled.div` display: flex; flex-direction: column; width: 100%; `; const Child = styled.div` width: 100%; height: 40px; margin: 5px; border-top-left-radius: 5px; border-bottom-left-radius: 5px; padding-left: 5px; font-family: "Plus Jakarta Sans", sans-serif; font-weight: 500; font-style: normal; ${(props) => props.hasChildren ? ` border: 1px solid #ababab; height: auto; padding-bottom: 10px; ` : ` display: flex; align-items: center; background-color: rgb(223 223 223); `} `; const Header = ({ HeaderText, HeaderSize = '6vw', shopId, shopName, shopImage, shopOwnerId, shopClerks, tableCode, showProfile, user, setModal, isLogout, guestSides, guestSideOfClerk, removeConnectedGuestSides, setIsEditMode, isEditMode, HeaderMargin = '25px' }) => { const { goToLogin, goToGuestSideLogin, goToAdminCafes } = useNavigationHelpers(shopId, tableCode); const [showRectangle, setShowRectangle] = useState(false); const [animate, setAnimate] = useState(""); const rectangleRef = useRef(null); const [guestSideOf, setGuestSideOf] = useState(null); const location = useLocation(); const handleImageClick = () => { if (showRectangle) { setAnimate("shrink"); setTimeout(() => setShowRectangle(false), 500); } else { setAnimate("grow"); setShowRectangle(true); } }; const handleClickOutside = (event) => { if (rectangleRef.current && !rectangleRef.current.contains(event.target)) { setAnimate("shrink"); setTimeout(() => setShowRectangle(false), 500); rectangleRef.current.style.overflow = "hidden"; } }; const handleScroll = () => { if (showRectangle) { setAnimate("shrink"); setTimeout(() => setShowRectangle(false), 500); } }; useEffect(() => { const queryParams = new URLSearchParams(location.search); const hasModalParam = queryParams.has("modal"); if (showRectangle && !hasModalParam) { document.addEventListener("mousedown", handleClickOutside); window.addEventListener("scroll", handleScroll); } else { document.removeEventListener("mousedown", handleClickOutside); window.removeEventListener("scroll", handleScroll); } return () => { document.removeEventListener("mousedown", handleClickOutside); window.removeEventListener("scroll", handleScroll); }; }, [showRectangle, location.search]); useEffect(() => { setGuestSideOf(guestSideOfClerk); console.log(guestSideOfClerk); }, [guestSideOfClerk]); const generateMenuHeader = (cafeName) => { // Check if the name already ends with "'s" if (cafeName.endsWith("'s")) { return `${cafeName} menu`; // Return as-is for already possessive names } if (cafeName.endsWith("s")) { return `${cafeName} menu`; // Return as-is for already possessive names } // Otherwise, use the possessive function return `${cafeName}'s menu`; }; return ( {shopName == null ? HeaderText == null ? "kedaimaster" : HeaderText : generateMenuHeader(shopName)}
{showProfile && user.username !== undefined ? user.username : "guest"} {showRectangle && ( {guestSideOfClerk && guestSideOfClerk.clerkUsername && ( this is the guest side of {guestSideOfClerk.clerkUsername} )} {user.username !== undefined && ( setModal("edit_account")}> Ubah profil )} {shopId && user.roleId == 1 && ( Dashboard)} {shopId && user.userId == shopOwnerId && user.username !== undefined && user.roleId === 1 && ( <> {shopName} Mode edit   setIsEditMode(!isEditMode)} /> setModal("reports")}>Lihat laporan setModal("add_material")}> Kelola bahan baku Kasir setModal("create_clerk")}> + Tambah {shopClerks && shopClerks.map((key, index) => ( {shopClerks[index].username} ))} Konfigurasi setModal("welcome_config")}> Desain kafe setModal("edit_tables")}> QR kedai dan meja setModal("payment_option")}> Metode pembayaran )} {user.username !== undefined && user.cafeId == shopId && user.roleId === 2 && ( {shopName} Mode edit  setIsEditMode(!isEditMode)} /> setModal("add_material")}> stok {user.username !== undefined && user.roleId == 2 && user.cafeId == shopId && ( Tablet tamu + Tambah {guestSides && guestSides.map((key, index) => ( guest side {index + 1} ))} )} setModal("reports")}>Laporan )} {user.username !== undefined && ( Logout )} )}
); }; export default Header;