fix: replace grid action column with link-column on primary data cell
Remove the dedicated "Edit"/"Open" action button column from all list pages. Instead, wrap the primary data column (name, description, subject, etc.) in a clickable <a> link via the new rowInteraction.linkColumn option. Double-click, Enter-key, and click-to-focus row navigation preserved. Pages with explicit actions config are unaffected. Address-book opts out of auto-wrapping (linkColumn: false) and renders the link in its own formatter to avoid nested <a> with avatar lightbox. Also fixes pre-existing XSS in insertActionColumn (unescaped href/label) and updates typography test for --text-page-title token change. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,26 +6,40 @@ Row-Navigation discoverable und keyboard-freundlich machen.
|
||||
|
||||
## Standardverhalten
|
||||
|
||||
1. Sichtbare Action-Spalte rechts (`Open`/`Edit`) fuer Listen mit `rowDblClick`.
|
||||
1. Konfigurierbares Link-Column: Die primaere Datenspalte (z.B. Name, Beschreibung) wird als klickbarer `<a>`-Link gerendert.
|
||||
2. Enter auf fokussierter Row loest dieselbe Navigation aus.
|
||||
3. Doppelklick bleibt als Fallback fuer Power-User.
|
||||
4. Nur Rows mit Ziel-URL erhalten `data-row-open-url`.
|
||||
4. Nur Rows mit Ziel-URL erhalten `data-row-open-url` und den Link im Link-Column.
|
||||
5. Rows ohne URL (z.B. fehlende Berechtigung) zeigen den Inhalt als Plain-Text ohne Link.
|
||||
|
||||
## Contract
|
||||
|
||||
```js
|
||||
rowInteraction: {
|
||||
enabled: true,
|
||||
showActionButton: true,
|
||||
keepDblClick: true,
|
||||
enableEnterOnRow: true,
|
||||
actionColumnLabel: 'Actions',
|
||||
resolveActionLabel: (url, rowData) => (url.includes('/edit/') ? 'Edit' : 'Open')
|
||||
linkColumn: 0, // Index der sichtbaren Datenspalte, die als Link gerendert wird (default: 0)
|
||||
keepDblClick: true, // Doppelklick-Navigation beibehalten (default: true)
|
||||
enableEnterOnRow: true, // Enter-Key-Navigation auf fokussierter Row (default: true)
|
||||
rowEnterHint: 'Press Enter to open row'
|
||||
}
|
||||
```
|
||||
|
||||
### linkColumn-Zuordnung
|
||||
|
||||
| Seite | linkColumn | Zielspalte |
|
||||
|---|---|---|
|
||||
| Users | 2 | First name (nach Avatar + hidden UUID) |
|
||||
| Tenants | 1 | Description (nach Avatar) |
|
||||
| Roles, Departments, Permissions | 0 | Description |
|
||||
| Address book | 1 | Name (nach hidden UUID) |
|
||||
| Mail log | 3 | Subject |
|
||||
| Scheduled jobs | 0 | Job label |
|
||||
| System audit, Import audit, User lifecycle audit | 2 | Event/Profile/Action |
|
||||
| API audit | 3 | Path |
|
||||
|
||||
## Guardrails
|
||||
|
||||
1. Keine globale Tab-Stop-Flut auf allen Rows.
|
||||
2. Fokusstil fuer Row und Action-Button sichtbar.
|
||||
3. Explizite `actions.enabled: true` pro Seite darf Auto-Action uebersteuern.
|
||||
2. Fokusstil fuer Row und Link-Element sichtbar.
|
||||
3. Explizite `actions.enabled: true` pro Seite darf Link-Column uebersteuern (eigene Action-Spalte).
|
||||
4. Link-Column darf keine Spalte mit verschachtelten `<a>`-Elementen umwickeln (z.B. Avatar mit Lightbox).
|
||||
|
||||
Reference in New Issue
Block a user