From e834e9e8737f14fc37be2beecbff5ce92b521cb8 Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Mon, 7 Nov 2022 16:50:01 +0000 Subject: [PATCH] refactor: Remove workspace schedule banner --- .../Workspace/Workspace.stories.tsx | 6 +- site/src/components/Workspace/Workspace.tsx | 12 -- .../WorkspaceScheduleBanner.stories.tsx | 47 ------- .../WorkspaceScheduleBanner.test.tsx | 116 ------------------ .../WorkspaceScheduleBanner.tsx | 56 --------- .../WorkspacePage/WorkspaceReadyPage.tsx | 9 -- 6 files changed, 2 insertions(+), 244 deletions(-) delete mode 100644 site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.stories.tsx delete mode 100644 site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.test.tsx delete mode 100644 site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.tsx diff --git a/site/src/components/Workspace/Workspace.stories.tsx b/site/src/components/Workspace/Workspace.stories.tsx index 273bb3bdd1004..0c9dda55344f4 100644 --- a/site/src/components/Workspace/Workspace.stories.tsx +++ b/site/src/components/Workspace/Workspace.stories.tsx @@ -15,10 +15,6 @@ const Template: Story = (args) => export const Running = Template.bind({}) Running.args = { - bannerProps: { - isLoading: false, - onExtend: action("extend"), - }, scheduleProps: { onDeadlineMinus: () => { // do nothing, this is just for storybook @@ -36,6 +32,8 @@ Running.args = { Mocks.MockTemplate, ) }, + maxDeadlineDecrease: 1000, + maxDeadlineIncrease: 1000, }, workspace: Mocks.MockWorkspace, handleStart: action("start"), diff --git a/site/src/components/Workspace/Workspace.tsx b/site/src/components/Workspace/Workspace.tsx index 1a560d14d4715..093c35e7e76c1 100644 --- a/site/src/components/Workspace/Workspace.tsx +++ b/site/src/components/Workspace/Workspace.tsx @@ -14,7 +14,6 @@ import { Resources } from "../Resources/Resources" import { Stack } from "../Stack/Stack" import { WorkspaceActions } from "../WorkspaceActions/WorkspaceActions" import { WorkspaceDeletedBanner } from "../WorkspaceDeletedBanner/WorkspaceDeletedBanner" -import { WorkspaceScheduleBanner } from "../WorkspaceScheduleBanner/WorkspaceScheduleBanner" import { WorkspaceScheduleButton } from "../WorkspaceScheduleButton/WorkspaceScheduleButton" import { WorkspaceStats } from "../WorkspaceStats/WorkspaceStats" import { AlertBanner } from "../AlertBanner/AlertBanner" @@ -33,10 +32,6 @@ export enum WorkspaceErrors { } export interface WorkspaceProps { - bannerProps: { - isLoading?: boolean - onExtend: () => void - } scheduleProps: { onDeadlinePlus: (hours: number) => void onDeadlineMinus: (hours: number) => void @@ -66,7 +61,6 @@ export interface WorkspaceProps { * Workspace is the top-level component for viewing an individual workspace */ export const Workspace: FC> = ({ - bannerProps, scheduleProps, handleStart, handleStop, @@ -188,12 +182,6 @@ export const Workspace: FC> = ({ {cancellationError} {workspaceRefreshWarning} - - navigate(`/templates`)} diff --git a/site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.stories.tsx b/site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.stories.tsx deleted file mode 100644 index e23bd487a17d3..0000000000000 --- a/site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.stories.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { action } from "@storybook/addon-actions" -import { Story } from "@storybook/react" -import dayjs from "dayjs" -import utc from "dayjs/plugin/utc" -import * as Mocks from "../../testHelpers/entities" -import { - WorkspaceScheduleBanner, - WorkspaceScheduleBannerProps, -} from "./WorkspaceScheduleBanner" - -dayjs.extend(utc) - -export default { - title: "components/WorkspaceScheduleBanner", - component: WorkspaceScheduleBanner, -} - -const Template: Story = (args) => ( - -) - -export const Example = Template.bind({}) -Example.args = { - isLoading: false, - onExtend: action("extend"), - workspace: { - ...Mocks.MockWorkspace, - - latest_build: { - ...Mocks.MockWorkspaceBuild, - deadline: dayjs().utc().format(), - job: { - ...Mocks.MockProvisionerJob, - status: "succeeded", - }, - transition: "start", - }, - - ttl_ms: 2 * 60 * 60 * 1000, // 2 hours - }, -} - -export const Loading = Template.bind({}) -Loading.args = { - ...Example.args, - isLoading: true, -} diff --git a/site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.test.tsx b/site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.test.tsx deleted file mode 100644 index 8432fb896ebe0..0000000000000 --- a/site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.test.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import dayjs from "dayjs" -import utc from "dayjs/plugin/utc" -import * as TypesGen from "../../api/typesGenerated" -import * as Mocks from "../../testHelpers/entities" -import { shouldDisplay } from "./WorkspaceScheduleBanner" - -dayjs.extend(utc) - -describe("WorkspaceScheduleBanner", () => { - describe("shouldDisplay", () => { - // Manual TTL case - it("should not display if the build does not have a deadline", () => { - // Given: a workspace with deadline of undefined. - const workspace: TypesGen.Workspace = { - ...Mocks.MockWorkspace, - latest_build: { - ...Mocks.MockWorkspaceBuild, - deadline: undefined, - transition: "start", - }, - } - - // Then: shouldDisplay is false - expect(shouldDisplay(workspace)).toBeFalsy() - }) - - // Transition Checks - it("should not display if the latest build is not transition=start", () => { - // Given: a workspace with latest build as "stop" - const workspace: TypesGen.Workspace = { - ...Mocks.MockWorkspace, - latest_build: { - ...Mocks.MockWorkspaceBuild, - transition: "stop", - }, - } - - // Then: shouldDisplay is false - expect(shouldDisplay(workspace)).toBeFalsy() - }) - - // Provisioner Job Checks - it("should not display if the latest build is canceling", () => { - // Given: a workspace with latest build as "canceling" - const workspace: TypesGen.Workspace = { - ...Mocks.MockWorkspace, - latest_build: { - ...Mocks.MockWorkspaceBuild, - job: Mocks.MockCancelingProvisionerJob, - transition: "start", - }, - } - - // Then: shouldDisplay is false - expect(shouldDisplay(workspace)).toBeFalsy() - }) - it("should not display if the latest build is canceled", () => { - // Given: a workspace with latest build as "canceled" - const workspace: TypesGen.Workspace = { - ...Mocks.MockWorkspace, - latest_build: { - ...Mocks.MockWorkspaceBuild, - job: Mocks.MockCanceledProvisionerJob, - transition: "start", - }, - } - - // Then: shouldDisplay is false - expect(shouldDisplay(workspace)).toBeFalsy() - }) - it("should not display if the latest build failed", () => { - // Given: a workspace with latest build as "failed" - const workspace: TypesGen.Workspace = { - ...Mocks.MockWorkspace, - latest_build: { - ...Mocks.MockWorkspaceBuild, - job: Mocks.MockFailedProvisionerJob, - transition: "start", - }, - } - - // Then: shouldDisplay is false - expect(shouldDisplay(workspace)).toBeFalsy() - }) - - // Deadline Checks - it("should display if deadline is within 30 minutes", () => { - // Given: a workspace with latest build as start and deadline in ~30 mins - const workspace: TypesGen.Workspace = { - ...Mocks.MockWorkspace, - latest_build: { - ...Mocks.MockWorkspaceBuild, - deadline: dayjs().add(27, "minutes").utc().format(), - transition: "start", - }, - } - - // Then: shouldDisplay is true - expect(shouldDisplay(workspace)).toBeTruthy() - }) - it("should not display if deadline is 45 minutes", () => { - // Given: a workspace with latest build as start and deadline in 45 mins - const workspace: TypesGen.Workspace = { - ...Mocks.MockWorkspace, - latest_build: { - ...Mocks.MockWorkspaceBuild, - deadline: dayjs().add(45, "minutes").utc().format(), - transition: "start", - }, - } - - // Then: shouldDisplay is false - expect(shouldDisplay(workspace)).toBeFalsy() - }) - }) -}) diff --git a/site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.tsx b/site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.tsx deleted file mode 100644 index e75be034f1779..0000000000000 --- a/site/src/components/WorkspaceScheduleBanner/WorkspaceScheduleBanner.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import Button from "@material-ui/core/Button" -import dayjs from "dayjs" -import isSameOrBefore from "dayjs/plugin/isSameOrBefore" -import utc from "dayjs/plugin/utc" -import { FC } from "react" -import * as TypesGen from "api/typesGenerated" -import { isWorkspaceOn } from "util/workspace" -import { AlertBanner } from "components/AlertBanner/AlertBanner" -import { useTranslation } from "react-i18next" - -dayjs.extend(utc) -dayjs.extend(isSameOrBefore) - -export interface WorkspaceScheduleBannerProps { - isLoading?: boolean - onExtend: () => void - workspace: TypesGen.Workspace -} - -export const shouldDisplay = (workspace: TypesGen.Workspace): boolean => { - if (!isWorkspaceOn(workspace) || !workspace.latest_build.deadline) { - return false - } - const deadline = dayjs(workspace.latest_build.deadline).utc() - const thirtyMinutesFromNow = dayjs().add(30, "minutes").utc() - return deadline.isSameOrBefore(thirtyMinutesFromNow) -} - -export const WorkspaceScheduleBanner: FC< - React.PropsWithChildren -> = ({ isLoading, onExtend, workspace }) => { - const { t } = useTranslation("workspacePage") - - if (!shouldDisplay(workspace)) { - return null - } - - const ScheduleButton = ( - - ) - - return ( - - ) -} diff --git a/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx b/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx index e442a7d9b1964..772769312011a 100644 --- a/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx @@ -78,15 +78,6 @@ export const WorkspaceReadyPage = ({ { - bannerSend({ - type: "INCREASE_DEADLINE", - hours: 4, - }) - }, - }} scheduleProps={{ onDeadlineMinus: (hours: number) => { bannerSend({