Aktueller Stand
This commit is contained in:
@@ -1067,12 +1067,16 @@ export default function CalendarBoard() {
|
||||
onDragEnter={() => onDragEnter("calendar")}
|
||||
onDrop={(event) => onDrop(event, "calendar")}
|
||||
>
|
||||
<div className="mb-3 flex items-center justify-between">
|
||||
<div
|
||||
className={`flex items-center justify-between ${
|
||||
collapsed.calendar ? "" : "mb-3"
|
||||
}`}
|
||||
>
|
||||
<h3 className="text-sm font-semibold text-slate-700">Kalender</h3>
|
||||
<div className="flex items-center gap-2">
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-full border border-slate-200 px-2 py-1 text-xs text-slate-600"
|
||||
className="rounded-full border border-slate-200 p-2 text-slate-600"
|
||||
onClick={() => toggleCollapse("calendar")}
|
||||
aria-label={collapsed.calendar ? "Kalender aufklappen" : "Kalender zuklappen"}
|
||||
title={collapsed.calendar ? "Aufklappen" : "Zuklappen"}
|
||||
@@ -1126,7 +1130,7 @@ export default function CalendarBoard() {
|
||||
{data?.user && (
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-full border border-slate-200 bg-white/80 px-2 py-0.5 text-xs text-slate-600 hover:bg-slate-100"
|
||||
className="rounded-full border border-slate-200 bg-white/70 px-2 py-0.5 text-[11px] font-medium text-slate-500 hover:bg-slate-100"
|
||||
aria-label={`Termin am ${arg.date.toLocaleDateString("de-DE")} anlegen`}
|
||||
onClick={(event) => {
|
||||
event.preventDefault();
|
||||
@@ -1134,7 +1138,7 @@ export default function CalendarBoard() {
|
||||
openFormForDate(arg.date);
|
||||
}}
|
||||
>
|
||||
+
|
||||
+Termin
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
@@ -1227,12 +1231,16 @@ export default function CalendarBoard() {
|
||||
onDragEnter={() => onDragEnter("map")}
|
||||
onDrop={(event) => onDrop(event, "map")}
|
||||
>
|
||||
<div className="mb-3 flex items-center justify-between">
|
||||
<div
|
||||
className={`flex items-center justify-between ${
|
||||
collapsed.map ? "" : "mb-3"
|
||||
}`}
|
||||
>
|
||||
<h3 className="text-sm font-semibold text-slate-700">Karte</h3>
|
||||
<div className="flex items-center gap-2">
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-full border border-slate-200 px-2 py-1 text-xs text-slate-600"
|
||||
className="rounded-full border border-slate-200 p-2 text-slate-600"
|
||||
onClick={() => toggleCollapse("map")}
|
||||
aria-label={collapsed.map ? "Karte aufklappen" : "Karte zuklappen"}
|
||||
title={collapsed.map ? "Aufklappen" : "Zuklappen"}
|
||||
@@ -1241,10 +1249,23 @@ export default function CalendarBoard() {
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-full border border-slate-200 px-2 py-1 text-xs text-slate-600"
|
||||
className="rounded-full border border-slate-200 p-2 text-slate-600"
|
||||
onClick={() => setMapFullscreen(true)}
|
||||
aria-label="Karte im Vollbild öffnen"
|
||||
title="Vollbild"
|
||||
>
|
||||
Vollbild
|
||||
<svg
|
||||
viewBox="0 0 24 24"
|
||||
className="h-4 w-4"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeWidth="2"
|
||||
>
|
||||
<path d="M4 9V4h5" strokeLinecap="round" strokeLinejoin="round" />
|
||||
<path d="M20 9V4h-5" strokeLinecap="round" strokeLinejoin="round" />
|
||||
<path d="M4 15v5h5" strokeLinecap="round" strokeLinejoin="round" />
|
||||
<path d="M20 15v5h-5" strokeLinecap="round" strokeLinejoin="round" />
|
||||
</svg>
|
||||
</button>
|
||||
<div
|
||||
className="drag-handle"
|
||||
@@ -1448,7 +1469,7 @@ export default function CalendarBoard() {
|
||||
<div className="flex items-center gap-2">
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-full border border-slate-200 px-2 py-1 text-xs text-slate-600"
|
||||
className="rounded-full border border-slate-200 p-2 text-slate-600"
|
||||
onClick={() => toggleCollapse("list")}
|
||||
aria-label={collapsed.list ? "Termine aufklappen" : "Termine zuklappen"}
|
||||
title={collapsed.list ? "Aufklappen" : "Zuklappen"}
|
||||
@@ -1523,45 +1544,41 @@ export default function CalendarBoard() {
|
||||
</div>
|
||||
{isAdmin && (
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-full border border-slate-200 px-3 py-1 text-xs text-slate-700"
|
||||
onClick={() => toggleSelectAllVisible(true)}
|
||||
disabled={displayedEvents.length === 0}
|
||||
>
|
||||
Alle markieren
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-full border border-slate-200 px-3 py-1 text-xs text-slate-700"
|
||||
onClick={() => toggleSelectAllVisible(false)}
|
||||
disabled={bulkSelection.size === 0}
|
||||
>
|
||||
Auswahl löschen
|
||||
</button>
|
||||
<span className="text-xs text-slate-500">
|
||||
{bulkSelection.size} ausgewählt
|
||||
</span>
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-full border border-red-200 p-2 text-red-600"
|
||||
onClick={deleteSelectedEvents}
|
||||
disabled={bulkSelection.size === 0}
|
||||
aria-label="Ausgewählte löschen"
|
||||
>
|
||||
<svg
|
||||
viewBox="0 0 24 24"
|
||||
className="h-4 w-4"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeWidth="2"
|
||||
{bulkSelection.size > 0 && (
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-full border border-slate-200 px-3 py-1 text-xs text-slate-700"
|
||||
onClick={() => toggleSelectAllVisible(false)}
|
||||
>
|
||||
<path d="M3 6h18" strokeLinecap="round" />
|
||||
<path d="M8 6V4h8v2" strokeLinecap="round" />
|
||||
<path d="M19 6l-1 14H6L5 6" strokeLinecap="round" />
|
||||
<path d="M10 11v6M14 11v6" strokeLinecap="round" />
|
||||
</svg>
|
||||
</button>
|
||||
Auswahl löschen
|
||||
</button>
|
||||
)}
|
||||
{bulkSelection.size > 0 && (
|
||||
<span className="text-xs text-slate-500">
|
||||
{bulkSelection.size} ausgewählt
|
||||
</span>
|
||||
)}
|
||||
{bulkSelection.size > 0 && (
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-full border border-red-200 p-2 text-red-600"
|
||||
onClick={deleteSelectedEvents}
|
||||
aria-label="Ausgewählte löschen"
|
||||
>
|
||||
<svg
|
||||
viewBox="0 0 24 24"
|
||||
className="h-4 w-4"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeWidth="2"
|
||||
>
|
||||
<path d="M3 6h18" strokeLinecap="round" />
|
||||
<path d="M8 6V4h8v2" strokeLinecap="round" />
|
||||
<path d="M19 6l-1 14H6L5 6" strokeLinecap="round" />
|
||||
<path d="M10 11v6M14 11v6" strokeLinecap="round" />
|
||||
</svg>
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
@@ -1847,10 +1864,12 @@ export default function CalendarBoard() {
|
||||
)}
|
||||
<button
|
||||
type="button"
|
||||
className="text-sm text-slate-600"
|
||||
className="rounded-full border border-slate-200 p-2 text-slate-600 hover:bg-slate-100"
|
||||
onClick={() => setDetailsEvent(null)}
|
||||
aria-label="Schließen"
|
||||
title="Schließen"
|
||||
>
|
||||
Schließen
|
||||
<IconClose />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1968,13 +1987,15 @@ export default function CalendarBoard() {
|
||||
<h3 className="text-lg font-semibold">Termin bearbeiten</h3>
|
||||
<button
|
||||
type="button"
|
||||
className="text-sm text-slate-600"
|
||||
className="rounded-full border border-slate-200 p-2 text-slate-600 hover:bg-slate-100"
|
||||
onClick={() => {
|
||||
setIsEditOpen(false);
|
||||
setEditEvent(null);
|
||||
}}
|
||||
aria-label="Schließen"
|
||||
title="Schließen"
|
||||
>
|
||||
Schließen
|
||||
<IconClose />
|
||||
</button>
|
||||
</div>
|
||||
<form onSubmit={updateEvent} className="mt-4 space-y-3">
|
||||
@@ -2117,10 +2138,12 @@ export default function CalendarBoard() {
|
||||
<h3 className="text-lg font-semibold">Karte</h3>
|
||||
<button
|
||||
type="button"
|
||||
className="text-sm text-slate-600"
|
||||
className="rounded-full border border-slate-200 p-2 text-slate-600 hover:bg-slate-100"
|
||||
onClick={() => setMapFullscreen(false)}
|
||||
aria-label="Schließen"
|
||||
title="Schließen"
|
||||
>
|
||||
Schließen
|
||||
<IconClose />
|
||||
</button>
|
||||
</div>
|
||||
<div className="mt-3 flex flex-wrap items-center gap-2 text-xs text-slate-600">
|
||||
@@ -2454,6 +2477,14 @@ function IconGrip() {
|
||||
);
|
||||
}
|
||||
|
||||
function IconClose() {
|
||||
return (
|
||||
<svg viewBox="0 0 24 24" className="h-4 w-4" fill="none" stroke="currentColor" strokeWidth="2">
|
||||
<path d="M6 6l12 12M18 6l-12 12" strokeLinecap="round" />
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
function IconChevronDown() {
|
||||
return (
|
||||
<svg viewBox="0 0 24 24" className="h-4 w-4" fill="none" stroke="currentColor" strokeWidth="2">
|
||||
|
||||
Reference in New Issue
Block a user