github.com/tilt-dev/tilt@v0.36.0/web/src/InterfaceVersion.tsx (about) 1 import Cookies from "js-cookie" 2 import React, { PropsWithChildren, useContext, useState } from "react" 3 import { useNavigate } from "react-router-dom" 4 import { usePathBuilder } from "./PathBuilder" 5 6 export type InterfaceVersion = { 7 isNewDefault(): boolean 8 toggleDefault(): void 9 } 10 11 const interfaceVersionContext = React.createContext<InterfaceVersion>({ 12 isNewDefault: () => false, 13 toggleDefault: () => {}, 14 }) 15 16 export function useInterfaceVersion(): InterfaceVersion { 17 return useContext(interfaceVersionContext) 18 } 19 20 export function InterfaceVersionProvider(props: PropsWithChildren<{}>) { 21 let pathBuilder = usePathBuilder() 22 let [isNew, setNew] = useState((): boolean => { 23 return Cookies.get("tilt-interface-version") !== "legacy" 24 }) 25 26 let isNewDefault = () => isNew 27 let toggleDefault = () => { 28 let newDefault = !isNew 29 setNew(newDefault) 30 31 Cookies.set("tilt-interface-version", newDefault ? "" : "legacy") 32 } 33 34 return ( 35 <interfaceVersionContext.Provider value={{ isNewDefault, toggleDefault }}> 36 {props.children} 37 </interfaceVersionContext.Provider> 38 ) 39 } 40 41 export function FakeInterfaceVersionProvider(props: PropsWithChildren<{}>) { 42 let [isNew, setNew] = useState(false) 43 44 let isNewDefault = () => isNew 45 let toggleDefault = () => { 46 let newDefault = !isNew 47 setNew(newDefault) 48 console.log( 49 newDefault 50 ? 'Toggle default "old ui" -> "new ui"' 51 : 'Toggle default "new ui" -> "old ui"' 52 ) 53 } 54 55 return ( 56 <interfaceVersionContext.Provider value={{ isNewDefault, toggleDefault }}> 57 {props.children} 58 </interfaceVersionContext.Provider> 59 ) 60 }