我有这个新库,我想知道是否有人可以帮助我将这个类组件用于反应功能组件。我正在尝试包含它,并且我的所有代码都使用 hooks 和新版本的 React,所以我想继续从事这项工作,但是这家公司还没有 RFC,所以当我开始尝试我自己转换它,我想得到一些帮助,所以我尽可能减少错误。
这来自 dhtmlx 库,它基本上是一个甘特图,我需要将其包含在我们的一个项目中。任何帮助将不胜感激,所以提前感谢!
import React, { Component } from 'react';
import { gantt } from 'dhtmlx-gantt';
import 'dhtmlx-gantt/codebase/dhtmlxgantt.css';
export default class Gantt extends Component {
constructor(props) {
super(props);
this.initZoom();
}
// instance of gantt.dataProcessor
dataProcessor = null;
initZoom() {
gantt.ext.zoom.init({
levels: [
{
name: 'Hours',
scale_height: 60,
min_column_width: 30,
scales: [
{ unit: 'day', step: 1, format: '%d %M' },
{ unit: 'hour', step: 1, format: '%H' }
]
},
{
name: 'Days',
scale_height: 60,
min_column_width: 70,
scales: [
{ unit: 'week', step: 1, format: 'Week #%W' },
{ unit: 'day', step: 1, format: '%d %M' }
]
},
{
name: 'Months',
scale_height: 60,
min_column_width: 70,
scales: [
{ unit: "month", step: 1, format: '%F' },
{ unit: 'week', step: 1, format: '#%W' }
]
}
]
});
}
setZoom(value) {
gantt.ext.zoom.setLevel(value);
}
initGanttDataProcessor() {
/**
* type: "task"|"link"
* action: "create"|"update"|"delete"
* item: data object object
*/
const onDataUpdated = this.props.onDataUpdated;
this.dataProcessor = gantt.createDataProcessor((type, action, item, id) => {
return new Promise((resolve, reject) => {
if (onDataUpdated) {
onDataUpdated(type, action, item, id);
}
// if onDataUpdated changes returns a permanent id of the created item, you can return it from here so dhtmlxGantt could apply it
// resolve({id: databaseId});
return resolve();
});
});
}
shouldComponentUpdate(nextProps) {
return this.props.zoom !== nextProps.zoom;
}
componentDidMount() {
gantt.config.xml_date = "%Y-%m-%d %H:%i";
const { tasks } = this.props;
gantt.init(this.ganttContainer);
this.initGanttDataProcessor();
gantt.parse(tasks);
}
componentWillUnmount() {
if (this.dataProcessor) {
this.dataProcessor.destructor();
this.dataProcessor = null;
}
}
render() {
const { zoom } = this.props;
this.setZoom(zoom);
return (
<div
ref={(input) => { this.ganttContainer = input }}
style={{ width: '100%', height: '100%' }}
></div>
);
}
}