Is it possible to turn your lib into react component?
Opened this issue · 2 comments
It would be perfect if you could turn your lib into react component.
I agree and put in a second vote. In the meantime I hacked this together to get it to work for my purposes.
`import React, { Component } from "react";
import * as gantt from "gantt";
const data = [
{
id: 1,
type: "group",
text: "1 Waterfall model",
start: new Date("2018-10-10T09:24:24.319Z"),
end: new Date("2018-12-12T09:32:51.245Z"),
percent: 0.1,
links: [],
},
{
id: 11,
parent: 1,
type: "group",
text: "1.1 Requirements",
start: new Date("2018-10-21T09:24:24.319Z"),
end: new Date("2018-11-22T01:01:08.938Z"),
percent: 0.29,
links: [
{
target: 12,
type: "FS",
},
],
},
{
id: 12,
parent: 1,
text: "1.2 Design",
start: new Date("2018-11-05T09:24:24.319Z"),
end: new Date("2019-01-12T09:32:51.245Z"),
percent: 0.78,
},
];
class Gantt extends Component {
myRef: any;
constructor(props: any) {
super(props);
this.myRef = React.createRef();
}
componentDidMount() {
const strGantt = new gantt.SVGGantt("#gantt", data, {
viewMode: "week",
});
strGantt.render();
}
render() {
return <div id="gantt" style={{ overflowY: "hidden" }} ref={this.myRef} />;
}
}
export default Gantt;
`
Here was my approach. Functional component implementation.
import React, { createRef, useEffect, useMemo } from "react";
import { StrGantt } from 'gantt';
export default function Gantt ({ data }) {
const ganttRef = createRef();
const gantt = useMemo(() => {
return new StrGantt(data, {
viewMode: 'week'
});
}, [data]);
useEffect(() => {
ganttRef.current.innerHTML = gantt.render();
});
useEffect(() => {
gantt.setData(data)
}, [data, gantt]);
return <div style={{ overflowX: "scroll" }} ref={ganttRef} />;
};