fix(dashboard): Resize-Griff war unsichtbar - children-Injection landete in falscher Ebene
CI / backend-tests (push) Failing after 2m7s
CI / frontend-build (push) Successful in 20s

react-grid-layout/react-resizable hängt den Resize-Griff per children-Injection an (cloneElement(child, {}, ...child.props.children, handle)) - erwartet einen DIREKTEN Kindknoten der Grid-Item-Wurzel (CSS ".react-grid-item > .react-resizable-handle"). TileFrame rendere "children" bisher nur verschachtelt in CardContent, die CSS-Regel griff dort nicht - Griff blieb unsichtbar/nicht greifbar. Fix: eigener Kachel-Inhalt läuft jetzt über eine separate "inhalt"-Prop, "children" (das react-grid-layout für den Griff nutzt) wird direkt unter Card gerendert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-07 14:07:19 +02:00
co-authored by Claude Sonnet 5
parent 52936245e1
commit 6db571f5ce
4 changed files with 40 additions and 6 deletions
+14
View File
@@ -6644,3 +6644,17 @@ Keine Commits in dieser Session.
- frontend/src/styles/global.css | 7 +++++++ - frontend/src/styles/global.css | 7 +++++++
--- ---
## 2026-09-07 13:55 13:58 (2m)
**Beschreibung:** Claude Code Session
**Projekt:** asb-material
### Commits
- 5293624 fix(dashboard): Grid kollabierte auf Content-Breite, Kachel-Titel liefen ab
### Geänderte Dateien
- DEVLOG.md | 42 ++++++++++++++++++++++++++++++++++++++++++
- frontend/src/components/ui/card.tsx | 8 ++++++--
- frontend/src/pages/dashboard/tiles/EinsatzbereitschaftTile.tsx | 2 +-
- frontend/src/styles/global.css | 2 ++
---
+14
View File
@@ -613,3 +613,17 @@ Keine Commits in dieser Session.
- frontend/src/settings/startseite.ts | 30 - - frontend/src/settings/startseite.ts | 30 -
--- ---
## 2026-09-07 13:59 14:02 (3m)
**Beschreibung:** Claude Code Session
**Projekt:** asb-material
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 42 ++++++++++++++++++++++++++++++++++++++++++
- frontend/src/components/ui/card.tsx | 8 ++++++--
- frontend/src/pages/dashboard/tiles/EinsatzbereitschaftTile.tsx | 2 +-
- frontend/src/styles/global.css | 2 ++
---
@@ -297,9 +297,8 @@ export function DashboardPage() {
bearbeitenAktiv={bearbeitenModus} bearbeitenAktiv={bearbeitenModus}
ausgeblendet={ausgeblendet} ausgeblendet={ausgeblendet}
onAusblendenUmschalten={() => ausblendenUmschalten(id)} onAusblendenUmschalten={() => ausblendenUmschalten(id)}
> inhalt={inhalt}
{inhalt} />
</TileFrame>
); );
})} })}
</GridLayout> </GridLayout>
+10 -3
View File
@@ -18,14 +18,20 @@ interface Props extends HTMLAttributes<HTMLDivElement> {
bearbeitenAktiv: boolean; bearbeitenAktiv: boolean;
ausgeblendet: boolean; ausgeblendet: boolean;
onAusblendenUmschalten: () => void; onAusblendenUmschalten: () => void;
children: ReactNode; /** Eigentlicher Kachel-Inhalt. Bewusst NICHT "children" - react-grid-layout
* hängt seinen Resize-Griff über eine children-Injection an (siehe
* react-resizable), das erwartet einen DIREKTEN Kindknoten der Grid-Item-
* Wurzel (CSS-Regel ".react-grid-item > .react-resizable-handle"). Würde
* "children" hier in CardContent verschachtelt landen, träfe die Regel
* nicht und der Griff wäre unsichtbar/nicht greifbar. */
inhalt: ReactNode;
} }
// forwardRef + generische DOM-Props nötig, react-grid-layout reicht Style/Events // forwardRef + generische DOM-Props nötig, react-grid-layout reicht Style/Events
// (Drag/Resize-Handler) direkt an die Kachel-Wurzel durch. // (Drag/Resize-Handler) direkt an die Kachel-Wurzel durch.
export const TileFrame = memo( export const TileFrame = memo(
forwardRef<HTMLDivElement, Props>(function TileFrame( forwardRef<HTMLDivElement, Props>(function TileFrame(
{ title, akzent = "neutral", bearbeitenAktiv, ausgeblendet, onAusblendenUmschalten, children, className, ...rest }, { title, akzent = "neutral", bearbeitenAktiv, ausgeblendet, onAusblendenUmschalten, inhalt, children, className, ...rest },
ref ref
) { ) {
return ( return (
@@ -54,7 +60,8 @@ export const TileFrame = memo(
</Button> </Button>
)} )}
</CardHeader> </CardHeader>
{!ausgeblendet && <CardContent className="min-h-0 flex-1 overflow-auto">{children}</CardContent>} {!ausgeblendet && <CardContent className="min-h-0 flex-1 overflow-auto">{inhalt}</CardContent>}
{children}
</Card> </Card>
); );
}) })