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 };