github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/web/src/UpdateDialog.tsx (about)

     1  import { withStyles } from "@material-ui/core/styles"
     2  import Switch from "@material-ui/core/Switch"
     3  import React from "react"
     4  import { linkToTiltDocs, TiltDocsPage } from "./constants"
     5  import FloatDialog from "./FloatDialog"
     6  import { Color } from "./style-helpers"
     7  
     8  type props = {
     9    open: boolean
    10    onClose: () => void
    11    anchorEl: Element | null
    12    showUpdate: boolean
    13    suggestedVersion: string | null | undefined
    14    isNewInterface: boolean
    15  }
    16  
    17  export function showUpdate(view: Proto.webviewView): boolean {
    18    let session = view?.uiSession?.status
    19    let runningBuild = session?.runningTiltBuild
    20    let suggestedVersion = session?.suggestedTiltVersion
    21    const versionSettings = session?.versionSettings
    22    const checkUpdates = versionSettings?.checkUpdates
    23    if (!checkUpdates || !suggestedVersion || !runningBuild) {
    24      return false
    25    }
    26  
    27    let { version, dev } = runningBuild
    28    if (!version || dev) {
    29      return false
    30    }
    31  
    32    let versionArray = version.split(".")
    33    let suggestedArray = suggestedVersion.split(".")
    34    for (let i = 0; i < versionArray.length; i++) {
    35      if (suggestedArray[i] > versionArray[i]) {
    36        return true
    37      } else if (suggestedArray[i] < versionArray[i]) {
    38        return false
    39      }
    40    }
    41    return false
    42  }
    43  
    44  const GreenSwitch = withStyles({
    45    switchBase: {
    46      color: Color.gray50,
    47      "&$checked": {
    48        color: Color.green,
    49      },
    50      "&$checked + $track": {
    51        backgroundColor: Color.gray30,
    52      },
    53    },
    54    checked: {},
    55    track: {
    56      backgroundColor: Color.gray30,
    57    },
    58  })(Switch)
    59  
    60  export default function UpdateDialog(props: props) {
    61    let { showUpdate, suggestedVersion } = props
    62    let updateEl: any | null = null
    63    if (showUpdate) {
    64      updateEl = (
    65        <div key="update">
    66          <span role="img" aria-label="Decorative sparkling stars">
    67            ✨
    68          </span>
    69          &nbsp;
    70          <a
    71            href={linkToTiltDocs(TiltDocsPage.Upgrade)}
    72            target="_blank"
    73            rel="noopener noreferrer"
    74          >
    75            Get Tilt v{suggestedVersion || "?"}!
    76          </a>
    77          &nbsp;
    78          <span role="img" aria-label="Decorative sparkling stars">
    79            ✨
    80          </span>
    81        </div>
    82      )
    83    } else {
    84      updateEl = (
    85        <div key="no-update">
    86          <div>Already on the recommended version!</div>
    87        </div>
    88      )
    89    }
    90  
    91    let title = props.showUpdate ? "Updates Available" : "Update Status"
    92    return (
    93      <FloatDialog id="update" title={title} {...props}>
    94        {updateEl}
    95      </FloatDialog>
    96    )
    97  }