doc.silverstripe.org/src/components/Layout.tsx

53 lines
1.5 KiB
TypeScript
Raw Normal View History

2019-11-12 04:09:29 +01:00
import React, { StatelessComponent, useState, ReactNode } from "react";
2019-11-08 03:40:20 +01:00
import Header from './Header';
import Sidebar from './Sidebar';
import useHierarchy from '../hooks/useHierarchy';
import Helmet from 'react-helmet';
2019-11-08 03:40:20 +01:00
2019-11-12 04:09:29 +01:00
interface LayoutProps {
children?: ReactNode
pathContext: {
slug: string;
}
}
const Layout: StatelessComponent<LayoutProps> = ({ children, pageContext: { slug } }) => {
const { setCurrentPath, getVersionPath, getCurrentVersion, getCurrentNode, getDefaultVersion, getVersionMessage } = useHierarchy();
2019-11-08 03:40:20 +01:00
const [isToggled, setSidebarOpen] = useState(false);
2019-11-12 04:09:29 +01:00
const handleNavigate = () => setSidebarOpen(false);
setCurrentPath(slug);
const ver = getCurrentVersion();
const currentNode = getCurrentNode();
const versionMessage = getVersionMessage();
2019-11-08 03:40:20 +01:00
return (
<>
{currentNode && ver !== getDefaultVersion() && (
<Helmet
link={[
{
rel: 'canonical',
href: getVersionPath(currentNode, getDefaultVersion()),
}
]}
/>
)}
2019-11-08 03:40:20 +01:00
<Header handleSidebarToggle={() => setSidebarOpen(!isToggled)} />
<div className={`docs-wrapper container ${isToggled ? 'sidebar-visible' : ''}`}>
2019-11-12 04:09:29 +01:00
<Sidebar onNavigate={handleNavigate} isOpen={isToggled} />
<div className="docs-content">
<div className="container">
2019-11-19 23:46:39 +01:00
<article role="main" className="docs-article">
<>
{versionMessage}
2019-11-12 04:09:29 +01:00
{children}
</>
2019-11-12 04:09:29 +01:00
</article>
</div>
</div>
2019-11-08 03:40:20 +01:00
</div>
</>
);
};
export default Layout;