From 1ebcecf640987194a9c438e5503d82b2a3dde965 Mon Sep 17 00:00:00 2001 From: brausjonas Date: Fri, 5 May 2023 14:00:36 +0200 Subject: [PATCH] Simple Resize System Man kann erstellte Termine nach oben und unter resizen --- anwendung/src/components/CalenderView.jsx | 156 +++++++++++++++++----- anwendung/src/styles/globals.css | 10 +- 2 files changed, 133 insertions(+), 33 deletions(-) diff --git a/anwendung/src/components/CalenderView.jsx b/anwendung/src/components/CalenderView.jsx index 3cee429..213d8b4 100644 --- a/anwendung/src/components/CalenderView.jsx +++ b/anwendung/src/components/CalenderView.jsx @@ -1,44 +1,100 @@ import {useEffect, useState} from "react"; import {CalenderEntry} from "@/components/CalenderEntry"; -let entries = {mo:[], tu:[], we:[], th:[], fr:[], sa:[]} +let entries = {mo: [], tu: [], we: [], th: [], fr: [], sa: []} +let grabbedStartRow = -1; +let grabbedUp = false; +let mouseDown = false; export default function CalenderView(p) { const [t, setT] = useState(false) - function mouse_click(e) { + function mouse_up(e) + { + mouseDown = false; let y_window = e.clientY; - let y_target_offset = e.target.getBoundingClientRect().top; - let row = Math.floor((y_window - y_target_offset) / 10)+1 - if(row <= 98 && row > 3) { - let current_list = entries[e.currentTarget.id]; - let free = true; + let y_target_offset = e.currentTarget.getBoundingClientRect().top; + let row = Math.floor((y_window - y_target_offset) / 10) + 1 + let current_list = entries[e.currentTarget.id]; + + if (grabbedStartRow > -1) + { for(let i = 0; i < current_list.length; i++) { let current = current_list[i]; - - for(let r = row; r < row + 2; r++) + if(current.start_point === grabbedStartRow) { - for(let s = current.start_point; s < current.end_point; s++) + if(grabbedUp) { - if (s === r) - { - free = false; - break; + current.start_point = row; + } + else + { + current.end_point = row; + } + break; + } + } + grabbedStartRow = -1; + } + + setT(!t); + } + + function mouse_down(e) { + + mouseDown = true; + let y_window = e.clientY; + let y_target_offset = e.currentTarget.getBoundingClientRect().top; + let row = Math.floor((y_window - y_target_offset) / 10) + 1 + + if(e.target.id === "grab") + { + let entry = e.target.parentElement; + let rowStart= parseInt(window.getComputedStyle(entry).gridRowStart); + + if(row === rowStart) + { + grabbedStartRow = rowStart; + grabbedUp = true; + } + else + { + grabbedStartRow = rowStart; + grabbedUp = false; + } + } + else if(e.target.id === "entry") + { + + } + else + { + if (row <= 98 && row > 3) { + let current_list = entries[e.currentTarget.id]; + let free = true; + for (let i = 0; i < current_list.length; i++) { + let current = current_list[i]; + + for (let r = row; r < row + 2; r++) { + for (let s = current.start_point; s < current.end_point; s++) { + if (s === r) { + free = false; + break; + } } } } - } - if(free) { - current_list.push(new CalenderEntry(row, row + 2)); - setT(!t); + if (free) { + current_list.push(new CalenderEntry(row, row + 2)); + setT(!t); + } } } } - function internal_to_time(internal) - { + function internal_to_time(internal) { internal -= 4 internal /= 4 let integer = Math.floor(internal) @@ -51,49 +107,85 @@ export default function CalenderView(p) { return (
-
+
Montag
- {entries["mo"].map(d => (
+ {entries["mo"].map(d => (
+

{internal_to_time(d.start_point)}

{internal_to_time(d.end_point)}

+
))}
-
+
Dienstag
- {entries["tu"].map(d => (
+ {entries["tu"].map(d => (
+

{internal_to_time(d.start_point)}

{internal_to_time(d.end_point)}

+
))}
-
+
Mittwoch
- {entries["we"].map(d => (
+ {entries["we"].map(d => (
+

{internal_to_time(d.start_point)}

{internal_to_time(d.end_point)}

+
))}
-
+
Donnerstag
- {entries["th"].map(d => (
+ {entries["th"].map(d => (
+

{internal_to_time(d.start_point)}

{internal_to_time(d.end_point)}

+
))}
-
+
Freitag
- {entries["fr"].map(d => (
+ {entries["fr"].map(d => (
+

{internal_to_time(d.start_point)}

{internal_to_time(d.end_point)}

+
))}
-
+
Samstag
- {entries["sa"].map(d => (
+ {entries["sa"].map(d => (
+

{internal_to_time(d.start_point)}

{internal_to_time(d.end_point)}

+
))}
diff --git a/anwendung/src/styles/globals.css b/anwendung/src/styles/globals.css index 07d049b..aa72904 100644 --- a/anwendung/src/styles/globals.css +++ b/anwendung/src/styles/globals.css @@ -211,6 +211,7 @@ Calender View justify-content: stretch; gap: 2px; padding: 2px; + user-select: none; } .calender-view .spalte @@ -245,10 +246,17 @@ Calender View display: flex; flex-direction: column; justify-content: space-between; - padding: 2px; + padding: 0px 2px; align-items: center; } +.entry .resize-grab +{ + height: 3px; + cursor: row-resize; + width: 100%; +} + .entry p { color: white;