import classNames from "classnames"; import qs from "query-string"; import React, { useRef, useState } from "react"; import { useNavigate } from "react-router-dom"; import { radarNameShort } from "../../config"; import { useMessages } from "../../context/MessagesContext"; import { useSearchParamState } from "../../hooks/use-search-param-state"; import { Tag } from "../../model"; import Branding from "../Branding/Branding"; import Link from "../Link/Link"; import LogoLink from "../LogoLink/LogoLink"; import Search from "../Search/Search"; import TagsModal from "../TagsModal/TagsModal"; export default function Header({ pageName, tags, }: { pageName: string; tags: Tag[]; }) { const [searchOpen, setSearchOpen] = useState(false); const [search, setSearch] = useState(""); const { searchLabel, pageHelp, pageOverview } = useMessages(); const navigate = useNavigate(); const searchRef = useRef(null); const [searchParamState, setSearchParamsState] = useSearchParamState(); const openSearch = () => { setSearchOpen(true); }; const closeSearch = () => { setSearchOpen(false); }; const handleSearchChange = (value: string) => { setSearch(value); }; const handleSearchSubmit = () => { let { tags } = searchParamState; tags = Array.isArray(tags) ? tags.join("|") : tags; navigate({ pathname: "/overview.html", search: qs.stringify({ search: search, tags }), }); setSearchOpen(false); setSearch(""); }; const handleOpenClick = (e: React.MouseEvent) => { // e.preventDefault(); // todo used to be a link openSearch(); setTimeout(() => { searchRef?.current?.focus(); }, 0); }; const handleTagChange = (tag: Tag) => { const { search, tags = [] } = searchParamState; let newTags; // Toggle changed item in tags searchParam depends on type Array or String if (Array.isArray(tags)) { newTags = tags.includes(tag) ? tags.filter((item: string) => item !== tag) : [...tags, tag]; } else { newTags = tags !== tag ? [tags, tag] : []; } setSearchParamsState({ tags: newTags, search, }); }; const [modalIsOpen, setModalIsOpen] = useState(false); const toggleModal = function () { setModalIsOpen(!modalIsOpen); }; const smallLogo = pageName !== "index"; return ( }>
{pageHelp && (
{pageHelp.headlinePrefix || "How to use"} {radarNameShort}?
)} {Boolean(tags.length) && (
)}
{pageOverview?.title || "Technologies Overview"}
{Boolean(tags.length) && ( )}
); }