T08a: Frontend DMS + Tags + Permissions UI — 33 tests, tsc clean, vite build pass

- DMS file browser: folder tree + file grid + upload dropzone + search + preview modal
- DMS share dialog: user/group share + public share links with password+expiry
- DMS bulk actions: bulk move + bulk delete with confirm dialogs
- DMS trash view: deleted files list with restore button
- Tags: TagPicker on company/contact detail pages (new tabs tab)
- Tags: TagCloud + BulkTagDialog for bulk tag assignment
- Permissions: share link creation, permission display, copy-link button
- API clients: dms.ts, tags.ts, permissions.ts
- Routes: /dms, /dms/trash added to router
- Sidebar: DMS nav link updated
- i18n: de.json + en.json translations for DMS/Tags/Permissions
- 33 new tests (5 test files), full regression 276/276 pass
- tsc --noEmit: 0 errors, vite build: 252 modules
This commit is contained in:
leocrm-bot
2026-07-01 16:54:32 +02:00
parent f646c597dc
commit 0962f3a961
31 changed files with 3368 additions and 41 deletions
+168 -5
View File
@@ -159,7 +159,6 @@
"security": "Security",
"roles": "Roles",
"users": "Users",
"system": "System",
"name": "Name",
"firstName": "First Name",
"lastName": "Last Name",
@@ -273,10 +272,28 @@
"nextMonth": "Next month",
"monthView": "Month view",
"kanbanView": "Kanban",
"weekdays": ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
"weekdays": [
"Mo",
"Tu",
"We",
"Th",
"Fr",
"Sa",
"Su"
],
"months": [
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
],
"newAppointment": "New appointment",
"editAppointment": "Edit appointment",
@@ -369,5 +386,151 @@
"follow_up": "Follow up",
"private": "Private"
}
},
"dms": {
"title": "Document Management",
"trash": "Trash",
"folders": "Folders",
"files": "Files",
"allFiles": "All Files",
"sharedWithMe": "Shared with me",
"upload": "Upload",
"uploadDropHere": "Drag files here or click to select",
"uploading": "Uploading",
"uploadSuccess": "File uploaded successfully",
"uploadError": "Upload failed",
"newFolder": "New Folder",
"folderName": "Folder name",
"createFolder": "Create folder",
"search": "Search files",
"searchPlaceholder": "Enter file name",
"noFiles": "No files available",
"noFolders": "No folders available",
"loading": "Loading",
"error": "Error loading data",
"fileSize": "Size",
"fileType": "Type",
"fileModified": "Modified",
"fileCreatedBy": "Created by",
"preview": "Preview",
"download": "Download",
"rename": "Rename",
"move": "Move",
"delete": "Delete",
"restore": "Restore",
"share": "Share",
"shareWith": "Share with",
"shareLink": "Public link",
"createShareLink": "Create link",
"copyLink": "Copy link",
"linkCopied": "Link copied to clipboard",
"password": "Password (optional)",
"expiryDate": "Expiry date (optional)",
"permissionLevel": "Permission level",
"userOrGroup": "User or group",
"userId": "User ID",
"groupId": "Group ID",
"addShare": "Add share",
"removeShare": "Remove share",
"permissions": "Permissions",
"bulkSelect": "Select",
"bulkMove": "Move",
"bulkDelete": "Delete",
"bulkMoveTitle": "Move files",
"bulkDeleteTitle": "Delete files",
"selectTargetFolder": "Select target folder",
"confirmBulkDelete": "Are you sure you want to delete the selected files?",
"confirmDelete": "Are you sure you want to delete this file?",
"confirmDeleteFolder": "Are you sure you want to delete this folder?",
"deleted": "File deleted",
"restored": "File restored",
"shared": "Share created",
"trashEmpty": "Trash is empty",
"noResults": "No search results",
"sharedFiles": "Shared files",
"name": "Name",
"actions": "Actions",
"selected": "selected",
"cancel": "Cancel",
"confirm": "Confirm",
"save": "Save",
"editSession": "Edit session",
"openEditor": "Open in editor",
"icon": {
"folder": "Folder",
"pdf": "PDF",
"image": "Image",
"document": "Document",
"spreadsheet": "Spreadsheet",
"presentation": "Presentation",
"archive": "Archive",
"other": "File"
}
},
"tags": {
"title": "Tags",
"assign": "Assign tag",
"unassign": "Remove tag",
"create": "New tag",
"tagName": "Tag name",
"tagColor": "Color",
"tagDescription": "Description",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"edit": "Edit",
"search": "Search tags",
"noTags": "No tags available",
"noTagsAssigned": "No tags assigned",
"assignedTags": "Assigned tags",
"availableTags": "Available tags",
"tagCloud": "Tag cloud",
"bulkAssign": "Assign tags",
"bulkAssignTitle": "Assign tags to multiple entities",
"selectTags": "Select tags",
"selectedEntities": "selected entities",
"assignSuccess": "Tags assigned",
"unassignSuccess": "Tag removed",
"createSuccess": "Tag created",
"deleteSuccess": "Tag deleted",
"confirmDelete": "Are you sure you want to delete this tag?",
"usageCount": "Usages",
"loading": "Loading tags",
"addTag": "Add tag",
"removeTag": "Remove tag",
"manageTags": "Manage tags",
"color": {
"red": "Red",
"blue": "Blue",
"green": "Green",
"yellow": "Yellow",
"purple": "Purple",
"orange": "Orange",
"pink": "Pink",
"gray": "Gray"
}
},
"permissions": {
"title": "Permissions",
"filePermissions": "File permissions",
"shareLinks": "Share links",
"grant": "Grant permission",
"revoke": "Revoke permission",
"permissionRead": "Read",
"permissionWrite": "Write",
"permissionAdmin": "Admin",
"noPermissions": "No permissions granted",
"noShareLinks": "No share links available",
"user": "User",
"group": "Group",
"level": "Level",
"granted": "Permission granted",
"revoked": "Permission revoked",
"linkCreated": "Share link created",
"linkRevoked": "Share link revoked",
"passwordProtected": "Password protected",
"expiresAt": "Expires at",
"neverExpires": "Never expires",
"linkUrl": "Link URL"
}
}
}