@webiny/app-audit-logs 0.0.0-unstable.eb196ccd2f → 0.0.0-unstable.eb81deee7e

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.
Files changed (207) hide show
  1. package/README.md +11 -1
  2. package/SecurityPermission.d.ts +2 -0
  3. package/SecurityPermission.js +15 -0
  4. package/SecurityPermission.js.map +1 -0
  5. package/components/Text.d.ts +10 -4
  6. package/components/Text.js +32 -22
  7. package/components/Text.js.map +1 -1
  8. package/config/list/AuditLogsListConfig.d.ts +31 -18
  9. package/config/list/AuditLogsListConfig.js +38 -15
  10. package/config/list/AuditLogsListConfig.js.map +1 -1
  11. package/config/list/Browser/Filter.js +30 -37
  12. package/config/list/Browser/Filter.js.map +1 -1
  13. package/config/list/Browser/FiltersToWhere.js +10 -13
  14. package/config/list/Browser/FiltersToWhere.js.map +1 -1
  15. package/config/list/Browser/index.d.ts +14 -16
  16. package/config/list/Browser/index.js +6 -5
  17. package/config/list/Browser/index.js.map +1 -1
  18. package/config/list/Details/PreviewTab.d.ts +15 -0
  19. package/config/list/Details/PreviewTab.js +32 -0
  20. package/config/list/Details/PreviewTab.js.map +1 -0
  21. package/config/list/Details/index.d.ts +8 -0
  22. package/config/list/Details/index.js +7 -0
  23. package/config/list/Details/index.js.map +1 -0
  24. package/config/list/index.d.ts +1 -1
  25. package/config/list/index.js +1 -3
  26. package/constants/index.js +2 -1
  27. package/constants/index.js.map +1 -1
  28. package/domain/permissionsSchema.d.ts +4 -0
  29. package/domain/permissionsSchema.js +8 -0
  30. package/domain/permissionsSchema.js.map +1 -0
  31. package/features/listAuditLogs/ListAuditLogsGateway.d.ts +11 -0
  32. package/features/listAuditLogs/ListAuditLogsGateway.js +71 -0
  33. package/features/listAuditLogs/ListAuditLogsGateway.js.map +1 -0
  34. package/features/listAuditLogs/ListAuditLogsRepository.d.ts +11 -0
  35. package/features/listAuditLogs/ListAuditLogsRepository.js +35 -0
  36. package/features/listAuditLogs/ListAuditLogsRepository.js.map +1 -0
  37. package/features/listAuditLogs/ListAuditLogsUseCase.d.ts +10 -0
  38. package/features/listAuditLogs/ListAuditLogsUseCase.js +19 -0
  39. package/features/listAuditLogs/ListAuditLogsUseCase.js.map +1 -0
  40. package/features/listAuditLogs/abstractions/ListAuditLogsGateway.d.ts +20 -0
  41. package/features/listAuditLogs/abstractions/ListAuditLogsGateway.js +5 -0
  42. package/features/listAuditLogs/abstractions/ListAuditLogsGateway.js.map +1 -0
  43. package/features/listAuditLogs/abstractions/ListAuditLogsRepository.d.ts +20 -0
  44. package/features/listAuditLogs/abstractions/ListAuditLogsRepository.js +5 -0
  45. package/features/listAuditLogs/abstractions/ListAuditLogsRepository.js.map +1 -0
  46. package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.d.ts +20 -0
  47. package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.js +5 -0
  48. package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.js.map +1 -0
  49. package/features/listAuditLogs/abstractions/index.d.ts +6 -0
  50. package/features/listAuditLogs/abstractions/index.js +3 -0
  51. package/features/listAuditLogs/feature.d.ts +3 -0
  52. package/features/listAuditLogs/feature.js +21 -0
  53. package/features/listAuditLogs/feature.js.map +1 -0
  54. package/features/listAuditLogs/index.d.ts +1 -0
  55. package/features/listAuditLogs/index.js +1 -0
  56. package/features/permissions/abstractions.d.ts +17 -0
  57. package/features/permissions/abstractions.js +6 -0
  58. package/features/permissions/abstractions.js.map +1 -0
  59. package/features/permissions/feature.d.ts +14 -0
  60. package/features/permissions/feature.js +7 -0
  61. package/features/permissions/feature.js.map +1 -0
  62. package/graphql.d.ts +1 -1
  63. package/graphql.js +4 -4
  64. package/graphql.js.map +1 -1
  65. package/hooks/graphql.d.ts +9 -0
  66. package/hooks/graphql.js +0 -0
  67. package/hooks/index.d.ts +1 -1
  68. package/hooks/index.js +1 -3
  69. package/hooks/schema.d.ts +35 -0
  70. package/hooks/schema.js +27 -0
  71. package/hooks/schema.js.map +1 -0
  72. package/hooks/useAuditLogsList.d.ts +11 -16
  73. package/hooks/useAuditLogsList.js +97 -101
  74. package/hooks/useAuditLogsList.js.map +1 -1
  75. package/index.js +48 -49
  76. package/index.js.map +1 -1
  77. package/package.json +29 -34
  78. package/routes.d.ts +4 -0
  79. package/routes.js +10 -0
  80. package/routes.js.map +1 -0
  81. package/types.d.ts +48 -22
  82. package/types.js +1 -14
  83. package/utils/transformRawAuditLog.d.ts +5 -0
  84. package/utils/transformRawAuditLog.js +26 -0
  85. package/utils/transformRawAuditLog.js.map +1 -0
  86. package/views/Logs/Filters/FilterByAction.d.ts +1 -1
  87. package/views/Logs/Filters/FilterByAction.js +41 -42
  88. package/views/Logs/Filters/FilterByAction.js.map +1 -1
  89. package/views/Logs/Filters/FilterByApp.js +33 -31
  90. package/views/Logs/Filters/FilterByApp.js.map +1 -1
  91. package/views/Logs/Filters/FilterByCreatedBy.d.ts +2 -0
  92. package/views/Logs/Filters/FilterByCreatedBy.js +50 -0
  93. package/views/Logs/Filters/FilterByCreatedBy.js.map +1 -0
  94. package/views/Logs/Filters/FilterByCreatedOn.d.ts +2 -0
  95. package/views/Logs/Filters/FilterByCreatedOn.js +38 -0
  96. package/views/Logs/Filters/FilterByCreatedOn.js.map +1 -0
  97. package/views/Logs/Filters/FilterByEntity.d.ts +1 -1
  98. package/views/Logs/Filters/FilterByEntity.js +41 -42
  99. package/views/Logs/Filters/FilterByEntity.js.map +1 -1
  100. package/views/Logs/Filters/FilterByEntityId.d.ts +2 -0
  101. package/views/Logs/Filters/FilterByEntityId.js +26 -0
  102. package/views/Logs/Filters/FilterByEntityId.js.map +1 -0
  103. package/views/Logs/Filters/FilterByInitiator.js +44 -34
  104. package/views/Logs/Filters/FilterByInitiator.js.map +1 -1
  105. package/views/Logs/Filters/Filters.d.ts +5 -6
  106. package/views/Logs/Filters/Filters.js +66 -29
  107. package/views/Logs/Filters/Filters.js.map +1 -1
  108. package/views/Logs/Filters/index.d.ts +7 -6
  109. package/views/Logs/Filters/index.js +7 -8
  110. package/views/Logs/Filters/types.d.ts +9 -0
  111. package/views/Logs/Filters/types.js +0 -0
  112. package/views/Logs/Header/ButtonFilters/ButtonFilters.js +24 -45
  113. package/views/Logs/Header/ButtonFilters/ButtonFilters.js.map +1 -1
  114. package/views/Logs/Header/ButtonFilters/index.d.ts +1 -1
  115. package/views/Logs/Header/ButtonFilters/index.js +1 -3
  116. package/views/Logs/Header/Header.d.ts +2 -6
  117. package/views/Logs/Header/Header.js +12 -77
  118. package/views/Logs/Header/Header.js.map +1 -1
  119. package/views/Logs/Header/index.d.ts +1 -1
  120. package/views/Logs/Header/index.js +1 -3
  121. package/views/Logs/LoadMoreButton/LoadMoreButton.js +11 -18
  122. package/views/Logs/LoadMoreButton/LoadMoreButton.js.map +1 -1
  123. package/views/Logs/LoadMoreButton/index.d.ts +1 -1
  124. package/views/Logs/LoadMoreButton/index.js +1 -3
  125. package/views/Logs/LoadMoreButton/styled.d.ts +4 -5
  126. package/views/Logs/LoadMoreButton/styled.js +5 -16
  127. package/views/Logs/LoadMoreButton/styled.js.map +1 -1
  128. package/views/Logs/LoadingMore/index.js +13 -13
  129. package/views/Logs/LoadingMore/index.js.map +1 -1
  130. package/views/Logs/LogsModule.js +24 -24
  131. package/views/Logs/LogsModule.js.map +1 -1
  132. package/views/Logs/LogsView.d.ts +2 -0
  133. package/views/Logs/LogsView.js +73 -0
  134. package/views/Logs/LogsView.js.map +1 -0
  135. package/views/Logs/Preview/AuditLogDetailsPresenter.d.ts +13 -0
  136. package/views/Logs/Preview/AuditLogDetailsPresenter.js +36 -0
  137. package/views/Logs/Preview/AuditLogDetailsPresenter.js.map +1 -0
  138. package/views/Logs/Preview/Preview.d.ts +6 -4
  139. package/views/Logs/Preview/Preview.js +125 -88
  140. package/views/Logs/Preview/Preview.js.map +1 -1
  141. package/views/Logs/Preview/abstractions.d.ts +14 -0
  142. package/views/Logs/Preview/abstractions.js +5 -0
  143. package/views/Logs/Preview/abstractions.js.map +1 -0
  144. package/views/Logs/Preview/feature.d.ts +5 -0
  145. package/views/Logs/Preview/feature.js +22 -0
  146. package/views/Logs/Preview/feature.js.map +1 -0
  147. package/views/Logs/Preview/index.d.ts +3 -1
  148. package/views/Logs/Preview/index.js +2 -3
  149. package/views/Logs/Preview/tabs/AiPromptTabs.d.ts +2 -0
  150. package/views/Logs/Preview/tabs/AiPromptTabs.js +25 -0
  151. package/views/Logs/Preview/tabs/AiPromptTabs.js.map +1 -0
  152. package/views/Logs/Preview/tabs/LlmResponseTab.d.ts +4 -0
  153. package/views/Logs/Preview/tabs/LlmResponseTab.js +41 -0
  154. package/views/Logs/Preview/tabs/LlmResponseTab.js.map +1 -0
  155. package/views/Logs/Preview/tabs/SystemPromptTab.d.ts +4 -0
  156. package/views/Logs/Preview/tabs/SystemPromptTab.js +24 -0
  157. package/views/Logs/Preview/tabs/SystemPromptTab.js.map +1 -0
  158. package/views/Logs/Preview/tabs/UserPromptTab.d.ts +4 -0
  159. package/views/Logs/Preview/tabs/UserPromptTab.js +18 -0
  160. package/views/Logs/Preview/tabs/UserPromptTab.js.map +1 -0
  161. package/views/Logs/Preview/tabs/shared.d.ts +28 -0
  162. package/views/Logs/Preview/tabs/shared.js +16 -0
  163. package/views/Logs/Preview/tabs/shared.js.map +1 -0
  164. package/views/Logs/Table/Table.d.ts +10 -14
  165. package/views/Logs/Table/Table.js +112 -125
  166. package/views/Logs/Table/Table.js.map +1 -1
  167. package/views/Logs/Table/index.d.ts +1 -1
  168. package/views/Logs/Table/index.js +1 -3
  169. package/views/Logs/Table/styled.d.ts +1 -17
  170. package/views/Logs/Table/styled.js +15 -79
  171. package/views/Logs/Table/styled.js.map +1 -1
  172. package/config/list/index.js.map +0 -1
  173. package/hooks/index.js.map +0 -1
  174. package/plugins/permissionRenderer/AuditLogsPermissions.d.ts +0 -8
  175. package/plugins/permissionRenderer/AuditLogsPermissions.js +0 -100
  176. package/plugins/permissionRenderer/AuditLogsPermissions.js.map +0 -1
  177. package/plugins/permissionRenderer/index.d.ts +0 -1
  178. package/plugins/permissionRenderer/index.js +0 -32
  179. package/plugins/permissionRenderer/index.js.map +0 -1
  180. package/types.js.map +0 -1
  181. package/utils/transformCmsContentEntriesToRecordEntries.d.ts +0 -25
  182. package/utils/transformCmsContentEntriesToRecordEntries.js +0 -36
  183. package/utils/transformCmsContentEntriesToRecordEntries.js.map +0 -1
  184. package/views/Logs/Filters/FilterByTimestamp.d.ts +0 -2
  185. package/views/Logs/Filters/FilterByTimestamp.js +0 -40
  186. package/views/Logs/Filters/FilterByTimestamp.js.map +0 -1
  187. package/views/Logs/Filters/index.js.map +0 -1
  188. package/views/Logs/Filters/styled.d.ts +0 -5
  189. package/views/Logs/Filters/styled.js +0 -18
  190. package/views/Logs/Filters/styled.js.map +0 -1
  191. package/views/Logs/Header/ButtonFilters/index.js.map +0 -1
  192. package/views/Logs/Header/index.js.map +0 -1
  193. package/views/Logs/LoadMoreButton/index.js.map +0 -1
  194. package/views/Logs/LoadingMore/styled.d.ts +0 -9
  195. package/views/Logs/LoadingMore/styled.js +0 -32
  196. package/views/Logs/LoadingMore/styled.js.map +0 -1
  197. package/views/Logs/Logs.d.ts +0 -3
  198. package/views/Logs/Logs.js +0 -84
  199. package/views/Logs/Logs.js.map +0 -1
  200. package/views/Logs/Preview/index.js.map +0 -1
  201. package/views/Logs/Preview/styled.d.ts +0 -6
  202. package/views/Logs/Preview/styled.js +0 -25
  203. package/views/Logs/Preview/styled.js.map +0 -1
  204. package/views/Logs/Table/index.js.map +0 -1
  205. package/views/Logs/styled.d.ts +0 -9
  206. package/views/Logs/styled.js +0 -32
  207. package/views/Logs/styled.js.map +0 -1
@@ -1,105 +1,101 @@
1
- import { useCallback, useEffect, useState, useMemo } from "react";
2
- import { useQuery } from "@apollo/react-hooks";
3
- import debounce from "lodash/debounce";
4
- import { useRouter } from "@webiny/react-router";
5
- import { useAcoList, createSort } from "@webiny/app-aco";
6
- import { transformCmsContentEntriesToRecordEntries } from "../utils/transformCmsContentEntriesToRecordEntries";
7
- import { LIST_USERS } from "../graphql";
8
- export const useAuditLogsList = hasAccessToUsers => {
9
- const {
10
- history
11
- } = useRouter();
12
- const {
13
- isListLoading,
14
- isListLoadingMore,
15
- isSearch,
16
- listMoreRecords,
17
- listTitle,
18
- meta,
19
- records: initialRecords,
20
- setSearchQuery,
21
- setListSort,
22
- setFilters,
23
- showFilters,
24
- hideFilters,
25
- showingFilters
26
- } = useAcoList();
27
- const [sorting, setSorting] = useState([]);
28
- const [search, setSearch] = useState("");
29
- const query = new URLSearchParams(location.search);
30
- const searchQuery = query.get("search") || "";
31
- const {
32
- data: listUsers,
33
- loading: usersLoading
34
- } = useQuery(LIST_USERS, {
35
- skip: !hasAccessToUsers
36
- });
37
-
38
- // Search-related logics: update `searchQuery` state and querystring
39
- const updateSearch = useCallback(debounce(({
40
- search,
41
- query
42
- }) => {
43
- const searchQuery = query.get("search");
44
- if (typeof searchQuery !== "string" && !search) {
45
- return;
46
- }
47
- setSearchQuery(search);
48
- if (searchQuery !== search) {
49
- if (!search) {
50
- // In case of empty `search` - remove it from `querystring`
51
- query.delete("search");
52
- } else {
53
- // Otherwise, add it to `querystring`
54
- query.set("search", search);
55
- }
56
- history.push(`/audit-logs?${query.toString()}`);
57
- }
58
- }, 500), []);
59
-
60
- // Set "search" from search "query" on page load.
61
- useEffect(() => {
62
- setSearch(searchQuery);
63
- }, [searchQuery]);
64
-
65
- // When "search" changes, trigger search-related logics
66
- useEffect(() => {
67
- updateSearch({
68
- search,
69
- query
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
+ import { useFeature } from "@webiny/app";
3
+ import { ListAuditLogsFeature } from "../features/listAuditLogs/index.js";
4
+ const useAuditLogsList = ()=>{
5
+ const { useCase } = useFeature(ListAuditLogsFeature);
6
+ const [variables, setVariables] = useState({
7
+ where: {},
8
+ after: void 0,
9
+ sort: "DESC",
10
+ limit: 25
11
+ });
12
+ const [accumulatedRecords, setAccumulatedRecords] = useState([]);
13
+ const [loading, setLoading] = useState(true);
14
+ const [meta, setMeta] = useState({
15
+ hasMoreItems: false,
16
+ cursor: null
70
17
  });
71
- }, [search]);
72
- const records = useMemo(() => {
73
- const users = listUsers?.adminUsers?.users?.data || [];
74
- return transformCmsContentEntriesToRecordEntries(initialRecords, users);
75
- }, [initialRecords, listUsers]);
76
- useEffect(() => {
77
- if (!sorting?.length) {
78
- return;
79
- }
80
- const sort = createSort(sorting);
81
- if (!sort) {
82
- return;
83
- }
84
- setListSort(sort);
85
- }, [sorting]);
86
- return {
87
- isListLoading: isListLoading || usersLoading,
88
- isListLoadingMore,
89
- isSearch,
90
- listTitle,
91
- listMoreRecords,
92
- meta,
93
- records,
94
- search,
95
- setSearch,
96
- sorting,
97
- setSorting,
98
- showingFilters,
99
- showFilters,
100
- hideFilters,
101
- setFilters
102
- };
18
+ const resetPagination = useCallback(()=>{
19
+ setAccumulatedRecords([]);
20
+ setMeta({
21
+ hasMoreItems: false,
22
+ cursor: null
23
+ });
24
+ }, []);
25
+ const setWhere = useCallback((where)=>{
26
+ setVariables((prev)=>({
27
+ ...prev,
28
+ where,
29
+ after: void 0
30
+ }));
31
+ resetPagination();
32
+ }, []);
33
+ const setSort = useCallback((sort)=>{
34
+ setVariables((prev)=>({
35
+ ...prev,
36
+ sort,
37
+ after: void 0
38
+ }));
39
+ resetPagination();
40
+ }, []);
41
+ const setAfter = useCallback((after)=>{
42
+ setVariables((prev)=>({
43
+ ...prev,
44
+ after
45
+ }));
46
+ }, []);
47
+ const setLimit = useCallback((limit)=>{
48
+ setVariables((prev)=>({
49
+ ...prev,
50
+ limit
51
+ }));
52
+ }, []);
53
+ const [acoSorting, setAcoSorting] = useState([]);
54
+ useEffect(()=>{
55
+ const sort = acoSorting[0];
56
+ if (!sort) return;
57
+ setSort(sort.desc ? "DESC" : "ASC");
58
+ }, [
59
+ acoSorting
60
+ ]);
61
+ const requestIdRef = useRef(0);
62
+ useEffect(()=>{
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
+ });
74
+ }, [
75
+ variables
76
+ ]);
77
+ const sorting = useMemo(()=>[
78
+ {
79
+ id: "createdOn",
80
+ desc: "DESC" === variables.sort
81
+ }
82
+ ], [
83
+ variables.sort
84
+ ]);
85
+ return {
86
+ isListLoading: loading,
87
+ records: accumulatedRecords,
88
+ meta,
89
+ listMoreRecords: ()=>{
90
+ if (!loading && meta.cursor) setAfter(meta.cursor);
91
+ },
92
+ setWhere,
93
+ sorting,
94
+ setSorting: setAcoSorting,
95
+ setLimit,
96
+ isListLoadingMore: loading && !!variables.after
97
+ };
103
98
  };
99
+ export { useAuditLogsList };
104
100
 
105
101
  //# sourceMappingURL=useAuditLogsList.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useState","useMemo","useQuery","debounce","useRouter","useAcoList","createSort","transformCmsContentEntriesToRecordEntries","LIST_USERS","useAuditLogsList","hasAccessToUsers","history","isListLoading","isListLoadingMore","isSearch","listMoreRecords","listTitle","meta","records","initialRecords","setSearchQuery","setListSort","setFilters","showFilters","hideFilters","showingFilters","sorting","setSorting","search","setSearch","query","URLSearchParams","location","searchQuery","get","data","listUsers","loading","usersLoading","skip","updateSearch","delete","set","push","toString","users","adminUsers","length","sort"],"sources":["useAuditLogsList.ts"],"sourcesContent":["import { useCallback, useEffect, useState, useMemo } from \"react\";\nimport { useQuery } from \"@apollo/react-hooks\";\nimport debounce from \"lodash/debounce\";\n\nimport { useRouter } from \"@webiny/react-router\";\nimport type { OnSortingChange, Sorting } from \"@webiny/ui/DataTable\";\nimport { useAcoList, createSort } from \"@webiny/app-aco\";\nimport type { ListMeta, SearchRecordItem } from \"@webiny/app-aco/types\";\n\nimport type { Entry } from \"~/utils/transformCmsContentEntriesToRecordEntries\";\nimport { transformCmsContentEntriesToRecordEntries } from \"~/utils/transformCmsContentEntriesToRecordEntries\";\nimport { LIST_USERS } from \"~/graphql\";\nimport type { AuditLog, User } from \"~/types\";\n\ninterface UpdateSearchCallableParams {\n search: string;\n query: URLSearchParams;\n}\ninterface UpdateSearchCallable {\n (params: UpdateSearchCallableParams): void;\n}\n\nexport interface UseAuditLogs {\n hideFilters: () => void;\n isListLoading: boolean;\n isListLoadingMore: boolean;\n isSearch: boolean;\n listMoreRecords: () => void;\n listTitle?: string;\n meta: ListMeta;\n records: Entry[];\n search: string;\n setSearch: (value: string) => void;\n setSorting: OnSortingChange;\n showFilters: () => void;\n showingFilters: boolean;\n sorting: Sorting;\n setFilters: (data: Record<string, any>) => void;\n}\n\nexport const useAuditLogsList = (hasAccessToUsers: boolean): UseAuditLogs => {\n const { history } = useRouter();\n\n const {\n isListLoading,\n isListLoadingMore,\n isSearch,\n listMoreRecords,\n listTitle,\n meta,\n records: initialRecords,\n setSearchQuery,\n setListSort,\n setFilters,\n showFilters,\n hideFilters,\n showingFilters\n } = useAcoList<SearchRecordItem<AuditLog>>();\n\n const [sorting, setSorting] = useState<Sorting>([]);\n const [search, setSearch] = useState<string>(\"\");\n const query = new URLSearchParams(location.search);\n const searchQuery = query.get(\"search\") || \"\";\n\n const { data: listUsers, loading: usersLoading } = useQuery(LIST_USERS, {\n skip: !hasAccessToUsers\n });\n\n // Search-related logics: update `searchQuery` state and querystring\n const updateSearch = useCallback(\n debounce<UpdateSearchCallable>(({ search, query }) => {\n const searchQuery = query.get(\"search\");\n\n if (typeof searchQuery !== \"string\" && !search) {\n return;\n }\n\n setSearchQuery(search);\n\n if (searchQuery !== search) {\n if (!search) {\n // In case of empty `search` - remove it from `querystring`\n query.delete(\"search\");\n } else {\n // Otherwise, add it to `querystring`\n query.set(\"search\", search);\n }\n history.push(`/audit-logs?${query.toString()}`);\n }\n }, 500),\n []\n );\n\n // Set \"search\" from search \"query\" on page load.\n useEffect(() => {\n setSearch(searchQuery);\n }, [searchQuery]);\n\n // When \"search\" changes, trigger search-related logics\n useEffect(() => {\n updateSearch({ search, query });\n }, [search]);\n\n const records = useMemo(() => {\n const users: User[] = listUsers?.adminUsers?.users?.data || [];\n\n return transformCmsContentEntriesToRecordEntries(initialRecords, users);\n }, [initialRecords, listUsers]);\n\n useEffect(() => {\n if (!sorting?.length) {\n return;\n }\n const sort = createSort(sorting);\n if (!sort) {\n return;\n }\n setListSort(sort);\n }, [sorting]);\n\n return {\n isListLoading: isListLoading || usersLoading,\n isListLoadingMore,\n isSearch,\n listTitle,\n listMoreRecords,\n meta,\n records,\n search,\n setSearch,\n sorting,\n setSorting,\n showingFilters,\n showFilters,\n hideFilters,\n setFilters\n };\n};\n"],"mappings":"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","ignoreList":[]}
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,52 +1,51 @@
1
- import React, { useCallback } from "react";
2
- import { useApolloClient } from "@apollo/react-hooks";
3
- import { ReactComponent as Icon } from "@webiny/icons/manage_search.svg";
4
- import { Layout, useWcp } from "@webiny/app-admin";
5
- import { HasPermission } from "@webiny/app-security";
6
- import { AcoProvider } from "@webiny/app-aco";
7
- import { AuditLogsListWithConfig } from "./config/list";
8
- import { LogsModule } from "./views/Logs/LogsModule";
9
- import { AuditLogsPermissions } from "./plugins/permissionRenderer";
10
- import AuditLogsView from "./views/Logs/Logs";
11
- import { LOCAL_STORAGE_LATEST_VISITED_FOLDER } from "./constants";
12
- import { AdminConfig } from "@webiny/app-admin";
13
- const {
14
- Menu,
15
- Route
16
- } = AdminConfig;
17
- export const AuditLogs = () => {
18
- const client = useApolloClient();
19
- const wcp = useWcp();
20
- const createNavigateFolderStorageKey = useCallback(() => {
21
- return LOCAL_STORAGE_LATEST_VISITED_FOLDER;
22
- }, []);
23
- if (!wcp.canUseAuditLogs()) {
24
- return null;
25
- }
26
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LogsModule, null), /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(HasPermission, {
27
- any: ["al.*"]
28
- }, /*#__PURE__*/React.createElement(Menu, {
29
- name: "auditLogs",
30
- element: /*#__PURE__*/React.createElement(Menu.Link, {
31
- text: "Audit Logs",
32
- icon: /*#__PURE__*/React.createElement(Menu.Link.Icon, {
33
- element: /*#__PURE__*/React.createElement(Icon, null),
34
- label: "Audit Logs"
35
- }),
36
- to: "/audit-logs"
37
- })
38
- }), /*#__PURE__*/React.createElement(Route, {
39
- name: "auditLogs",
40
- exact: true,
41
- path: "/audit-logs",
42
- element: /*#__PURE__*/React.createElement(Layout, {
43
- title: "Audit Logs - Logs"
44
- }, /*#__PURE__*/React.createElement(AuditLogsListWithConfig, null, /*#__PURE__*/React.createElement(AcoProvider, {
45
- id: "AuditLogs",
46
- client: client,
47
- createNavigateFolderStorageKey: createNavigateFolderStorageKey
48
- }, /*#__PURE__*/React.createElement(AuditLogsView, null))))
49
- }))), /*#__PURE__*/React.createElement(AuditLogsPermissions, null));
1
+ import react from "react";
2
+ import { AdminConfig, AdminLayout, HasPermission, RegisterFeature, useFeatureFlags, useRouter } from "@webiny/app-admin";
3
+ import { ReactComponent } from "@webiny/icons/manage_search.svg";
4
+ import { LogsModule } from "./views/Logs/LogsModule.js";
5
+ import { SecurityPermission } from "./SecurityPermission.js";
6
+ import { LogsView } from "./views/Logs/LogsView.js";
7
+ import { AuditLogsListWithConfig } from "./config/list/index.js";
8
+ import { Routes } from "./routes.js";
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";
13
+ const { Menu: Menu, Route: Route } = AdminConfig;
14
+ const AuditLogs = ()=>{
15
+ const featureFlags = useFeatureFlags();
16
+ const router = useRouter();
17
+ if (!featureFlags.isEnabled("auditLogs")) return null;
18
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(RegisterFeature, {
19
+ feature: AlPermissionsFeature
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, {
25
+ any: [
26
+ "al.*"
27
+ ]
28
+ }, /*#__PURE__*/ react.createElement(Menu, {
29
+ name: "auditLogs",
30
+ pinnable: true,
31
+ element: /*#__PURE__*/ react.createElement(Menu.Link, {
32
+ text: "Audit Logs",
33
+ icon: /*#__PURE__*/ react.createElement(Menu.Link.Icon, {
34
+ element: /*#__PURE__*/ react.createElement(ReactComponent, null),
35
+ label: "Audit Logs"
36
+ }),
37
+ to: router.getLink(Routes.AuditLogsList)
38
+ })
39
+ }), /*#__PURE__*/ react.createElement(Route, {
40
+ route: Routes.AuditLogsList,
41
+ element: /*#__PURE__*/ react.createElement(AdminLayout, {
42
+ title: "Audit Logs - Logs"
43
+ }, /*#__PURE__*/ react.createElement(AdminConfig.Breadcrumb, {
44
+ name: "auditLogs",
45
+ label: "Audit Logs"
46
+ }), /*#__PURE__*/ react.createElement(AuditLogsListWithConfig, null, /*#__PURE__*/ react.createElement(LogsView, null)))
47
+ }))));
50
48
  };
49
+ export { AuditLogs };
51
50
 
52
51
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useApolloClient","ReactComponent","Icon","Layout","useWcp","HasPermission","AcoProvider","AuditLogsListWithConfig","LogsModule","AuditLogsPermissions","AuditLogsView","LOCAL_STORAGE_LATEST_VISITED_FOLDER","AdminConfig","Menu","Route","AuditLogs","client","wcp","createNavigateFolderStorageKey","canUseAuditLogs","createElement","Fragment","any","name","element","Link","text","icon","label","to","exact","path","title","id"],"sources":["index.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { ReactComponent as Icon } from \"@webiny/icons/manage_search.svg\";\nimport { Layout, useWcp } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-security\";\nimport { AcoProvider } from \"@webiny/app-aco\";\n\nimport { AuditLogsListWithConfig } from \"~/config/list\";\nimport { LogsModule } from \"~/views/Logs/LogsModule\";\nimport { AuditLogsPermissions } from \"~/plugins/permissionRenderer\";\nimport AuditLogsView from \"~/views/Logs/Logs\";\nimport { LOCAL_STORAGE_LATEST_VISITED_FOLDER } from \"~/constants\";\nimport { AdminConfig } from \"@webiny/app-admin\";\n\nconst { Menu, Route } = AdminConfig;\n\nexport const AuditLogs = () => {\n const client = useApolloClient();\n const wcp = useWcp();\n\n const createNavigateFolderStorageKey = useCallback(() => {\n return LOCAL_STORAGE_LATEST_VISITED_FOLDER;\n }, []);\n\n if (!wcp.canUseAuditLogs()) {\n return null;\n }\n\n return (\n <>\n <LogsModule />\n <AdminConfig>\n <HasPermission any={[\"al.*\"]}>\n <Menu\n name=\"auditLogs\"\n element={\n <Menu.Link\n text={\"Audit Logs\"}\n icon={<Menu.Link.Icon element={<Icon />} label={\"Audit Logs\"} />}\n to={\"/audit-logs\"}\n />\n }\n />\n <Route\n name={\"auditLogs\"}\n exact\n path={\"/audit-logs\"}\n element={\n <Layout title={\"Audit Logs - Logs\"}>\n <AuditLogsListWithConfig>\n <AcoProvider\n id=\"AuditLogs\"\n client={client}\n createNavigateFolderStorageKey={\n createNavigateFolderStorageKey\n }\n >\n <AuditLogsView />\n </AcoProvider>\n </AuditLogsListWithConfig>\n </Layout>\n }\n />\n </HasPermission>\n </AdminConfig>\n <AuditLogsPermissions />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,cAAc,IAAIC,IAAI,QAAQ,iCAAiC;AACxE,SAASC,MAAM,EAAEC,MAAM,QAAQ,mBAAmB;AAClD,SAASC,aAAa,QAAQ,sBAAsB;AACpD,SAASC,WAAW,QAAQ,iBAAiB;AAE7C,SAASC,uBAAuB;AAChC,SAASC,UAAU;AACnB,SAASC,oBAAoB;AAC7B,OAAOC,aAAa;AACpB,SAASC,mCAAmC;AAC5C,SAASC,WAAW,QAAQ,mBAAmB;AAE/C,MAAM;EAAEC,IAAI;EAAEC;AAAM,CAAC,GAAGF,WAAW;AAEnC,OAAO,MAAMG,SAAS,GAAGA,CAAA,KAAM;EAC3B,MAAMC,MAAM,GAAGhB,eAAe,CAAC,CAAC;EAChC,MAAMiB,GAAG,GAAGb,MAAM,CAAC,CAAC;EAEpB,MAAMc,8BAA8B,GAAGnB,WAAW,CAAC,MAAM;IACrD,OAAOY,mCAAmC;EAC9C,CAAC,EAAE,EAAE,CAAC;EAEN,IAAI,CAACM,GAAG,CAACE,eAAe,CAAC,CAAC,EAAE;IACxB,OAAO,IAAI;EACf;EAEA,oBACIrB,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,qBACIvB,KAAA,CAAAsB,aAAA,CAACZ,UAAU,MAAE,CAAC,eACdV,KAAA,CAAAsB,aAAA,CAACR,WAAW,qBACRd,KAAA,CAAAsB,aAAA,CAACf,aAAa;IAACiB,GAAG,EAAE,CAAC,MAAM;EAAE,gBACzBxB,KAAA,CAAAsB,aAAA,CAACP,IAAI;IACDU,IAAI,EAAC,WAAW;IAChBC,OAAO,eACH1B,KAAA,CAAAsB,aAAA,CAACP,IAAI,CAACY,IAAI;MACNC,IAAI,EAAE,YAAa;MACnBC,IAAI,eAAE7B,KAAA,CAAAsB,aAAA,CAACP,IAAI,CAACY,IAAI,CAACvB,IAAI;QAACsB,OAAO,eAAE1B,KAAA,CAAAsB,aAAA,CAAClB,IAAI,MAAE,CAAE;QAAC0B,KAAK,EAAE;MAAa,CAAE,CAAE;MACjEC,EAAE,EAAE;IAAc,CACrB;EACJ,CACJ,CAAC,eACF/B,KAAA,CAAAsB,aAAA,CAACN,KAAK;IACFS,IAAI,EAAE,WAAY;IAClBO,KAAK;IACLC,IAAI,EAAE,aAAc;IACpBP,OAAO,eACH1B,KAAA,CAAAsB,aAAA,CAACjB,MAAM;MAAC6B,KAAK,EAAE;IAAoB,gBAC/BlC,KAAA,CAAAsB,aAAA,CAACb,uBAAuB,qBACpBT,KAAA,CAAAsB,aAAA,CAACd,WAAW;MACR2B,EAAE,EAAC,WAAW;MACdjB,MAAM,EAAEA,MAAO;MACfE,8BAA8B,EAC1BA;IACH,gBAEDpB,KAAA,CAAAsB,aAAA,CAACV,aAAa,MAAE,CACP,CACQ,CACrB;EACX,CACJ,CACU,CACN,CAAC,eACdZ,KAAA,CAAAsB,aAAA,CAACX,oBAAoB,MAAE,CACzB,CAAC;AAEX,CAAC","ignoreList":[]}
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,7 +1,11 @@
1
1
  {
2
2
  "name": "@webiny/app-audit-logs",
3
- "version": "0.0.0-unstable.eb196ccd2f",
4
- "main": "index.js",
3
+ "version": "0.0.0-unstable.eb81deee7e",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": "./index.js",
7
+ "./*": "./*"
8
+ },
5
9
  "repository": {
6
10
  "type": "git",
7
11
  "url": "https://github.com/webiny/webiny-js.git"
@@ -9,43 +13,34 @@
9
13
  "description": "",
10
14
  "license": "MIT",
11
15
  "dependencies": {
12
- "@apollo/react-hooks": "3.1.5",
13
- "@emotion/react": "11.10.8",
14
- "@emotion/styled": "11.10.6",
15
- "@webiny/admin-ui": "0.0.0-unstable.eb196ccd2f",
16
- "@webiny/api-audit-logs": "0.0.0-unstable.eb196ccd2f",
17
- "@webiny/app": "0.0.0-unstable.eb196ccd2f",
18
- "@webiny/app-aco": "0.0.0-unstable.eb196ccd2f",
19
- "@webiny/app-admin": "0.0.0-unstable.eb196ccd2f",
20
- "@webiny/app-security": "0.0.0-unstable.eb196ccd2f",
21
- "@webiny/form": "0.0.0-unstable.eb196ccd2f",
22
- "@webiny/icons": "0.0.0-unstable.eb196ccd2f",
23
- "@webiny/plugins": "0.0.0-unstable.eb196ccd2f",
24
- "@webiny/react-properties": "0.0.0-unstable.eb196ccd2f",
25
- "@webiny/react-router": "0.0.0-unstable.eb196ccd2f",
26
- "@webiny/ui": "0.0.0-unstable.eb196ccd2f",
27
- "date-fns": "2.29.3",
28
- "emotion": "10.0.27",
29
- "graphql-tag": "2.12.6",
30
- "lodash": "4.17.21"
16
+ "@webiny/admin-ui": "0.0.0-unstable.eb81deee7e",
17
+ "@webiny/app": "0.0.0-unstable.eb81deee7e",
18
+ "@webiny/app-admin": "0.0.0-unstable.eb81deee7e",
19
+ "@webiny/common-audit-logs": "0.0.0-unstable.eb81deee7e",
20
+ "@webiny/feature": "0.0.0-unstable.eb81deee7e",
21
+ "@webiny/form": "0.0.0-unstable.eb81deee7e",
22
+ "@webiny/icons": "0.0.0-unstable.eb81deee7e",
23
+ "@webiny/react-composition": "0.0.0-unstable.eb81deee7e",
24
+ "@webiny/react-properties": "0.0.0-unstable.eb81deee7e",
25
+ "date-fns": "4.4.0",
26
+ "lodash": "4.18.1",
27
+ "mobx": "7.0.3",
28
+ "zod": "4.4.3"
31
29
  },
32
30
  "peerDependencies": {
33
- "react": "18.2.0"
31
+ "react": "18.3.1"
34
32
  },
35
33
  "devDependencies": {
36
- "@types/react": "18.2.79",
37
- "@webiny/project-utils": "0.0.0-unstable.eb196ccd2f",
38
- "execa": "5.1.1",
39
- "rimraf": "6.0.1",
40
- "typescript": "5.3.3"
34
+ "@types/react": "18.3.31",
35
+ "@webiny/build-tools": "0.0.0-unstable.eb81deee7e",
36
+ "execa": "10.0.1",
37
+ "rimraf": "6.1.3",
38
+ "typescript": "7.0.2"
41
39
  },
42
40
  "publishConfig": {
43
- "access": "public",
44
- "directory": "dist"
45
- },
46
- "scripts": {
47
- "build": "node ../cli/bin.js run build",
48
- "watch": "node ../cli/bin.js run watch"
41
+ "access": "public"
49
42
  },
50
- "gitHead": "eb196ccd2f32296e10f7add6dd7220d4e3abece4"
43
+ "webiny": {
44
+ "publishFrom": "dist"
45
+ }
51
46
  }
package/routes.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { Route } from "@webiny/app-admin";
2
+ export declare const Routes: {
3
+ AuditLogsList: Route<undefined>;
4
+ };
package/routes.js ADDED
@@ -0,0 +1,10 @@
1
+ import { Route } from "@webiny/app-admin";
2
+ const Routes = {
3
+ AuditLogsList: new Route({
4
+ name: "AuditLogs/List",
5
+ path: "/audit-logs"
6
+ })
7
+ };
8
+ export { Routes };
9
+
10
+ //# sourceMappingURL=routes.js.map
package/routes.js.map ADDED
@@ -0,0 +1 @@
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.d.ts CHANGED
@@ -1,25 +1,6 @@
1
- export declare enum ActionType {
2
- CREATE = "CREATE",
3
- UPDATE = "UPDATE",
4
- DELETE = "DELETE",
5
- MOVE_TO_TRASH = "MOVE_TO_TRASH",
6
- RESTORE_FROM_TRASH = "RESTORE_FROM_TRASH",
7
- PUBLISH = "PUBLISH",
8
- UNPUBLISH = "UNPUBLISH",
9
- IMPORT = "IMPORT",
10
- EXPORT = "EXPORT"
11
- }
12
- export interface AuditLog {
13
- id: string;
14
- message: string;
15
- app: string;
16
- entity: string;
17
- entityId: string;
18
- action: ActionType;
19
- data: string;
20
- timestamp: Date;
21
- initiator: string;
22
- }
1
+ import type { GenericRecord } from "@webiny/app/types.js";
2
+ import { ActionType } from "@webiny/common-audit-logs";
3
+ export { ActionType };
23
4
  export interface User {
24
5
  id: string;
25
6
  firstName: string;
@@ -28,3 +9,48 @@ export interface User {
28
9
  name: string;
29
10
  }[];
30
11
  }
12
+ export interface IAuditLogCreatedByRaw {
13
+ id: string;
14
+ displayName?: string;
15
+ type?: string;
16
+ }
17
+ export interface IAuditLogCreatedBy extends IAuditLogCreatedByRaw {
18
+ role: string;
19
+ }
20
+ export interface IAuditLogRaw {
21
+ id: string;
22
+ createdBy: IAuditLogCreatedByRaw;
23
+ createdOn: Date;
24
+ app: string;
25
+ action: string;
26
+ message: string;
27
+ entity: string;
28
+ entityId: string;
29
+ tags: string[];
30
+ expiresAt?: Date;
31
+ content: string;
32
+ }
33
+ export interface IAuditLogEntity {
34
+ value: string;
35
+ label: string;
36
+ link?: string;
37
+ }
38
+ export interface IAuditLogAction {
39
+ value: string;
40
+ label: string;
41
+ }
42
+ export interface IAuditLog extends Omit<IAuditLogRaw, "entity" | "action" | "createdBy"> {
43
+ entity: IAuditLogEntity;
44
+ action: IAuditLogAction;
45
+ createdBy: IAuditLogCreatedBy;
46
+ }
47
+ export interface IAuditLogsMeta {
48
+ hasMoreItems: boolean;
49
+ cursor: string | null;
50
+ }
51
+ export interface IAuditLogsError {
52
+ message: string;
53
+ code: string;
54
+ data?: GenericRecord;
55
+ stack?: string;
56
+ }
package/types.js CHANGED
@@ -1,14 +1 @@
1
- export let ActionType = /*#__PURE__*/function (ActionType) {
2
- ActionType["CREATE"] = "CREATE";
3
- ActionType["UPDATE"] = "UPDATE";
4
- ActionType["DELETE"] = "DELETE";
5
- ActionType["MOVE_TO_TRASH"] = "MOVE_TO_TRASH";
6
- ActionType["RESTORE_FROM_TRASH"] = "RESTORE_FROM_TRASH";
7
- ActionType["PUBLISH"] = "PUBLISH";
8
- ActionType["UNPUBLISH"] = "UNPUBLISH";
9
- ActionType["IMPORT"] = "IMPORT";
10
- ActionType["EXPORT"] = "EXPORT";
11
- return ActionType;
12
- }({});
13
-
14
- //# sourceMappingURL=types.js.map
1
+ export { ActionType } from "@webiny/common-audit-logs";
@@ -0,0 +1,5 @@
1
+ import type { IAuditLog, IAuditLogRaw } from "../types.js";
2
+ export interface ITransformRawAuditLogParams {
3
+ auditLog: IAuditLogRaw;
4
+ }
5
+ export declare const transformRawAuditLog: (params: ITransformRawAuditLogParams) => IAuditLog;
@@ -0,0 +1,26 @@
1
+ import { apps } from "@webiny/common-audit-logs";
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
+ };
23
+ };
24
+ export { transformRawAuditLog };
25
+
26
+ //# sourceMappingURL=transformRawAuditLog.js.map
@@ -0,0 +1 @@
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"}