fix: check update permission to start workspace (#11798)

This commit is contained in:
Marcin Tojek
2024-01-24 17:18:03 +01:00
committed by GitHub
parent 4616ccf462
commit 560e8cc1ae
4 changed files with 20 additions and 7 deletions
@@ -1,7 +1,7 @@
import { type FC, type ReactNode, Fragment } from "react";
import { Workspace, WorkspaceBuildParameter } from "api/typesGenerated";
import { useWorkspaceDuplication } from "pages/CreateWorkspacePage/useWorkspaceDuplication";
import { workspaceUpdatePolicy } from "utils/workspace";
import { mustUpdateWorkspace } from "utils/workspace";
import { type ActionType, abilitiesByWorkspaceStatus } from "./constants";
import {
CancelButton,
@@ -79,10 +79,7 @@ export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
canCancel &&
(workspace.template_allow_user_cancel_workspace_jobs || isOwner);
const mustUpdate =
workspaceUpdatePolicy(workspace, canChangeVersions) === "always" &&
workspace.outdated;
const mustUpdate = mustUpdateWorkspace(workspace, canChangeVersions);
const tooltipText = getTooltipText(workspace, mustUpdate, canChangeVersions);
const canBeUpdated = workspace.outdated && canAcceptJobs;
@@ -85,6 +85,7 @@ const WorkspacesPage: FC = () => {
<WorkspacesPageView
canCreateTemplate={permissions.createTemplates}
canChangeVersions={permissions.updateTemplates}
checkedWorkspaces={checkedWorkspaces}
onCheckChange={setCheckedWorkspaces}
canCheckWorkspaces={canCheckWorkspaces}
@@ -26,6 +26,7 @@ import KeyboardArrowDownOutlined from "@mui/icons-material/KeyboardArrowDownOutl
import Divider from "@mui/material/Divider";
import LoadingButton from "@mui/lab/LoadingButton";
import { PaginationHeader } from "components/PaginationWidget/PaginationHeader";
import { mustUpdateWorkspace } from "utils/workspace";
export const Language = {
pageTitle: "Workspaces",
@@ -59,6 +60,7 @@ export interface WorkspacesPageViewProps {
templatesFetchStatus: TemplateQuery["status"];
templates: TemplateQuery["data"];
canCreateTemplate: boolean;
canChangeVersions: boolean;
}
export const WorkspacesPageView = ({
@@ -81,6 +83,7 @@ export const WorkspacesPageView = ({
templates,
templatesFetchStatus,
canCreateTemplate,
canChangeVersions,
}: WorkspacesPageViewProps) => {
return (
<Margins>
@@ -136,7 +139,9 @@ export const WorkspacesPageView = ({
onClick={onStartAll}
disabled={
!checkedWorkspaces?.every(
(w) => w.latest_build.status === "stopped",
(w) =>
w.latest_build.status === "stopped" &&
!mustUpdateWorkspace(w, canChangeVersions),
)
}
>
+11 -1
View File
@@ -274,7 +274,17 @@ export const getMatchingAgentOrFirst = (
.filter((a) => a)[0];
};
export const workspaceUpdatePolicy = (
export const mustUpdateWorkspace = (
workspace: TypesGen.Workspace,
canChangeVersions: boolean,
): boolean => {
return (
workspaceUpdatePolicy(workspace, canChangeVersions) === "always" &&
workspace.outdated
);
};
const workspaceUpdatePolicy = (
workspace: TypesGen.Workspace,
canChangeVersions: boolean,
): TypesGen.AutomaticUpdates => {