import {setupPopover} from './popover'; const roi: Promise<{lastModified: Date, profits: Profit[]}> = (async function () { const response = await fetch('/roi.json'); const lastModified = new Date(response.headers.get('last-modified')!); const profits = await response.json(); return {lastModified, profits}; })(); const lowVolume = document.querySelector('input#low-volume') as HTMLInputElement; const expertise = { AGRICULTURE: 'agri', CHEMISTRY: 'chem', CONSTRUCTION: 'const', ELECTRONICS: 'elec', FOOD_INDUSTRIES: 'food ind', FUEL_REFINING: 'fuel', MANUFACTURING: 'mfg', METALLURGY: 'metal', RESOURCE_EXTRACTION: 'res ext', } as const; const expertiseSelect = document.querySelector('select#expertise') as HTMLSelectElement; for (const key of Object.keys(expertise)) { const option = document.createElement('option'); option.value = key; option.textContent = key.replace('_', ' ').toLowerCase(); expertiseSelect.appendChild(option); } async function render() { const formatDecimal = new Intl.NumberFormat(undefined, {maximumFractionDigits: 2, maximumSignificantDigits: 6, roundingPriority: 'lessPrecision'}).format; const formatWhole = new Intl.NumberFormat(undefined, {maximumFractionDigits: 0}).format; const tbody = document.querySelector('tbody')!; tbody.innerHTML = ''; const {lastModified, profits} = await roi; for (const p of profits) { const volumeRatio = p.output_per_day / p.average_traded_7d; if (!lowVolume.checked && volumeRatio > 0.05) continue; if (expertiseSelect.value !== '' && p.expertise !== expertiseSelect.value) continue; const tr = document.createElement('tr'); const profit_per_area = p.profit_per_day / p.area; const break_even = p.profit_per_day > 0 ? p.capex / p.profit_per_day : Infinity; tr.innerHTML = `