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 }