|
1 |
| -import { useTheme } from "@emotion/react"; |
| 1 | +import { type Interpolation, type Theme, useTheme } from "@emotion/react"; |
2 | 2 | import Business from "@mui/icons-material/Business";
|
3 | 3 | import Person from "@mui/icons-material/Person";
|
4 | 4 | import Button from "@mui/material/Button";
|
| 5 | +import Link from "@mui/material/Link"; |
5 | 6 | import Tooltip from "@mui/material/Tooltip";
|
6 | 7 | import type { BuildInfoResponse, ProvisionerDaemon } from "api/typesGenerated";
|
7 | 8 | import { DropdownArrow } from "components/DropdownArrow/DropdownArrow";
|
8 | 9 | import { Pill } from "components/Pill/Pill";
|
| 10 | +import { |
| 11 | + Popover, |
| 12 | + PopoverContent, |
| 13 | + PopoverTrigger, |
| 14 | +} from "components/Popover/Popover"; |
9 | 15 | import { type FC, useState } from "react";
|
10 | 16 | import { createDayString } from "utils/createDayString";
|
| 17 | +import { docs } from "utils/docs"; |
11 | 18 | import { ProvisionerTag } from "./ProvisionerTag";
|
12 | 19 |
|
13 | 20 | type ProvisionerGroupType = "builtin" | "psk" | "key";
|
@@ -159,14 +166,51 @@ export const ProvisionerGroup: FC<ProvisionerGroupProps> = ({
|
159 | 166 | width: 310,
|
160 | 167 | }}
|
161 | 168 | >
|
162 |
| - <div css={{ lineHeight: "160%" }}> |
| 169 | + <div css={{ lineHeight: 1.6 }}> |
163 | 170 | <h4 css={{ fontWeight: 500, margin: 0 }}>{provisioner.name}</h4>
|
164 |
| - <span css={{ color: theme.palette.text.secondary }}> |
| 171 | + <span |
| 172 | + css={{ color: theme.palette.text.secondary, fontSize: 13 }} |
| 173 | + > |
165 | 174 | {type === "builtin" ? (
|
166 | 175 | <span>Built-in</span>
|
167 | 176 | ) : (
|
168 | 177 | <>
|
169 |
| - {upToDate ? "Up to date" : provisioner.version} —{" "} |
| 178 | + <Popover mode="hover"> |
| 179 | + <PopoverTrigger> |
| 180 | + <span> |
| 181 | + {buildInfo |
| 182 | + ? provisioner.version === buildInfo.version |
| 183 | + ? "Up to date" |
| 184 | + : "Out of date" |
| 185 | + : provisioner.version} |
| 186 | + </span> |
| 187 | + </PopoverTrigger> |
| 188 | + <PopoverContent |
| 189 | + transformOrigin={{ vertical: -8, horizontal: 0 }} |
| 190 | + css={{ |
| 191 | + "& .MuiPaper-root": { |
| 192 | + padding: "20px 20px 8px", |
| 193 | + maxWidth: 340, |
| 194 | + }, |
| 195 | + }} |
| 196 | + > |
| 197 | + <h4 css={styles.title}>Release version</h4> |
| 198 | + <p css={styles.text}>{provisioner.version}</p> |
| 199 | + <h4 css={styles.title}>Protocol version</h4> |
| 200 | + <p css={styles.text}>{provisioner.api_version}</p> |
| 201 | + {provisioner.api_version !== |
| 202 | + buildInfo?.provisioner_api_version && ( |
| 203 | + <p css={[styles.text, { fontSize: 13 }]}> |
| 204 | + This provisioner is out of date. You may |
| 205 | + experience issues when using a provisioner version |
| 206 | + that doesn’t match your Coder deployment. Please |
| 207 | + upgrade to a newer version.{" "} |
| 208 | + <Link href={docs("/")}>Learn more…</Link> |
| 209 | + </p> |
| 210 | + )} |
| 211 | + </PopoverContent> |
| 212 | + </Popover>{" "} |
| 213 | + —{" "} |
170 | 214 | {provisioner.last_seen_at && (
|
171 | 215 | <span data-chromatic="ignore">
|
172 | 216 | Last seen {createDayString(provisioner.last_seen_at)}
|
@@ -211,3 +255,19 @@ export const ProvisionerGroup: FC<ProvisionerGroupProps> = ({
|
211 | 255 | </div>
|
212 | 256 | );
|
213 | 257 | };
|
| 258 | + |
| 259 | +const styles = { |
| 260 | + title: (theme) => ({ |
| 261 | + marginTop: 0, |
| 262 | + marginBottom: 0, |
| 263 | + color: theme.palette.text.primary, |
| 264 | + fontSize: 14, |
| 265 | + lineHeight: "150%", |
| 266 | + fontWeight: 600, |
| 267 | + }), |
| 268 | + |
| 269 | + text: (theme) => ({ |
| 270 | + marginTop: 0, |
| 271 | + marginBottom: 12, |
| 272 | + }), |
| 273 | +} satisfies Record<string, Interpolation<Theme>>; |
0 commit comments