fix(secrets): confirm before deleting a secret from the detail sidebar - #599
Open
remko48 wants to merge 3 commits into
Open
fix(secrets): confirm before deleting a secret from the detail sidebar#599remko48 wants to merge 3 commits into
remko48 wants to merge 3 commits into
Conversation
The sidebar's ... menu called deleteSecret() straight from the click handler: the only irreversible action in the app was also the only one with no confirmation, on the path people actually use, because list-view rows carry no ... menu of their own. The table-view row menu already confirmed. Adds SecretDeleteConfirmDialog, registered as the `secret-delete` modal and opened through cnOpenModal like the sidebar's edit, move and share dialogs. It mirrors FolderDeleteConfirmDialog: it owns the delete call and emits `deleted`, so a refused delete (403 on a delegated secret, offline write) keeps the dialog open with the reason inline rather than closing the sidebar behind it, which reads exactly like a delete that worked. Reuses the existing "Delete secret", "Cancel" and "Failed to delete secret" keys; the one new warning string mirrors BulkDeleteDialog's no-trash wording and ships with its Dutch translation. Note this consumes the last unit of slack in the l10n parity ratchet: every locale except nl now sits exactly at its bound, so the next new source string needs translating everywhere.
Contributor
Quality Report — ConductionNL/keepiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-l10n-js | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| composer | ✅ | ✅ 111/111 | |||
| npm | ✅ | ✅ 536/536 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-09-02 11:11 UTC
Download the full PDF report from the workflow artifacts.
Contributor
Quality Report — ConductionNL/keepiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-l10n-js | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| composer | ✅ | ✅ 111/111 | |||
| npm | ✅ | ✅ 536/536 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-09-03 07:07 UTC
Download the full PDF report from the workflow artifacts.
Contributor
Quality Report — ConductionNL/keepiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-l10n-js | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| composer | ✅ | ✅ 111/111 | |||
| npm | ✅ | ✅ 536/536 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-09-03 07:20 UTC
Download the full PDF report from the workflow artifacts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Depends on
ConductionNL/nextcloud-vue#931 — keepiq pins
@conduction/nextcloud-vue^2.29.0, so this needs #931 merged, released, and the dependency bumped herebefore it can be verified end to end. The dialog itself uses only
cnOpenModaland the modal registry, which the pinned version alreadyprovides — the sidebar opens
secret-edit,secret-moveandsecret-sharethe same way today — so no code here waits on new library API.
The problem
The sidebar's
…menu calleddeleteSecret()straight from the click handler:the only irreversible action in the app was also the only one with no
confirmation, on the path people actually use, because list-view rows carry no
…menu of their own. The table-view row menu already confirmed, which is whythis went unnoticed.
The change
Adds
SecretDeleteConfirmDialog, registered as thesecret-deletemodal andopened through
cnOpenModallike the sidebar's edit, move and share dialogs.It mirrors
FolderDeleteConfirmDialog: it owns the delete call and emitsdeleted, so a refused delete (403 on a delegated secret, a server error, anoffline write) keeps the dialog open with the reason inline rather than closing
the sidebar behind it — which reads exactly like a delete that worked.
The wording reuses the existing
Delete secret,CancelandFailed to delete secretkeys. The one new string mirrors BulkDeleteDialog's no-trash phrasingand ships with its Dutch translation.
Reviewer note on l10n: this consumes the last unit of slack in the parity
ratchet. Every locale except
nlnow sits exactly at its bound, so the nextnew source string will fail
test:l10nunless it is translated into all ~36locales.