Skip to content

Commit 58532a5

Browse files
committed
feat: manage provisioner tags in template editor
1 parent cb77f04 commit 58532a5

File tree

3 files changed

+105
-23
lines changed

3 files changed

+105
-23
lines changed

site/src/pages/HealthPage/ProvisionerDaemonsPage.tsx

+11-11
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import Person from "@mui/icons-material/Person";
2121
import SwapHoriz from "@mui/icons-material/SwapHoriz";
2222
import Tooltip from "@mui/material/Tooltip";
2323
import Sell from "@mui/icons-material/Sell";
24+
import { FC } from "react";
25+
import { additionalTags } from "utils/provisionertags";
2426

2527
export const ProvisionerDaemonsPage = () => {
2628
const healthStatus = useOutletContext<HealthcheckReport>();
@@ -58,15 +60,7 @@ export const ProvisionerDaemonsPage = () => {
5860
const daemonScope = daemon.tags["scope"] || "organization";
5961
const iconScope =
6062
daemonScope === "organization" ? <Business /> : <Person />;
61-
const extraTags = Object.keys(daemon.tags)
62-
.filter((key) => key !== "scope" && key !== "owner")
63-
.reduce(
64-
(acc, key) => {
65-
acc[key] = daemon.tags[key];
66-
return acc;
67-
},
68-
{} as Record<string, string>,
69-
);
63+
const extraTags = additionalTags(daemon.tags)
7064
const isWarning = warnings.length > 0;
7165
return (
7266
<div
@@ -130,7 +124,7 @@ export const ProvisionerDaemonsPage = () => {
130124
</Pill>
131125
</Tooltip>
132126
{Object.keys(extraTags).map((k) =>
133-
renderTag(k, extraTags[k]),
127+
<ProvisionerTag key={k} k={k} v={extraTags[k]} />
134128
)}
135129
</div>
136130
</header>
@@ -188,7 +182,13 @@ const parseBool = (s: string): { valid: boolean; value: boolean } => {
188182
}
189183
};
190184

191-
const renderTag = (k: string, v: string) => {
185+
interface ProvisionerTagProps {
186+
k: string;
187+
v: string;
188+
onDelete?: () => void;
189+
}
190+
191+
export const ProvisionerTag : FC<ProvisionerTagProps> = ({ k, v }) => {
192192
const { valid, value: boolValue } = parseBool(v);
193193
const kv = `${k}: ${v}`;
194194
if (valid) {

site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx

+83-12
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,18 @@ import {
5353
TopbarIconButton,
5454
} from "components/FullPageLayout/Topbar";
5555
import { Sidebar } from "components/FullPageLayout/Sidebar";
56+
import ButtonGroup from "@mui/material/ButtonGroup";
57+
import {
58+
Popover,
59+
PopoverContent,
60+
PopoverTrigger,
61+
} from "components/Popover/Popover";
62+
import { HelpTooltipTitle, HelpTooltipText, HelpTooltipLinksGroup, HelpTooltipLink } from "components/HelpTooltip/HelpTooltip";
63+
import { docs } from "utils/docs";
64+
import ExpandMoreOutlined from "@mui/icons-material/ExpandMoreOutlined";
65+
import { ProvisionerTag } from "pages/HealthPage/ProvisionerDaemonsPage";
66+
import { Stack } from "components/Stack/Stack";
67+
import { additionalTags } from "utils/provisionertags";
5668

5769
type Tab = "logs" | "resources" | undefined; // Undefined is to hide the tab
5870

@@ -181,6 +193,16 @@ export const TemplateVersionEditor: FC<TemplateVersionEditorProps> = ({
181193
}
182194
}, [buildLogs]);
183195

196+
const disabled = false;
197+
const extraTags = additionalTags(templateVersion.job.tags);
198+
// const extraTags = {
199+
// "key1": "value1",
200+
// "1": "2",
201+
// "3": "true",
202+
// "5": "6",
203+
// "seven": "0",
204+
// } as Record<string,string>;
205+
184206
return (
185207
<>
186208
<div css={{ height: "100%", display: "flex", flexDirection: "column" }}>
@@ -236,20 +258,69 @@ export const TemplateVersionEditor: FC<TemplateVersionEditorProps> = ({
236258
<TemplateVersionStatusBadge version={templateVersion} />
237259
)}
238260

239-
<TopbarButton
240-
startIcon={
241-
<PlayArrowOutlined
242-
css={{ color: theme.palette.success.light }}
243-
/>
244-
}
245-
title="Build template (Ctrl + Enter)"
246-
disabled={disablePreview}
247-
onClick={() => {
248-
triggerPreview();
261+
<ButtonGroup
262+
variant="outlined"
263+
css={{
264+
// Workaround to make the border transitions smoothly on button groups
265+
"& > button:hover + button": {
266+
borderLeft: "1px solid #FFF",
267+
},
249268
}}
269+
disabled={disabled}
250270
>
251-
Build
252-
</TopbarButton>
271+
<TopbarButton
272+
startIcon={
273+
<PlayArrowOutlined
274+
css={{ color: theme.palette.success.light }}
275+
/>
276+
}
277+
title="Build template (Ctrl + Enter)"
278+
disabled={disablePreview}
279+
onClick={() => {
280+
triggerPreview();
281+
}}
282+
>
283+
Build
284+
</TopbarButton>
285+
<Popover isDefaultOpen={false}>
286+
<PopoverTrigger>
287+
<TopbarButton
288+
data-testid="build-parameters-button"
289+
disabled={disabled}
290+
color="neutral"
291+
css={{ paddingLeft: 0, paddingRight: 0, minWidth: "28px !important" }}
292+
>
293+
<ExpandMoreOutlined css={{ fontSize: 14 }} />
294+
</TopbarButton>
295+
</PopoverTrigger>
296+
<PopoverContent
297+
horizontal="right"
298+
css={{ ".MuiPaper-root": { width: 300 } }}
299+
>
300+
<div
301+
css={{
302+
color: theme.palette.text.secondary,
303+
padding: 20,
304+
borderBottom: `1px solid ${theme.palette.divider}`,
305+
}}
306+
>
307+
<HelpTooltipTitle>Provisioner Tags</HelpTooltipTitle>
308+
<HelpTooltipText>
309+
{Object.keys(extraTags).length > 0 ? (
310+
<Stack direction="row" spacing={1} wrap="wrap">
311+
{Object.keys(extraTags).map((k) =>
312+
<ProvisionerTag key={k} k={k} v={extraTags[k]} />
313+
)}
314+
</Stack>
315+
) : (
316+
"No tags"
317+
)}
318+
319+
</HelpTooltipText>
320+
</div>
321+
</PopoverContent>
322+
</Popover>
323+
</ButtonGroup>
253324

254325
<TopbarButton
255326
variant="contained"

site/src/utils/provisionertags.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export const additionalTags = (records: Record<string, string>) => {
2+
return Object.keys(records)
3+
.filter((key) => key !== "scope" && key !== "owner")
4+
.reduce(
5+
(acc, key) => {
6+
acc[key] = records[key];
7+
return acc;
8+
},
9+
{} as Record<string, string>,
10+
);
11+
}

0 commit comments

Comments
 (0)