From b2c2ab6e7a951ea9fa4b3a185a43658e1017ca1b Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 12 Mar 2026 20:11:31 +0100 Subject: [PATCH] refactor: redesign AuditLog stranky + pagination styling - AuditLog: admin-page-header/title pattern, FormField filtry, AdminDatePicker, skeleton loading, empty state, admin-badge-danger pro destructivni akce - Pagination CSS: border-top oddeleni, padding sjednocen - Novy admin-badge-danger styl (cerveny) Co-Authored-By: Claude Opus 4.6 --- src/admin/admin.css | 9 +- src/admin/pages/AuditLog.jsx | 229 ++++++++++++++++++++++------------- 2 files changed, 153 insertions(+), 85 deletions(-) diff --git a/src/admin/admin.css b/src/admin/admin.css index f4f36f0..2e88fef 100644 --- a/src/admin/admin.css +++ b/src/admin/admin.css @@ -1484,6 +1484,11 @@ img { color: var(--info); } +.admin-badge-danger { + background: var(--danger-soft); + color: var(--danger); +} + /* ============================================================================ Modals ============================================================================ */ @@ -2342,7 +2347,9 @@ img { align-items: center; justify-content: center; gap: 0.75rem; - padding: 0.75rem 0; + padding: 0.75rem 1rem; + margin-top: 0.5rem; + border-top: 1px solid var(--border-color); font-size: 13px; } diff --git a/src/admin/pages/AuditLog.jsx b/src/admin/pages/AuditLog.jsx index 980563c..5c377d9 100644 --- a/src/admin/pages/AuditLog.jsx +++ b/src/admin/pages/AuditLog.jsx @@ -4,6 +4,9 @@ import { useAuth } from '../context/AuthContext' import { useAlert } from '../context/AlertContext' import Forbidden from '../components/Forbidden' import Pagination from '../components/Pagination' +import FormField from '../components/FormField' +import AdminDatePicker from '../components/AdminDatePicker' +import { czechPlural } from '../utils/formatters' import apiFetch from '../utils/api' const API_BASE = '/api/admin' @@ -26,16 +29,16 @@ const ACTION_LABELS = { const ACTION_BADGE_CLASS = { create: 'admin-badge-success', update: 'admin-badge-info', - delete: 'admin-badge-warning', + delete: 'admin-badge-danger', login: 'admin-badge-secondary', - login_failed: 'admin-badge-warning', + login_failed: 'admin-badge-danger', logout: 'admin-badge-secondary', view: 'admin-badge-info', activate: 'admin-badge-success', deactivate: 'admin-badge-warning', password_change: 'admin-badge-info', - permission_change: 'admin-badge-info', - access_denied: 'admin-badge-warning', + permission_change: 'admin-badge-warning', + access_denied: 'admin-badge-danger', } const ENTITY_TYPE_LABELS = { @@ -143,86 +146,125 @@ export default function AuditLog() { return new Date(dateString).toLocaleString('cs-CZ') } - const renderSkeletonRows = () => ( - Array.from({ length: 10 }, (_, i) => ( - - {Array.from({ length: 6 }, (_, j) => ( -
- ))} - - )) - ) - - return ( - -
-

Audit log

-
- -
-
-
- - handleFilterChange('search', e.target.value)} - /> + if (loading && logs.length === 0) { + return ( +
+
+
+
+
-
- - +
+
+
+
-
- - -
-
- - handleFilterChange('date_from', e.target.value)} - /> -
-
- - handleFilterChange('date_to', e.target.value)} - /> +
+
+
+
+ {Array.from({ length: 8 }, (_, i) => ( +
+
+
+
+
+
+
+
+ ))}
+ ) + } -
+ return ( +
+ +
+

Audit log

+ {pagination && ( +

+ {pagination.total} {czechPlural(pagination.total, 'záznam', 'záznamy', 'záznamů')} +

+ )} +
+
+ + +
+
+ + handleFilterChange('search', e.target.value)} + /> + + + + + + + +
+
+ + handleFilterChange('date_from', val)} + /> + + + handleFilterChange('date_to', val)} + /> + +
+
+
+ +
@@ -236,17 +278,36 @@ export default function AuditLog() { - {loading && renderSkeletonRows()} + {loading && Array.from({ length: 10 }, (_, i) => ( + + + + + + + + + ))} {!loading && logs.length === 0 && ( - )} {!loading && logs.map((log) => ( - +
- Žádné záznamy k zobrazení + +
+
+ + + + + + +
+

Žádné záznamy k zobrazení

+
{formatDatetime(log.created_at)}{formatDatetime(log.created_at)} {log.username || '-'} @@ -267,7 +328,7 @@ export default function AuditLog() { onPageChange={handlePageChange} onPerPageChange={handlePerPageChange} /> - - + + ) }