From d460366c07326d97e2e8acad55a21800f40dc8bd Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Sun, 6 Nov 2022 11:33:15 -0300 Subject: [PATCH] Revert "fix: Optimistically update the UI when a workspace action is triggered (#4898)" This reverts commit 8f4ae5b6ac0eaa57f2bf771a82a05232b215d994. --- .../WorkspacePage/WorkspacePage.test.tsx | 24 +++--- .../xServices/workspace/workspaceXService.ts | 75 ++----------------- 2 files changed, 18 insertions(+), 81 deletions(-) diff --git a/site/src/pages/WorkspacePage/WorkspacePage.test.tsx b/site/src/pages/WorkspacePage/WorkspacePage.test.tsx index c05090d02622f..bacd99e967542 100644 --- a/site/src/pages/WorkspacePage/WorkspacePage.test.tsx +++ b/site/src/pages/WorkspacePage/WorkspacePage.test.tsx @@ -92,6 +92,16 @@ afterAll(() => { }) describe("WorkspacePage", () => { + it("requests a stop job when the user presses Stop", async () => { + const stopWorkspaceMock = jest + .spyOn(api, "stopWorkspace") + .mockResolvedValueOnce(MockWorkspaceBuild) + testButton( + t("actionButton.stop", { ns: "workspacePage" }), + stopWorkspaceMock, + ) + }) + it("requests a delete job when the user presses Delete and confirms", async () => { const user = userEvent.setup() const deleteWorkspaceMock = jest @@ -130,23 +140,11 @@ describe("WorkspacePage", () => { const startWorkspaceMock = jest .spyOn(api, "startWorkspace") .mockImplementation(() => Promise.resolve(MockWorkspaceBuild)) - await testButton( + testButton( t("actionButton.start", { ns: "workspacePage" }), startWorkspaceMock, ) }) - - it("requests a stop job when the user presses Stop", async () => { - const stopWorkspaceMock = jest - .spyOn(api, "stopWorkspace") - .mockResolvedValueOnce(MockWorkspaceBuild) - - await testButton( - t("actionButton.stop", { ns: "workspacePage" }), - stopWorkspaceMock, - ) - }) - it("requests cancellation when the user presses Cancel", async () => { server.use( rest.get( diff --git a/site/src/xServices/workspace/workspaceXService.ts b/site/src/xServices/workspace/workspaceXService.ts index c01691ba6ef17..83111dc2a0a9f 100644 --- a/site/src/xServices/workspace/workspaceXService.ts +++ b/site/src/xServices/workspace/workspaceXService.ts @@ -40,27 +40,6 @@ const moreBuildsAvailable = ( return event.data.latest_build.updated_at !== latestBuildInTimeline.updated_at } -const updateWorkspaceStatus = ( - status: TypesGen.WorkspaceStatus, - workspace?: TypesGen.Workspace, -) => { - if (!workspace) { - throw new Error("Workspace not defined") - } - - return { - ...workspace, - latest_build: { - ...workspace.latest_build, - status, - }, - } -} - -const isUpdated = (newDateStr: string, oldDateStr: string): boolean => { - return new Date(oldDateStr).getTime() - new Date(newDateStr).getTime() > 0 -} - const Language = { getTemplateWarning: "Error updating workspace: latest template could not be fetched.", @@ -273,7 +252,6 @@ export const workspaceMachine = createMachine( on: { REFRESH_WORKSPACE: { actions: ["refreshWorkspace"], - cond: "hasUpdates", }, EVENT_SOURCE_ERROR: { target: "error", @@ -347,7 +325,7 @@ export const workspaceMachine = createMachine( }, }, requestingStart: { - entry: ["clearBuildError", "updateStatusToStarting"], + entry: "clearBuildError", invoke: { src: "startWorkspace", id: "startWorkspace", @@ -366,7 +344,7 @@ export const workspaceMachine = createMachine( }, }, requestingStop: { - entry: ["clearBuildError", "updateStatusToStopping"], + entry: "clearBuildError", invoke: { src: "stopWorkspace", id: "stopWorkspace", @@ -385,7 +363,7 @@ export const workspaceMachine = createMachine( }, }, requestingDelete: { - entry: ["clearBuildError", "updateStatusToDeleting"], + entry: "clearBuildError", invoke: { src: "deleteWorkspace", id: "deleteWorkspace", @@ -404,11 +382,7 @@ export const workspaceMachine = createMachine( }, }, requestingCancel: { - entry: [ - "clearCancellationMessage", - "clearCancellationError", - "updateStatusToCanceling", - ], + entry: ["clearCancellationMessage", "clearCancellationError"], invoke: { src: "cancelWorkspace", id: "cancelWorkspace", @@ -456,7 +430,9 @@ export const workspaceMachine = createMachine( on: { REFRESH_TIMELINE: { target: "#workspaceState.ready.timeline.gettingBuilds", - cond: "moreBuildsAvailable", + cond: { + type: "moreBuildsAvailable", + }, }, }, }, @@ -623,46 +599,9 @@ export const workspaceMachine = createMachine( }), { to: "scheduleBannerMachine" }, ), - // Optimistically updates. So when the user clicks on stop, we can show - // the "stopping" state right away without having to wait 0.5s ~ 2s to - // display the visual feedback to the user. - updateStatusToStarting: assign({ - workspace: ({ workspace }) => - updateWorkspaceStatus("starting", workspace), - }), - updateStatusToStopping: assign({ - workspace: ({ workspace }) => - updateWorkspaceStatus("stopping", workspace), - }), - updateStatusToDeleting: assign({ - workspace: ({ workspace }) => - updateWorkspaceStatus("deleting", workspace), - }), - updateStatusToCanceling: assign({ - workspace: ({ workspace }) => - updateWorkspaceStatus("canceling", workspace), - }), }, guards: { moreBuildsAvailable, - // We only want to update the workspace when there are changes to it to - // avoid re-renderings and allow optimistically updates to improve the UI. - // When updating the workspace every second, the optimistic updates that - // were applied before get lost since it will be rewrite. - hasUpdates: ({ workspace }, event: { data: TypesGen.Workspace }) => { - if (!workspace) { - throw new Error("Workspace not defined") - } - const isWorkspaceUpdated = isUpdated( - event.data.updated_at, - workspace.updated_at, - ) - const isBuildUpdated = isUpdated( - event.data.latest_build.updated_at, - workspace.latest_build.updated_at, - ) - return isWorkspaceUpdated || isBuildUpdated - }, }, services: { getWorkspace: async (_, event) => { 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