@webiny/app-audit-logs 6.3.0-beta.4 → 6.4.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SecurityPermission.js +11 -14
- package/SecurityPermission.js.map +1 -1
- package/components/Text.d.ts +9 -1
- package/components/Text.js +37 -21
- package/components/Text.js.map +1 -1
- package/config/list/AuditLogsListConfig.js +26 -27
- package/config/list/AuditLogsListConfig.js.map +1 -1
- package/config/list/Browser/Filter.js +30 -37
- package/config/list/Browser/Filter.js.map +1 -1
- package/config/list/Browser/FiltersToWhere.js +10 -13
- package/config/list/Browser/FiltersToWhere.js.map +1 -1
- package/config/list/Browser/index.js +4 -3
- package/config/list/Browser/index.js.map +1 -1
- package/config/list/index.js +0 -2
- package/constants/index.js +2 -1
- package/constants/index.js.map +1 -1
- package/domain/permissionsSchema.js +4 -3
- package/domain/permissionsSchema.js.map +1 -1
- package/features/permissions/abstractions.js +2 -1
- package/features/permissions/abstractions.js.map +1 -1
- package/features/permissions/feature.js +2 -1
- package/features/permissions/feature.js.map +1 -1
- package/graphql.js +4 -3
- package/graphql.js.map +1 -1
- package/hooks/graphql.js +3 -2
- package/hooks/graphql.js.map +1 -1
- package/hooks/index.js +0 -2
- package/hooks/schema.d.ts +4 -4
- package/hooks/schema.js +22 -28
- package/hooks/schema.js.map +1 -1
- package/hooks/useAuditLogsList.d.ts +3 -3
- package/hooks/useAuditLogsList.js +100 -93
- package/hooks/useAuditLogsList.js.map +1 -1
- package/index.js +32 -36
- package/index.js.map +1 -1
- package/package.json +12 -12
- package/routes.js +6 -5
- package/routes.js.map +1 -1
- package/types.js +1 -4
- package/utils/transformRawAuditLog.js +22 -24
- package/utils/transformRawAuditLog.js.map +1 -1
- package/views/Logs/Filters/FilterByAction.js +39 -40
- package/views/Logs/Filters/FilterByAction.js.map +1 -1
- package/views/Logs/Filters/FilterByApp.js +32 -31
- package/views/Logs/Filters/FilterByApp.js.map +1 -1
- package/views/Logs/Filters/FilterByCreatedBy.js +35 -32
- package/views/Logs/Filters/FilterByCreatedBy.js.map +1 -1
- package/views/Logs/Filters/FilterByCreatedOn.js +31 -32
- package/views/Logs/Filters/FilterByCreatedOn.js.map +1 -1
- package/views/Logs/Filters/FilterByEntity.js +39 -41
- package/views/Logs/Filters/FilterByEntity.js.map +1 -1
- package/views/Logs/Filters/FilterByEntityId.js +21 -24
- package/views/Logs/Filters/FilterByEntityId.js.map +1 -1
- package/views/Logs/Filters/FilterByInitiator.js +35 -32
- package/views/Logs/Filters/FilterByInitiator.js.map +1 -1
- package/views/Logs/Filters/FilterByTimestamp.js +31 -32
- package/views/Logs/Filters/FilterByTimestamp.js.map +1 -1
- package/views/Logs/Filters/Filters.js +17 -21
- package/views/Logs/Filters/Filters.js.map +1 -1
- package/views/Logs/Filters/index.js +0 -2
- package/views/Logs/Filters/styled.js +11 -15
- package/views/Logs/Filters/styled.js.map +1 -1
- package/views/Logs/Filters/types.js +0 -3
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js +25 -44
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js.map +1 -1
- package/views/Logs/Header/ButtonFilters/index.js +0 -2
- package/views/Logs/Header/Header.js +13 -66
- package/views/Logs/Header/Header.js.map +1 -1
- package/views/Logs/Header/index.js +0 -2
- package/views/Logs/LoadMoreButton/LoadMoreButton.js +9 -16
- package/views/Logs/LoadMoreButton/LoadMoreButton.js.map +1 -1
- package/views/Logs/LoadMoreButton/index.js +0 -2
- package/views/Logs/LoadMoreButton/styled.js +7 -15
- package/views/Logs/LoadMoreButton/styled.js.map +1 -1
- package/views/Logs/LoadingMore/index.js +12 -12
- package/views/Logs/LoadingMore/index.js.map +1 -1
- package/views/Logs/Logs.js +63 -68
- package/views/Logs/Logs.js.map +1 -1
- package/views/Logs/LogsModule.js +22 -25
- package/views/Logs/LogsModule.js.map +1 -1
- package/views/Logs/LogsView.js +64 -67
- package/views/Logs/LogsView.js.map +1 -1
- package/views/Logs/Preview/Preview.js +75 -84
- package/views/Logs/Preview/Preview.js.map +1 -1
- package/views/Logs/Preview/index.js +0 -2
- package/views/Logs/Preview/styled.js +29 -23
- package/views/Logs/Preview/styled.js.map +1 -1
- package/views/Logs/Table/Table.d.ts +3 -3
- package/views/Logs/Table/Table.js +101 -125
- package/views/Logs/Table/Table.js.map +1 -1
- package/views/Logs/Table/index.js +0 -2
- package/views/Logs/Table/styled.d.ts +2 -2
- package/views/Logs/Table/styled.js +38 -75
- package/views/Logs/Table/styled.js.map +1 -1
- package/config/list/index.js.map +0 -1
- package/hooks/index.js.map +0 -1
- package/types.js.map +0 -1
- package/views/Logs/Filters/index.js.map +0 -1
- package/views/Logs/Filters/types.js.map +0 -1
- package/views/Logs/Header/ButtonFilters/index.js.map +0 -1
- package/views/Logs/Header/index.js.map +0 -1
- package/views/Logs/LoadMoreButton/index.js.map +0 -1
- package/views/Logs/LoadingMore/styled.d.ts +0 -8
- package/views/Logs/LoadingMore/styled.js +0 -30
- package/views/Logs/LoadingMore/styled.js.map +0 -1
- package/views/Logs/Preview/index.js.map +0 -1
- package/views/Logs/Table/index.js.map +0 -1
- package/views/Logs/styled.d.ts +0 -8
- package/views/Logs/styled.js +0 -30
- package/views/Logs/styled.js.map +0 -1
package/hooks/schema.js
CHANGED
|
@@ -1,34 +1,28 @@
|
|
|
1
1
|
import zod from "zod";
|
|
2
2
|
import { ActionType } from "../types.js";
|
|
3
|
-
|
|
4
|
-
id: zod.string(),
|
|
5
|
-
createdBy: zod.object({
|
|
3
|
+
const auditLogSchema = zod.object({
|
|
6
4
|
id: zod.string(),
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return undefined;
|
|
27
|
-
}, zod.date().optional().nullish()).optional().nullish().transform(value => {
|
|
28
|
-
return value || undefined;
|
|
29
|
-
}),
|
|
30
|
-
content: zod.string()
|
|
5
|
+
createdBy: zod.object({
|
|
6
|
+
id: zod.string(),
|
|
7
|
+
displayName: zod.string().optional(),
|
|
8
|
+
type: zod.string().optional()
|
|
9
|
+
}),
|
|
10
|
+
createdOn: zod.preprocess((value)=>{
|
|
11
|
+
if ("string" == typeof value || value instanceof Date) return new Date(value);
|
|
12
|
+
return value;
|
|
13
|
+
}, zod.date()),
|
|
14
|
+
app: zod.string(),
|
|
15
|
+
action: zod.nativeEnum(ActionType),
|
|
16
|
+
message: zod.string(),
|
|
17
|
+
entity: zod.string(),
|
|
18
|
+
entityId: zod.string(),
|
|
19
|
+
tags: zod.array(zod.string()),
|
|
20
|
+
expiresAt: zod.preprocess((value)=>{
|
|
21
|
+
if ("string" == typeof value || value instanceof Date) return new Date(value);
|
|
22
|
+
}, zod.date().optional().nullish()).optional().nullish().transform((value)=>value || void 0),
|
|
23
|
+
content: zod.string()
|
|
31
24
|
});
|
|
32
|
-
|
|
25
|
+
const listAuditLogsSchema = zod.array(auditLogSchema);
|
|
26
|
+
export { auditLogSchema, listAuditLogsSchema };
|
|
33
27
|
|
|
34
28
|
//# sourceMappingURL=schema.js.map
|
package/hooks/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"hooks/schema.js","sources":["../../src/hooks/schema.ts"],"sourcesContent":["import zod from \"zod\";\nimport { ActionType } from \"~/types.js\";\n\nexport const auditLogSchema = zod.object({\n id: zod.string(),\n createdBy: zod.object({\n id: zod.string(),\n displayName: zod.string().optional(),\n type: zod.string().optional()\n }),\n createdOn: zod.preprocess(value => {\n if (typeof value === \"string\" || value instanceof Date) {\n return new Date(value);\n }\n return value;\n }, zod.date()),\n app: zod.string(),\n action: zod.nativeEnum(ActionType),\n message: zod.string(),\n entity: zod.string(),\n entityId: zod.string(),\n tags: zod.array(zod.string()),\n expiresAt: zod\n .preprocess(value => {\n if (typeof value === \"string\" || value instanceof Date) {\n return new Date(value);\n }\n return undefined;\n }, zod.date().optional().nullish())\n .optional()\n .nullish()\n .transform(value => {\n return value || undefined;\n }),\n content: zod.string()\n});\n\nexport const listAuditLogsSchema = zod.array(auditLogSchema);\n"],"names":["auditLogSchema","zod","value","Date","ActionType","undefined","listAuditLogsSchema"],"mappings":";;AAGO,MAAMA,iBAAiBC,IAAI,MAAM,CAAC;IACrC,IAAIA,IAAI,MAAM;IACd,WAAWA,IAAI,MAAM,CAAC;QAClB,IAAIA,IAAI,MAAM;QACd,aAAaA,IAAI,MAAM,GAAG,QAAQ;QAClC,MAAMA,IAAI,MAAM,GAAG,QAAQ;IAC/B;IACA,WAAWA,IAAI,UAAU,CAACC,CAAAA;QACtB,IAAI,AAAiB,YAAjB,OAAOA,SAAsBA,iBAAiBC,MAC9C,OAAO,IAAIA,KAAKD;QAEpB,OAAOA;IACX,GAAGD,IAAI,IAAI;IACX,KAAKA,IAAI,MAAM;IACf,QAAQA,IAAI,UAAU,CAACG;IACvB,SAASH,IAAI,MAAM;IACnB,QAAQA,IAAI,MAAM;IAClB,UAAUA,IAAI,MAAM;IACpB,MAAMA,IAAI,KAAK,CAACA,IAAI,MAAM;IAC1B,WAAWA,IAAAA,UACI,CAACC,CAAAA;QACR,IAAI,AAAiB,YAAjB,OAAOA,SAAsBA,iBAAiBC,MAC9C,OAAO,IAAIA,KAAKD;IAGxB,GAAGD,IAAI,IAAI,GAAG,QAAQ,GAAG,OAAO,IAC/B,QAAQ,GACR,OAAO,GACP,SAAS,CAACC,CAAAA,QACAA,SAASG;IAExB,SAASJ,IAAI,MAAM;AACvB;AAEO,MAAMK,sBAAsBL,IAAI,KAAK,CAACD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type IListAuditLogsVariablesWhere } from "../hooks/graphql.js";
|
|
2
2
|
import type { IAuditLog, IAuditLogsMeta } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { OnDataTableSortingChange, DataTableSorting } from "@webiny/admin-ui";
|
|
4
4
|
export interface UseAuditLogs {
|
|
5
5
|
isListLoading: boolean;
|
|
6
6
|
isListLoadingMore: boolean;
|
|
@@ -10,8 +10,8 @@ export interface UseAuditLogs {
|
|
|
10
10
|
setWhere: (where: Partial<IListAuditLogsVariablesWhere>) => void;
|
|
11
11
|
setLimit: (limit: number) => void;
|
|
12
12
|
after?: string;
|
|
13
|
-
sorting:
|
|
14
|
-
setSorting:
|
|
13
|
+
sorting: DataTableSorting;
|
|
14
|
+
setSorting: OnDataTableSortingChange;
|
|
15
15
|
showingFilters: boolean;
|
|
16
16
|
showFilters: () => void;
|
|
17
17
|
hideFilters: () => void;
|
|
@@ -3,100 +3,107 @@ import { useQuery } from "@apollo/react-hooks";
|
|
|
3
3
|
import { LIST_AUDIT_LOGS } from "./graphql.js";
|
|
4
4
|
import { transformRawAuditLog } from "../utils/transformRawAuditLog.js";
|
|
5
5
|
import { listAuditLogsSchema } from "./schema.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
});
|
|
13
|
-
const setWhere = useCallback(where => {
|
|
14
|
-
setVariables(prev => ({
|
|
15
|
-
...prev,
|
|
16
|
-
where
|
|
17
|
-
}));
|
|
18
|
-
}, [variables]);
|
|
19
|
-
const setSort = useCallback(sort => {
|
|
20
|
-
setVariables(prev => ({
|
|
21
|
-
...prev,
|
|
22
|
-
sort
|
|
23
|
-
}));
|
|
24
|
-
}, [variables]);
|
|
25
|
-
const setAfter = useCallback(after => {
|
|
26
|
-
setVariables(prev => ({
|
|
27
|
-
...prev,
|
|
28
|
-
after
|
|
29
|
-
}));
|
|
30
|
-
}, [variables]);
|
|
31
|
-
const setLimit = useCallback(limit => {
|
|
32
|
-
setVariables(prev => ({
|
|
33
|
-
...prev,
|
|
34
|
-
limit
|
|
35
|
-
}));
|
|
36
|
-
}, [variables]);
|
|
37
|
-
const [showingFilters, setShowingFilters] = useState(false);
|
|
38
|
-
const [acoSorting, setAcoSorting] = useState([]);
|
|
39
|
-
useEffect(() => {
|
|
40
|
-
const sort = acoSorting[0];
|
|
41
|
-
if (!sort) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
setSort(sort.desc ? "DESC" : "ASC");
|
|
45
|
-
}, [acoSorting]);
|
|
46
|
-
const logs = useQuery(LIST_AUDIT_LOGS, {
|
|
47
|
-
variables,
|
|
48
|
-
fetchPolicy: "network-only"
|
|
49
|
-
});
|
|
50
|
-
const records = useMemo(() => {
|
|
51
|
-
if (!logs.data?.auditLogs.listAuditLogs.data) {
|
|
52
|
-
return [];
|
|
53
|
-
}
|
|
54
|
-
const items = listAuditLogsSchema.safeParse(logs.data.auditLogs.listAuditLogs.data);
|
|
55
|
-
if (!items.success) {
|
|
56
|
-
console.error(items.error);
|
|
57
|
-
return [];
|
|
58
|
-
}
|
|
59
|
-
return items.data.map(auditLog => {
|
|
60
|
-
return transformRawAuditLog({
|
|
61
|
-
auditLog
|
|
62
|
-
});
|
|
6
|
+
const useAuditLogsList = ()=>{
|
|
7
|
+
const [variables, setVariables] = useState({
|
|
8
|
+
where: {},
|
|
9
|
+
after: void 0,
|
|
10
|
+
sort: "DESC",
|
|
11
|
+
limit: 25
|
|
63
12
|
});
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
},
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
13
|
+
const [accumulatedRecords, setAccumulatedRecords] = useState([]);
|
|
14
|
+
const setWhere = useCallback((where)=>{
|
|
15
|
+
setVariables((prev)=>({
|
|
16
|
+
...prev,
|
|
17
|
+
where,
|
|
18
|
+
after: void 0
|
|
19
|
+
}));
|
|
20
|
+
setAccumulatedRecords([]);
|
|
21
|
+
}, []);
|
|
22
|
+
const setSort = useCallback((sort)=>{
|
|
23
|
+
setVariables((prev)=>({
|
|
24
|
+
...prev,
|
|
25
|
+
sort,
|
|
26
|
+
after: void 0
|
|
27
|
+
}));
|
|
28
|
+
setAccumulatedRecords([]);
|
|
29
|
+
}, []);
|
|
30
|
+
const setAfter = useCallback((after)=>{
|
|
31
|
+
setVariables((prev)=>({
|
|
32
|
+
...prev,
|
|
33
|
+
after
|
|
34
|
+
}));
|
|
35
|
+
}, []);
|
|
36
|
+
const setLimit = useCallback((limit)=>{
|
|
37
|
+
setVariables((prev)=>({
|
|
38
|
+
...prev,
|
|
39
|
+
limit
|
|
40
|
+
}));
|
|
41
|
+
}, []);
|
|
42
|
+
const [showingFilters, setShowingFilters] = useState(false);
|
|
43
|
+
const [acoSorting, setAcoSorting] = useState([]);
|
|
44
|
+
useEffect(()=>{
|
|
45
|
+
const sort = acoSorting[0];
|
|
46
|
+
if (!sort) return;
|
|
47
|
+
setSort(sort.desc ? "DESC" : "ASC");
|
|
48
|
+
}, [
|
|
49
|
+
acoSorting
|
|
50
|
+
]);
|
|
51
|
+
const logs = useQuery(LIST_AUDIT_LOGS, {
|
|
52
|
+
variables,
|
|
53
|
+
fetchPolicy: "network-only"
|
|
54
|
+
});
|
|
55
|
+
useEffect(()=>{
|
|
56
|
+
if (!logs.data?.auditLogs.listAuditLogs.data) return;
|
|
57
|
+
const items = listAuditLogsSchema.safeParse(logs.data.auditLogs.listAuditLogs.data);
|
|
58
|
+
if (!items.success) return void console.error(items.error);
|
|
59
|
+
const newRecords = items.data.map((auditLog)=>transformRawAuditLog({
|
|
60
|
+
auditLog
|
|
61
|
+
}));
|
|
62
|
+
variables.after ? setAccumulatedRecords((prev)=>[
|
|
63
|
+
...prev,
|
|
64
|
+
...newRecords
|
|
65
|
+
]) : setAccumulatedRecords(newRecords);
|
|
66
|
+
}, [
|
|
67
|
+
logs.data?.auditLogs
|
|
68
|
+
]);
|
|
69
|
+
const meta = useMemo(()=>{
|
|
70
|
+
if (!logs.data?.auditLogs.listAuditLogs.meta) return {
|
|
71
|
+
hasMoreItems: false,
|
|
72
|
+
cursor: null
|
|
73
|
+
};
|
|
74
|
+
return logs.data.auditLogs.listAuditLogs.meta;
|
|
75
|
+
}, [
|
|
76
|
+
logs.data?.auditLogs
|
|
77
|
+
]);
|
|
78
|
+
const sorting = useMemo(()=>[
|
|
79
|
+
{
|
|
80
|
+
id: "createdOn",
|
|
81
|
+
desc: "DESC" === variables.sort
|
|
82
|
+
}
|
|
83
|
+
], [
|
|
84
|
+
variables.sort
|
|
85
|
+
]);
|
|
86
|
+
return {
|
|
87
|
+
isListLoading: logs.loading,
|
|
88
|
+
records: accumulatedRecords,
|
|
89
|
+
meta,
|
|
90
|
+
listMoreRecords: ()=>{
|
|
91
|
+
setAfter(meta.cursor || void 0);
|
|
92
|
+
},
|
|
93
|
+
setWhere,
|
|
94
|
+
sorting,
|
|
95
|
+
setSorting: setAcoSorting,
|
|
96
|
+
setLimit,
|
|
97
|
+
isListLoadingMore: logs.loading && !!variables.after,
|
|
98
|
+
showingFilters,
|
|
99
|
+
showFilters: ()=>{
|
|
100
|
+
setShowingFilters(true);
|
|
101
|
+
},
|
|
102
|
+
hideFilters: ()=>{
|
|
103
|
+
setShowingFilters(false);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
100
106
|
};
|
|
107
|
+
export { useAuditLogsList };
|
|
101
108
|
|
|
102
109
|
//# sourceMappingURL=useAuditLogsList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"hooks/useAuditLogsList.js","sources":["../../src/hooks/useAuditLogsList.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useQuery } from \"@apollo/react-hooks\";\nimport {\n type IListAuditLogsResponse,\n type IListAuditLogsVariablesPartial,\n type IListAuditLogsVariablesWhere,\n LIST_AUDIT_LOGS\n} from \"~/hooks/graphql.js\";\nimport type { IAuditLog, IAuditLogsMeta } from \"~/types.js\";\nimport type { OnDataTableSortingChange, DataTableSorting } from \"@webiny/admin-ui\";\nimport { transformRawAuditLog } from \"~/utils/transformRawAuditLog.js\";\nimport { listAuditLogsSchema } from \"~/hooks/schema.js\";\n\nexport interface UseAuditLogs {\n isListLoading: boolean;\n isListLoadingMore: boolean;\n records: IAuditLog[];\n meta: IAuditLogsMeta;\n listMoreRecords: () => void;\n setWhere: (where: Partial<IListAuditLogsVariablesWhere>) => void;\n setLimit: (limit: number) => void;\n after?: string;\n sorting: DataTableSorting;\n setSorting: OnDataTableSortingChange;\n showingFilters: boolean;\n showFilters: () => void;\n hideFilters: () => void;\n}\n\nexport const useAuditLogsList = (): UseAuditLogs => {\n const [variables, setVariables] = useState<IListAuditLogsVariablesPartial>({\n where: {},\n after: undefined,\n sort: \"DESC\",\n limit: 25\n });\n\n const [accumulatedRecords, setAccumulatedRecords] = useState<IAuditLog[]>([]);\n\n const setWhere = useCallback((where: Partial<IListAuditLogsVariablesWhere>) => {\n setVariables(prev => ({ ...prev, where, after: undefined }));\n setAccumulatedRecords([]);\n }, []);\n\n const setSort = useCallback((sort: \"ASC\" | \"DESC\") => {\n setVariables(prev => ({ ...prev, sort, after: undefined }));\n setAccumulatedRecords([]);\n }, []);\n\n const setAfter = useCallback((after?: string) => {\n setVariables(prev => ({ ...prev, after }));\n }, []);\n\n const setLimit = useCallback((limit: number) => {\n setVariables(prev => ({ ...prev, limit }));\n }, []);\n\n const [showingFilters, setShowingFilters] = useState(false);\n const [acoSorting, setAcoSorting] = useState<DataTableSorting>([]);\n\n useEffect(() => {\n const sort = acoSorting[0];\n if (!sort) {\n return;\n }\n setSort(sort.desc ? \"DESC\" : \"ASC\");\n }, [acoSorting]);\n\n const logs = useQuery<IListAuditLogsResponse, IListAuditLogsVariablesPartial>(LIST_AUDIT_LOGS, {\n variables,\n fetchPolicy: \"network-only\"\n });\n\n useEffect(() => {\n if (!logs.data?.auditLogs.listAuditLogs.data) {\n return;\n }\n const items = listAuditLogsSchema.safeParse(logs.data.auditLogs.listAuditLogs.data);\n if (!items.success) {\n console.error(items.error);\n return;\n }\n const newRecords = items.data.map(auditLog => transformRawAuditLog({ auditLog }));\n if (variables.after) {\n setAccumulatedRecords(prev => [...prev, ...newRecords]);\n } else {\n setAccumulatedRecords(newRecords);\n }\n }, [logs.data?.auditLogs]);\n\n const meta = useMemo(() => {\n if (!logs.data?.auditLogs.listAuditLogs.meta) {\n return {\n hasMoreItems: false,\n cursor: null\n };\n }\n return logs.data.auditLogs.listAuditLogs.meta;\n }, [logs.data?.auditLogs]);\n\n const sorting = useMemo((): DataTableSorting => {\n return [\n {\n id: \"createdOn\",\n desc: variables.sort === \"DESC\"\n }\n ];\n }, [variables.sort]);\n\n return {\n isListLoading: logs.loading,\n records: accumulatedRecords,\n meta,\n listMoreRecords: () => {\n setAfter(meta.cursor || undefined);\n },\n setWhere,\n sorting,\n setSorting: setAcoSorting,\n setLimit,\n isListLoadingMore: logs.loading && !!variables.after,\n showingFilters,\n showFilters: () => {\n setShowingFilters(true);\n },\n hideFilters: () => {\n setShowingFilters(false);\n }\n };\n};\n"],"names":["useAuditLogsList","variables","setVariables","useState","undefined","accumulatedRecords","setAccumulatedRecords","setWhere","useCallback","where","prev","setSort","sort","setAfter","after","setLimit","limit","showingFilters","setShowingFilters","acoSorting","setAcoSorting","useEffect","logs","useQuery","LIST_AUDIT_LOGS","items","listAuditLogsSchema","console","newRecords","auditLog","transformRawAuditLog","meta","useMemo","sorting"],"mappings":";;;;;AA6BO,MAAMA,mBAAmB;IAC5B,MAAM,CAACC,WAAWC,aAAa,GAAGC,SAAyC;QACvE,OAAO,CAAC;QACR,OAAOC;QACP,MAAM;QACN,OAAO;IACX;IAEA,MAAM,CAACC,oBAAoBC,sBAAsB,GAAGH,SAAsB,EAAE;IAE5E,MAAMI,WAAWC,YAAY,CAACC;QAC1BP,aAAaQ,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAED;gBAAO,OAAOL;YAAU;QACzDE,sBAAsB,EAAE;IAC5B,GAAG,EAAE;IAEL,MAAMK,UAAUH,YAAY,CAACI;QACzBV,aAAaQ,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEE;gBAAM,OAAOR;YAAU;QACxDE,sBAAsB,EAAE;IAC5B,GAAG,EAAE;IAEL,MAAMO,WAAWL,YAAY,CAACM;QAC1BZ,aAAaQ,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEI;YAAM;IAC3C,GAAG,EAAE;IAEL,MAAMC,WAAWP,YAAY,CAACQ;QAC1Bd,aAAaQ,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEM;YAAM;IAC3C,GAAG,EAAE;IAEL,MAAM,CAACC,gBAAgBC,kBAAkB,GAAGf,SAAS;IACrD,MAAM,CAACgB,YAAYC,cAAc,GAAGjB,SAA2B,EAAE;IAEjEkB,UAAU;QACN,MAAMT,OAAOO,UAAU,CAAC,EAAE;QAC1B,IAAI,CAACP,MACD;QAEJD,QAAQC,KAAK,IAAI,GAAG,SAAS;IACjC,GAAG;QAACO;KAAW;IAEf,MAAMG,OAAOC,SAAiEC,iBAAiB;QAC3FvB;QACA,aAAa;IACjB;IAEAoB,UAAU;QACN,IAAI,CAACC,KAAK,IAAI,EAAE,UAAU,cAAc,MACpC;QAEJ,MAAMG,QAAQC,oBAAoB,SAAS,CAACJ,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI;QAClF,IAAI,CAACG,MAAM,OAAO,EAAE,YAChBE,QAAQ,KAAK,CAACF,MAAM,KAAK;QAG7B,MAAMG,aAAaH,MAAM,IAAI,CAAC,GAAG,CAACI,CAAAA,WAAYC,qBAAqB;gBAAED;YAAS;QAC1E5B,UAAU,KAAK,GACfK,sBAAsBI,CAAAA,OAAQ;mBAAIA;mBAASkB;aAAW,IAEtDtB,sBAAsBsB;IAE9B,GAAG;QAACN,KAAK,IAAI,EAAE;KAAU;IAEzB,MAAMS,OAAOC,QAAQ;QACjB,IAAI,CAACV,KAAK,IAAI,EAAE,UAAU,cAAc,MACpC,OAAO;YACH,cAAc;YACd,QAAQ;QACZ;QAEJ,OAAOA,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI;IACjD,GAAG;QAACA,KAAK,IAAI,EAAE;KAAU;IAEzB,MAAMW,UAAUD,QAAQ,IACb;YACH;gBACI,IAAI;gBACJ,MAAM/B,AAAmB,WAAnBA,UAAU,IAAI;YACxB;SACH,EACF;QAACA,UAAU,IAAI;KAAC;IAEnB,OAAO;QACH,eAAeqB,KAAK,OAAO;QAC3B,SAASjB;QACT0B;QACA,iBAAiB;YACblB,SAASkB,KAAK,MAAM,IAAI3B;QAC5B;QACAG;QACA0B;QACA,YAAYb;QACZL;QACA,mBAAmBO,KAAK,OAAO,IAAI,CAAC,CAACrB,UAAU,KAAK;QACpDgB;QACA,aAAa;YACTC,kBAAkB;QACtB;QACA,aAAa;YACTA,kBAAkB;QACtB;IACJ;AACJ"}
|
package/index.js
CHANGED
|
@@ -1,45 +1,41 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { useRouter } from "@webiny/app-admin";
|
|
3
|
-
import { ReactComponent
|
|
4
|
-
import { AdminConfig, AdminLayout, RegisterFeature, useWcp } from "@webiny/app-admin";
|
|
5
|
-
import { HasPermission } from "@webiny/app-admin";
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { AdminConfig, AdminLayout, HasPermission, RegisterFeature, useRouter, useWcp } from "@webiny/app-admin";
|
|
3
|
+
import { ReactComponent } from "@webiny/icons/manage_search.svg";
|
|
6
4
|
import { LogsModule } from "./views/Logs/LogsModule.js";
|
|
7
5
|
import { SecurityPermission } from "./SecurityPermission.js";
|
|
8
6
|
import { LogsView } from "./views/Logs/LogsView.js";
|
|
9
7
|
import { AuditLogsListWithConfig } from "./config/list/index.js";
|
|
10
8
|
import { Routes } from "./routes.js";
|
|
11
9
|
import { AlPermissionsFeature } from "./features/permissions/feature.js";
|
|
12
|
-
const {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
title: "Audit Logs - Logs"
|
|
41
|
-
}, /*#__PURE__*/React.createElement(AuditLogsListWithConfig, null, /*#__PURE__*/React.createElement(LogsView, null)))
|
|
42
|
-
}))));
|
|
10
|
+
const { Menu: Menu, Route: Route } = AdminConfig;
|
|
11
|
+
const AuditLogs = ()=>{
|
|
12
|
+
const wcp = useWcp();
|
|
13
|
+
const router = useRouter();
|
|
14
|
+
if (!wcp.canUseAuditLogs()) return null;
|
|
15
|
+
return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
16
|
+
feature: AlPermissionsFeature
|
|
17
|
+
}), /*#__PURE__*/ react.createElement(LogsModule, null), /*#__PURE__*/ react.createElement(SecurityPermission, null), /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(HasPermission, {
|
|
18
|
+
any: [
|
|
19
|
+
"al.*"
|
|
20
|
+
]
|
|
21
|
+
}, /*#__PURE__*/ react.createElement(Menu, {
|
|
22
|
+
name: "auditLogs",
|
|
23
|
+
pinnable: true,
|
|
24
|
+
element: /*#__PURE__*/ react.createElement(Menu.Link, {
|
|
25
|
+
text: "Audit Logs",
|
|
26
|
+
icon: /*#__PURE__*/ react.createElement(Menu.Link.Icon, {
|
|
27
|
+
element: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
28
|
+
label: "Audit Logs"
|
|
29
|
+
}),
|
|
30
|
+
to: router.getLink(Routes.AuditLogsList)
|
|
31
|
+
})
|
|
32
|
+
}), /*#__PURE__*/ react.createElement(Route, {
|
|
33
|
+
route: Routes.AuditLogsList,
|
|
34
|
+
element: /*#__PURE__*/ react.createElement(AdminLayout, {
|
|
35
|
+
title: "Audit Logs - Logs"
|
|
36
|
+
}, /*#__PURE__*/ react.createElement(AuditLogsListWithConfig, null, /*#__PURE__*/ react.createElement(LogsView, null)))
|
|
37
|
+
}))));
|
|
43
38
|
};
|
|
39
|
+
export { AuditLogs };
|
|
44
40
|
|
|
45
41
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { ReactComponent as Icon } from \"@webiny/icons/manage_search.svg\";\nimport { AdminConfig, AdminLayout, RegisterFeature, useWcp } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-admin\";\nimport { LogsModule } from \"~/views/Logs/LogsModule.js\";\nimport { SecurityPermission } from \"~/SecurityPermission.js\";\nimport { LogsView } from \"~/views/Logs/LogsView.js\";\nimport { AuditLogsListWithConfig } from \"~/config/list/index.js\";\nimport { Routes } from \"~/routes.js\";\nimport { AlPermissionsFeature } from \"~/features/permissions/feature.js\";\n\nconst { Menu, Route } = AdminConfig;\n\nexport const AuditLogs = () => {\n const wcp = useWcp();\n const router = useRouter();\n\n if (!wcp.canUseAuditLogs()) {\n return null;\n }\n\n return (\n <>\n <RegisterFeature feature={AlPermissionsFeature} />\n <LogsModule />\n <SecurityPermission />\n <AdminConfig>\n <HasPermission any={[\"al.*\"]}>\n <Menu\n name=\"auditLogs\"\n pinnable\n element={\n <Menu.Link\n text={\"Audit Logs\"}\n icon={<Menu.Link.Icon element={<Icon />} label={\"Audit Logs\"} />}\n to={router.getLink(Routes.AuditLogsList)}\n />\n }\n />\n <Route\n route={Routes.AuditLogsList}\n element={\n <AdminLayout title={\"Audit Logs - Logs\"}>\n <AuditLogsListWithConfig>\n <LogsView />\n </AuditLogsListWithConfig>\n </AdminLayout>\n }\n />\n </HasPermission>\n </AdminConfig>\n </>\n );\n};\n"],"names":["Menu","Route","AdminConfig","AuditLogs","wcp","useWcp","router","useRouter","RegisterFeature","AlPermissionsFeature","LogsModule","SecurityPermission","HasPermission","Icon","Routes","AdminLayout","AuditLogsListWithConfig","LogsView"],"mappings":";;;;;;;;;AAYA,MAAM,EAAEA,MAAAA,IAAI,EAAEC,OAAAA,KAAK,EAAE,GAAGC;AAEjB,MAAMC,YAAY;IACrB,MAAMC,MAAMC;IACZ,MAAMC,SAASC;IAEf,IAAI,CAACH,IAAI,eAAe,IACpB,OAAO;IAGX,OAAO,WAAP,GACI,wDACI,oBAACI,iBAAeA;QAAC,SAASC;sBAC1B,oBAACC,YAAUA,OAAAA,WAAAA,GACX,oBAACC,oBAAkBA,OAAAA,WAAAA,GACnB,oBAACT,aAAWA,MAAAA,WAAAA,GACR,oBAACU,eAAaA;QAAC,KAAK;YAAC;SAAO;qBACxB,oBAACZ,MAAIA;QACD,MAAK;QACL;QACA,uBACI,oBAACA,KAAK,IAAI;YACN,MAAM;YACN,oBAAM,oBAACA,KAAK,IAAI,CAAC,IAAI;gBAAC,uBAAS,oBAACa,gBAAIA;gBAAK,OAAO;;YAChD,IAAIP,OAAO,OAAO,CAACQ,OAAO,aAAa;;sBAInD,oBAACb,OAAKA;QACF,OAAOa,OAAO,aAAa;QAC3B,uBACI,oBAACC,aAAWA;YAAC,OAAO;yBAChB,oBAACC,yBAAuBA,MAAAA,WAAAA,GACpB,oBAACC,UAAQA;;AAS7C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-audit-logs",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.4.0-beta.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -17,25 +17,25 @@
|
|
|
17
17
|
"@emotion/css": "11.13.5",
|
|
18
18
|
"@emotion/react": "11.14.0",
|
|
19
19
|
"@emotion/styled": "11.14.1",
|
|
20
|
-
"@webiny/
|
|
21
|
-
"@webiny/app
|
|
22
|
-
"@webiny/
|
|
23
|
-
"@webiny/
|
|
24
|
-
"@webiny/
|
|
25
|
-
"@webiny/
|
|
26
|
-
"@webiny/react-
|
|
27
|
-
"@webiny/
|
|
20
|
+
"@webiny/admin-ui": "6.4.0-beta.0",
|
|
21
|
+
"@webiny/app": "6.4.0-beta.0",
|
|
22
|
+
"@webiny/app-admin": "6.4.0-beta.0",
|
|
23
|
+
"@webiny/common-audit-logs": "6.4.0-beta.0",
|
|
24
|
+
"@webiny/form": "6.4.0-beta.0",
|
|
25
|
+
"@webiny/icons": "6.4.0-beta.0",
|
|
26
|
+
"@webiny/react-composition": "6.4.0-beta.0",
|
|
27
|
+
"@webiny/react-properties": "6.4.0-beta.0",
|
|
28
28
|
"date-fns": "4.1.0",
|
|
29
29
|
"graphql-tag": "2.12.6",
|
|
30
30
|
"lodash": "4.18.1",
|
|
31
|
-
"zod": "4.3
|
|
31
|
+
"zod": "4.4.3"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"react": "18.3.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/react": "18.3.28",
|
|
38
|
-
"@webiny/build-tools": "6.
|
|
38
|
+
"@webiny/build-tools": "6.4.0-beta.0",
|
|
39
39
|
"execa": "5.1.1",
|
|
40
40
|
"rimraf": "6.1.3",
|
|
41
41
|
"typescript": "6.0.3"
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"access": "public",
|
|
45
45
|
"directory": "dist"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "a545d7529828af07d08d49c3da1bcb967483b9ce"
|
|
48
48
|
}
|
package/routes.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Route } from "@webiny/app-admin";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
const Routes = {
|
|
3
|
+
AuditLogsList: new Route({
|
|
4
|
+
name: "AuditLogs/List",
|
|
5
|
+
path: "/audit-logs"
|
|
6
|
+
})
|
|
7
7
|
};
|
|
8
|
+
export { Routes };
|
|
8
9
|
|
|
9
10
|
//# sourceMappingURL=routes.js.map
|
package/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"routes.js","sources":["../src/routes.ts"],"sourcesContent":["import { Route } from \"@webiny/app-admin\";\n\nexport const Routes = {\n AuditLogsList: new Route({\n name: \"AuditLogs/List\",\n path: \"/audit-logs\"\n })\n};\n"],"names":["Routes","Route"],"mappings":";AAEO,MAAMA,SAAS;IAClB,eAAe,IAAIC,MAAM;QACrB,MAAM;QACN,MAAM;IACV;AACJ"}
|
package/types.js
CHANGED
|
@@ -1,28 +1,26 @@
|
|
|
1
1
|
import { apps } from "@webiny/common-audit-logs";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
auditLog
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
link: entity?.linkToEntity && entity.linkToEntity(encodeURIComponent(auditLog.entityId))
|
|
24
|
-
}
|
|
25
|
-
};
|
|
2
|
+
const transformRawAuditLog = (params)=>{
|
|
3
|
+
const { auditLog } = params;
|
|
4
|
+
const app = apps.find((app)=>app.app === auditLog.app);
|
|
5
|
+
const entity = app?.entities?.find((entity)=>entity.type === auditLog.entity);
|
|
6
|
+
const action = entity?.actions?.find((action)=>action.type === auditLog.action);
|
|
7
|
+
return {
|
|
8
|
+
...auditLog,
|
|
9
|
+
createdBy: {
|
|
10
|
+
...auditLog.createdBy,
|
|
11
|
+
role: "-"
|
|
12
|
+
},
|
|
13
|
+
action: {
|
|
14
|
+
label: action?.displayName || "-",
|
|
15
|
+
value: auditLog.action
|
|
16
|
+
},
|
|
17
|
+
entity: {
|
|
18
|
+
label: entity?.displayName || "-",
|
|
19
|
+
value: auditLog.entity,
|
|
20
|
+
link: entity?.linkToEntity && entity.linkToEntity(encodeURIComponent(auditLog.entityId))
|
|
21
|
+
}
|
|
22
|
+
};
|
|
26
23
|
};
|
|
24
|
+
export { transformRawAuditLog };
|
|
27
25
|
|
|
28
26
|
//# sourceMappingURL=transformRawAuditLog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"utils/transformRawAuditLog.js","sources":["../../src/utils/transformRawAuditLog.ts"],"sourcesContent":["import { apps } from \"@webiny/common-audit-logs\";\nimport type { IAuditLog, IAuditLogRaw } from \"~/types.js\";\n\nexport interface ITransformRawAuditLogParams {\n auditLog: IAuditLogRaw;\n}\n\nexport const transformRawAuditLog = (params: ITransformRawAuditLogParams): IAuditLog => {\n const { auditLog } = params;\n\n const app = apps.find(app => app.app === auditLog.app);\n const entity = app?.entities?.find(entity => entity.type === auditLog.entity);\n const action = entity?.actions?.find(action => action.type === auditLog.action);\n return {\n ...auditLog,\n createdBy: {\n ...auditLog.createdBy,\n // TODO load users?\n role: \"-\"\n },\n action: {\n label: action?.displayName || \"-\",\n value: auditLog.action\n },\n entity: {\n label: entity?.displayName || \"-\",\n value: auditLog.entity,\n link: entity?.linkToEntity && entity.linkToEntity(encodeURIComponent(auditLog.entityId))\n }\n };\n};\n"],"names":["transformRawAuditLog","params","auditLog","app","apps","entity","action","encodeURIComponent"],"mappings":";AAOO,MAAMA,uBAAuB,CAACC;IACjC,MAAM,EAAEC,QAAQ,EAAE,GAAGD;IAErB,MAAME,MAAMC,KAAK,IAAI,CAACD,CAAAA,MAAOA,IAAI,GAAG,KAAKD,SAAS,GAAG;IACrD,MAAMG,SAASF,KAAK,UAAU,KAAKE,CAAAA,SAAUA,OAAO,IAAI,KAAKH,SAAS,MAAM;IAC5E,MAAMI,SAASD,QAAQ,SAAS,KAAKC,CAAAA,SAAUA,OAAO,IAAI,KAAKJ,SAAS,MAAM;IAC9E,OAAO;QACH,GAAGA,QAAQ;QACX,WAAW;YACP,GAAGA,SAAS,SAAS;YAErB,MAAM;QACV;QACA,QAAQ;YACJ,OAAOI,QAAQ,eAAe;YAC9B,OAAOJ,SAAS,MAAM;QAC1B;QACA,QAAQ;YACJ,OAAOG,QAAQ,eAAe;YAC9B,OAAOH,SAAS,MAAM;YACtB,MAAMG,QAAQ,gBAAgBA,OAAO,YAAY,CAACE,mBAAmBL,SAAS,QAAQ;QAC1F;IACJ;AACJ"}
|