forked from github/plane
e1e9a5ed96
* dev: Helpers * dev: views * dev: Chart views Month, Year and Day * dev: Chart Workflow updates * update: scroll functionality implementation * update: data vaidation * update: date renders and issue filter in the month view * update: new date render month view * update: scroll enabled left in chart * update: Item render from the date it created. * update: width implementation in chat view * dev: chart render functionality in the gantt chart * update: month view fix * dev: chart render issues resolved * update: fixed allchat views * update: updated week view default values * update: integrated chart view in issues * update: grabble and sidebar logic impleemntation and integrated gantt in issues * update: Preview gantt chart in month view * fix: mutation in gantt chart after creating a new issue * chore: cycles and modules list gantt chart * update: Ui changes on gantt view * fix: gantt chart height, chore: remove link from issue --------- Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
139 lines
5.1 KiB
TypeScript
139 lines
5.1 KiB
TypeScript
import { useState, useRef } from "react";
|
|
|
|
export const ChartDraggable = ({ children, block, handleBlock, className }: any) => {
|
|
const [dragging, setDragging] = useState(false);
|
|
|
|
const [chartBlockPositionLeft, setChartBlockPositionLeft] = useState(0);
|
|
const [blockPositionLeft, setBlockPositionLeft] = useState(0);
|
|
const [dragBlockOffsetX, setDragBlockOffsetX] = useState(0);
|
|
|
|
const handleMouseDown = (event: any) => {
|
|
const chartBlockPositionLeft: number = block.position.marginLeft;
|
|
const blockPositionLeft: number = event.target.getBoundingClientRect().left;
|
|
const dragBlockOffsetX: number = event.clientX - event.target.getBoundingClientRect().left;
|
|
|
|
console.log("--------------------");
|
|
console.log("chartBlockPositionLeft", chartBlockPositionLeft);
|
|
console.log("blockPositionLeft", blockPositionLeft);
|
|
console.log("dragBlockOffsetX", dragBlockOffsetX);
|
|
console.log("-->");
|
|
|
|
setDragging(true);
|
|
setChartBlockPositionLeft(chartBlockPositionLeft);
|
|
setBlockPositionLeft(blockPositionLeft);
|
|
setDragBlockOffsetX(dragBlockOffsetX);
|
|
};
|
|
|
|
const handleMouseMove = (event: any) => {
|
|
if (!dragging) return;
|
|
|
|
const currentBlockPosition = event.clientX - dragBlockOffsetX;
|
|
console.log("currentBlockPosition", currentBlockPosition);
|
|
if (currentBlockPosition <= blockPositionLeft) {
|
|
const updatedPosition = chartBlockPositionLeft - (blockPositionLeft - currentBlockPosition);
|
|
console.log("updatedPosition", updatedPosition);
|
|
handleBlock({ ...block, position: { ...block.position, marginLeft: updatedPosition } });
|
|
} else {
|
|
const updatedPosition = chartBlockPositionLeft + (blockPositionLeft - currentBlockPosition);
|
|
console.log("updatedPosition", updatedPosition);
|
|
handleBlock({ ...block, position: { ...block.position, marginLeft: updatedPosition } });
|
|
}
|
|
console.log("--------------------");
|
|
};
|
|
|
|
const handleMouseUp = () => {
|
|
setDragging(false);
|
|
setChartBlockPositionLeft(0);
|
|
setBlockPositionLeft(0);
|
|
setDragBlockOffsetX(0);
|
|
};
|
|
|
|
return (
|
|
<div
|
|
onMouseDown={handleMouseDown}
|
|
onMouseMove={handleMouseMove}
|
|
onMouseUp={handleMouseUp}
|
|
className={`${className ? className : ``}`}
|
|
>
|
|
{children}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
// import { useState } from "react";
|
|
|
|
// export const ChartDraggable = ({ children, id, className = "", style }: any) => {
|
|
// const [dragging, setDragging] = useState(false);
|
|
|
|
// const [chartBlockPositionLeft, setChartBlockPositionLeft] = useState(0);
|
|
// const [blockPositionLeft, setBlockPositionLeft] = useState(0);
|
|
// const [dragBlockOffsetX, setDragBlockOffsetX] = useState(0);
|
|
|
|
// const handleDragStart = (event: any) => {
|
|
// // event.dataTransfer.setData("text/plain", event.target.id);
|
|
|
|
// const chartBlockPositionLeft: number = parseInt(event.target.style.left.slice(0, -2));
|
|
// const blockPositionLeft: number = event.target.getBoundingClientRect().left;
|
|
// const dragBlockOffsetX: number = event.clientX - event.target.getBoundingClientRect().left;
|
|
|
|
// console.log("chartBlockPositionLeft", chartBlockPositionLeft);
|
|
// console.log("blockPositionLeft", blockPositionLeft);
|
|
// console.log("dragBlockOffsetX", dragBlockOffsetX);
|
|
// console.log("--------------------");
|
|
|
|
// setDragging(true);
|
|
// setChartBlockPositionLeft(chartBlockPositionLeft);
|
|
// setBlockPositionLeft(blockPositionLeft);
|
|
// setDragBlockOffsetX(dragBlockOffsetX);
|
|
// };
|
|
|
|
// const handleDragEnd = () => {
|
|
// setDragging(false);
|
|
// setChartBlockPositionLeft(0);
|
|
// setBlockPositionLeft(0);
|
|
// setDragBlockOffsetX(0);
|
|
// };
|
|
|
|
// const handleDragOver = (event: any) => {
|
|
// event.preventDefault();
|
|
// if (dragging) {
|
|
// const scrollContainer = document.getElementById(`block-parent-${id}`) as HTMLElement;
|
|
// const currentBlockPosition = event.clientX - dragBlockOffsetX;
|
|
// console.log('currentBlockPosition')
|
|
// if (currentBlockPosition <= blockPositionLeft) {
|
|
// const updatedPosition = chartBlockPositionLeft - (blockPositionLeft - currentBlockPosition);
|
|
// console.log("updatedPosition", updatedPosition);
|
|
// if (scrollContainer) scrollContainer.style.left = `${updatedPosition}px`;
|
|
// } else {
|
|
// const updatedPosition = chartBlockPositionLeft + (blockPositionLeft - currentBlockPosition);
|
|
// console.log("updatedPosition", updatedPosition);
|
|
// if (scrollContainer) scrollContainer.style.left = `${updatedPosition}px`;
|
|
// }
|
|
// console.log("--------------------");
|
|
// }
|
|
// };
|
|
|
|
// const handleDrop = (event: any) => {
|
|
// event.preventDefault();
|
|
// setDragging(false);
|
|
// setChartBlockPositionLeft(0);
|
|
// setBlockPositionLeft(0);
|
|
// setDragBlockOffsetX(0);
|
|
// };
|
|
|
|
// return (
|
|
// <div
|
|
// id={id}
|
|
// draggable
|
|
// onDragStart={handleDragStart}
|
|
// onDragEnd={handleDragEnd}
|
|
// onDragOver={handleDragOver}
|
|
// onDrop={handleDrop}
|
|
// className={`${className} ${dragging ? "dragging" : ""}`}
|
|
// style={style}
|
|
// >
|
|
// {children}
|
|
// </div>
|
|
// );
|
|
// };
|