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  }