import { faBars, faHeart, faNetworkWired, faUser, } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { uniqueId } from "lodash"; import React, { FunctionComponent, useMemo } from "react"; import { Button, Col, Container, Dropdown, Image, Navbar, Row, } from "react-bootstrap"; import { Helmet } from "react-helmet"; import { siteChangeSidebarVisibility, siteRedirectToAuth, } from "../@redux/actions"; import { useSystemSettings } from "../@redux/hooks"; import { useReduxAction } from "../@redux/hooks/base"; import { useIsOffline } from "../@redux/hooks/site"; import logo from "../@static/logo64.png"; import { SystemApi } from "../apis"; import { ActionButton, SearchBar, SearchResult } from "../components"; import { useGotoHomepage, useIsMobile } from "../utilities"; import "./header.scss"; import NotificationCenter from "./Notification"; async function SearchItem(text: string) { const results = await SystemApi.search(text); return results.map((v) => { let link: string; let id: string; if (v.sonarrSeriesId) { link = `/series/${v.sonarrSeriesId}`; id = `series-${v.sonarrSeriesId}`; } else if (v.radarrId) { link = `/movies/${v.radarrId}`; id = `movie-${v.radarrId}`; } else { link = ""; id = uniqueId("unknown"); } return { name: `${v.title} (${v.year})`, link, id, }; }); } interface Props {} const Header: FunctionComponent = () => { const setNeedAuth = useReduxAction(siteRedirectToAuth); const settings = useSystemSettings(); const canLogout = (settings.content?.auth.type ?? "none") === "form"; const changeSidebar = useReduxAction(siteChangeSidebarVisibility); const offline = useIsOffline(); const isMobile = useIsMobile(); const serverActions = useMemo( () => ( { SystemApi.restart(); }} > Restart { SystemApi.shutdown(); }} > Shutdown ), [canLogout, setNeedAuth] ); const goHome = useGotoHomepage(); return (
brand
{offline ? ( {isMobile ? "" : "Connecting..."} ) : ( serverActions )}
); }; export default Header;