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 }