const { $, showView, showFlash, balanceLinesForAddress } = require("./helpers"); const { state, saveState } = require("../../shared/state"); const { deriveAddressFromXpub } = require("../../shared/wallet"); const { formatUsd, getAddressValueUsd, getTotalValueUsd, } = require("../../shared/prices"); function renderTotalValue() { const el = $("total-value"); if (!el) return; el.textContent = formatUsd(getTotalValueUsd(state.wallets)); } function render(ctx) { const container = $("wallet-list"); if (state.wallets.length === 0) { container.innerHTML = '

No wallets yet. Add one to get started.

'; renderTotalValue(); return; } let html = ""; state.wallets.forEach((wallet, wi) => { html += `
`; html += `
`; html += `${wallet.name}`; if (wallet.type === "hd") { html += ``; } html += `
`; wallet.addresses.forEach((addr, ai) => { html += `
`; html += `
Address ${wi + 1}.${ai + 1}
`; if (addr.ensName) { html += `
${addr.ensName}
`; } const addrUsd = formatUsd(getAddressValueUsd(addr)); html += `
`; html += `${addr.address}`; html += `${addrUsd}`; html += `
`; html += balanceLinesForAddress(addr); html += `
`; }); html += `
`; }); container.innerHTML = html; container.querySelectorAll(".address-row").forEach((row) => { row.addEventListener("click", () => { state.selectedWallet = parseInt(row.dataset.wallet, 10); state.selectedAddress = parseInt(row.dataset.address, 10); ctx.showAddressDetail(); }); }); container.querySelectorAll(".btn-add-address").forEach((btn) => { btn.addEventListener("click", async (e) => { e.stopPropagation(); const wi = parseInt(btn.dataset.wallet, 10); const wallet = state.wallets[wi]; const newAddr = deriveAddressFromXpub( wallet.xpub, wallet.nextIndex, ); wallet.addresses.push({ address: newAddr, balance: "0.0000", tokenBalances: [], }); wallet.nextIndex++; await saveState(); render(ctx); ctx.doRefreshAndRender(); }); }); renderTotalValue(); } function init(ctx) {} module.exports = { init, render };