fix(downloads): confirm before clearing a link password; fix placeholder

Review follow-up on the share-link password UI:
- Removing a link's password makes it publicly watchable, a protection
  downgrade; gate it behind a danger-confirm like the neighbouring Revoke,
  spelling out that anyone with the URL can then watch without a password.
- When setting a first password the input reused the create-form "Password
  (optional)" placeholder, but it's required here (Save stays disabled until
  non-empty); use the "Set a password" wording instead.
This commit is contained in:
2026-07-23 04:15:39 +02:00
parent c8cbbb6189
commit 10da69c1b9
3 changed files with 16 additions and 4 deletions
+12 -2
View File
@@ -205,7 +205,7 @@ function LinkRow({ link, onChanged }: { link: ShareLink; onChanged: () => void }
e.key === "Enter" && newPass.trim() && savePass.mutate(newPass.trim()) e.key === "Enter" && newPass.trim() && savePass.mutate(newPass.trim())
} }
placeholder={t( placeholder={t(
link.has_password ? "downloads.share.newPassword" : "downloads.share.password", link.has_password ? "downloads.share.newPassword" : "downloads.share.setPassword",
)} )}
className="flex-1 min-w-0 bg-card border border-border rounded-md px-2 py-1 text-xs outline-none focus:border-accent" className="flex-1 min-w-0 bg-card border border-border rounded-md px-2 py-1 text-xs outline-none focus:border-accent"
/> />
@@ -218,7 +218,17 @@ function LinkRow({ link, onChanged }: { link: ShareLink; onChanged: () => void }
</button> </button>
{link.has_password && ( {link.has_password && (
<button <button
onClick={() => savePass.mutate("")} onClick={async () => {
if (
await confirm({
title: t("downloads.share.removePassword"),
message: t("downloads.share.removePasswordConfirm"),
confirmLabel: t("downloads.share.removePassword"),
danger: true,
})
)
savePass.mutate("");
}}
disabled={savePass.isPending} disabled={savePass.isPending}
className="px-2 py-1 rounded-md text-xs text-muted hover:text-red-400 transition" className="px-2 py-1 rounded-md text-xs text-muted hover:text-red-400 transition"
> >
+2 -1
View File
@@ -123,7 +123,8 @@
"changePassword": "Change password", "changePassword": "Change password",
"newPassword": "New password", "newPassword": "New password",
"savePassword": "Save", "savePassword": "Save",
"removePassword": "Remove" "removePassword": "Remove",
"removePasswordConfirm": "This makes the link public — anyone with the URL can watch it without a password."
}, },
"confirm": { "confirm": {
"cancelTitle": "Cancel download?", "cancelTitle": "Cancel download?",
+2 -1
View File
@@ -123,7 +123,8 @@
"changePassword": "Jelszó módosítása", "changePassword": "Jelszó módosítása",
"newPassword": "Új jelszó", "newPassword": "Új jelszó",
"savePassword": "Mentés", "savePassword": "Mentés",
"removePassword": "Törlés" "removePassword": "Törlés",
"removePasswordConfirm": "Ezzel a link publikus lesz — jelszó nélkül bárki megnézheti, akinek megvan az URL."
}, },
"confirm": { "confirm": {
"cancelTitle": "Megszakítod a letöltést?", "cancelTitle": "Megszakítod a letöltést?",