// Copyright (c) Tailscale Inc & AUTHORS // SPDX-License-Identifier: BSD-3-Clause import React from "react" import { VersionInfo } from "src/types" import Button from "src/ui/button" import Card from "src/ui/card" import { useLocation } from "wouter" export function UpdateAvailableNotification({ details, }: { details: VersionInfo }) { const [, setLocation] = useLocation() return (

Update available{" "} {details.LatestVersion && `(v${details.LatestVersion})`}

{details.LatestVersion ? `Version ${details.LatestVersion}` : "A new update"}{" "} is now available.

) } // isStableTrack takes a Tailscale version string // of form X.Y.Z (or vX.Y.Z) and returns whether // it is a stable release (even value of Y) // or unstable (odd value of Y). // eg. isStableTrack("1.48.0") === true // eg. isStableTrack("1.49.112") === false function isStableTrack(ver: string): boolean { const middle = ver.split(".")[1] if (middle && Number(middle) % 2 === 0) { return true } return false } export function ChangelogText({ version }: { version?: string }) { if (!version || !isStableTrack(version)) { return null } return ( <> Check out the{" "} release notes {" "} to find out what’s new! ) }