github.com/tilt-dev/tilt@v0.36.0/web/src/SidebarContext.tsx (about)

     1  import React, { PropsWithChildren, useContext, useState } from "react"
     2  
     3  export type SidebarContext = {
     4    isSidebarOpen: boolean
     5    setSidebarOpen: () => void
     6    setSidebarClosed: () => void
     7  }
     8  
     9  const sidebarContext = React.createContext<SidebarContext>({
    10    isSidebarOpen: true,
    11    setSidebarOpen: () => {},
    12    setSidebarClosed: () => {},
    13  })
    14  
    15  export function useSidebarContext(): SidebarContext {
    16    return useContext(sidebarContext)
    17  }
    18  
    19  export function SidebarContextProvider(
    20    props: PropsWithChildren<{ sidebarClosedForTesting?: boolean }>
    21  ) {
    22    const [isSidebarOpen, setIsSidebarOpen] = useState<boolean>(
    23      !props.sidebarClosedForTesting
    24    )
    25  
    26    function setSidebarOpen() {
    27      setIsSidebarOpen(true)
    28    }
    29  
    30    function setSidebarClosed() {
    31      setIsSidebarOpen(false)
    32    }
    33  
    34    return (
    35      <sidebarContext.Provider
    36        value={{
    37          isSidebarOpen: isSidebarOpen,
    38          setSidebarOpen: setSidebarOpen,
    39          setSidebarClosed: setSidebarClosed,
    40        }}
    41      >
    42        {props.children}
    43      </sidebarContext.Provider>
    44    )
    45  }