Yagr dashboard

by Dat

HTML

<script src="https://unpkg.com/@gravity-ui/[email protected]/dist/yagr.iife.js"></script>
<link rel="stylesheet" href="https://unpkg.com/@gravity-ui/[email protected]/dist/index.css" />


        <h1>Highload Dashboard (500 points X 200 lines) <button id="reload">reload</button></h1>
        <div class="grid">
            <div id="chart11" class="container left"></div>
            <div id="chart12" class="container mid"></div>
            <div id="chart13" class="container right"></div>
        </div>

        <div class="grid">
            <div id="chart21" class="container left"></div>
            <div id="chart22" class="container mid"></div>
            <div id="chart23" class="container right"></div>
        </div>

        <div class="grid">
            <div id="chart31" class="container left"></div>
            <div id="chart32" class="container mid"></div>
            <div id="chart33" class="container right"></div>
        </div>

        <div class="grid">
            <div id="chart41" class="container left"></div>
            <div id="chart42" class="container mid"></div>
            <div id="chart43" class="container right"></div>
        </div>

CSS

.container {
                border: solid 1px #999;
                border-radius: 4px;
            }
            .grid {
                height: 300px;
                display: flex;
                width: 100%;
                flex-direction: row;
                gap: 8px;
                justify-content: space-between;
                margin-bottom: 8px;;
            }

JavaScript

let charts = []
            for (let r = 1; r <= 4; r++) {
                for(let c = 1; c <= 3; c++) {
                    const chart = document.getElementById(`chart${r}${c}`);
                    
                    const randomizer = (r + c) * 10;
                    const fn = (r + c) % 2 ? Math.sin : Math.tan;

                    charts.push(new Yagr(chart, {
                        timeline: new Array(500).fill().map((_, i) => i * 5),
                        series: new Array(200).fill().map((_, i) => ({
                            data: new Array(500).fill().map((_, j) => fn((j * 5 + i) / randomizer) * 5 + 2.5),
                            // randomColor
                            color: `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${
                                Math.random() * 255
                            })`,
                            width: 1,
                        })),
                    }));
                }
            }

            reload.onclick = () => {
                charts.forEach(chart => {
                    const randomizer = Math.random() * 100;
                    const fn = Math.random() > 0.5 ? Math.sin : Math.tan;
                    chart.setConfig({
                        series: new Array(200).fill().map((_, i) => ({
                            data: new Array(500).fill().map((_, j) => fn((j * 5 + i) / randomizer) * 5 + 2.5),
                        })),
                    });
                })
            }