fix(FR-2825): standardize activate/deactivate confirmations to Popconfirm#7371
Conversation
How to use the Graphite Merge QueueAdd either label to this PR to merge it via the merge queue:
You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has required the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
|
|
Coverage Report for react-coverage (./react)
File Coverage
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Pull request overview
Standardizes several “activate/deactivate (and deploy)” confirmation flows in the React WebUI by replacing App.useApp().modal.confirm() usage with Popconfirm-based confirmations, aligning behavior with BAINameActionCell’s popConfirm support.
Changes:
- Replaced keypair activate/deactivate confirmations in
UserCredentialListwithpopConfirmactions. - Replaced resource group activate/deactivate confirmation in
ResourceGroupListwithpopConfirm, removing the now-unusedmodaldependency. - Moved deployment revision rollback confirmation from
modal.confirmto Popconfirm (row action + drawer action) inDeploymentRevisionHistoryTab.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| react/src/components/UserCredentialList.tsx | Converts activate/deactivate action confirmations to popConfirm for consistent Popconfirm UX. |
| react/src/components/ResourceGroupList.tsx | Switches activate/deactivate confirmation to popConfirm and removes unused modal from App.useApp(). |
| react/src/components/DeploymentRevisionHistoryTab.tsx | Replaces modal-based rollback confirmation with Popconfirm in both table actions and drawer action area. |
532f50d to
854ea39
Compare
Coverage Report for backend-ai-ui-coverage (./packages/backend.ai-ui)
File Coverage
|
||||||||||||||||||||||||||||||||||||||
624b2cd to
1a0fd87
Compare
72c5872 to
f942af5
Compare
1a0fd87 to
f38d7f8
Compare
f38d7f8 to
1584638
Compare
f942af5 to
1839b25
Compare
Merge activity
|
…firm (#7371) Resolves #7371 (FR-2825) ## Summary Standardize **reversible** activate/deactivate (soft-delete/restore) confirmations to use `Popconfirm` across the app, per `.claude/rules/destructive-confirmation.md`. `BAIConfirmModalWithInput` is reserved for irreversible hard-delete in FR-2819; this PR is the reversible-action counterpart. ## Popconfirm copy convention applied here - **Title** clearly states the action: e.g. `자격증명 비활성화`, `프로젝트 비활성화`, `역할 활성화`, `사용자 비활성화`. - **Body** shows only the target identifier (resource name, email, access key, revision number) — no verbose `"정말로 X를 비활성화 시키겠습니까?"` sentence. ## Changes ### `BAINameActionCell` actions migrated to `popConfirm` - `react/src/components/UserCredentialList.tsx` — keypair Activate / Deactivate (`record.user_id` as body). - `react/src/components/UserManagement.tsx` — user Activate / Deactivate (`record.email` as body). - `react/src/components/ResourceGroupList.tsx` — resource group Activate / Deactivate (`record.name` as body). - `react/src/pages/RBACManagementPage.tsx` — role Activate / Deactivate (`role.name` as body). - `react/src/components/DeploymentRevisionHistoryTab.tsx` — revision Deploy in table row (`#${revisionNumber}` as body). ### `<Popconfirm>` JSX wrappers tightened - `react/src/components/DeploymentRevisionHistoryTab.tsx` (drawer Deploy button) — body simplified to `#${revisionNumber}`. - `packages/backend.ai-ui/src/components/fragments/BAIProjectTable.tsx` — body simplified from `"정말로 {{projectName}} 프로젝트를 비활성화 시키겠습니까?"` → `value?.name`. ### i18n cleanup - Removed unused `comp:BAIProjectTable.AreYouSureToDeactivateProject` (22 locales). - Removed unused `deployment.DeployConfirm` (22 locales). ## Test plan - [ ] Open **Users** → row action menu → Deactivate / Activate. Popconfirm title shows the action and body shows the email. Confirming flips the status. - [ ] Open **Credentials** (Active/Inactive tabs) → row action menu → Deactivate / Activate. Popconfirm title shows the action and body shows the user_id. - [ ] Open **Resource Groups** → row action menu → Deactivate / Activate. Popconfirm title shows the action and body shows the resource group name. - [ ] Open **Projects** (BAIProjectTable consumers, e.g. admin Project page) → row Deactivate button. Popconfirm title shows the action and body shows just the project name. - [ ] Open **RBAC** (`/rbac`) → role row action menu → Deactivate / Activate. Popconfirm title shows the action and body shows the role name. - [ ] Open a **Deployment** detail → Revisions tab → row action menu → Deploy. Popconfirm shows `#<revisionNumber>` as body. Same flow via the drawer Deploy button. - [ ] `bash scripts/verify.sh` — Relay / Lint / Format / TypeScript pass for the modified files. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
1839b25 to
0ca1f8b
Compare
1584638 to
1902adc
Compare

Resolves #7371 (FR-2825)
Summary
Standardize reversible activate/deactivate (soft-delete/restore) confirmations to use
Popconfirmacross the app, per.claude/rules/destructive-confirmation.md.BAIConfirmModalWithInputis reserved for irreversible hard-delete in FR-2819; this PR is the reversible-action counterpart.Popconfirm copy convention applied here
자격증명 비활성화,프로젝트 비활성화,역할 활성화,사용자 비활성화."정말로 X를 비활성화 시키겠습니까?"sentence.Changes
BAINameActionCellactions migrated topopConfirmreact/src/components/UserCredentialList.tsx— keypair Activate / Deactivate (record.user_idas body).react/src/components/UserManagement.tsx— user Activate / Deactivate (record.emailas body).react/src/components/ResourceGroupList.tsx— resource group Activate / Deactivate (record.nameas body).react/src/pages/RBACManagementPage.tsx— role Activate / Deactivate (role.nameas body).react/src/components/DeploymentRevisionHistoryTab.tsx— revision Deploy in table row (#${revisionNumber}as body).<Popconfirm>JSX wrappers tightenedreact/src/components/DeploymentRevisionHistoryTab.tsx(drawer Deploy button) — body simplified to#${revisionNumber}.packages/backend.ai-ui/src/components/fragments/BAIProjectTable.tsx— body simplified from"정말로 {{projectName}} 프로젝트를 비활성화 시키겠습니까?"→value?.name.i18n cleanup
comp:BAIProjectTable.AreYouSureToDeactivateProject(22 locales).deployment.DeployConfirm(22 locales).Test plan
/rbac) → role row action menu → Deactivate / Activate. Popconfirm title shows the action and body shows the role name.#<revisionNumber>as body. Same flow via the drawer Deploy button.bash scripts/verify.sh— Relay / Lint / Format / TypeScript pass for the modified files.🤖 Generated with Claude Code