Home  >  Q&A  >  body text

Place Gantt chart elements with the same field value on one row

I can’t buy anything

Please take a look at the picture I have attached below Gantt chart

And I already have all the values ​​to display this chart, even the result is like this, as shown in the second picture: MyGantt chart

But, this is not what I want.

This is what I mean: look at the second picture and you will see the names machine 1, machine 2 etc. So, they are duplicates, but I need the values ​​with the same machine_id to be grouped and displayed on the same row in the graph. Initially, it was not known how many such machines there were, nor how many elements there were in each such group -> All this data was later obtained from axios with the following code:

import axios from 'axios';
import React, { useState, useEffect, useRef } from 'react';
import '../App.css'
import { Chart } from "react-google-charts";


const GanttChartForJob = () => {
    const [data, setData] = useState([]);

    // useEffect(() => {
    //     axios.get('http://127.0.0.1:8000/result/')
    //         .then(response => {
    //             setData(response.data);
    //         })
    //         .catch(error => {
    //             console.error(error);
    //         });
    // }, []);
    useEffect(() => {
        const fetchData = async () => {
            const result = await axios(
                'http://127.0.0.1:8000/result/',
            );
            setData(result.data);
        };
        fetchData();
    }, []);

    useEffect(() => {
        const handleResize = () => {
            setWidth(containerRef.current.offsetWidth);
            setHeight(containerRef.current.offsetHeight);
        };
        window.addEventListener('resize', handleResize);
        handleResize();
        return () => window.removeEventListener('resize', handleResize);
    }, []);

    const containerRef = useRef(null);

    const options = {

    };

    const transformedData = data.map(item => ({
        id: item.id,
        name: item.name_machine,
        start: item.T_i,
        end: item.T_c,
        progress: item.processing_times,
        bar: { group: item.machine_id }
    }));

    return (
        <div ref={containerRef} className='container'>
            <Chart
                width={'100%'}
                height={'1000px'}
                chartType="Gantt"
                loader={<div>Loading Chart</div>}
                data={[
                    [
                        { type: 'string', label: 'Task ID' },
                        { type: 'string', label: 'Task Name' },
                        { type: 'date', label: 'Start Date' },
                        { type: 'date', label: 'End Date' },
                        { type: 'number', label: 'Duration' },
                        { type: 'number', label: 'Percent Complete' },
                        { type: 'string', label: 'Dependencies' },
                    ],
                    ...transformedData.map(item => [
                        item.id.toString(),
                        item.name,
                        new Date(item.start),
                        new Date(item.end),
                        null,
                        item.progress,
                        null,
                    ]),
                ]}
                rootProps={{ 'data-testid': '1' }}
                className='table-container'
            >
                <table className='table'></table>
            </Chart>
        </div>
    );
};

export default GanttChartForJob;

Can you help me? Or maybe you know someone who knows this and can help me? ​​

P粉930448030P粉930448030213 days ago384

reply all(1)I'll reply

  • P粉293550575

    P粉2935505752024-02-22 14:25:00

    You can try Timeline chart.

    Code Sandbox: https://codesandbox.io/s/ agitated-kowalevski-i3mlj6?file=/App.tsx

    reply
    0
  • Cancelreply