From 12cdd47a8534ecff3746f4eb86e192bdd1688d1b Mon Sep 17 00:00:00 2001 From: Abhineet Jain Date: Mon, 1 Aug 2022 16:01:11 +0000 Subject: [PATCH 1/8] fix: handle workspace errors --- site/src/api/errors.ts | 3 ++ site/src/components/Resources/Resources.tsx | 3 +- site/src/components/Workspace/Workspace.tsx | 28 +++++++++++-- .../src/pages/WorkspacePage/WorkspacePage.tsx | 41 ++++++++++++++++--- .../xServices/workspace/workspaceXService.ts | 16 +++----- 5 files changed, 70 insertions(+), 21 deletions(-) diff --git a/site/src/api/errors.ts b/site/src/api/errors.ts index 56f385b19959d..ddc70792b0089 100644 --- a/site/src/api/errors.ts +++ b/site/src/api/errors.ts @@ -86,3 +86,6 @@ export const getValidationErrorMessage = (error: Error | ApiError | unknown): st export const getErrorDetail = (error: Error | ApiError | unknown): string | undefined | null => isApiError(error) ? error.response.data.detail : error instanceof Error ? error.stack : null + +export const getErrorIfErrorType = (error: Error | unknown): Error | undefined => + error instanceof Error ? error : undefined diff --git a/site/src/components/Resources/Resources.tsx b/site/src/components/Resources/Resources.tsx index debbf2bfe45d7..fa88a9553f754 100644 --- a/site/src/components/Resources/Resources.tsx +++ b/site/src/components/Resources/Resources.tsx @@ -6,6 +6,7 @@ import TableContainer from "@material-ui/core/TableContainer" import TableHead from "@material-ui/core/TableHead" import TableRow from "@material-ui/core/TableRow" import useTheme from "@material-ui/styles/useTheme" +import { ErrorSummary } from "components/ErrorSummary/ErrorSummary" import { FC } from "react" import { Workspace, WorkspaceResource } from "../../api/typesGenerated" import { AvatarData } from "../../components/AvatarData/AvatarData" @@ -45,7 +46,7 @@ export const Resources: FC = ({ return (
{getResourcesError ? ( - { getResourcesError } + ) : ( diff --git a/site/src/components/Workspace/Workspace.tsx b/site/src/components/Workspace/Workspace.tsx index de4b4eb131daf..d72fc551f9224 100644 --- a/site/src/components/Workspace/Workspace.tsx +++ b/site/src/components/Workspace/Workspace.tsx @@ -1,4 +1,5 @@ import { makeStyles } from "@material-ui/core/styles" +import { ErrorSummary } from "components/ErrorSummary/ErrorSummary" import { WorkspaceStatusBadge } from "components/WorkspaceStatusBadge/WorkspaceStatusBadge" import { FC } from "react" import { useNavigate } from "react-router-dom" @@ -15,6 +16,13 @@ import { WorkspaceScheduleButton } from "../WorkspaceScheduleButton/WorkspaceSch import { WorkspaceSection } from "../WorkspaceSection/WorkspaceSection" import { WorkspaceStats } from "../WorkspaceStats/WorkspaceStats" +export enum WorkspaceErrors { + GET_RESOURCES_ERROR = "getResourcesError", + GET_BUILDS_ERROR = "getBuildsError", + BUILD_ERROR = "buildError", + CANCELLATION_MESSAGE = "cancellationMessage", +} + export interface WorkspaceProps { bannerProps: { isLoading?: boolean @@ -31,9 +39,9 @@ export interface WorkspaceProps { handleCancel: () => void workspace: TypesGen.Workspace resources?: TypesGen.WorkspaceResource[] - getResourcesError?: Error builds?: TypesGen.WorkspaceBuild[] canUpdateWorkspace: boolean + workspaceErrors: Partial> } /** @@ -49,15 +57,23 @@ export const Workspace: FC = ({ handleCancel, workspace, resources, - getResourcesError, builds, canUpdateWorkspace, + workspaceErrors, }) => { const styles = useStyles() const navigate = useNavigate() return ( + + {workspaceErrors[WorkspaceErrors.BUILD_ERROR] && ( + + )} + {workspaceErrors[WorkspaceErrors.CANCELLATION_MESSAGE] && ( + + )} + @@ -101,14 +117,18 @@ export const Workspace: FC = ({ {!!resources && !!resources.length && ( )} - + {workspaceErrors[WorkspaceErrors.GET_BUILDS_ERROR] ? ( + + ) : ( + + )} diff --git a/site/src/pages/WorkspacePage/WorkspacePage.tsx b/site/src/pages/WorkspacePage/WorkspacePage.tsx index 9a87398707711..eae3ff24a7a06 100644 --- a/site/src/pages/WorkspacePage/WorkspacePage.tsx +++ b/site/src/pages/WorkspacePage/WorkspacePage.tsx @@ -1,4 +1,6 @@ +import { makeStyles } from "@material-ui/core/styles" import { useMachine, useSelector } from "@xstate/react" +import { getErrorIfErrorType } from "api/errors" import dayjs from "dayjs" import minMax from "dayjs/plugin/minMax" import React, { useContext, useEffect } from "react" @@ -7,7 +9,7 @@ import { useParams } from "react-router-dom" import { DeleteWorkspaceDialog } from "../../components/DeleteWorkspaceDialog/DeleteWorkspaceDialog" import { ErrorSummary } from "../../components/ErrorSummary/ErrorSummary" import { FullScreenLoader } from "../../components/Loader/FullScreenLoader" -import { Workspace } from "../../components/Workspace/Workspace" +import { Workspace, WorkspaceErrors } from "../../components/Workspace/Workspace" import { firstOrItem } from "../../util/array" import { pageTitle } from "../../util/page" import { getFaviconByStatus } from "../../util/workspace" @@ -31,13 +33,26 @@ export const WorkspacePage: React.FC = () => { userId: me?.id, }, }) - const { workspace, resources, getWorkspaceError, getResourcesError, builds, permissions } = - workspaceState.context + const { + workspace, + getWorkspaceError, + resources, + getResourcesError, + builds, + getBuildsError, + permissions, + checkPermissionsError, + buildError, + cancellationMessage, + } = workspaceState.context + console.log(cancellationMessage) const canUpdateWorkspace = !!permissions?.updateWorkspace const [bannerState, bannerSend] = useMachine(workspaceScheduleBannerMachine) + const styles = useStyles() + /** * Get workspace, template, and organization on mount and whenever workspaceId changes. * workspaceSend should not change. @@ -47,7 +62,12 @@ export const WorkspacePage: React.FC = () => { }, [username, workspaceName, workspaceSend]) if (workspaceState.matches("error")) { - return + return ( +
+ {getWorkspaceError && } + {checkPermissionsError && } +
+ ) } else if (!workspace) { return } else { @@ -100,9 +120,14 @@ export const WorkspacePage: React.FC = () => { handleUpdate={() => workspaceSend("UPDATE")} handleCancel={() => workspaceSend("CANCEL")} resources={resources} - getResourcesError={getResourcesError instanceof Error ? getResourcesError : undefined} builds={builds} canUpdateWorkspace={canUpdateWorkspace} + workspaceErrors={{ + [WorkspaceErrors.GET_RESOURCES_ERROR]: getErrorIfErrorType(getResourcesError), + [WorkspaceErrors.GET_BUILDS_ERROR]: getErrorIfErrorType(getBuildsError), + [WorkspaceErrors.BUILD_ERROR]: getErrorIfErrorType(buildError), + [WorkspaceErrors.CANCELLATION_MESSAGE]: getErrorIfErrorType(cancellationMessage), + }} /> ({ + error: { + margin: theme.spacing(2), + }, +})) diff --git a/site/src/xServices/workspace/workspaceXService.ts b/site/src/xServices/workspace/workspaceXService.ts index a6db5a6d61498..071060ea37a81 100644 --- a/site/src/xServices/workspace/workspaceXService.ts +++ b/site/src/xServices/workspace/workspaceXService.ts @@ -35,7 +35,7 @@ export interface WorkspaceContext { builds?: TypesGen.WorkspaceBuild[] getBuildsError?: Error | unknown loadMoreBuildsError?: Error | unknown - cancellationMessage: string + cancellationMessage: Types.Message // permissions permissions?: Permissions checkPermissionsError?: Error | unknown @@ -213,7 +213,7 @@ export const workspaceMachine = createMachine( }, onError: { target: "idle", - actions: ["assignBuildError", "displayBuildError"], + actions: ["assignBuildError"], }, }, }, @@ -228,7 +228,7 @@ export const workspaceMachine = createMachine( }, onError: { target: "idle", - actions: ["assignBuildError", "displayBuildError"], + actions: ["assignBuildError"], }, }, }, @@ -243,7 +243,7 @@ export const workspaceMachine = createMachine( }, onError: { target: "idle", - actions: ["assignBuildError", "displayBuildError"], + actions: ["assignBuildError"], }, }, }, @@ -258,7 +258,7 @@ export const workspaceMachine = createMachine( }, onError: { target: "idle", - actions: ["assignCancellationMessage", "displayCancellationError"], + actions: ["assignCancellationMessage"], }, }, }, @@ -395,9 +395,6 @@ export const workspaceMachine = createMachine( assign({ buildError: event.data, }), - displayBuildError: () => { - displayError(Language.buildError) - }, clearBuildError: (_) => assign({ buildError: undefined, @@ -410,9 +407,6 @@ export const workspaceMachine = createMachine( assign({ cancellationMessage: undefined, }), - displayCancellationError: (context) => { - displayError(context.cancellationMessage) - }, assignRefreshWorkspaceError: (_, event) => assign({ refreshWorkspaceError: event.data, From 2b905e76f3de3de7d196b4b7f3c1f06f90586e53 Mon Sep 17 00:00:00 2001 From: Abhineet Jain Date: Mon, 1 Aug 2022 16:22:42 +0000 Subject: [PATCH 2/8] add stories --- .../Workspace/Workspace.stories.tsx | 32 ++++++++++++++++++- site/src/components/Workspace/Workspace.tsx | 4 +-- .../src/pages/WorkspacePage/WorkspacePage.tsx | 1 - 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/site/src/components/Workspace/Workspace.stories.tsx b/site/src/components/Workspace/Workspace.stories.tsx index c94da97054640..35dbef0629399 100644 --- a/site/src/components/Workspace/Workspace.stories.tsx +++ b/site/src/components/Workspace/Workspace.stories.tsx @@ -1,7 +1,7 @@ import { action } from "@storybook/addon-actions" import { Story } from "@storybook/react" import * as Mocks from "../../testHelpers/entities" -import { Workspace, WorkspaceProps } from "./Workspace" +import { Workspace, WorkspaceErrors, WorkspaceProps } from "./Workspace" export default { title: "components/Workspace", @@ -71,6 +71,11 @@ Error.args = { transition: "start", }, }, + workspaceErrors: { + [WorkspaceErrors.BUILD_ERROR]: Mocks.makeMockApiError({ + message: "A workspace build is already active.", + }), + } } export const Deleting = Template.bind({}) @@ -95,6 +100,11 @@ export const Canceled = Template.bind({}) Canceled.args = { ...Started.args, workspace: Mocks.MockCanceledWorkspace, + workspaceErrors: { + [WorkspaceErrors.CANCELLATION_MESSAGE]: Mocks.makeMockApiError({ + message: "Job has been marked as canceled...", + }), + } } export const Outdated = Template.bind({}) @@ -102,3 +112,23 @@ Outdated.args = { ...Started.args, workspace: Mocks.MockOutdatedWorkspace, } + +export const GetBuildsError = Template.bind({}) +GetBuildsError.args = { + ...Started.args, + workspaceErrors: { + [WorkspaceErrors.GET_BUILDS_ERROR]: Mocks.makeMockApiError({ + message: "There is a problem fetching builds.", + }), + } +} + +export const GetResourcesError = Template.bind({}) +GetResourcesError.args = { + ...Started.args, + workspaceErrors: { + [WorkspaceErrors.GET_RESOURCES_ERROR]: Mocks.makeMockApiError({ + message: "There is a problem fetching workspace resources.", + }), + } +} diff --git a/site/src/components/Workspace/Workspace.tsx b/site/src/components/Workspace/Workspace.tsx index d72fc551f9224..bd1b7fcec8ae5 100644 --- a/site/src/components/Workspace/Workspace.tsx +++ b/site/src/components/Workspace/Workspace.tsx @@ -41,7 +41,7 @@ export interface WorkspaceProps { resources?: TypesGen.WorkspaceResource[] builds?: TypesGen.WorkspaceBuild[] canUpdateWorkspace: boolean - workspaceErrors: Partial> + workspaceErrors: Partial> } /** @@ -117,7 +117,7 @@ export const Workspace: FC = ({ {!!resources && !!resources.length && ( diff --git a/site/src/pages/WorkspacePage/WorkspacePage.tsx b/site/src/pages/WorkspacePage/WorkspacePage.tsx index eae3ff24a7a06..9457cbed81ea6 100644 --- a/site/src/pages/WorkspacePage/WorkspacePage.tsx +++ b/site/src/pages/WorkspacePage/WorkspacePage.tsx @@ -46,7 +46,6 @@ export const WorkspacePage: React.FC = () => { cancellationMessage, } = workspaceState.context - console.log(cancellationMessage) const canUpdateWorkspace = !!permissions?.updateWorkspace const [bannerState, bannerSend] = useMachine(workspaceScheduleBannerMachine) From 94640e43dc9822b1bc77fa75f2fe190eb1294a4a Mon Sep 17 00:00:00 2001 From: Abhineet Jain Date: Mon, 1 Aug 2022 16:30:18 +0000 Subject: [PATCH 3/8] fix error types --- site/src/api/errors.ts | 3 --- site/src/components/Resources/Resources.tsx | 2 +- site/src/components/Workspace/Workspace.tsx | 2 +- site/src/pages/WorkspacePage/WorkspacePage.tsx | 9 ++++----- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/site/src/api/errors.ts b/site/src/api/errors.ts index ddc70792b0089..56f385b19959d 100644 --- a/site/src/api/errors.ts +++ b/site/src/api/errors.ts @@ -86,6 +86,3 @@ export const getValidationErrorMessage = (error: Error | ApiError | unknown): st export const getErrorDetail = (error: Error | ApiError | unknown): string | undefined | null => isApiError(error) ? error.response.data.detail : error instanceof Error ? error.stack : null - -export const getErrorIfErrorType = (error: Error | unknown): Error | undefined => - error instanceof Error ? error : undefined diff --git a/site/src/components/Resources/Resources.tsx b/site/src/components/Resources/Resources.tsx index fa88a9553f754..989ddda75dab6 100644 --- a/site/src/components/Resources/Resources.tsx +++ b/site/src/components/Resources/Resources.tsx @@ -29,7 +29,7 @@ const Language = { interface ResourcesProps { resources?: WorkspaceResource[] - getResourcesError?: Error + getResourcesError?: Error | unknown workspace: Workspace canUpdateWorkspace: boolean } diff --git a/site/src/components/Workspace/Workspace.tsx b/site/src/components/Workspace/Workspace.tsx index bd1b7fcec8ae5..910110e85bb17 100644 --- a/site/src/components/Workspace/Workspace.tsx +++ b/site/src/components/Workspace/Workspace.tsx @@ -117,7 +117,7 @@ export const Workspace: FC = ({ {!!resources && !!resources.length && ( diff --git a/site/src/pages/WorkspacePage/WorkspacePage.tsx b/site/src/pages/WorkspacePage/WorkspacePage.tsx index 9457cbed81ea6..5fdcccee672bb 100644 --- a/site/src/pages/WorkspacePage/WorkspacePage.tsx +++ b/site/src/pages/WorkspacePage/WorkspacePage.tsx @@ -1,6 +1,5 @@ import { makeStyles } from "@material-ui/core/styles" import { useMachine, useSelector } from "@xstate/react" -import { getErrorIfErrorType } from "api/errors" import dayjs from "dayjs" import minMax from "dayjs/plugin/minMax" import React, { useContext, useEffect } from "react" @@ -122,10 +121,10 @@ export const WorkspacePage: React.FC = () => { builds={builds} canUpdateWorkspace={canUpdateWorkspace} workspaceErrors={{ - [WorkspaceErrors.GET_RESOURCES_ERROR]: getErrorIfErrorType(getResourcesError), - [WorkspaceErrors.GET_BUILDS_ERROR]: getErrorIfErrorType(getBuildsError), - [WorkspaceErrors.BUILD_ERROR]: getErrorIfErrorType(buildError), - [WorkspaceErrors.CANCELLATION_MESSAGE]: getErrorIfErrorType(cancellationMessage), + [WorkspaceErrors.GET_RESOURCES_ERROR]: getResourcesError, + [WorkspaceErrors.GET_BUILDS_ERROR]: getBuildsError, + [WorkspaceErrors.BUILD_ERROR]: buildError, + [WorkspaceErrors.CANCELLATION_MESSAGE]: cancellationMessage, }} /> Date: Mon, 1 Aug 2022 16:32:46 +0000 Subject: [PATCH 4/8] fix lint --- site/src/components/Workspace/Workspace.stories.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/site/src/components/Workspace/Workspace.stories.tsx b/site/src/components/Workspace/Workspace.stories.tsx index 35dbef0629399..8855bb2154a6e 100644 --- a/site/src/components/Workspace/Workspace.stories.tsx +++ b/site/src/components/Workspace/Workspace.stories.tsx @@ -75,7 +75,7 @@ Error.args = { [WorkspaceErrors.BUILD_ERROR]: Mocks.makeMockApiError({ message: "A workspace build is already active.", }), - } + }, } export const Deleting = Template.bind({}) @@ -104,7 +104,7 @@ Canceled.args = { [WorkspaceErrors.CANCELLATION_MESSAGE]: Mocks.makeMockApiError({ message: "Job has been marked as canceled...", }), - } + }, } export const Outdated = Template.bind({}) @@ -120,7 +120,7 @@ GetBuildsError.args = { [WorkspaceErrors.GET_BUILDS_ERROR]: Mocks.makeMockApiError({ message: "There is a problem fetching builds.", }), - } + }, } export const GetResourcesError = Template.bind({}) @@ -130,5 +130,5 @@ GetResourcesError.args = { [WorkspaceErrors.GET_RESOURCES_ERROR]: Mocks.makeMockApiError({ message: "There is a problem fetching workspace resources.", }), - } + }, } From 965eb323acd426fe5bbbf9cb15ad436269840ac2 Mon Sep 17 00:00:00 2001 From: Abhineet Jain Date: Mon, 1 Aug 2022 17:12:21 +0000 Subject: [PATCH 5/8] fix stories --- site/src/components/Workspace/Workspace.stories.tsx | 1 + site/src/xServices/workspace/workspaceXService.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/site/src/components/Workspace/Workspace.stories.tsx b/site/src/components/Workspace/Workspace.stories.tsx index 8855bb2154a6e..f212a23fa1859 100644 --- a/site/src/components/Workspace/Workspace.stories.tsx +++ b/site/src/components/Workspace/Workspace.stories.tsx @@ -31,6 +31,7 @@ Started.args = { resources: [Mocks.MockWorkspaceResource, Mocks.MockWorkspaceResource2], builds: [Mocks.MockWorkspaceBuild], canUpdateWorkspace: true, + workspaceErrors: {}, } export const WithoutUpdateAccess = Template.bind({}) diff --git a/site/src/xServices/workspace/workspaceXService.ts b/site/src/xServices/workspace/workspaceXService.ts index 071060ea37a81..ba5e22ea41c94 100644 --- a/site/src/xServices/workspace/workspaceXService.ts +++ b/site/src/xServices/workspace/workspaceXService.ts @@ -35,7 +35,7 @@ export interface WorkspaceContext { builds?: TypesGen.WorkspaceBuild[] getBuildsError?: Error | unknown loadMoreBuildsError?: Error | unknown - cancellationMessage: Types.Message + cancellationMessage: Error | unknown // permissions permissions?: Permissions checkPermissionsError?: Error | unknown From 50ee56951852a46b3ae9da4296a6cd51d2a9eee3 Mon Sep 17 00:00:00 2001 From: Abhineet Jain Date: Tue, 2 Aug 2022 05:53:55 +0000 Subject: [PATCH 6/8] fix: chromatic workflow filter --- .github/workflows/coder.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/coder.yaml b/.github/workflows/coder.yaml index ca09ef2629607..f25857fbb09bf 100644 --- a/.github/workflows/coder.yaml +++ b/.github/workflows/coder.yaml @@ -68,10 +68,7 @@ jobs: sh: - "**.sh" ts: - - "**.tsx?" - - "**.jsx?" - - "**.lock" - - "**.json" + - 'site/**' - id: debug run: | echo "${{ toJSON(steps.filter )}}" From 66910aba4c33f268029e67116d4d4b1b20c8afee Mon Sep 17 00:00:00 2001 From: Abhineet Jain Date: Wed, 3 Aug 2022 18:26:11 +0000 Subject: [PATCH 7/8] fix workflow context assignment --- .../Workspace/Workspace.stories.tsx | 15 ++- site/src/components/Workspace/Workspace.tsx | 6 +- .../src/pages/WorkspacePage/WorkspacePage.tsx | 4 +- .../xServices/workspace/workspaceXService.ts | 102 +++++++++--------- 4 files changed, 68 insertions(+), 59 deletions(-) diff --git a/site/src/components/Workspace/Workspace.stories.tsx b/site/src/components/Workspace/Workspace.stories.tsx index f212a23fa1859..7a64657d4d5dd 100644 --- a/site/src/components/Workspace/Workspace.stories.tsx +++ b/site/src/components/Workspace/Workspace.stories.tsx @@ -101,11 +101,6 @@ export const Canceled = Template.bind({}) Canceled.args = { ...Started.args, workspace: Mocks.MockCanceledWorkspace, - workspaceErrors: { - [WorkspaceErrors.CANCELLATION_MESSAGE]: Mocks.makeMockApiError({ - message: "Job has been marked as canceled...", - }), - }, } export const Outdated = Template.bind({}) @@ -133,3 +128,13 @@ GetResourcesError.args = { }), }, } + +export const CancellationError = Template.bind({}) +CancellationError.args = { + ...Error.args, + workspaceErrors: { + [WorkspaceErrors.CANCELLATION_ERROR]: Mocks.makeMockApiError({ + message: "Job could not be canceled.", + }), + }, +} diff --git a/site/src/components/Workspace/Workspace.tsx b/site/src/components/Workspace/Workspace.tsx index 910110e85bb17..e52099fac1d16 100644 --- a/site/src/components/Workspace/Workspace.tsx +++ b/site/src/components/Workspace/Workspace.tsx @@ -20,7 +20,7 @@ export enum WorkspaceErrors { GET_RESOURCES_ERROR = "getResourcesError", GET_BUILDS_ERROR = "getBuildsError", BUILD_ERROR = "buildError", - CANCELLATION_MESSAGE = "cancellationMessage", + CANCELLATION_ERROR = "cancellationError", } export interface WorkspaceProps { @@ -70,8 +70,8 @@ export const Workspace: FC = ({ {workspaceErrors[WorkspaceErrors.BUILD_ERROR] && ( )} - {workspaceErrors[WorkspaceErrors.CANCELLATION_MESSAGE] && ( - + {workspaceErrors[WorkspaceErrors.CANCELLATION_ERROR] && ( + )} { permissions, checkPermissionsError, buildError, - cancellationMessage, + cancellationError, } = workspaceState.context const canUpdateWorkspace = !!permissions?.updateWorkspace @@ -124,7 +124,7 @@ export const WorkspacePage: React.FC = () => { [WorkspaceErrors.GET_RESOURCES_ERROR]: getResourcesError, [WorkspaceErrors.GET_BUILDS_ERROR]: getBuildsError, [WorkspaceErrors.BUILD_ERROR]: buildError, - [WorkspaceErrors.CANCELLATION_MESSAGE]: cancellationMessage, + [WorkspaceErrors.CANCELLATION_ERROR]: cancellationError, }} /> { // Cloning builds to not change the origin object with the sort() @@ -35,7 +35,8 @@ export interface WorkspaceContext { builds?: TypesGen.WorkspaceBuild[] getBuildsError?: Error | unknown loadMoreBuildsError?: Error | unknown - cancellationMessage: Error | unknown + cancellationMessage?: Types.Message + cancellationError?: Error | unknown // permissions permissions?: Permissions checkPermissionsError?: Error | unknown @@ -97,6 +98,9 @@ export const workspaceMachine = createMachine( stopWorkspace: { data: TypesGen.WorkspaceBuild } + deleteWorkspace: { + data: TypesGen.WorkspaceBuild + } cancelWorkspace: { data: Types.Message } @@ -248,17 +252,17 @@ export const workspaceMachine = createMachine( }, }, requestingCancel: { - entry: "clearCancellationMessage", + entry: ["clearCancellationMessage", "clearCancellationError"], invoke: { id: "cancelWorkspace", src: "cancelWorkspace", onDone: { target: "idle", - actions: ["assignCancellationMessage", "refreshTimeline"], + actions: ["assignCancellationMessage", "displayCancellationMessage", "refreshTimeline"], }, onError: { target: "idle", - actions: ["assignCancellationMessage"], + actions: ["assignCancellationError"], }, }, }, @@ -387,57 +391,57 @@ export const workspaceMachine = createMachine( clearGetPermissionsError: assign({ checkPermissionsError: (_) => undefined, }), - assignBuild: (_, event) => - assign({ - build: event.data, - }), - assignBuildError: (_, event) => - assign({ - buildError: event.data, - }), - clearBuildError: (_) => - assign({ - buildError: undefined, - }), - assignCancellationMessage: (_, event) => - assign({ - cancellationMessage: event.data, - }), - clearCancellationMessage: (_) => - assign({ - cancellationMessage: undefined, - }), - assignRefreshWorkspaceError: (_, event) => - assign({ - refreshWorkspaceError: event.data, - }), - clearRefreshWorkspaceError: (_) => - assign({ - refreshWorkspaceError: undefined, - }), - assignRefreshTemplateError: (_, event) => - assign({ - refreshTemplateError: event.data, - }), + assignBuild: assign({ + build: (_, event) => event.data, + }), + assignBuildError: assign({ + buildError: (_, event) => event.data, + }), + clearBuildError: assign({ + buildError: (_) => undefined, + }), + assignCancellationMessage: assign({ + cancellationMessage: (_, event) => event.data, + }), + clearCancellationMessage: assign({ + cancellationMessage: (_) => undefined, + }), + displayCancellationMessage: (context) => { + if (context.cancellationMessage) { + displaySuccess(context.cancellationMessage.message) + } + }, + assignCancellationError: assign({ + cancellationError: (_, event) => event.data, + }), + clearCancellationError: assign({ + cancellationError: (_) => undefined, + }), + assignRefreshWorkspaceError: assign({ + refreshWorkspaceError: (_, event) => event.data, + }), + clearRefreshWorkspaceError: assign({ + refreshWorkspaceError: (_) => undefined, + }), + assignRefreshTemplateError: assign({ + refreshTemplateError: (_, event) => event.data, + }), displayRefreshTemplateError: () => { displayError(Language.refreshTemplateError) }, - clearRefreshTemplateError: (_) => - assign({ - refreshTemplateError: undefined, - }), + clearRefreshTemplateError: assign({ + refreshTemplateError: (_) => undefined, + }), // Resources assignResources: assign({ resources: (_, event) => event.data, }), - assignGetResourcesError: (_, event) => - assign({ - getResourcesError: event.data, - }), - clearGetResourcesError: (_) => - assign({ - getResourcesError: undefined, - }), + assignGetResourcesError: assign({ + getResourcesError: (_, event) => event.data, + }), + clearGetResourcesError: assign({ + getResourcesError: (_) => undefined, + }), // Timeline assignBuilds: assign({ builds: (_, event) => event.data, From dfd346b2709782ad32d509462fe82ae3d575021b Mon Sep 17 00:00:00 2001 From: Abhineet Jain Date: Wed, 3 Aug 2022 18:31:22 +0000 Subject: [PATCH 8/8] fix lint --- site/src/xServices/workspace/workspaceXService.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/site/src/xServices/workspace/workspaceXService.ts b/site/src/xServices/workspace/workspaceXService.ts index 93f8f7e25eebf..acdb7b0987cbe 100644 --- a/site/src/xServices/workspace/workspaceXService.ts +++ b/site/src/xServices/workspace/workspaceXService.ts @@ -258,7 +258,11 @@ export const workspaceMachine = createMachine( src: "cancelWorkspace", onDone: { target: "idle", - actions: ["assignCancellationMessage", "displayCancellationMessage", "refreshTimeline"], + actions: [ + "assignCancellationMessage", + "displayCancellationMessage", + "refreshTimeline", + ], }, onError: { target: "idle", pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy