@webiny/app-audit-logs 6.4.11 → 6.6.0-alpha.1
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/components/Text.d.ts +1 -3
- package/components/Text.js +4 -9
- package/components/Text.js.map +1 -1
- package/config/list/AuditLogsListConfig.d.ts +11 -5
- package/config/list/AuditLogsListConfig.js +10 -1
- package/config/list/AuditLogsListConfig.js.map +1 -1
- package/config/list/Browser/index.d.ts +2 -3
- package/config/list/Details/PreviewTab.d.ts +15 -0
- package/config/list/Details/PreviewTab.js +32 -0
- package/config/list/Details/PreviewTab.js.map +1 -0
- package/config/list/Details/index.d.ts +8 -0
- package/config/list/Details/index.js +7 -0
- package/config/list/Details/index.js.map +1 -0
- package/features/listAuditLogs/ListAuditLogsGateway.d.ts +11 -0
- package/features/listAuditLogs/ListAuditLogsGateway.js +71 -0
- package/features/listAuditLogs/ListAuditLogsGateway.js.map +1 -0
- package/features/listAuditLogs/ListAuditLogsRepository.d.ts +11 -0
- package/features/listAuditLogs/ListAuditLogsRepository.js +35 -0
- package/features/listAuditLogs/ListAuditLogsRepository.js.map +1 -0
- package/features/listAuditLogs/ListAuditLogsUseCase.d.ts +10 -0
- package/features/listAuditLogs/ListAuditLogsUseCase.js +19 -0
- package/features/listAuditLogs/ListAuditLogsUseCase.js.map +1 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsGateway.d.ts +20 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsGateway.js +5 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsGateway.js.map +1 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsRepository.d.ts +20 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsRepository.js +5 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsRepository.js.map +1 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.d.ts +20 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.js +5 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.js.map +1 -0
- package/features/listAuditLogs/abstractions/index.d.ts +6 -0
- package/features/listAuditLogs/abstractions/index.js +3 -0
- package/features/listAuditLogs/feature.d.ts +3 -0
- package/features/listAuditLogs/feature.js +21 -0
- package/features/listAuditLogs/feature.js.map +1 -0
- package/features/listAuditLogs/index.d.ts +1 -0
- package/features/listAuditLogs/index.js +1 -0
- package/graphql.d.ts +1 -1
- package/graphql.js +1 -2
- package/graphql.js.map +1 -1
- package/hooks/graphql.d.ts +0 -18
- package/hooks/graphql.js +0 -44
- package/hooks/schema.d.ts +2 -3
- package/hooks/schema.js +1 -2
- package/hooks/schema.js.map +1 -1
- package/hooks/useAuditLogsList.d.ts +1 -4
- package/hooks/useAuditLogsList.js +34 -42
- package/hooks/useAuditLogsList.js.map +1 -1
- package/index.js +15 -5
- package/index.js.map +1 -1
- package/package.json +14 -17
- package/types.d.ts +2 -2
- package/views/Logs/Filters/FilterByAction.d.ts +1 -1
- package/views/Logs/Filters/FilterByAction.js +5 -3
- package/views/Logs/Filters/FilterByAction.js.map +1 -1
- package/views/Logs/Filters/FilterByApp.js +2 -1
- package/views/Logs/Filters/FilterByApp.js.map +1 -1
- package/views/Logs/Filters/FilterByCreatedBy.js +18 -10
- package/views/Logs/Filters/FilterByCreatedBy.js.map +1 -1
- package/views/Logs/Filters/FilterByCreatedOn.js +26 -27
- package/views/Logs/Filters/FilterByCreatedOn.js.map +1 -1
- package/views/Logs/Filters/FilterByEntity.d.ts +1 -1
- package/views/Logs/Filters/FilterByEntity.js +5 -3
- package/views/Logs/Filters/FilterByEntity.js.map +1 -1
- package/views/Logs/Filters/FilterByEntityId.js +2 -1
- package/views/Logs/Filters/FilterByEntityId.js.map +1 -1
- package/views/Logs/Filters/FilterByInitiator.js +16 -9
- package/views/Logs/Filters/FilterByInitiator.js.map +1 -1
- package/views/Logs/Filters/Filters.d.ts +1 -2
- package/views/Logs/Filters/Filters.js +61 -13
- package/views/Logs/Filters/Filters.js.map +1 -1
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js +4 -5
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js.map +1 -1
- package/views/Logs/Header/Header.d.ts +2 -4
- package/views/Logs/Header/Header.js +4 -7
- package/views/Logs/Header/Header.js.map +1 -1
- package/views/Logs/LoadMoreButton/styled.d.ts +4 -4
- package/views/Logs/LoadMoreButton/styled.js +4 -6
- package/views/Logs/LoadMoreButton/styled.js.map +1 -1
- package/views/Logs/LogsView.js +4 -8
- package/views/Logs/LogsView.js.map +1 -1
- package/views/Logs/Preview/AuditLogDetailsPresenter.d.ts +13 -0
- package/views/Logs/Preview/AuditLogDetailsPresenter.js +36 -0
- package/views/Logs/Preview/AuditLogDetailsPresenter.js.map +1 -0
- package/views/Logs/Preview/Preview.d.ts +4 -2
- package/views/Logs/Preview/Preview.js +67 -22
- package/views/Logs/Preview/Preview.js.map +1 -1
- package/views/Logs/Preview/abstractions.d.ts +14 -0
- package/views/Logs/Preview/abstractions.js +5 -0
- package/views/Logs/Preview/abstractions.js.map +1 -0
- package/views/Logs/Preview/feature.d.ts +5 -0
- package/views/Logs/Preview/feature.js +22 -0
- package/views/Logs/Preview/feature.js.map +1 -0
- package/views/Logs/Preview/index.d.ts +2 -0
- package/views/Logs/Preview/index.js +1 -0
- package/views/Logs/Preview/tabs/AiPromptTabs.d.ts +2 -0
- package/views/Logs/Preview/tabs/AiPromptTabs.js +25 -0
- package/views/Logs/Preview/tabs/AiPromptTabs.js.map +1 -0
- package/views/Logs/Preview/tabs/LlmResponseTab.d.ts +4 -0
- package/views/Logs/Preview/tabs/LlmResponseTab.js +41 -0
- package/views/Logs/Preview/tabs/LlmResponseTab.js.map +1 -0
- package/views/Logs/Preview/tabs/SystemPromptTab.d.ts +4 -0
- package/views/Logs/Preview/tabs/SystemPromptTab.js +24 -0
- package/views/Logs/Preview/tabs/SystemPromptTab.js.map +1 -0
- package/views/Logs/Preview/tabs/UserPromptTab.d.ts +4 -0
- package/views/Logs/Preview/tabs/UserPromptTab.js +18 -0
- package/views/Logs/Preview/tabs/UserPromptTab.js.map +1 -0
- package/views/Logs/Preview/tabs/shared.d.ts +28 -0
- package/views/Logs/Preview/tabs/shared.js +16 -0
- package/views/Logs/Preview/tabs/shared.js.map +1 -0
- package/views/Logs/Table/Table.d.ts +3 -6
- package/views/Logs/Table/Table.js +25 -16
- package/views/Logs/Table/Table.js.map +1 -1
- package/views/Logs/Table/styled.d.ts +1 -16
- package/views/Logs/Table/styled.js +15 -55
- package/views/Logs/Table/styled.js.map +1 -1
- package/hooks/graphql.js.map +0 -1
- package/views/Logs/Filters/FilterByTimestamp.d.ts +0 -2
- package/views/Logs/Filters/FilterByTimestamp.js +0 -39
- package/views/Logs/Filters/FilterByTimestamp.js.map +0 -1
- package/views/Logs/Filters/styled.d.ts +0 -4
- package/views/Logs/Filters/styled.js +0 -13
- package/views/Logs/Filters/styled.js.map +0 -1
- package/views/Logs/Logs.d.ts +0 -3
- package/views/Logs/Logs.js +0 -76
- package/views/Logs/Logs.js.map +0 -1
- package/views/Logs/Preview/styled.d.ts +0 -5
- package/views/Logs/Preview/styled.js +0 -32
- package/views/Logs/Preview/styled.js.map +0 -1
package/hooks/graphql.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { IAuditLogRaw, IAuditLogsError, IAuditLogsMeta } from "../types.js";
|
|
2
1
|
export interface IListAuditLogsVariablesWhere {
|
|
3
2
|
app?: string;
|
|
4
3
|
action?: string;
|
|
@@ -8,20 +7,3 @@ export interface IListAuditLogsVariablesWhere {
|
|
|
8
7
|
createdOn_gte?: Date;
|
|
9
8
|
createdOn_lte?: Date;
|
|
10
9
|
}
|
|
11
|
-
export interface IListAuditLogsVariables {
|
|
12
|
-
where: Partial<IListAuditLogsVariablesWhere>;
|
|
13
|
-
after: string | undefined;
|
|
14
|
-
sort: "ASC" | "DESC" | undefined;
|
|
15
|
-
limit: number | undefined;
|
|
16
|
-
}
|
|
17
|
-
export type IListAuditLogsVariablesPartial = Partial<IListAuditLogsVariables>;
|
|
18
|
-
export interface IListAuditLogsResponse {
|
|
19
|
-
auditLogs: {
|
|
20
|
-
listAuditLogs: {
|
|
21
|
-
data: IAuditLogRaw[] | null;
|
|
22
|
-
meta: IAuditLogsMeta | null;
|
|
23
|
-
error: IAuditLogsError | null;
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
export declare const LIST_AUDIT_LOGS: import("graphql").DocumentNode;
|
package/hooks/graphql.js
CHANGED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import graphql_tag from "graphql-tag";
|
|
2
|
-
const LIST_AUDIT_LOGS = graphql_tag`
|
|
3
|
-
query ListAuditLogs(
|
|
4
|
-
$where: ListAuditLogsWhere!
|
|
5
|
-
$sort: AuditLogsSort
|
|
6
|
-
$after: String
|
|
7
|
-
$limit: Number
|
|
8
|
-
) {
|
|
9
|
-
auditLogs {
|
|
10
|
-
listAuditLogs(where: $where, after: $after, sort: $sort, limit: $limit) {
|
|
11
|
-
data {
|
|
12
|
-
id
|
|
13
|
-
createdBy {
|
|
14
|
-
id
|
|
15
|
-
displayName
|
|
16
|
-
type
|
|
17
|
-
}
|
|
18
|
-
createdOn
|
|
19
|
-
app
|
|
20
|
-
action
|
|
21
|
-
message
|
|
22
|
-
entity
|
|
23
|
-
entityId
|
|
24
|
-
tags
|
|
25
|
-
expiresAt
|
|
26
|
-
content
|
|
27
|
-
}
|
|
28
|
-
meta {
|
|
29
|
-
hasMoreItems
|
|
30
|
-
cursor
|
|
31
|
-
}
|
|
32
|
-
error {
|
|
33
|
-
message
|
|
34
|
-
code
|
|
35
|
-
data
|
|
36
|
-
stack
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
`;
|
|
42
|
-
export { LIST_AUDIT_LOGS };
|
|
43
|
-
|
|
44
|
-
//# sourceMappingURL=graphql.js.map
|
package/hooks/schema.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import zod from "zod";
|
|
2
|
-
import { ActionType } from "../types.js";
|
|
3
2
|
export declare const auditLogSchema: zod.ZodObject<{
|
|
4
3
|
id: zod.ZodString;
|
|
5
4
|
createdBy: zod.ZodObject<{
|
|
@@ -9,7 +8,7 @@ export declare const auditLogSchema: zod.ZodObject<{
|
|
|
9
8
|
}, zod.core.$strip>;
|
|
10
9
|
createdOn: zod.ZodPreprocess<zod.ZodDate>;
|
|
11
10
|
app: zod.ZodString;
|
|
12
|
-
action: zod.
|
|
11
|
+
action: zod.ZodString;
|
|
13
12
|
message: zod.ZodString;
|
|
14
13
|
entity: zod.ZodString;
|
|
15
14
|
entityId: zod.ZodString;
|
|
@@ -26,7 +25,7 @@ export declare const listAuditLogsSchema: zod.ZodArray<zod.ZodObject<{
|
|
|
26
25
|
}, zod.core.$strip>;
|
|
27
26
|
createdOn: zod.ZodPreprocess<zod.ZodDate>;
|
|
28
27
|
app: zod.ZodString;
|
|
29
|
-
action: zod.
|
|
28
|
+
action: zod.ZodString;
|
|
30
29
|
message: zod.ZodString;
|
|
31
30
|
entity: zod.ZodString;
|
|
32
31
|
entityId: zod.ZodString;
|
package/hooks/schema.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import zod from "zod";
|
|
2
|
-
import { ActionType } from "../types.js";
|
|
3
2
|
const auditLogSchema = zod.object({
|
|
4
3
|
id: zod.string(),
|
|
5
4
|
createdBy: zod.object({
|
|
@@ -12,7 +11,7 @@ const auditLogSchema = zod.object({
|
|
|
12
11
|
return value;
|
|
13
12
|
}, zod.date()),
|
|
14
13
|
app: zod.string(),
|
|
15
|
-
action: zod.
|
|
14
|
+
action: zod.string(),
|
|
16
15
|
message: zod.string(),
|
|
17
16
|
entity: zod.string(),
|
|
18
17
|
entityId: zod.string(),
|
package/hooks/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks/schema.js","sources":["../../src/hooks/schema.ts"],"sourcesContent":["import zod from \"zod\";\
|
|
1
|
+
{"version":3,"file":"hooks/schema.js","sources":["../../src/hooks/schema.ts"],"sourcesContent":["import zod from \"zod\";\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.string(),\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","undefined","listAuditLogsSchema"],"mappings":";AAEO,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,MAAM;IAClB,SAASA,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,SAASE;IAExB,SAASH,IAAI,MAAM;AACvB;AAEO,MAAMI,sBAAsBJ,IAAI,KAAK,CAACD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IListAuditLogsVariablesWhere } from "../hooks/graphql.js";
|
|
2
2
|
import type { IAuditLog, IAuditLogsMeta } from "../types.js";
|
|
3
3
|
import type { OnDataTableSortingChange, DataTableSorting } from "@webiny/admin-ui";
|
|
4
4
|
export interface UseAuditLogs {
|
|
@@ -12,8 +12,5 @@ export interface UseAuditLogs {
|
|
|
12
12
|
after?: string;
|
|
13
13
|
sorting: DataTableSorting;
|
|
14
14
|
setSorting: OnDataTableSortingChange;
|
|
15
|
-
showingFilters: boolean;
|
|
16
|
-
showFilters: () => void;
|
|
17
|
-
hideFilters: () => void;
|
|
18
15
|
}
|
|
19
16
|
export declare const useAuditLogsList: () => UseAuditLogs;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { transformRawAuditLog } from "../utils/transformRawAuditLog.js";
|
|
5
|
-
import { listAuditLogsSchema } from "./schema.js";
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
2
|
+
import { useFeature } from "@webiny/app";
|
|
3
|
+
import { ListAuditLogsFeature } from "../features/listAuditLogs/index.js";
|
|
6
4
|
const useAuditLogsList = ()=>{
|
|
5
|
+
const { useCase } = useFeature(ListAuditLogsFeature);
|
|
7
6
|
const [variables, setVariables] = useState({
|
|
8
7
|
where: {},
|
|
9
8
|
after: void 0,
|
|
@@ -11,13 +10,25 @@ const useAuditLogsList = ()=>{
|
|
|
11
10
|
limit: 25
|
|
12
11
|
});
|
|
13
12
|
const [accumulatedRecords, setAccumulatedRecords] = useState([]);
|
|
13
|
+
const [loading, setLoading] = useState(true);
|
|
14
|
+
const [meta, setMeta] = useState({
|
|
15
|
+
hasMoreItems: false,
|
|
16
|
+
cursor: null
|
|
17
|
+
});
|
|
18
|
+
const resetPagination = useCallback(()=>{
|
|
19
|
+
setAccumulatedRecords([]);
|
|
20
|
+
setMeta({
|
|
21
|
+
hasMoreItems: false,
|
|
22
|
+
cursor: null
|
|
23
|
+
});
|
|
24
|
+
}, []);
|
|
14
25
|
const setWhere = useCallback((where)=>{
|
|
15
26
|
setVariables((prev)=>({
|
|
16
27
|
...prev,
|
|
17
28
|
where,
|
|
18
29
|
after: void 0
|
|
19
30
|
}));
|
|
20
|
-
|
|
31
|
+
resetPagination();
|
|
21
32
|
}, []);
|
|
22
33
|
const setSort = useCallback((sort)=>{
|
|
23
34
|
setVariables((prev)=>({
|
|
@@ -25,7 +36,7 @@ const useAuditLogsList = ()=>{
|
|
|
25
36
|
sort,
|
|
26
37
|
after: void 0
|
|
27
38
|
}));
|
|
28
|
-
|
|
39
|
+
resetPagination();
|
|
29
40
|
}, []);
|
|
30
41
|
const setAfter = useCallback((after)=>{
|
|
31
42
|
setVariables((prev)=>({
|
|
@@ -39,7 +50,6 @@ const useAuditLogsList = ()=>{
|
|
|
39
50
|
limit
|
|
40
51
|
}));
|
|
41
52
|
}, []);
|
|
42
|
-
const [showingFilters, setShowingFilters] = useState(false);
|
|
43
53
|
const [acoSorting, setAcoSorting] = useState([]);
|
|
44
54
|
useEffect(()=>{
|
|
45
55
|
const sort = acoSorting[0];
|
|
@@ -48,32 +58,21 @@ const useAuditLogsList = ()=>{
|
|
|
48
58
|
}, [
|
|
49
59
|
acoSorting
|
|
50
60
|
]);
|
|
51
|
-
const
|
|
52
|
-
variables,
|
|
53
|
-
fetchPolicy: "network-only"
|
|
54
|
-
});
|
|
61
|
+
const requestIdRef = useRef(0);
|
|
55
62
|
useEffect(()=>{
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
setLoading(true);
|
|
64
|
+
const requestId = ++requestIdRef.current;
|
|
65
|
+
useCase.execute(variables).then((result)=>{
|
|
66
|
+
if (requestId !== requestIdRef.current) return;
|
|
67
|
+
variables.after ? setAccumulatedRecords((prev)=>[
|
|
68
|
+
...prev,
|
|
69
|
+
...result.records
|
|
70
|
+
]) : setAccumulatedRecords(result.records);
|
|
71
|
+
setMeta(result.meta);
|
|
72
|
+
setLoading(false);
|
|
73
|
+
});
|
|
66
74
|
}, [
|
|
67
|
-
|
|
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
|
|
75
|
+
variables
|
|
77
76
|
]);
|
|
78
77
|
const sorting = useMemo(()=>[
|
|
79
78
|
{
|
|
@@ -84,24 +83,17 @@ const useAuditLogsList = ()=>{
|
|
|
84
83
|
variables.sort
|
|
85
84
|
]);
|
|
86
85
|
return {
|
|
87
|
-
isListLoading:
|
|
86
|
+
isListLoading: loading,
|
|
88
87
|
records: accumulatedRecords,
|
|
89
88
|
meta,
|
|
90
89
|
listMoreRecords: ()=>{
|
|
91
|
-
setAfter(meta.cursor
|
|
90
|
+
if (!loading && meta.cursor) setAfter(meta.cursor);
|
|
92
91
|
},
|
|
93
92
|
setWhere,
|
|
94
93
|
sorting,
|
|
95
94
|
setSorting: setAcoSorting,
|
|
96
95
|
setLimit,
|
|
97
|
-
isListLoadingMore:
|
|
98
|
-
showingFilters,
|
|
99
|
-
showFilters: ()=>{
|
|
100
|
-
setShowingFilters(true);
|
|
101
|
-
},
|
|
102
|
-
hideFilters: ()=>{
|
|
103
|
-
setShowingFilters(false);
|
|
104
|
-
}
|
|
96
|
+
isListLoadingMore: loading && !!variables.after
|
|
105
97
|
};
|
|
106
98
|
};
|
|
107
99
|
export { useAuditLogsList };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks/useAuditLogsList.js","sources":["../../src/hooks/useAuditLogsList.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"hooks/useAuditLogsList.js","sources":["../../src/hooks/useAuditLogsList.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useFeature } from \"@webiny/app\";\nimport { ListAuditLogsFeature } from \"~/features/listAuditLogs/index.js\";\nimport type { IListAuditLogsVariablesWhere } from \"~/hooks/graphql.js\";\nimport type { IAuditLog, IAuditLogsMeta } from \"~/types.js\";\nimport type { OnDataTableSortingChange, DataTableSorting } from \"@webiny/admin-ui\";\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}\n\ninterface ListVariables {\n where: Record<string, unknown>;\n after: string | undefined;\n sort: \"ASC\" | \"DESC\";\n limit: number;\n}\n\nexport const useAuditLogsList = (): UseAuditLogs => {\n const { useCase } = useFeature(ListAuditLogsFeature);\n\n const [variables, setVariables] = useState<ListVariables>({\n where: {},\n after: undefined,\n sort: \"DESC\",\n limit: 25\n });\n\n const [accumulatedRecords, setAccumulatedRecords] = useState<IAuditLog[]>([]);\n const [loading, setLoading] = useState(true);\n const [meta, setMeta] = useState<IAuditLogsMeta>({\n hasMoreItems: false,\n cursor: null\n });\n\n const resetPagination = useCallback(() => {\n setAccumulatedRecords([]);\n setMeta({ hasMoreItems: false, cursor: null });\n }, []);\n\n const setWhere = useCallback((where: Partial<IListAuditLogsVariablesWhere>) => {\n setVariables(prev => ({ ...prev, where, after: undefined }));\n resetPagination();\n }, []);\n\n const setSort = useCallback((sort: \"ASC\" | \"DESC\") => {\n setVariables(prev => ({ ...prev, sort, after: undefined }));\n resetPagination();\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 [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 requestIdRef = useRef(0);\n\n useEffect(() => {\n setLoading(true);\n const requestId = ++requestIdRef.current;\n\n useCase.execute(variables).then(result => {\n if (requestId !== requestIdRef.current) {\n return;\n }\n\n if (variables.after) {\n setAccumulatedRecords(prev => [...prev, ...result.records]);\n } else {\n setAccumulatedRecords(result.records);\n }\n\n setMeta(result.meta);\n setLoading(false);\n });\n }, [variables]);\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: loading,\n records: accumulatedRecords,\n meta,\n listMoreRecords: () => {\n if (!loading && meta.cursor) {\n setAfter(meta.cursor);\n }\n },\n setWhere,\n sorting,\n setSorting: setAcoSorting,\n setLimit,\n isListLoadingMore: loading && !!variables.after\n };\n};\n"],"names":["useAuditLogsList","useCase","useFeature","ListAuditLogsFeature","variables","setVariables","useState","undefined","accumulatedRecords","setAccumulatedRecords","loading","setLoading","meta","setMeta","resetPagination","useCallback","setWhere","where","prev","setSort","sort","setAfter","after","setLimit","limit","acoSorting","setAcoSorting","useEffect","requestIdRef","useRef","requestId","result","sorting","useMemo"],"mappings":";;;AA2BO,MAAMA,mBAAmB;IAC5B,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAWC;IAE/B,MAAM,CAACC,WAAWC,aAAa,GAAGC,SAAwB;QACtD,OAAO,CAAC;QACR,OAAOC;QACP,MAAM;QACN,OAAO;IACX;IAEA,MAAM,CAACC,oBAAoBC,sBAAsB,GAAGH,SAAsB,EAAE;IAC5E,MAAM,CAACI,SAASC,WAAW,GAAGL,SAAS;IACvC,MAAM,CAACM,MAAMC,QAAQ,GAAGP,SAAyB;QAC7C,cAAc;QACd,QAAQ;IACZ;IAEA,MAAMQ,kBAAkBC,YAAY;QAChCN,sBAAsB,EAAE;QACxBI,QAAQ;YAAE,cAAc;YAAO,QAAQ;QAAK;IAChD,GAAG,EAAE;IAEL,MAAMG,WAAWD,YAAY,CAACE;QAC1BZ,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAED;gBAAO,OAAOV;YAAU;QACzDO;IACJ,GAAG,EAAE;IAEL,MAAMK,UAAUJ,YAAY,CAACK;QACzBf,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEE;gBAAM,OAAOb;YAAU;QACxDO;IACJ,GAAG,EAAE;IAEL,MAAMO,WAAWN,YAAY,CAACO;QAC1BjB,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEI;YAAM;IAC3C,GAAG,EAAE;IAEL,MAAMC,WAAWR,YAAY,CAACS;QAC1BnB,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEM;YAAM;IAC3C,GAAG,EAAE;IAEL,MAAM,CAACC,YAAYC,cAAc,GAAGpB,SAA2B,EAAE;IAEjEqB,UAAU;QACN,MAAMP,OAAOK,UAAU,CAAC,EAAE;QAC1B,IAAI,CAACL,MACD;QAEJD,QAAQC,KAAK,IAAI,GAAG,SAAS;IACjC,GAAG;QAACK;KAAW;IAEf,MAAMG,eAAeC,OAAO;IAE5BF,UAAU;QACNhB,WAAW;QACX,MAAMmB,YAAY,EAAEF,aAAa,OAAO;QAExC3B,QAAQ,OAAO,CAACG,WAAW,IAAI,CAAC2B,CAAAA;YAC5B,IAAID,cAAcF,aAAa,OAAO,EAClC;YAGAxB,UAAU,KAAK,GACfK,sBAAsBS,CAAAA,OAAQ;uBAAIA;uBAASa,OAAO,OAAO;iBAAC,IAE1DtB,sBAAsBsB,OAAO,OAAO;YAGxClB,QAAQkB,OAAO,IAAI;YACnBpB,WAAW;QACf;IACJ,GAAG;QAACP;KAAU;IAEd,MAAM4B,UAAUC,QAAQ,IACb;YACH;gBACI,IAAI;gBACJ,MAAM7B,AAAmB,WAAnBA,UAAU,IAAI;YACxB;SACH,EACF;QAACA,UAAU,IAAI;KAAC;IAEnB,OAAO;QACH,eAAeM;QACf,SAASF;QACTI;QACA,iBAAiB;YACb,IAAI,CAACF,WAAWE,KAAK,MAAM,EACvBS,SAAST,KAAK,MAAM;QAE5B;QACAI;QACAgB;QACA,YAAYN;QACZH;QACA,mBAAmBb,WAAW,CAAC,CAACN,UAAU,KAAK;IACnD;AACJ"}
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import react from "react";
|
|
2
|
-
import { AdminConfig, AdminLayout, HasPermission, RegisterFeature,
|
|
2
|
+
import { AdminConfig, AdminLayout, HasPermission, RegisterFeature, useFeatureFlags, useRouter } from "@webiny/app-admin";
|
|
3
3
|
import { ReactComponent } from "@webiny/icons/manage_search.svg";
|
|
4
4
|
import { LogsModule } from "./views/Logs/LogsModule.js";
|
|
5
5
|
import { SecurityPermission } from "./SecurityPermission.js";
|
|
@@ -7,14 +7,21 @@ import { LogsView } from "./views/Logs/LogsView.js";
|
|
|
7
7
|
import { AuditLogsListWithConfig } from "./config/list/index.js";
|
|
8
8
|
import { Routes } from "./routes.js";
|
|
9
9
|
import { AlPermissionsFeature } from "./features/permissions/feature.js";
|
|
10
|
+
import { ListAuditLogsFeature } from "./features/listAuditLogs/index.js";
|
|
11
|
+
import { AuditLogDetailsPresenterFeature } from "./views/Logs/Preview/feature.js";
|
|
12
|
+
import { AiPromptPreviewTabs } from "./views/Logs/Preview/tabs/AiPromptTabs.js";
|
|
10
13
|
const { Menu: Menu, Route: Route } = AdminConfig;
|
|
11
14
|
const AuditLogs = ()=>{
|
|
12
|
-
const
|
|
15
|
+
const featureFlags = useFeatureFlags();
|
|
13
16
|
const router = useRouter();
|
|
14
|
-
if (!
|
|
17
|
+
if (!featureFlags.isEnabled("auditLogs")) return null;
|
|
15
18
|
return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
16
19
|
feature: AlPermissionsFeature
|
|
17
|
-
}), /*#__PURE__*/ react.createElement(
|
|
20
|
+
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
21
|
+
feature: ListAuditLogsFeature
|
|
22
|
+
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
23
|
+
feature: AuditLogDetailsPresenterFeature
|
|
24
|
+
}), /*#__PURE__*/ react.createElement(LogsModule, null), /*#__PURE__*/ react.createElement(SecurityPermission, null), /*#__PURE__*/ react.createElement(AiPromptPreviewTabs, null), /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(HasPermission, {
|
|
18
25
|
any: [
|
|
19
26
|
"al.*"
|
|
20
27
|
]
|
|
@@ -33,7 +40,10 @@ const AuditLogs = ()=>{
|
|
|
33
40
|
route: Routes.AuditLogsList,
|
|
34
41
|
element: /*#__PURE__*/ react.createElement(AdminLayout, {
|
|
35
42
|
title: "Audit Logs - Logs"
|
|
36
|
-
}, /*#__PURE__*/ react.createElement(
|
|
43
|
+
}, /*#__PURE__*/ react.createElement(AdminConfig.Breadcrumb, {
|
|
44
|
+
name: "auditLogs",
|
|
45
|
+
label: "Audit Logs"
|
|
46
|
+
}), /*#__PURE__*/ react.createElement(AuditLogsListWithConfig, null, /*#__PURE__*/ react.createElement(LogsView, null)))
|
|
37
47
|
}))));
|
|
38
48
|
};
|
|
39
49
|
export { AuditLogs };
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
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, useFeatureFlags } 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\";\nimport { ListAuditLogsFeature } from \"~/features/listAuditLogs/index.js\";\nimport { AuditLogDetailsPresenterFeature } from \"~/views/Logs/Preview/feature.js\";\nimport { AiPromptPreviewTabs } from \"~/views/Logs/Preview/tabs/AiPromptTabs.js\";\n\nconst { Menu, Route } = AdminConfig;\n\nexport const AuditLogs = () => {\n const featureFlags = useFeatureFlags();\n const router = useRouter();\n\n if (!featureFlags.isEnabled(\"auditLogs\")) {\n return null;\n }\n\n return (\n <>\n <RegisterFeature feature={AlPermissionsFeature} />\n <RegisterFeature feature={ListAuditLogsFeature} />\n <RegisterFeature feature={AuditLogDetailsPresenterFeature} />\n <LogsModule />\n <SecurityPermission />\n <AiPromptPreviewTabs />\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 <AdminConfig.Breadcrumb name={\"auditLogs\"} label={\"Audit Logs\"} />\n <AuditLogsListWithConfig>\n <LogsView />\n </AuditLogsListWithConfig>\n </AdminLayout>\n }\n />\n </HasPermission>\n </AdminConfig>\n </>\n );\n};\n"],"names":["Menu","Route","AdminConfig","AuditLogs","featureFlags","useFeatureFlags","router","useRouter","RegisterFeature","AlPermissionsFeature","ListAuditLogsFeature","AuditLogDetailsPresenterFeature","LogsModule","SecurityPermission","AiPromptPreviewTabs","HasPermission","Icon","Routes","AdminLayout","AuditLogsListWithConfig","LogsView"],"mappings":";;;;;;;;;;;;AAeA,MAAM,EAAEA,MAAAA,IAAI,EAAEC,OAAAA,KAAK,EAAE,GAAGC;AAEjB,MAAMC,YAAY;IACrB,MAAMC,eAAeC;IACrB,MAAMC,SAASC;IAEf,IAAI,CAACH,aAAa,SAAS,CAAC,cACxB,OAAO;IAGX,OAAO,WAAP,GACI,wDACI,oBAACI,iBAAeA;QAAC,SAASC;sBAC1B,oBAACD,iBAAeA;QAAC,SAASE;sBAC1B,oBAACF,iBAAeA;QAAC,SAASG;sBAC1B,oBAACC,YAAUA,OAAAA,WAAAA,GACX,oBAACC,oBAAkBA,OAAAA,WAAAA,GACnB,oBAACC,qBAAmBA,OAAAA,WAAAA,GACpB,oBAACZ,aAAWA,MAAAA,WAAAA,GACR,oBAACa,eAAaA;QAAC,KAAK;YAAC;SAAO;qBACxB,oBAACf,MAAIA;QACD,MAAK;QACL;QACA,uBACI,oBAACA,KAAK,IAAI;YACN,MAAM;YACN,oBAAM,oBAACA,KAAK,IAAI,CAAC,IAAI;gBAAC,uBAAS,oBAACgB,gBAAIA;gBAAK,OAAO;;YAChD,IAAIV,OAAO,OAAO,CAACW,OAAO,aAAa;;sBAInD,oBAAChB,OAAKA;QACF,OAAOgB,OAAO,aAAa;QAC3B,uBACI,oBAACC,aAAWA;YAAC,OAAO;yBAChB,oBAAChB,YAAY,UAAU;YAAC,MAAM;YAAa,OAAO;0BAClD,oBAACiB,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.6.0-alpha.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -13,21 +13,18 @@
|
|
|
13
13
|
"description": "",
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@
|
|
17
|
-
"@
|
|
18
|
-
"@
|
|
19
|
-
"@
|
|
20
|
-
"@webiny/
|
|
21
|
-
"@webiny/
|
|
22
|
-
"@webiny/
|
|
23
|
-
"@webiny/
|
|
24
|
-
"@webiny/
|
|
25
|
-
"@webiny/icons": "6.4.11",
|
|
26
|
-
"@webiny/react-composition": "6.4.11",
|
|
27
|
-
"@webiny/react-properties": "6.4.11",
|
|
16
|
+
"@webiny/admin-ui": "6.6.0-alpha.1",
|
|
17
|
+
"@webiny/app": "6.6.0-alpha.1",
|
|
18
|
+
"@webiny/app-admin": "6.6.0-alpha.1",
|
|
19
|
+
"@webiny/common-audit-logs": "6.6.0-alpha.1",
|
|
20
|
+
"@webiny/feature": "6.6.0-alpha.1",
|
|
21
|
+
"@webiny/form": "6.6.0-alpha.1",
|
|
22
|
+
"@webiny/icons": "6.6.0-alpha.1",
|
|
23
|
+
"@webiny/react-composition": "6.6.0-alpha.1",
|
|
24
|
+
"@webiny/react-properties": "6.6.0-alpha.1",
|
|
28
25
|
"date-fns": "4.4.0",
|
|
29
|
-
"graphql-tag": "2.12.7",
|
|
30
26
|
"lodash": "4.18.1",
|
|
27
|
+
"mobx": "7.0.3",
|
|
31
28
|
"zod": "4.4.3"
|
|
32
29
|
},
|
|
33
30
|
"peerDependencies": {
|
|
@@ -35,10 +32,10 @@
|
|
|
35
32
|
},
|
|
36
33
|
"devDependencies": {
|
|
37
34
|
"@types/react": "18.3.31",
|
|
38
|
-
"@webiny/build-tools": "6.
|
|
39
|
-
"execa": "
|
|
35
|
+
"@webiny/build-tools": "6.6.0-alpha.1",
|
|
36
|
+
"execa": "10.0.1",
|
|
40
37
|
"rimraf": "6.1.3",
|
|
41
|
-
"typescript": "
|
|
38
|
+
"typescript": "7.0.2"
|
|
42
39
|
},
|
|
43
40
|
"publishConfig": {
|
|
44
41
|
"access": "public"
|
package/types.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export interface IAuditLogRaw {
|
|
|
22
22
|
createdBy: IAuditLogCreatedByRaw;
|
|
23
23
|
createdOn: Date;
|
|
24
24
|
app: string;
|
|
25
|
-
action:
|
|
25
|
+
action: string;
|
|
26
26
|
message: string;
|
|
27
27
|
entity: string;
|
|
28
28
|
entityId: string;
|
|
@@ -36,7 +36,7 @@ export interface IAuditLogEntity {
|
|
|
36
36
|
link?: string;
|
|
37
37
|
}
|
|
38
38
|
export interface IAuditLogAction {
|
|
39
|
-
value:
|
|
39
|
+
value: string;
|
|
40
40
|
label: string;
|
|
41
41
|
}
|
|
42
42
|
export interface IAuditLog extends Omit<IAuditLogRaw, "entity" | "action" | "createdBy"> {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const FilterByAction: () => React.JSX.Element
|
|
2
|
+
export declare const FilterByAction: () => React.JSX.Element;
|
|
@@ -31,12 +31,14 @@ const FilterByAction = ()=>{
|
|
|
31
31
|
}, [
|
|
32
32
|
data
|
|
33
33
|
]);
|
|
34
|
-
|
|
34
|
+
const disabled = !data.app || !data.entity;
|
|
35
35
|
return /*#__PURE__*/ react.createElement(Select, {
|
|
36
36
|
...bind,
|
|
37
|
+
label: "Action",
|
|
37
38
|
size: "md",
|
|
38
|
-
placeholder: "
|
|
39
|
-
options: options
|
|
39
|
+
placeholder: "All actions",
|
|
40
|
+
options: disabled ? [] : options,
|
|
41
|
+
disabled: disabled
|
|
40
42
|
});
|
|
41
43
|
};
|
|
42
44
|
export { FilterByAction };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views/Logs/Filters/FilterByAction.js","sources":["../../../../src/views/Logs/Filters/FilterByAction.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { useBind, useForm } from \"@webiny/form\";\nimport { Select } from \"@webiny/admin-ui\";\nimport { apps as auditLogsApps } from \"@webiny/common-audit-logs\";\nimport type { IFilterFormData } from \"~/views/Logs/Filters/types.js\";\n\nconst getValidFilterValue = (value: string): string | undefined => {\n if (value === \"all\" || value === \"\") {\n return undefined;\n }\n return value;\n};\n\nexport const FilterByAction = () => {\n const { data } = useForm<IFilterFormData>();\n const bind = useBind({\n name: \"action\",\n beforeChange(value, cb) {\n cb(getValidFilterValue(value));\n }\n });\n\n const options = useMemo(() => {\n if (!data.app) {\n return [];\n }\n\n const entities = auditLogsApps.find(app => app.app === data.app)?.entities || [];\n const actions = entities.find(entity => entity.type === data.entity)?.actions || [];\n\n return [\n { label: \"All\", value: \"all\" },\n ...actions.map(entity => ({ label: entity.displayName, value: entity.type }))\n ];\n }, [data]);\n\n
|
|
1
|
+
{"version":3,"file":"views/Logs/Filters/FilterByAction.js","sources":["../../../../src/views/Logs/Filters/FilterByAction.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { useBind, useForm } from \"@webiny/form\";\nimport { Select } from \"@webiny/admin-ui\";\nimport { apps as auditLogsApps } from \"@webiny/common-audit-logs\";\nimport type { IFilterFormData } from \"~/views/Logs/Filters/types.js\";\n\nconst getValidFilterValue = (value: string): string | undefined => {\n if (value === \"all\" || value === \"\") {\n return undefined;\n }\n return value;\n};\n\nexport const FilterByAction = () => {\n const { data } = useForm<IFilterFormData>();\n const bind = useBind({\n name: \"action\",\n beforeChange(value, cb) {\n cb(getValidFilterValue(value));\n }\n });\n\n const options = useMemo(() => {\n if (!data.app) {\n return [];\n }\n\n const entities = auditLogsApps.find(app => app.app === data.app)?.entities || [];\n const actions = entities.find(entity => entity.type === data.entity)?.actions || [];\n\n return [\n { label: \"All\", value: \"all\" },\n ...actions.map(entity => ({ label: entity.displayName, value: entity.type }))\n ];\n }, [data]);\n\n const disabled = !data.app || !data.entity;\n\n return (\n <Select\n {...bind}\n label={\"Action\"}\n size={\"md\"}\n placeholder={\"All actions\"}\n options={disabled ? [] : options}\n disabled={disabled}\n />\n );\n};\n"],"names":["getValidFilterValue","value","FilterByAction","data","useForm","bind","useBind","cb","options","useMemo","entities","auditLogsApps","app","actions","entity","disabled","Select"],"mappings":";;;;AAMA,MAAMA,sBAAsB,CAACC;IACzB,IAAIA,AAAU,UAAVA,SAAmBA,AAAU,OAAVA,OACnB;IAEJ,OAAOA;AACX;AAEO,MAAMC,iBAAiB;IAC1B,MAAM,EAAEC,IAAI,EAAE,GAAGC;IACjB,MAAMC,OAAOC,QAAQ;QACjB,MAAM;QACN,cAAaL,KAAK,EAAEM,EAAE;YAClBA,GAAGP,oBAAoBC;QAC3B;IACJ;IAEA,MAAMO,UAAUC,QAAQ;QACpB,IAAI,CAACN,KAAK,GAAG,EACT,OAAO,EAAE;QAGb,MAAMO,WAAWC,KAAc,IAAI,CAACC,CAAAA,MAAOA,IAAI,GAAG,KAAKT,KAAK,GAAG,GAAG,YAAY,EAAE;QAChF,MAAMU,UAAUH,SAAS,IAAI,CAACI,CAAAA,SAAUA,OAAO,IAAI,KAAKX,KAAK,MAAM,GAAG,WAAW,EAAE;QAEnF,OAAO;YACH;gBAAE,OAAO;gBAAO,OAAO;YAAM;eAC1BU,QAAQ,GAAG,CAACC,CAAAA,SAAW;oBAAE,OAAOA,OAAO,WAAW;oBAAE,OAAOA,OAAO,IAAI;gBAAC;SAC7E;IACL,GAAG;QAACX;KAAK;IAET,MAAMY,WAAW,CAACZ,KAAK,GAAG,IAAI,CAACA,KAAK,MAAM;IAE1C,OAAO,WAAP,GACI,oBAACa,QAAMA;QACF,GAAGX,IAAI;QACR,OAAO;QACP,MAAM;QACN,aAAa;QACb,SAASU,WAAW,EAAE,GAAGP;QACzB,UAAUO;;AAGtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views/Logs/Filters/FilterByApp.js","sources":["../../../../src/views/Logs/Filters/FilterByApp.tsx"],"sourcesContent":["import React from \"react\";\nimport { useBind, useForm } from \"@webiny/form\";\nimport { Select } from \"@webiny/admin-ui\";\nimport { apps as auditLogsApps } from \"@webiny/common-audit-logs\";\nimport type { IFilterFormData } from \"~/views/Logs/Filters/types.js\";\n\nconst getValidFilterValue = (value: string): string | undefined => {\n if (value === \"all\" || value === \"\") {\n return undefined;\n }\n return value;\n};\n\nexport const FilterByApp = () => {\n const { setValue } = useForm<IFilterFormData>();\n const bind = useBind({\n name: \"app\",\n beforeChange(value, cb) {\n setValue(\"entity\", undefined);\n setValue(\"action\", undefined);\n cb(getValidFilterValue(value));\n }\n });\n\n return (\n <Select\n {...bind}\n size={\"md\"}\n placeholder={\"
|
|
1
|
+
{"version":3,"file":"views/Logs/Filters/FilterByApp.js","sources":["../../../../src/views/Logs/Filters/FilterByApp.tsx"],"sourcesContent":["import React from \"react\";\nimport { useBind, useForm } from \"@webiny/form\";\nimport { Select } from \"@webiny/admin-ui\";\nimport { apps as auditLogsApps } from \"@webiny/common-audit-logs\";\nimport type { IFilterFormData } from \"~/views/Logs/Filters/types.js\";\n\nconst getValidFilterValue = (value: string): string | undefined => {\n if (value === \"all\" || value === \"\") {\n return undefined;\n }\n return value;\n};\n\nexport const FilterByApp = () => {\n const { setValue } = useForm<IFilterFormData>();\n const bind = useBind({\n name: \"app\",\n beforeChange(value, cb) {\n setValue(\"entity\", undefined);\n setValue(\"action\", undefined);\n cb(getValidFilterValue(value));\n }\n });\n\n return (\n <Select\n {...bind}\n label={\"Application\"}\n size={\"md\"}\n placeholder={\"All applications\"}\n options={[\n { label: \"All\", value: \"all\" },\n ...auditLogsApps.map(app => ({ label: app.displayName, value: app.app }))\n ]}\n />\n );\n};\n"],"names":["getValidFilterValue","value","FilterByApp","setValue","useForm","bind","useBind","cb","undefined","Select","auditLogsApps","app"],"mappings":";;;;AAMA,MAAMA,sBAAsB,CAACC;IACzB,IAAIA,AAAU,UAAVA,SAAmBA,AAAU,OAAVA,OACnB;IAEJ,OAAOA;AACX;AAEO,MAAMC,cAAc;IACvB,MAAM,EAAEC,QAAQ,EAAE,GAAGC;IACrB,MAAMC,OAAOC,QAAQ;QACjB,MAAM;QACN,cAAaL,KAAK,EAAEM,EAAE;YAClBJ,SAAS,UAAUK;YACnBL,SAAS,UAAUK;YACnBD,GAAGP,oBAAoBC;QAC3B;IACJ;IAEA,OAAO,WAAP,GACI,oBAACQ,QAAMA;QACF,GAAGJ,IAAI;QACR,OAAO;QACP,MAAM;QACN,aAAa;QACb,SAAS;YACL;gBAAE,OAAO;gBAAO,OAAO;YAAM;eAC1BK,KAAAA,GAAiB,CAACC,CAAAA,MAAQ;oBAAE,OAAOA,IAAI,WAAW;oBAAE,OAAOA,IAAI,GAAG;gBAAC;SACzE;;AAGb"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import react, { useMemo } from "react";
|
|
2
|
-
import {
|
|
1
|
+
import react, { useEffect, useMemo, useState } from "react";
|
|
2
|
+
import { useContainer } from "@webiny/app";
|
|
3
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient";
|
|
3
4
|
import { useBind } from "@webiny/form";
|
|
4
5
|
import { Select } from "@webiny/admin-ui";
|
|
5
6
|
import { LIST_USERS } from "../../../graphql.js";
|
|
@@ -8,16 +9,23 @@ const getValidFilterValue = (value)=>{
|
|
|
8
9
|
return value;
|
|
9
10
|
};
|
|
10
11
|
const FilterByCreatedBy = ()=>{
|
|
11
|
-
const
|
|
12
|
+
const container = useContainer();
|
|
13
|
+
const client = container.resolve(MainGraphQLClient);
|
|
14
|
+
const [users, setUsers] = useState([]);
|
|
15
|
+
useEffect(()=>{
|
|
16
|
+
client.execute({
|
|
17
|
+
query: LIST_USERS
|
|
18
|
+
}).then((response)=>{
|
|
19
|
+
setUsers(response.adminUsers.users.data || []);
|
|
20
|
+
});
|
|
21
|
+
}, []);
|
|
12
22
|
const bind = useBind({
|
|
13
23
|
name: "createdBy",
|
|
14
24
|
beforeChange (value, cb) {
|
|
15
25
|
cb(getValidFilterValue(value));
|
|
16
26
|
}
|
|
17
27
|
});
|
|
18
|
-
const options = useMemo(()=>
|
|
19
|
-
const users = listUsers?.adminUsers?.users?.data || [];
|
|
20
|
-
return [
|
|
28
|
+
const options = useMemo(()=>[
|
|
21
29
|
{
|
|
22
30
|
label: "All",
|
|
23
31
|
value: "all"
|
|
@@ -26,14 +34,14 @@ const FilterByCreatedBy = ()=>{
|
|
|
26
34
|
label: `${user.firstName} ${user.lastName}`,
|
|
27
35
|
value: user.id
|
|
28
36
|
}))
|
|
29
|
-
]
|
|
30
|
-
|
|
31
|
-
listUsers
|
|
37
|
+
], [
|
|
38
|
+
users
|
|
32
39
|
]);
|
|
33
40
|
return /*#__PURE__*/ react.createElement(Select, {
|
|
34
41
|
...bind,
|
|
42
|
+
label: "Initiator",
|
|
35
43
|
size: "md",
|
|
36
|
-
placeholder: "
|
|
44
|
+
placeholder: "Anyone",
|
|
37
45
|
options: options
|
|
38
46
|
});
|
|
39
47
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views/Logs/Filters/FilterByCreatedBy.js","sources":["../../../../src/views/Logs/Filters/FilterByCreatedBy.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"views/Logs/Filters/FilterByCreatedBy.js","sources":["../../../../src/views/Logs/Filters/FilterByCreatedBy.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\";\nimport { useContainer } from \"@webiny/app\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\nimport { useBind } from \"@webiny/form\";\nimport { Select } from \"@webiny/admin-ui\";\nimport { LIST_USERS } from \"~/graphql.js\";\nimport type { User } from \"~/types.js\";\n\ninterface ListUsersResponse {\n adminUsers: {\n users: {\n data: User[];\n };\n };\n}\n\nconst getValidFilterValue = (value: string): string | undefined => {\n if (value === \"all\" || value === \"\") {\n return undefined;\n }\n return value;\n};\n\nexport const FilterByCreatedBy = () => {\n const container = useContainer();\n const client = container.resolve(MainGraphQLClient);\n const [users, setUsers] = useState<User[]>([]);\n\n useEffect(() => {\n client.execute<ListUsersResponse>({ query: LIST_USERS }).then(response => {\n setUsers(response.adminUsers.users.data || []);\n });\n }, []);\n\n const bind = useBind({\n name: \"createdBy\",\n beforeChange(value, cb) {\n cb(getValidFilterValue(value));\n }\n });\n\n const options = useMemo(() => {\n return [\n { label: \"All\", value: \"all\" },\n ...users.map(user => ({ label: `${user.firstName} ${user.lastName}`, value: user.id }))\n ];\n }, [users]);\n\n return (\n <Select\n {...bind}\n label={\"Initiator\"}\n size={\"md\"}\n placeholder={\"Anyone\"}\n options={options}\n />\n );\n};\n"],"names":["getValidFilterValue","value","FilterByCreatedBy","container","useContainer","client","MainGraphQLClient","users","setUsers","useState","useEffect","LIST_USERS","response","bind","useBind","cb","options","useMemo","user","Select"],"mappings":";;;;;;AAgBA,MAAMA,sBAAsB,CAACC;IACzB,IAAIA,AAAU,UAAVA,SAAmBA,AAAU,OAAVA,OACnB;IAEJ,OAAOA;AACX;AAEO,MAAMC,oBAAoB;IAC7B,MAAMC,YAAYC;IAClB,MAAMC,SAASF,UAAU,OAAO,CAACG;IACjC,MAAM,CAACC,OAAOC,SAAS,GAAGC,SAAiB,EAAE;IAE7CC,UAAU;QACNL,OAAO,OAAO,CAAoB;YAAE,OAAOM;QAAW,GAAG,IAAI,CAACC,CAAAA;YAC1DJ,SAASI,SAAS,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;QACjD;IACJ,GAAG,EAAE;IAEL,MAAMC,OAAOC,QAAQ;QACjB,MAAM;QACN,cAAab,KAAK,EAAEc,EAAE;YAClBA,GAAGf,oBAAoBC;QAC3B;IACJ;IAEA,MAAMe,UAAUC,QAAQ,IACb;YACH;gBAAE,OAAO;gBAAO,OAAO;YAAM;eAC1BV,MAAM,GAAG,CAACW,CAAAA,OAAS;oBAAE,OAAO,GAAGA,KAAK,SAAS,CAAC,CAAC,EAAEA,KAAK,QAAQ,EAAE;oBAAE,OAAOA,KAAK,EAAE;gBAAC;SACvF,EACF;QAACX;KAAM;IAEV,OAAO,WAAP,GACI,oBAACY,QAAMA;QACF,GAAGN,IAAI;QACR,OAAO;QACP,MAAM;QACN,aAAa;QACb,SAASG;;AAGrB"}
|