github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/web/src/InterfaceVersion.tsx (about) 1 import Cookies from "js-cookie" 2 import React, { PropsWithChildren, useContext, useState } from "react" 3 import { useHistory } from "react-router" 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 history = useHistory() 23 let [isNew, setNew] = useState((): boolean => { 24 return Cookies.get("tilt-interface-version") !== "legacy" 25 }) 26 27 let isNewDefault = () => isNew 28 let toggleDefault = () => { 29 let newDefault = !isNew 30 setNew(newDefault) 31 32 Cookies.set("tilt-interface-version", newDefault ? "" : "legacy") 33 } 34 35 return ( 36 <interfaceVersionContext.Provider value={{ isNewDefault, toggleDefault }}> 37 {props.children} 38 </interfaceVersionContext.Provider> 39 ) 40 } 41 42 export function FakeInterfaceVersionProvider(props: PropsWithChildren<{}>) { 43 let [isNew, setNew] = useState(false) 44 45 let isNewDefault = () => isNew 46 let toggleDefault = () => { 47 let newDefault = !isNew 48 setNew(newDefault) 49 console.log( 50 newDefault 51 ? 'Toggle default "old ui" -> "new ui"' 52 : 'Toggle default "new ui" -> "old ui"' 53 ) 54 } 55 56 return ( 57 <interfaceVersionContext.Provider value={{ isNewDefault, toggleDefault }}> 58 {props.children} 59 </interfaceVersionContext.Provider> 60 ) 61 }