From 74e6fd8d4a92aa92b8583ce10466bef9e61fac6b Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Tue, 11 Jul 2023 12:37:47 +0800 Subject: [PATCH] fix: remove workspace not working (#3140) (cherry picked from commit ddb2931f3825edc82c054cb8a7a47e3108387972) --- apps/electron/e2e/basic.spec.ts | 32 +++++++++++++++++++ .../components/affine/setting-modal/index.tsx | 2 +- .../setting-modal/workspace-setting/index.tsx | 8 +++-- apps/web/src/layouts/workspace-layout.tsx | 2 +- apps/web/src/providers/modal-provider.tsx | 10 +++++- 5 files changed, 49 insertions(+), 5 deletions(-) diff --git a/apps/electron/e2e/basic.spec.ts b/apps/electron/e2e/basic.spec.ts index ea1f429314..c7fa125cc1 100644 --- a/apps/electron/e2e/basic.spec.ts +++ b/apps/electron/e2e/basic.spec.ts @@ -149,3 +149,35 @@ test('windows only check', async ({ page }) => { await expect(windowOnlyUI).not.toBeVisible(); } }); + +test('delete workspace', async ({ page }) => { + await page.getByTestId('current-workspace').click(); + await page.getByTestId('add-or-new-workspace').click(); + await page.getByTestId('new-workspace').click(); + await page.getByTestId('create-workspace-default-location-button').click(); + await page.getByTestId('create-workspace-input').type('Delete Me'); + await page.getByTestId('create-workspace-create-button').click(); + await page.getByTestId('create-workspace-continue-button').click(); + await page.getByTestId('slider-bar-workspace-setting-button').click(); + await page.getByTestId('current-workspace-label').click(); + expect(await page.getByTestId('workspace-name-input').inputValue()).toBe( + 'Delete Me' + ); + const contentElement = await page.getByTestId('setting-modal-content'); + const boundingBox = await contentElement.boundingBox(); + if (!boundingBox) { + throw new Error('boundingBox is null'); + } + await page.mouse.move( + boundingBox.x + boundingBox.width / 2, + boundingBox.y + boundingBox.height / 2 + ); + await page.mouse.wheel(0, 500); + await page.getByTestId('delete-workspace-button').click(); + await page.getByTestId('delete-workspace-input').type('Delete Me'); + await page.getByTestId('delete-workspace-confirm-button').click(); + await page.waitForTimeout(1000); + expect(await page.getByTestId('workspace-name').textContent()).toBe( + 'Demo Workspace' + ); +}); diff --git a/apps/web/src/components/affine/setting-modal/index.tsx b/apps/web/src/components/affine/setting-modal/index.tsx index 913e44939d..e408f5f4c8 100644 --- a/apps/web/src/components/affine/setting-modal/index.tsx +++ b/apps/web/src/components/affine/setting-modal/index.tsx @@ -84,7 +84,7 @@ export const SettingModal: React.FC = ({ onAccountSettingClick={onAccountSettingClick} /> -
+
{activeTab === 'workspace' && workspaceId ? ( diff --git a/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx b/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx index fa2870c48d..2131466efc 100644 --- a/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx +++ b/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx @@ -1,7 +1,9 @@ import { usePassiveWorkspaceEffect } from '@toeverything/hooks/use-block-suite-workspace'; +import { useSetAtom } from 'jotai'; import { Suspense, useCallback } from 'react'; import { getUIAdapter } from '../../../../adapters/workspace'; +import { openSettingModalAtom } from '../../../../atoms'; import { useOnTransformWorkspace } from '../../../../hooks/root/use-on-transform-workspace'; import { useWorkspace } from '../../../../hooks/use-workspace'; import { useAppHelper } from '../../../../hooks/use-workspaces'; @@ -9,15 +11,17 @@ import { useAppHelper } from '../../../../hooks/use-workspaces'; export const WorkspaceSetting = ({ workspaceId }: { workspaceId: string }) => { const workspace = useWorkspace(workspaceId); usePassiveWorkspaceEffect(workspace.blockSuiteWorkspace); + const setSettingModal = useSetAtom(openSettingModalAtom); const helper = useAppHelper(); const { NewSettingsDetail } = getUIAdapter(workspace.flavour); const onDeleteWorkspace = useCallback( async (id: string) => { - return helper.deleteWorkspace(id); + await helper.deleteWorkspace(id); + setSettingModal(prev => ({ ...prev, open: false, workspaceId: null })); }, - [helper] + [setSettingModal, helper] ); const onTransformWorkspace = useOnTransformWorkspace(); diff --git a/apps/web/src/layouts/workspace-layout.tsx b/apps/web/src/layouts/workspace-layout.tsx index db6a083403..2df8fda743 100644 --- a/apps/web/src/layouts/workspace-layout.tsx +++ b/apps/web/src/layouts/workspace-layout.tsx @@ -284,7 +284,7 @@ export const WorkspaceLayoutInner: FC = ({ children }) => { setOpenQuickSearchModalAtom(true); }, [setOpenQuickSearchModalAtom]); - const [, setOpenSettingModalAtom] = useAtom(openSettingModalAtom); + const setOpenSettingModalAtom = useSetAtom(openSettingModalAtom); const handleOpenSettingModal = useCallback(() => { setOpenSettingModalAtom({ diff --git a/apps/web/src/providers/modal-provider.tsx b/apps/web/src/providers/modal-provider.tsx index 743ce35220..5c1cf99bc4 100644 --- a/apps/web/src/providers/modal-provider.tsx +++ b/apps/web/src/providers/modal-provider.tsx @@ -1,5 +1,6 @@ import { WorkspaceSubPath } from '@affine/env/workspace'; import { + rootCurrentPageIdAtom, rootCurrentWorkspaceIdAtom, rootWorkspacesMetadataAtom, } from '@affine/workspace/atom'; @@ -124,6 +125,7 @@ export const AllWorkspaceModals = (): ReactElement => { const [currentWorkspaceId, setCurrentWorkspaceId] = useAtom( rootCurrentWorkspaceIdAtom ); + const setCurrentPageId = useSetAtom(rootCurrentPageIdAtom); const [transitioning, transition] = useTransition(); const [, setOpenSettingModalAtom] = useAtom(openSettingModalAtom); @@ -169,11 +171,17 @@ export const AllWorkspaceModals = (): ReactElement => { workspaceId => { setOpenWorkspacesModal(false); setCurrentWorkspaceId(workspaceId); + setCurrentPageId(null); jumpToSubPath(workspaceId, WorkspaceSubPath.ALL).catch(error => { console.error(error); }); }, - [jumpToSubPath, setCurrentWorkspaceId, setOpenWorkspacesModal] + [ + jumpToSubPath, + setCurrentPageId, + setCurrentWorkspaceId, + setOpenWorkspacesModal, + ] )} onClickWorkspaceSetting={handleOpenSettingModal} onNewWorkspace={useCallback(() => {