All checks were successful
check / check (push) Successful in 22s
Replace display:none (hidden class) with visibility:hidden/visible for all error, warning, and status message elements across the extension UI. This prevents layout shift when messages appear or disappear. Changes: - helpers.js: showError/hideError now use visibility instead of hidden class - index.html: all error/status divs use visibility:hidden + min-height - confirmTx.js: warnings, errors, fee section use visibility - approval.js: tx-error, sign-error, danger-warning use visibility - addressDetail.js: export-privkey-flash uses visibility - deleteWallet.js: delete-wallet-flash uses visibility - addWallet.js: phrase-warning uses visibility - receive.js: erc20-warning uses visibility - addToken.js: add-token-info uses visibility - settingsAddToken.js: settings-addtoken-info uses visibility
97 lines
3.2 KiB
JavaScript
97 lines
3.2 KiB
JavaScript
const { $, showView, showFlash } = require("./helpers");
|
|
const { state, saveState } = require("../../shared/state");
|
|
const { decryptWithPassword } = require("../../shared/vault");
|
|
|
|
let deleteWalletIndex = null;
|
|
let ctx = null;
|
|
|
|
function show(walletIdx) {
|
|
deleteWalletIndex = walletIdx;
|
|
const wallet = state.wallets[walletIdx];
|
|
$("delete-wallet-name").textContent =
|
|
wallet.name || "Wallet " + (walletIdx + 1);
|
|
$("delete-wallet-password").value = "";
|
|
$("delete-wallet-flash").textContent = "";
|
|
$("delete-wallet-flash").style.visibility = "hidden";
|
|
showView("delete-wallet-confirm");
|
|
}
|
|
|
|
function init(_ctx) {
|
|
ctx = _ctx;
|
|
|
|
$("btn-delete-wallet-back").addEventListener("click", () => {
|
|
deleteWalletIndex = null;
|
|
ctx.showSettingsView();
|
|
});
|
|
|
|
$("btn-delete-wallet-confirm").addEventListener("click", async () => {
|
|
const pw = $("delete-wallet-password").value;
|
|
if (!pw) {
|
|
$("delete-wallet-flash").textContent =
|
|
"Please enter your password.";
|
|
$("delete-wallet-flash").style.visibility = "visible";
|
|
return;
|
|
}
|
|
|
|
if (deleteWalletIndex === null) {
|
|
$("delete-wallet-flash").textContent =
|
|
"No wallet selected for deletion.";
|
|
$("delete-wallet-flash").style.visibility = "visible";
|
|
return;
|
|
}
|
|
|
|
const btn = $("btn-delete-wallet-confirm");
|
|
btn.disabled = true;
|
|
btn.classList.add("text-muted");
|
|
|
|
const walletIdx = deleteWalletIndex;
|
|
const wallet = state.wallets[walletIdx];
|
|
|
|
// Verify password against the wallet's encrypted data
|
|
try {
|
|
await decryptWithPassword(wallet.encryptedSecret, pw);
|
|
} catch (_e) {
|
|
$("delete-wallet-flash").textContent = "Wrong password.";
|
|
$("delete-wallet-flash").style.visibility = "visible";
|
|
btn.disabled = false;
|
|
btn.classList.remove("text-muted");
|
|
return;
|
|
}
|
|
|
|
// Collect addresses to clean up from allowedSites/deniedSites
|
|
const addresses = (wallet.addresses || []).map((a) => a.address);
|
|
|
|
// Remove wallet
|
|
state.wallets.splice(walletIdx, 1);
|
|
|
|
// Clean up site permissions for deleted addresses
|
|
for (const addr of addresses) {
|
|
delete state.allowedSites[addr];
|
|
delete state.deniedSites[addr];
|
|
}
|
|
|
|
deleteWalletIndex = null;
|
|
|
|
if (state.wallets.length === 0) {
|
|
// No wallets left — reset selection and show welcome
|
|
state.selectedWallet = null;
|
|
state.selectedAddress = null;
|
|
state.activeAddress = null;
|
|
await saveState();
|
|
showView("welcome");
|
|
} else {
|
|
// Switch to first wallet if deleted wallet was active
|
|
state.selectedWallet = 0;
|
|
state.selectedAddress = 0;
|
|
state.activeAddress =
|
|
state.wallets[0].addresses[0]?.address || null;
|
|
await saveState();
|
|
ctx.renderWalletList();
|
|
ctx.showSettingsView();
|
|
showFlash("Wallet deleted.");
|
|
}
|
|
});
|
|
}
|
|
|
|
module.exports = { init, show };
|