// @flow import * as PAGES from 'constants/pages'; import * as ICONS from 'constants/icons'; import { SETTINGS_GRP } from 'constants/settings'; import type { Node } from 'react'; import React from 'react'; import { useHistory } from 'react-router-dom'; import classnames from 'classnames'; import Button from 'component/button'; import { IS_MAC } from 'component/app/view'; import { useIsMediumScreen } from 'effects/use-screensize'; type SideNavLink = { title: string, link?: string, route?: string, section?: string, onClick?: () => any, icon: string, extra?: Node, }; const SIDE_LINKS: Array = [ { title: 'Appearance', section: SETTINGS_GRP.APPEARANCE, icon: ICONS.APPEARANCE, }, { title: 'Account', section: SETTINGS_GRP.ACCOUNT, icon: ICONS.ACCOUNT, }, { title: 'Content settings', section: SETTINGS_GRP.CONTENT, icon: ICONS.CONTENT, }, { title: 'System', section: SETTINGS_GRP.SYSTEM, icon: ICONS.SETTINGS, }, { title: 'Content Hosting', section: SETTINGS_GRP.STORAGE, icon: ICONS.PUBLISH, }, ]; export default function SettingsSideNavigation() { const sidebarOpen = true; const isMediumScreen = useIsMediumScreen(); const isAbsolute = isMediumScreen; const microNavigation = !sidebarOpen || isMediumScreen; const { location, goBack } = useHistory(); function scrollToSection(section: string) { const TOP_MARGIN_PX = 20; const element = document.getElementById(section); if (element) { window.scrollTo({ top: element.offsetTop - TOP_MARGIN_PX, left: 0, behavior: 'smooth', }); } } function getOnClickHandler(section) { if (section) { if (location.pathname === `/$/${PAGES.SETTINGS}`) { return () => scrollToSection(section); } else if (location.pathname.startsWith(`/$/${PAGES.SETTINGS}/`)) { return () => { goBack(); setTimeout(() => scrollToSection(section), 5); }; } } return undefined; } if (isMediumScreen) { // I think it's ok to hide it for now on medium/small screens given that // we are using a scrolling Settings Page that displays everything. If we // really need this, most likely we can display it as a Tab at the top // of the page. return null; } return (
{isMediumScreen && sidebarOpen && ( <> )}
); }