import React, { FunctionComponent, useContext, useEffect, useMemo, } from "react"; import { Container, Image, ListGroup } from "react-bootstrap"; import { useHistory } from "react-router-dom"; import { badgeUpdateAll, siteChangeSidebar } from "../@redux/actions"; import { useReduxAction, useReduxStore } from "../@redux/hooks/base"; import { useIsRadarrEnabled, useIsSonarrEnabled } from "../@redux/hooks/site"; import logo from "../@static/logo64.png"; import { SidebarToggleContext } from "../App"; import { useAutoUpdate } from "../utilites/hooks"; import { BadgesContext, CollapseItem, HiddenKeysContext, LinkItem, } from "./items"; import { RadarrDisabledKey, SidebarList, SonarrDisabledKey } from "./list"; import "./style.scss"; import { BadgeProvider } from "./types"; export function useSidebarKey() { return useReduxStore((s) => s.site.sidebar); } export function useUpdateSidebar() { return useReduxAction(siteChangeSidebar); } interface Props { open?: boolean; } const Sidebar: FunctionComponent = ({ open }) => { const updateBadges = useReduxAction(badgeUpdateAll); useAutoUpdate(updateBadges); const toggle = useContext(SidebarToggleContext); const { movies, episodes, providers } = useReduxStore((s) => s.site.badges); const badges = useMemo( () => ({ Wanted: { Series: episodes, Movies: movies, }, System: { Providers: providers, }, }), [movies, episodes, providers] ); const sonarrEnabled = useIsSonarrEnabled(); const radarrEnabled = useIsRadarrEnabled(); const hiddenKeys = useMemo(() => { const list = []; if (!sonarrEnabled) { list.push(SonarrDisabledKey); } if (!radarrEnabled) { list.push(RadarrDisabledKey); } return list; }, [sonarrEnabled, radarrEnabled]); const history = useHistory(); const updateSidebar = useUpdateSidebar(); useEffect(() => { const path = history.location.pathname.split("/"); const len = path.length; if (len >= 3) { updateSidebar(path[len - 2]); } else { updateSidebar(path[len - 1]); } }, [history.location.pathname, updateSidebar]); const cls = ["sidebar-container"]; const overlay = ["sidebar-overlay"]; if (open === true) { cls.push("open"); overlay.push("open"); } const sidebarItems = useMemo( () => SidebarList.map((v) => { if (hiddenKeys.includes(v.hiddenKey ?? "")) { return null; } if ("children" in v) { return ; } else { return ; } }), [hiddenKeys] ); return (
); }; export default Sidebar;