fix: remove cancel button if user cannot cancel job (#11553)

This commit is contained in:
Garrett Delfosse
2024-01-11 13:48:44 -05:00
committed by GitHub
parent 8c3a4f2d7f
commit f9f94b5d01
5 changed files with 45 additions and 2 deletions
+4 -1
View File
@@ -55,12 +55,13 @@ export interface WorkspaceProps {
workspaceErrors: WorkspaceErrors;
buildInfo?: TypesGen.BuildInfoResponse;
sshPrefix?: string;
template?: TypesGen.Template;
template: TypesGen.Template;
canRetryDebugMode: boolean;
handleBuildRetry: () => void;
handleBuildRetryDebug: () => void;
buildLogs?: React.ReactNode;
canAutostart: boolean;
isOwner: boolean;
}
/**
@@ -93,6 +94,7 @@ export const Workspace: FC<WorkspaceProps> = ({
handleBuildRetryDebug,
buildLogs,
canAutostart,
isOwner,
}) => {
const navigate = useNavigate();
const { saveLocal, getLocal } = useLocalStorage();
@@ -199,6 +201,7 @@ export const Workspace: FC<WorkspaceProps> = ({
isUpdating={isUpdating}
isRestarting={isRestarting}
canUpdateWorkspace={canUpdateWorkspace}
isOwner={isOwner}
/>
<div
@@ -107,3 +107,29 @@ export const AlwaysUpdateStopped: Story = {
canChangeVersions: true,
},
};
export const CancelShownForOwner: Story = {
args: {
workspace: {
...Mocks.MockStartingWorkspace,
template_allow_user_cancel_workspace_jobs: false,
},
isOwner: true,
},
};
export const CancelShownForUser: Story = {
args: {
workspace: Mocks.MockStartingWorkspace,
isOwner: false,
},
};
export const CancelHiddenForUser: Story = {
args: {
workspace: {
...Mocks.MockStartingWorkspace,
template_allow_user_cancel_workspace_jobs: false,
},
isOwner: false,
},
};
@@ -46,6 +46,7 @@ export interface WorkspaceActionsProps {
children?: ReactNode;
canChangeVersions: boolean;
canRetryDebug: boolean;
isOwner: boolean;
}
export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
@@ -65,6 +66,7 @@ export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
isRestarting,
canChangeVersions,
canRetryDebug,
isOwner,
}) => {
const { duplicateWorkspace, isDuplicationReady } =
useWorkspaceDuplication(workspace);
@@ -73,6 +75,9 @@ export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
workspace,
canRetryDebug,
);
const showCancel =
canCancel &&
(workspace.template_allow_user_cancel_workspace_jobs || isOwner);
const mustUpdate =
workspaceUpdatePolicy(workspace, canChangeVersions) === "always" &&
@@ -146,7 +151,7 @@ export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
<Fragment key={action}>{buttonMapping[action]}</Fragment>
))}
{canCancel && <CancelButton handleAction={handleCancel} />}
{showCancel && <CancelButton handleAction={handleCancel} />}
<MoreMenu>
<MoreMenuTrigger>
@@ -36,6 +36,7 @@ import { WorkspacePermissions } from "./permissions";
import { workspaceResolveAutostart } from "api/queries/workspaceQuota";
import { WorkspaceDeleteDialog } from "./WorkspaceDeleteDialog";
import dayjs from "dayjs";
import { useMe } from "hooks";
interface WorkspaceReadyPageProps {
template: TypesGen.Template;
@@ -56,6 +57,10 @@ export const WorkspaceReadyPage = ({
throw Error("Workspace is undefined");
}
// Owner
const me = useMe();
const isOwner = me.roles.find((role) => role.name === "owner") !== undefined;
// Debug mode
const { data: deploymentValues } = useQuery({
...deploymentConfig(),
@@ -247,6 +252,7 @@ export const WorkspaceReadyPage = ({
)
}
canAutostart={canAutostart}
isOwner={isOwner}
/>
<WorkspaceDeleteDialog
@@ -56,6 +56,7 @@ export interface WorkspaceProps {
canRetryDebugMode: boolean;
handleBuildRetry: () => void;
handleBuildRetryDebug: () => void;
isOwner: boolean;
}
export const WorkspaceTopbar = (props: WorkspaceProps) => {
@@ -77,6 +78,7 @@ export const WorkspaceTopbar = (props: WorkspaceProps) => {
canRetryDebugMode,
handleBuildRetry,
handleBuildRetryDebug,
isOwner,
} = props;
const theme = useTheme();
@@ -263,6 +265,7 @@ export const WorkspaceTopbar = (props: WorkspaceProps) => {
canChangeVersions={canChangeVersions}
isUpdating={isUpdating}
isRestarting={isRestarting}
isOwner={isOwner}
/>
</div>
</Topbar>