feat: add reusable ConfirmDialog component for deletion operations #135

Merged
REDCODE merged 8 commits from issue-57-confirm-dialog into develop 2026-07-16 13:59:26 +00:00
Collaborator

Summary

Introduces a reusable ConfirmDialog component that wraps ModalFrame and applies it to all deletion operations across the frontend.

Closes #57

Changes

New component

  • MilkStream.Client/Components/Shared/ConfirmDialog.razor — wraps ModalFrame with Show, Title, Message/Body, ConfirmText, ConfirmButtonClass, CancelText, OnConfirm, OnCancel parameters. Supports both plain-text messages and custom RenderFragment body content.

Updated pages (7 files)

Page Operations guarded
AdminUsers.razor Single user deletion (replaces browser window.confirm())
User.razor Single user deletion (replaces browser window.confirm())
AlbumDetail.razor Delete album + bulk delete selected assets
CosplayerDetail.razor Delete cosplayer + bulk delete selected albums
Albums.razor Bulk delete selected albums
Cosplayers.razor Bulk delete selected cosplayers
Settings.razor + FolderBox.razor Delete folder (FolderBox now delegates via OnDeleteRequested)

Testing needed

  1. User deletion/Users and /User/{id}: verify the ConfirmDialog appears, Cancel closes it, Confirm performs the delete
  2. Album deletion/albums/{id}: verify dialog for "Delete album" and bulk "Delete N" in select mode
  3. Cosplayer deletion/cosplayer/{id}: verify dialog for "Delete Cosplayer" and bulk "Delete N" albums
  4. Bulk album deletion/albums: enter select mode, verify dialog before "Delete N"
  5. Bulk cosplayer deletion/cosplayers: enter select mode, verify dialog before "Delete N"
  6. Folder deletion/Settings → Folders: verify dialog before folder delete
## Summary Introduces a reusable `ConfirmDialog` component that wraps `ModalFrame` and applies it to all deletion operations across the frontend. Closes #57 ## Changes ### New component - **`MilkStream.Client/Components/Shared/ConfirmDialog.razor`** — wraps `ModalFrame` with `Show`, `Title`, `Message`/`Body`, `ConfirmText`, `ConfirmButtonClass`, `CancelText`, `OnConfirm`, `OnCancel` parameters. Supports both plain-text messages and custom `RenderFragment` body content. ### Updated pages (7 files) | Page | Operations guarded | |---|---| | `AdminUsers.razor` | Single user deletion (replaces browser `window.confirm()`) | | `User.razor` | Single user deletion (replaces browser `window.confirm()`) | | `AlbumDetail.razor` | Delete album + bulk delete selected assets | | `CosplayerDetail.razor` | Delete cosplayer + bulk delete selected albums | | `Albums.razor` | Bulk delete selected albums | | `Cosplayers.razor` | Bulk delete selected cosplayers | | `Settings.razor` + `FolderBox.razor` | Delete folder (FolderBox now delegates via `OnDeleteRequested`) | ## Testing needed 1. **User deletion** — `/Users` and `/User/{id}`: verify the ConfirmDialog appears, Cancel closes it, Confirm performs the delete 2. **Album deletion** — `/albums/{id}`: verify dialog for "Delete album" and bulk "Delete N" in select mode 3. **Cosplayer deletion** — `/cosplayer/{id}`: verify dialog for "Delete Cosplayer" and bulk "Delete N" albums 4. **Bulk album deletion** — `/albums`: enter select mode, verify dialog before "Delete N" 5. **Bulk cosplayer deletion** — `/cosplayers`: enter select mode, verify dialog before "Delete N" 6. **Folder deletion** — `/Settings` → Folders: verify dialog before folder delete
Ai_Agent added 8 commits 2026-07-16 13:13:32 +00:00
A shared confirmation dialog wrapping ModalFrame for delete operations.
Supports plain text Message or custom Body RenderFragment, configurable
confirm button text and styling, and OnConfirm/OnCancel event callbacks.
Replaces browser window.confirm() with the reusable ConfirmDialog
component for a consistent, styled confirmation experience.
Replaces browser window.confirm() with the reusable ConfirmDialog
component.
Adds confirmation before deleting an album or bulk-deleting selected
assets. Uses a single ConfirmDialog with dynamic message and stored
callback for either action.
Adds confirmation before deleting a cosplayer or bulk-deleting selected
albums. Uses a single ConfirmDialog with dynamic message and stored
callback for either action.
Adds confirmation before bulk-deleting selected albums.
Adds confirmation before bulk-deleting selected cosplayers.
FolderBox now delegates deletion to parent via OnDeleteRequested
callback instead of deleting directly. Settings.razor shows a
ConfirmDialog before removing the folder.
Ai_Agent added this to the v1.0 - Initial Release milestone 2026-07-16 13:14:09 +00:00
Ai_Agent marked the pull request as ready for review 2026-07-16 13:56:47 +00:00
Ai_Agent requested review from REDCODE 2026-07-16 13:56:51 +00:00
REDCODE approved these changes 2026-07-16 13:59:21 +00:00
REDCODE merged commit 548b0d5bfd into develop 2026-07-16 13:59:26 +00:00
REDCODE deleted branch issue-57-confirm-dialog 2026-07-16 13:59:27 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MilkyShots/MilkyShots#135