From 36721575a519591979d06c4da86756526b716263 Mon Sep 17 00:00:00 2001 From: curo1305 Date: Mon, 25 May 2026 22:10:23 +0200 Subject: [PATCH] =?UTF-8?q?feat(phase-4-09):=20create=20new=20components?= =?UTF-8?q?=20=E2=80=94=20FolderRow,=20FolderBreadcrumb,=20FolderDeleteMod?= =?UTF-8?q?al,=20ShareModal,=20DocumentPreviewModal,=20SearchBar,=20SortCo?= =?UTF-8?q?ntrols,=20AuditLogTab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - FolderRow: inline rename, three-dot menu, delete/rename callbacks, outside-click close - FolderBreadcrumb: truncation at depth > 4, nav aria-label, ol structure - FolderDeleteModal: role=dialog, warning icon, doc count in body, Keep/Delete buttons - ShareModal: handle input, recipients list with revoke, 404/409 error handling - DocumentPreviewModal: iframe with proxy URL only (never presigned), Escape/overlay close - SearchBar: role=search, aria-label, Escape clears - SortControls: aria-pressed, direction indicator, toggle vs switch logic - AuditLogTab: filters, paginated table, CSV export via window.location.href - api/client.js: add adminListAuditLog function --- frontend/src/api/client.js | 13 ++ frontend/src/components/admin/AuditLogTab.vue | 212 ++++++++++++++++++ .../documents/DocumentPreviewModal.vue | 71 ++++++ .../src/components/documents/SearchBar.vue | 28 +++ .../src/components/documents/SortControls.vue | 49 ++++ .../components/folders/FolderBreadcrumb.vue | 68 ++++++ .../components/folders/FolderDeleteModal.vue | 81 +++++++ frontend/src/components/folders/FolderRow.vue | 161 +++++++++++++ .../src/components/sharing/ShareModal.vue | 162 +++++++++++++ 9 files changed, 845 insertions(+) create mode 100644 frontend/src/components/admin/AuditLogTab.vue create mode 100644 frontend/src/components/documents/DocumentPreviewModal.vue create mode 100644 frontend/src/components/documents/SearchBar.vue create mode 100644 frontend/src/components/documents/SortControls.vue create mode 100644 frontend/src/components/folders/FolderBreadcrumb.vue create mode 100644 frontend/src/components/folders/FolderDeleteModal.vue create mode 100644 frontend/src/components/folders/FolderRow.vue create mode 100644 frontend/src/components/sharing/ShareModal.vue diff --git a/frontend/src/api/client.js b/frontend/src/api/client.js index 985481c..d69cc2b 100644 --- a/frontend/src/api/client.js +++ b/frontend/src/api/client.js @@ -345,6 +345,19 @@ export function updateMyPreferences(payload) { }) } +// ── Audit Log ───────────────────────────────────────────────────────────────── + +export function adminListAuditLog({ start, end, user_id, event_type, page = 1, per_page = 50 } = {}) { + const params = new URLSearchParams() + if (start) params.set('start', start) + if (end) params.set('end', end) + if (user_id) params.set('user_id', user_id) + if (event_type) params.set('event_type', event_type) + params.set('page', page) + params.set('per_page', per_page) + return request(`/api/admin/audit-log?${params}`) +} + // ── Document content proxy URL ──────────────────────────────────────────────── export function getDocumentContentUrl(docId) { diff --git a/frontend/src/components/admin/AuditLogTab.vue b/frontend/src/components/admin/AuditLogTab.vue new file mode 100644 index 0000000..95fedea --- /dev/null +++ b/frontend/src/components/admin/AuditLogTab.vue @@ -0,0 +1,212 @@ + + + diff --git a/frontend/src/components/documents/DocumentPreviewModal.vue b/frontend/src/components/documents/DocumentPreviewModal.vue new file mode 100644 index 0000000..50128aa --- /dev/null +++ b/frontend/src/components/documents/DocumentPreviewModal.vue @@ -0,0 +1,71 @@ + + + diff --git a/frontend/src/components/documents/SearchBar.vue b/frontend/src/components/documents/SearchBar.vue new file mode 100644 index 0000000..f05f7e1 --- /dev/null +++ b/frontend/src/components/documents/SearchBar.vue @@ -0,0 +1,28 @@ + + + diff --git a/frontend/src/components/documents/SortControls.vue b/frontend/src/components/documents/SortControls.vue new file mode 100644 index 0000000..cd0b58f --- /dev/null +++ b/frontend/src/components/documents/SortControls.vue @@ -0,0 +1,49 @@ + + + diff --git a/frontend/src/components/folders/FolderBreadcrumb.vue b/frontend/src/components/folders/FolderBreadcrumb.vue new file mode 100644 index 0000000..67bd98f --- /dev/null +++ b/frontend/src/components/folders/FolderBreadcrumb.vue @@ -0,0 +1,68 @@ + + + diff --git a/frontend/src/components/folders/FolderDeleteModal.vue b/frontend/src/components/folders/FolderDeleteModal.vue new file mode 100644 index 0000000..e0b1347 --- /dev/null +++ b/frontend/src/components/folders/FolderDeleteModal.vue @@ -0,0 +1,81 @@ + + + diff --git a/frontend/src/components/folders/FolderRow.vue b/frontend/src/components/folders/FolderRow.vue new file mode 100644 index 0000000..69625cf --- /dev/null +++ b/frontend/src/components/folders/FolderRow.vue @@ -0,0 +1,161 @@ + + + diff --git a/frontend/src/components/sharing/ShareModal.vue b/frontend/src/components/sharing/ShareModal.vue new file mode 100644 index 0000000..099404f --- /dev/null +++ b/frontend/src/components/sharing/ShareModal.vue @@ -0,0 +1,162 @@ + + +