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  }