feat(platform): add audit logs and activity feed
This commit is contained in:
parent
92cb8d1286
commit
c816e9869d
34 changed files with 1592 additions and 43 deletions
|
|
@ -7,6 +7,7 @@ import { Edit, Eye, Shield, Trash2 } from "lucide-react";
|
|||
import ConfirmDialog from "@/components/common/ConfirmDialog";
|
||||
import DataTable, { type DataTableColumn } from "@/components/common/DataTable";
|
||||
import SearchInput from "@/components/common/SearchInput";
|
||||
import { useToast } from "@/components/common/ToastProvider";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import {
|
||||
Dialog,
|
||||
|
|
@ -47,6 +48,7 @@ function getSortableValue(role: Role, key: string) {
|
|||
}
|
||||
|
||||
export default function RolesPage() {
|
||||
const { showToast } = useToast();
|
||||
const [roles, setRoles] = useState<Role[]>([]);
|
||||
const [permissions, setPermissions] = useState<Permission[]>([]);
|
||||
const [currentUser, setCurrentUser] = useState<CurrentUser | null>(null);
|
||||
|
|
@ -217,14 +219,18 @@ export default function RolesPage() {
|
|||
setRoles((current) => current.map((role) => (
|
||||
role.id === selectedRole.id ? response.data : role
|
||||
)));
|
||||
showToast({ type: "success", title: "Rolle aktualisiert", description: response.data.display_name });
|
||||
} else {
|
||||
const response = await api.post<Role>("/roles", payload);
|
||||
setRoles((current) => [response.data, ...current]);
|
||||
showToast({ type: "success", title: "Rolle erstellt", description: response.data.display_name });
|
||||
}
|
||||
|
||||
setFormOpen(false);
|
||||
} catch (err) {
|
||||
setFormError(getErrorMessage(err));
|
||||
const message = getErrorMessage(err);
|
||||
setFormError(message);
|
||||
showToast({ type: "error", title: "Rolle konnte nicht gespeichert werden", description: message });
|
||||
} finally {
|
||||
setPending(false);
|
||||
}
|
||||
|
|
@ -241,9 +247,12 @@ export default function RolesPage() {
|
|||
try {
|
||||
await api.delete(`/roles/${deleteRole.id}`);
|
||||
setRoles((current) => current.filter((role) => role.id !== deleteRole.id));
|
||||
showToast({ type: "success", title: "Rolle gelöscht", description: deleteRole.display_name });
|
||||
setDeleteRole(null);
|
||||
} catch (err) {
|
||||
setDeleteError(getErrorMessage(err));
|
||||
const message = getErrorMessage(err);
|
||||
setDeleteError(message);
|
||||
showToast({ type: "error", title: "Rolle konnte nicht gelöscht werden", description: message });
|
||||
} finally {
|
||||
setPending(false);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue