github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/web/src/SidebarContext.tsx (about)

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