import { createUsdAmount, renderUsdAmount } from "../../../usd/index.js"; import { formatDateAndAge } from "../format.js"; import { createBlockTitle } from "../title/index.js"; /** @typedef {import("../../../modules/brk-client/index.js").BlockInfoV1} Block */ /** @param {string} hash */ function createHashElement(hash) { const element = document.createElement("span"); const prefix = document.createElement("span"); const value = document.createElement("span"); const firstNonZero = hash.search(/[^0]/); const visibleStart = firstNonZero === -1 ? hash.length : firstNonZero; element.dataset.blockHash = ""; prefix.dataset.dim = ""; prefix.textContent = hash.slice(0, visibleStart); value.textContent = hash.slice(visibleStart); element.append(prefix, value); return element; } /** @param {Node[]} [actions] */ export function createBlockHeader(actions = []) { const element = document.createElement("header"); const title = document.createElement("h1"); const actionList = document.createElement("div"); const date = document.createElement("time"); const hash = document.createElement("p"); const price = createUsdAmount("output", 0, { size: "title", tone: "positive", }); let timestamp = 0; let dateTimer = 0; element.dataset.blockHeader = ""; title.dataset.blockTitleText = ""; actionList.append(...actions); element.append(title, price, hash, actionList, date); function refreshDate() { date.textContent = formatDateAndAge(timestamp); dateTimer = window.setTimeout(refreshDate, 60_000); } /** @param {Block} block */ function update(block) { title.replaceChildren(...createBlockTitle(block.height)); date.dateTime = new Date(block.timestamp * 1_000).toISOString(); timestamp = block.timestamp; window.clearTimeout(dateTimer); refreshDate(); hash.replaceChildren(createHashElement(block.id)); renderUsdAmount(price, block.extras.price, { size: "title", tone: "positive", }); } return /** @type {const} */ ({ element, update, }); }