From fa664ebe77049a9ba802dfc80cdd3e06d6007889 Mon Sep 17 00:00:00 2001 From: yyh Date: Wed, 11 Mar 2026 19:39:05 +0800 Subject: [PATCH] refactor(web): migrate members settings overlays to base ui primitives --- .../edit-workspace-modal/index.module.css | 0 .../edit-workspace-modal/index.spec.tsx | 18 +++++++++- .../edit-workspace-modal/index.tsx | 22 +++++++----- .../account-setting/members-page/index.tsx | 35 +++++++++++-------- web/eslint-suppressions.json | 10 ------ 5 files changed, 51 insertions(+), 34 deletions(-) delete mode 100644 web/app/components/header/account-setting/members-page/edit-workspace-modal/index.module.css diff --git a/web/app/components/header/account-setting/members-page/edit-workspace-modal/index.module.css b/web/app/components/header/account-setting/members-page/edit-workspace-modal/index.module.css deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/web/app/components/header/account-setting/members-page/edit-workspace-modal/index.spec.tsx b/web/app/components/header/account-setting/members-page/edit-workspace-modal/index.spec.tsx index ae0dd8cd4d..bd4ae8cb80 100644 --- a/web/app/components/header/account-setting/members-page/edit-workspace-modal/index.spec.tsx +++ b/web/app/components/header/account-setting/members-page/edit-workspace-modal/index.spec.tsx @@ -1,6 +1,6 @@ import type { AppContextValue } from '@/context/app-context' import type { ICurrentWorkspace } from '@/models/common' -import { render, screen, waitFor } from '@testing-library/react' +import { fireEvent, render, screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { vi } from 'vitest' import { ToastContext } from '@/app/components/base/toast/context' @@ -40,6 +40,12 @@ describe('EditWorkspaceModal', () => { expect(await screen.findByDisplayValue('Test Workspace')).toBeInTheDocument() }) + it('should render on the base/ui overlay layer', async () => { + renderModal() + + expect(await screen.findByRole('dialog')).toHaveClass('z-[1002]') + }) + it('should let user edit workspace name', async () => { const user = userEvent.setup() @@ -133,4 +139,14 @@ describe('EditWorkspaceModal', () => { await user.click(screen.getByTestId('edit-workspace-cancel')) expect(mockOnCancel).toHaveBeenCalled() }) + + it('should call onCancel when Escape key is pressed', async () => { + renderModal() + + fireEvent.keyDown(document, { key: 'Escape' }) + + await waitFor(() => { + expect(mockOnCancel).toHaveBeenCalled() + }) + }) }) diff --git a/web/app/components/header/account-setting/members-page/edit-workspace-modal/index.tsx b/web/app/components/header/account-setting/members-page/edit-workspace-modal/index.tsx index 1c3984b0b5..2536b9793e 100644 --- a/web/app/components/header/account-setting/members-page/edit-workspace-modal/index.tsx +++ b/web/app/components/header/account-setting/members-page/edit-workspace-modal/index.tsx @@ -1,16 +1,13 @@ 'use client' -import { noop } from 'es-toolkit/function' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useContext } from 'use-context-selector' import Button from '@/app/components/base/button' import Input from '@/app/components/base/input' -import Modal from '@/app/components/base/modal' import { ToastContext } from '@/app/components/base/toast/context' +import { Dialog, DialogContent } from '@/app/components/base/ui/dialog' import { useAppContext } from '@/context/app-context' import { updateWorkspaceInfo } from '@/service/common' -import { cn } from '@/utils/classnames' -import s from './index.module.css' type IEditWorkspaceModalProps = { onCancel: () => void @@ -40,8 +37,17 @@ const EditWorkspaceModal = ({ } return ( -
- + { + if (!open) + onCancel() + }} + > +
{t('account.editWorkspaceInfo', { ns: 'common' })}
@@ -84,8 +90,8 @@ const EditWorkspaceModal = ({
-
-
+ + ) } export default EditWorkspaceModal diff --git a/web/app/components/header/account-setting/members-page/index.tsx b/web/app/components/header/account-setting/members-page/index.tsx index fb81e83d6d..97f5d10b1b 100644 --- a/web/app/components/header/account-setting/members-page/index.tsx +++ b/web/app/components/header/account-setting/members-page/index.tsx @@ -3,7 +3,7 @@ import type { InvitationResult } from '@/models/common' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { Avatar } from '@/app/components/base/avatar' -import Tooltip from '@/app/components/base/tooltip' +import { Tooltip, TooltipContent, TooltipTrigger } from '@/app/components/base/ui/tooltip' import { NUM_INFINITE } from '@/app/components/billing/config' import { Plan } from '@/app/components/billing/type' import UpgradeBtn from '@/app/components/billing/upgrade-btn' @@ -59,20 +59,25 @@ const MembersPage = () => { {currentWorkspace?.name} {isCurrentWorkspaceOwner && ( - -
{ - setEditWorkspaceModalVisible(true) - }} - > -
-
+ + { + setEditWorkspaceModalVisible(true) + }} + > +
+
+ )} + /> + + {t('account.editWorkspaceInfo', { ns: 'common' })} +
)} diff --git a/web/eslint-suppressions.json b/web/eslint-suppressions.json index 4a843c1aca..96da7fa748 100644 --- a/web/eslint-suppressions.json +++ b/web/eslint-suppressions.json @@ -4423,16 +4423,6 @@ "count": 2 } }, - "app/components/header/account-setting/members-page/edit-workspace-modal/index.tsx": { - "no-restricted-imports": { - "count": 1 - } - }, - "app/components/header/account-setting/members-page/index.tsx": { - "no-restricted-imports": { - "count": 1 - } - }, "app/components/header/account-setting/members-page/invite-modal/index.tsx": { "no-restricted-imports": { "count": 1