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 70 <a 71 href={linkToTiltDocs(TiltDocsPage.Upgrade)} 72 target="_blank" 73 rel="noopener noreferrer" 74 > 75 Get Tilt v{suggestedVersion || "?"}! 76 </a> 77 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 }