// SARS-CoV-2-Viz // Animated COVID case count visualization // Copyright 2022 Edward L. Platt function main() { let ui = UI(); let tracker = ProgressTracker( (id) => { ui.addDisplay(id); }, (id, progress) => ui.display(progress, id) ); document.getElementById("header").appendChild(ui.node); let onDataProgress = tracker.getTracker(); let dataPromise = getData( (progress) => { onDataProgress(`Fetching data: Received ${progress} bytes`) }) .then((dataCSV) => { return parseData( dataCSV, (progress) => onDataProgress(`Parsing data: ${progress}`) ); }); let onFeatureProgress = tracker.getTracker(); let featurePromise = getFeatures( (progress) => { onFeatureProgress(`Fetching features: Received ${progress} bytes`); }) .then((features) => { return parseFeatures( features, (progress) => onFeatureProgress(`Parsing features: ${progress}`)); }); let onMetadataProgress = tracker.getTracker(); let metadataPromise = getMetadata( (progress) => { onMetadataProgress(`Fetching metadata: ${progress}`); }) .then((metadata) => { return parseMetadata( metadata, (progress) => onMetadataProgress(`Parsing metadata: ${progress}`)); }); Promise.all([ dataPromise, featurePromise, metadataPromise ]).then((values) => { const [dataForDay, us, metadata] = values; console.log(metadata); ui.clearDisplays(); ui.display("Initializing visualization"); let msPerFrame = 200; console.log(dataForDay); console.log(us); console.log(metadata); let dates = dataForDay.map((data) => data["00000"].date); let chart = createChoropleth(us, msPerFrame); document.getElementById("content").appendChild(chart.node); let day = dataForDay.length - 1; let data = dataForDay[day]; ui.display(dataForDay[day]["00000"].date); ui.setFrames(dates, day); ui.setMsPerFrame(msPerFrame); chart.update(data); ui.onTick((day) => { chart.update(dataForDay[day]); ui.display(dates[day]); }); }); }; main();