Skip to content

Commit 61367cc

Browse files
added draggable box
1 parent 3a6ea96 commit 61367cc

1 file changed

Lines changed: 33 additions & 26 deletions

File tree

DailyTasksApp/src/App.jsx

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,21 @@ import data from './assets.json'
88
import Header from './components/Header'
99
import SideBar from './components/SideBar'
1010
// const ResponsiveGridLayout = WidthProvider(Responsive);
11-
11+
const layout = [
12+
{ i: "a", x: 0, y: 0, w: 1, h: 1 },
13+
{ i: "b", x: 1, y: 0, w: 1, h: 1 },
14+
{ i: "c", x: 2, y: 6, w: 3, h: 1 },
15+
{ i: "d", x: 3, y: 0, w: 1, h: 1 },
16+
{ i: "e", x: 4, y: 0, w: 1, h: 1 },
17+
{ i: "f", x: 5, y: 0, w: 1, h: 1 },
18+
{ i: "g", x: 6, y: 0, w: 1, h: 1 },
19+
{ i: "h", x: 3, y: 3, w: 1, h: 1 }
20+
];
1221
function App() {
1322
const [currentDimensions, setCurrentDimensions] = useState({ w: 5, h: 2 })
14-
console.log('hi')
15-
const layout = [
16-
{ i: "a", x: 0, y: 0, w: 1, h: 1 },
17-
{ i: "b", x: 1, y: 0, w: 1, h: 1 },
18-
{ i: "c", x: 2, y: 6, w: 3, h: 1 },
19-
{ i: "d", x: 3, y: 0, w: 1, h: 1 },
20-
{ i: "e", x: 4, y: 0, w: 1, h: 1 },
21-
{ i: "f", x: 5, y: 0, w: 1, h: 1 },
22-
{ i: "g", x: 6, y: 0, w: 1, h: 1 },
23-
{ i: "h", x: 3, y: 3, w: 1, h: 1 }
24-
];
23+
const [staticLayout, setStaticLayout] = useState(layout)
24+
const [taskName, setTaskName] = useState("")
25+
2526
function getDroppingItem() {
2627
return {
2728
i: layout.length,
@@ -31,27 +32,29 @@ function App() {
3132
h: 2,
3233
}
3334
}
35+
const onDrop = (layout, layoutItem, _event) => {
36+
console.log(layoutItem)
37+
layoutItem.i = taskName
38+
setStaticLayout([...staticLayout, layoutItem])
39+
alert(`Dropped element props:\n${JSON.stringify(layoutItem, ['x', 'y', 'w', 'h'], 2)}`);
40+
};
3441
return (
3542
<>
3643
<div
3744
className="droppable-element"
3845
draggable={true}
39-
unselectable="on"
40-
// this is a hack for firefox
41-
// Firefox requires some kind of initialization
42-
// which we can do by adding this attribute
43-
// @see https://bugzilla.mozilla.org/show_bug.cgi?id=568313
44-
onDragStart={(e) => {
45-
e.dataTransfer.setData("text/plain", "");
46-
}}
46+
// unselectable="on"
47+
// onDragStart={(e) => {
48+
// e.dataTransfer.setData("text/plain", "");
49+
// }}
4750
>
4851
(Drag me!)
4952
</div>
53+
<input type="text" onChange={(e) => setTaskName(e.target.value)} />
5054
<div className="app">
5155
<Header />
5256
<div className='wrapper'>
5357
<SideBar data={data} />
54-
{/* <List data={ data } /> */}
5558
<div className="days-container">
5659
<div className="days">
5760
<p>Monday</p>
@@ -70,18 +73,22 @@ function App() {
7073
cols={12}
7174
rowHeight={30}
7275
width={1200}
73-
droppingItem= {{ i: "z", w: 2, h: 2 }}
76+
// droppingItem= {{ i: "z", w: 2, h: 2 }}
7477
// This turns off compaction so you can place items wherever.
7578
verticalCompact={false}
76-
preventCollision= {true}
79+
// preventCollision= {false}
7780
// preventCollision={!this.state.compactType}
7881
isDroppable={true}
7982
draggable={true}
80-
onDropDragOver= {(e) => ({ i: layout.length, w:2, h:1 }) }
83+
// onDropDragOver= {(e) => ({ i: layout.length, w:2, h:1 }) }
84+
onDrop={onDrop}
8185

8286

8387
>
84-
<div key="a" data-grid={{ x: 0, y: 0, w: 2, maxW: 3, h: 1 }}>a</div>
88+
{staticLayout.map (n => (
89+
<div key={n.i} data-grid={{ x: n.x, y: n.y, w: n.w, maxW: 3, h: n.h }}>{n.i}</div>
90+
))}
91+
{/* <div key="a" data-grid={{ x: 0, y: 0, w: 2, maxW: 3, h: 1 }}>a</div>
8592
<div key="b" data-grid={{ x: 1, y: 4, w: 3, maxW: 3, h: 1 }}>Saturday</div>
8693
<div key="c" data-grid={{ x: 2, y: 6, w: 1, maxW: 3, h: 1 }}>c</div>
8794
<div key="d" data-grid={{ x: 3, y: 6, w: 1, maxW: 3, h: 1 }}>d</div>
@@ -90,7 +97,7 @@ function App() {
9097
<div key="g" data-grid={{ x: 3, y: 3, w: 1, maxW: 3, h: 1 }}>g</div>
9198
<div key="h" data-grid={{ x: 1, y: 6, w: 1, maxW: 3, h: 1 }}>h</div>
9299
<div key="i" data-grid={{ x: 0, y: 6, w: 1, maxW: 3, h: 1 }}>i</div>
93-
<div key="j" data-grid={{ x: 0, y: 7, w: 1, maxW: 3, h: 1 }}>New Item</div>
100+
<div key="j" data-grid={{ x: 0, y: 7, w: 1, maxW: 3, h: 1 }}>New Item</div> */}
94101
</GridLayout>
95102
</div>
96103
</div>

0 commit comments

Comments
 (0)