Untitled

mail@pastecode.io avatar
unknown
typescript
3 years ago
2.4 kB
24
Indexable
Never
import React, { PureComponent } from 'react';
import { createChart, IChartApi, ISeriesApi } from 'lightweight-charts';
import Papa from 'papaparse';
import { useSelector, useDispatch, connect } from 'react-redux';
import LineData from '../interfaces/LineData';
import { RootState } from '..';
import { setData } from '../redux/actions';

class MyChart extends PureComponent {
    csvData: any[] = [];
    chart: IChartApi | null = null;

    async componentDidMount() {
        const chart = createChart(document.body, { width: 800, height: 600 });
        this.chart = chart;

        const lineSeries = chart.addLineSeries();

        this.initLineSeries(chart, lineSeries);
    }

    componentWillUnmount() {
        if (this.chart !== null) {
            this.chart.remove();
            this.chart = null;
        }
    }

    initLineSeries(chart: IChartApi, lineSeries: ISeriesApi<"Line">) {
        //read csv
        Papa.parse("http://localhost:3000/data.csv", {
            download: true,
            complete: result => {
                var data: LineData[] = [];

                result.data.forEach(e => {
                    var row = e as string[];
                    var time: string = row[0];
                    var value: number = +row[1];
                    data.push({ time: time, value: value });
                });

                //nefunguje - radek 44 chyba: React Hook "useDispatch" is called in function "complete" that is neither a React function component nor a custom React Hook function. React component names must start with an uppercase letter  react-hooks/rules-of-hooks
                const dispatch = useDispatch();
                dispatch(setData);

                //nefunguje - radek 48 stejna chyba jako 44
                const storeData = useSelector((state: RootState) => state.chartData);
                lineSeries.setData(storeData);

                chart.timeScale().setVisibleRange({
                    from: data[0].time,
                    to: data[data.length - 1].time,
                });
            }
        });
    }

    render() {
        return (
            <div
                id='lightweight_chart_container'
                className={'LightweightChart'}
            />
        );
    }
}

export default MyChart;