Merge pull request #74 from hongphinguyen/sidebar-context

Fixing up the sidebar context
This commit is contained in:
Jean-Philippe Sirois
2019-08-23 14:21:38 -04:00
committed by GitHub
3 changed files with 12 additions and 16 deletions
+7 -11
View File
@@ -1,4 +1,4 @@
import React, { useState } from "react" import React, { useState, useMemo } from "react"
interface ISidebarProviderProps { interface ISidebarProviderProps {
children: React.ReactNode children: React.ReactNode
@@ -15,20 +15,16 @@ export const SidebarContext = React.createContext<ISidebarContextInterface | nul
export function SidebarProvider({ export function SidebarProvider({
children, children,
}: ISidebarProviderProps): JSX.Element { }: ISidebarProviderProps) {
const [current, setCurrent] = useState(0) const [current, setCurrent] = useState(0)
function selectFirstLevel(index: number) { const memoizedContextValue = useMemo(() => ({
setCurrent(index) current,
} setCurrent,
}), [current, setCurrent])
return ( return (
<SidebarContext.Provider <SidebarContext.Provider value={memoizedContextValue}>
value={{
current,
setCurrent: selectFirstLevel,
}}
>
{children} {children}
</SidebarContext.Provider> </SidebarContext.Provider>
) )
+3 -3
View File
@@ -1,5 +1,5 @@
import { graphql, Link, useStaticQuery } from "gatsby" import { graphql, Link, useStaticQuery } from "gatsby"
import React, { PropsWithChildren, useState } from "react" import React, { PropsWithChildren, useState, memo } from "react"
import TriangleDown from "../../icons/triangle-down.svg" import TriangleDown from "../../icons/triangle-down.svg"
import Banner from "../../images/tph-banner.svg" import Banner from "../../images/tph-banner.svg"
import useSidebar from "./../../hooks/useSidebar" import useSidebar from "./../../hooks/useSidebar"
@@ -91,7 +91,7 @@ function Folder({ item }: { item: IFolder }) {
) )
} }
function FirstLevelFolder({ item, index }: { item: IFolder; index: number }) { const FirstLevelFolder = memo(({ item, index }: { item: IFolder; index: number }) => {
const { current, setCurrent } = useSidebar() const { current, setCurrent } = useSidebar()
const collapsed = current !== index const collapsed = current !== index
@@ -107,7 +107,7 @@ function FirstLevelFolder({ item, index }: { item: IFolder; index: number }) {
<SC.Children>{item.children.map(node => plantTree(node))}</SC.Children> <SC.Children>{item.children.map(node => plantTree(node))}</SC.Children>
</SC.TreeWrapper> </SC.TreeWrapper>
) )
} })
function MenuItem({ children, to }: PropsWithChildren<{ to: string }>) { function MenuItem({ children, to }: PropsWithChildren<{ to: string }>) {
return ( return (
+2 -2
View File
@@ -1,7 +1,7 @@
import { useContext } from "react" import { useContext } from "react"
import { SidebarContext, SidebarContextInterface } from "../SidebarProvider" import { SidebarContext, ISidebarContextInterface } from "../SidebarProvider"
export default function useSidebar(): SidebarContextInterface { export default function useSidebar(): ISidebarContextInterface {
const sidebarContext = useContext(SidebarContext) const sidebarContext = useContext(SidebarContext)
if (!sidebarContext) { if (!sidebarContext) {