@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,26 +1,26 @@
1
- import React from "react";
2
- import { AuditLogsListConfig } from "../../config/list";
3
- import { FilterByTimestamp, FilterByInitiator, FilterByApp, FilterByEntity, FilterByAction } from "./Filters";
4
- const {
5
- Browser
6
- } = AuditLogsListConfig;
7
- export const LogsModule = () => {
8
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AuditLogsListConfig, null, /*#__PURE__*/React.createElement(Browser.Filter, {
9
- name: "timestamp",
10
- element: /*#__PURE__*/React.createElement(FilterByTimestamp, null)
11
- }), /*#__PURE__*/React.createElement(Browser.Filter, {
12
- name: "initiator",
13
- element: /*#__PURE__*/React.createElement(FilterByInitiator, null)
14
- }), /*#__PURE__*/React.createElement(Browser.Filter, {
15
- name: "app",
16
- element: /*#__PURE__*/React.createElement(FilterByApp, null)
17
- }), /*#__PURE__*/React.createElement(Browser.Filter, {
18
- name: "entity",
19
- element: /*#__PURE__*/React.createElement(FilterByEntity, null)
20
- }), /*#__PURE__*/React.createElement(Browser.Filter, {
21
- name: "action",
22
- element: /*#__PURE__*/React.createElement(FilterByAction, null)
23
- })));
24
- };
1
+ import react from "react";
2
+ import { AuditLogsListConfig } from "../../config/list/index.js";
3
+ import { FilterByAction, FilterByApp, FilterByCreatedBy, FilterByCreatedOn, FilterByEntity, FilterByEntityId } from "./Filters/index.js";
4
+ const { Browser: Browser } = AuditLogsListConfig;
5
+ const LogsModule = ()=>/*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(AuditLogsListConfig, null, /*#__PURE__*/ react.createElement(Browser.Filter, {
6
+ name: "app",
7
+ element: /*#__PURE__*/ react.createElement(FilterByApp, null)
8
+ }), /*#__PURE__*/ react.createElement(Browser.Filter, {
9
+ name: "entity",
10
+ element: /*#__PURE__*/ react.createElement(FilterByEntity, null)
11
+ }), /*#__PURE__*/ react.createElement(Browser.Filter, {
12
+ name: "action",
13
+ element: /*#__PURE__*/ react.createElement(FilterByAction, null)
14
+ }), /*#__PURE__*/ react.createElement(Browser.Filter, {
15
+ name: "createdBy",
16
+ element: /*#__PURE__*/ react.createElement(FilterByCreatedBy, null)
17
+ }), /*#__PURE__*/ react.createElement(Browser.Filter, {
18
+ name: "entityId",
19
+ element: /*#__PURE__*/ react.createElement(FilterByEntityId, null)
20
+ }), /*#__PURE__*/ react.createElement(Browser.Filter, {
21
+ name: "createdOn",
22
+ element: /*#__PURE__*/ react.createElement(FilterByCreatedOn, null)
23
+ })));
24
+ export { LogsModule };
25
25
 
26
26
  //# sourceMappingURL=LogsModule.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","AuditLogsListConfig","FilterByTimestamp","FilterByInitiator","FilterByApp","FilterByEntity","FilterByAction","Browser","LogsModule","createElement","Fragment","Filter","name","element"],"sources":["LogsModule.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { AuditLogsListConfig } from \"~/config/list\";\nimport {\n FilterByTimestamp,\n FilterByInitiator,\n FilterByApp,\n FilterByEntity,\n FilterByAction\n} from \"~/views/Logs/Filters\";\n\nconst { Browser } = AuditLogsListConfig;\n\nexport const LogsModule = () => {\n return (\n <>\n <AuditLogsListConfig>\n <Browser.Filter name={\"timestamp\"} element={<FilterByTimestamp />} />\n <Browser.Filter name={\"initiator\"} element={<FilterByInitiator />} />\n <Browser.Filter name={\"app\"} element={<FilterByApp />} />\n <Browser.Filter name={\"entity\"} element={<FilterByEntity />} />\n <Browser.Filter name={\"action\"} element={<FilterByAction />} />\n </AuditLogsListConfig>\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,mBAAmB;AAC5B,SACIC,iBAAiB,EACjBC,iBAAiB,EACjBC,WAAW,EACXC,cAAc,EACdC,cAAc;AAGlB,MAAM;EAAEC;AAAQ,CAAC,GAAGN,mBAAmB;AAEvC,OAAO,MAAMO,UAAU,GAAGA,CAAA,KAAM;EAC5B,oBACIR,KAAA,CAAAS,aAAA,CAAAT,KAAA,CAAAU,QAAA,qBACIV,KAAA,CAAAS,aAAA,CAACR,mBAAmB,qBAChBD,KAAA,CAAAS,aAAA,CAACF,OAAO,CAACI,MAAM;IAACC,IAAI,EAAE,WAAY;IAACC,OAAO,eAAEb,KAAA,CAAAS,aAAA,CAACP,iBAAiB,MAAE;EAAE,CAAE,CAAC,eACrEF,KAAA,CAAAS,aAAA,CAACF,OAAO,CAACI,MAAM;IAACC,IAAI,EAAE,WAAY;IAACC,OAAO,eAAEb,KAAA,CAAAS,aAAA,CAACN,iBAAiB,MAAE;EAAE,CAAE,CAAC,eACrEH,KAAA,CAAAS,aAAA,CAACF,OAAO,CAACI,MAAM;IAACC,IAAI,EAAE,KAAM;IAACC,OAAO,eAAEb,KAAA,CAAAS,aAAA,CAACL,WAAW,MAAE;EAAE,CAAE,CAAC,eACzDJ,KAAA,CAAAS,aAAA,CAACF,OAAO,CAACI,MAAM;IAACC,IAAI,EAAE,QAAS;IAACC,OAAO,eAAEb,KAAA,CAAAS,aAAA,CAACJ,cAAc,MAAE;EAAE,CAAE,CAAC,eAC/DL,KAAA,CAAAS,aAAA,CAACF,OAAO,CAACI,MAAM;IAACC,IAAI,EAAE,QAAS;IAACC,OAAO,eAAEb,KAAA,CAAAS,aAAA,CAACH,cAAc,MAAE;EAAE,CAAE,CAC7C,CACvB,CAAC;AAEX,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"views/Logs/LogsModule.js","sources":["../../../src/views/Logs/LogsModule.tsx"],"sourcesContent":["import React from \"react\";\nimport { AuditLogsListConfig } from \"~/config/list/index.js\";\nimport {\n FilterByAction,\n FilterByApp,\n FilterByCreatedBy,\n FilterByCreatedOn,\n FilterByEntity,\n FilterByEntityId\n} from \"~/views/Logs/Filters/index.js\";\n\nconst { Browser } = AuditLogsListConfig;\n\nexport const LogsModule = () => {\n return (\n <>\n <AuditLogsListConfig>\n <Browser.Filter name={\"app\"} element={<FilterByApp />} />\n <Browser.Filter name={\"entity\"} element={<FilterByEntity />} />\n <Browser.Filter name={\"action\"} element={<FilterByAction />} />\n <Browser.Filter name={\"createdBy\"} element={<FilterByCreatedBy />} />\n <Browser.Filter name={\"entityId\"} element={<FilterByEntityId />} />\n <Browser.Filter name={\"createdOn\"} element={<FilterByCreatedOn />} />\n </AuditLogsListConfig>\n </>\n );\n};\n"],"names":["Browser","AuditLogsListConfig","LogsModule","FilterByApp","FilterByEntity","FilterByAction","FilterByCreatedBy","FilterByEntityId","FilterByCreatedOn"],"mappings":";;;AAWA,MAAM,EAAEA,SAAAA,OAAO,EAAE,GAAGC;AAEb,MAAMC,aAAa,IACf,WAAP,GACI,wDACI,oBAACD,qBAAmBA,MAAAA,WAAAA,GAChB,oBAACD,QAAQ,MAAM;QAAC,MAAM;QAAO,uBAAS,oBAACG,aAAWA;sBAClD,oBAACH,QAAQ,MAAM;QAAC,MAAM;QAAU,uBAAS,oBAACI,gBAAcA;sBACxD,oBAACJ,QAAQ,MAAM;QAAC,MAAM;QAAU,uBAAS,oBAACK,gBAAcA;sBACxD,oBAACL,QAAQ,MAAM;QAAC,MAAM;QAAa,uBAAS,oBAACM,mBAAiBA;sBAC9D,oBAACN,QAAQ,MAAM;QAAC,MAAM;QAAY,uBAAS,oBAACO,kBAAgBA;sBAC5D,oBAACP,QAAQ,MAAM;QAAC,MAAM;QAAa,uBAAS,oBAACQ,mBAAiBA"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const LogsView: () => React.JSX.Element;
@@ -0,0 +1,73 @@
1
+ import react, { useCallback, useEffect, useRef, useState } from "react";
2
+ import debounce from "lodash/debounce.js";
3
+ import { i18n } from "@webiny/app/i18n/index.js";
4
+ import { EmptyView, useSecurity } from "@webiny/app-admin";
5
+ import { Scrollbar } from "@webiny/admin-ui";
6
+ import { LoadingMore } from "./LoadingMore/index.js";
7
+ import { LoadMoreButton } from "./LoadMoreButton/index.js";
8
+ import { Header } from "./Header/index.js";
9
+ import { Filters } from "./Filters/index.js";
10
+ import { Table } from "./Table/index.js";
11
+ import { Preview } from "./Preview/index.js";
12
+ import { useAuditLogsList } from "../../hooks/index.js";
13
+ const t = i18n.ns("app-audit-logs/views/logs");
14
+ const LogsView = ()=>{
15
+ const [selectedAuditLog, setSelectedAuditLog] = useState(null);
16
+ const handleAuditLogSelect = useCallback((auditLog)=>setSelectedAuditLog(auditLog), []);
17
+ const closePreviewModal = useCallback(()=>setSelectedAuditLog(null), []);
18
+ const { innerHeight: windowHeight } = window;
19
+ const [tableHeight, setTableHeight] = useState(0);
20
+ const tableRef = useRef(null);
21
+ const { getPermissions } = useSecurity();
22
+ const hasAccessToUsers = Boolean(getPermissions("adminUsers").length);
23
+ const list = useAuditLogsList();
24
+ useEffect(()=>{
25
+ setTableHeight(tableRef?.current?.clientHeight || 0);
26
+ return ()=>{
27
+ setTableHeight(0);
28
+ };
29
+ });
30
+ const loadMoreOnScroll = debounce(({ scrollFrame })=>{
31
+ if (scrollFrame.top > 0.8 && !list.isListLoadingMore && list.meta.hasMoreItems) list.listMoreRecords();
32
+ }, 200);
33
+ return /*#__PURE__*/ react.createElement("div", {
34
+ className: "flex flex-col h-main-content"
35
+ }, /*#__PURE__*/ react.createElement(Header, {
36
+ title: "Audit Logs"
37
+ }, /*#__PURE__*/ react.createElement(Filters, {
38
+ setWhere: list.setWhere
39
+ })), /*#__PURE__*/ react.createElement("div", {
40
+ className: "flex-1 min-h-0"
41
+ }, 0 !== list.records.length || list.isListLoading ? /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Preview, {
42
+ auditLog: selectedAuditLog,
43
+ onClose: ()=>closePreviewModal(),
44
+ hasAccessToUsers: hasAccessToUsers
45
+ }), /*#__PURE__*/ react.createElement(Scrollbar, {
46
+ "data-testid": "default-data-list",
47
+ onScrollFrame: (scrollFrame)=>loadMoreOnScroll({
48
+ scrollFrame
49
+ })
50
+ }, /*#__PURE__*/ react.createElement("div", {
51
+ className: "h-[500px]"
52
+ }, /*#__PURE__*/ react.createElement(Table, {
53
+ ref: tableRef,
54
+ records: list.records,
55
+ loading: list.isListLoading && !list.isListLoadingMore,
56
+ handleRecordSelect: handleAuditLogSelect,
57
+ sorting: list.sorting,
58
+ onSortingChange: list.setSorting,
59
+ hasAccessToUsers: hasAccessToUsers
60
+ }), /*#__PURE__*/ react.createElement(LoadMoreButton, {
61
+ show: !list.isListLoading && list.meta.hasMoreItems,
62
+ disabled: list.isListLoadingMore,
63
+ windowHeight: windowHeight,
64
+ tableHeight: tableHeight,
65
+ onClick: list.listMoreRecords
66
+ }))), list.isListLoadingMore && /*#__PURE__*/ react.createElement(LoadingMore, null)) : /*#__PURE__*/ react.createElement(EmptyView, {
67
+ title: t`No results found.`,
68
+ action: null
69
+ })));
70
+ };
71
+ export { LogsView };
72
+
73
+ //# sourceMappingURL=LogsView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views/Logs/LogsView.js","sources":["../../../src/views/Logs/LogsView.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport debounce from \"lodash/debounce.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { EmptyView } from \"@webiny/app-admin\";\nimport { useSecurity } from \"@webiny/app-admin\";\nimport { Scrollbar } from \"@webiny/admin-ui\";\nimport { LoadingMore } from \"~/views/Logs/LoadingMore/index.js\";\nimport { LoadMoreButton } from \"~/views/Logs/LoadMoreButton/index.js\";\nimport { Header } from \"~/views/Logs/Header/index.js\";\nimport { Filters } from \"~/views/Logs/Filters/index.js\";\nimport { Table } from \"~/views/Logs/Table/index.js\";\nimport { Preview } from \"~/views/Logs/Preview/index.js\";\nimport { useAuditLogsList } from \"~/hooks/index.js\";\nimport type { IAuditLog } from \"~/types.js\";\n\nconst t = i18n.ns(\"app-audit-logs/views/logs\");\n\nexport const LogsView = () => {\n const [selectedAuditLog, setSelectedAuditLog] = useState<IAuditLog | null>(null);\n const handleAuditLogSelect = useCallback(\n (auditLog: IAuditLog) => setSelectedAuditLog(auditLog),\n []\n );\n const closePreviewModal = useCallback(() => setSelectedAuditLog(null), []);\n\n const { innerHeight: windowHeight } = window;\n const [tableHeight, setTableHeight] = useState(0);\n const tableRef = useRef<HTMLDivElement>(null);\n const { getPermissions } = useSecurity();\n const hasAccessToUsers = Boolean(getPermissions(\"adminUsers\").length);\n\n const list = useAuditLogsList();\n\n useEffect(() => {\n setTableHeight(tableRef?.current?.clientHeight || 0);\n\n return () => {\n setTableHeight(0);\n };\n });\n\n const loadMoreOnScroll = debounce(({ scrollFrame }) => {\n if (scrollFrame.top > 0.8 && !list.isListLoadingMore && list.meta.hasMoreItems) {\n list.listMoreRecords();\n }\n }, 200);\n\n return (\n <div className={\"flex flex-col h-main-content\"}>\n <Header title=\"Audit Logs\">\n <Filters setWhere={list.setWhere} />\n </Header>\n <div className={\"flex-1 min-h-0\"}>\n {list.records.length === 0 && !list.isListLoading ? (\n <EmptyView title={t`No results found.`} action={null} />\n ) : (\n <>\n <Preview\n auditLog={selectedAuditLog}\n onClose={() => closePreviewModal()}\n hasAccessToUsers={hasAccessToUsers}\n />\n <Scrollbar\n data-testid=\"default-data-list\"\n onScrollFrame={scrollFrame => loadMoreOnScroll({ scrollFrame })}\n >\n <div className={\"h-[500px]\"}>\n <Table\n ref={tableRef}\n records={list.records}\n loading={list.isListLoading && !list.isListLoadingMore}\n handleRecordSelect={handleAuditLogSelect}\n sorting={list.sorting}\n onSortingChange={list.setSorting}\n hasAccessToUsers={hasAccessToUsers}\n />\n <LoadMoreButton\n show={!list.isListLoading && list.meta.hasMoreItems}\n disabled={list.isListLoadingMore}\n windowHeight={windowHeight}\n tableHeight={tableHeight}\n onClick={list.listMoreRecords}\n />\n </div>\n </Scrollbar>\n {list.isListLoadingMore && <LoadingMore />}\n </>\n )}\n </div>\n </div>\n );\n};\n"],"names":["t","i18n","LogsView","selectedAuditLog","setSelectedAuditLog","useState","handleAuditLogSelect","useCallback","auditLog","closePreviewModal","windowHeight","window","tableHeight","setTableHeight","tableRef","useRef","getPermissions","useSecurity","hasAccessToUsers","Boolean","list","useAuditLogsList","useEffect","loadMoreOnScroll","debounce","scrollFrame","Header","Filters","Preview","Scrollbar","Table","LoadMoreButton","LoadingMore","EmptyView"],"mappings":";;;;;;;;;;;;AAeA,MAAMA,IAAIC,KAAK,EAAE,CAAC;AAEX,MAAMC,WAAW;IACpB,MAAM,CAACC,kBAAkBC,oBAAoB,GAAGC,SAA2B;IAC3E,MAAMC,uBAAuBC,YACzB,CAACC,WAAwBJ,oBAAoBI,WAC7C,EAAE;IAEN,MAAMC,oBAAoBF,YAAY,IAAMH,oBAAoB,OAAO,EAAE;IAEzE,MAAM,EAAE,aAAaM,YAAY,EAAE,GAAGC;IACtC,MAAM,CAACC,aAAaC,eAAe,GAAGR,SAAS;IAC/C,MAAMS,WAAWC,OAAuB;IACxC,MAAM,EAAEC,cAAc,EAAE,GAAGC;IAC3B,MAAMC,mBAAmBC,QAAQH,eAAe,cAAc,MAAM;IAEpE,MAAMI,OAAOC;IAEbC,UAAU;QACNT,eAAeC,UAAU,SAAS,gBAAgB;QAElD,OAAO;YACHD,eAAe;QACnB;IACJ;IAEA,MAAMU,mBAAmBC,SAAS,CAAC,EAAEC,WAAW,EAAE;QAC9C,IAAIA,YAAY,GAAG,GAAG,OAAO,CAACL,KAAK,iBAAiB,IAAIA,KAAK,IAAI,CAAC,YAAY,EAC1EA,KAAK,eAAe;IAE5B,GAAG;IAEH,OAAO,WAAP,GACI,oBAAC;QAAI,WAAW;qBACZ,oBAACM,QAAMA;QAAC,OAAM;qBACV,oBAACC,SAAOA;QAAC,UAAUP,KAAK,QAAQ;uBAEpC,oBAAC;QAAI,WAAW;OACXA,AAAwB,MAAxBA,KAAK,OAAO,CAAC,MAAM,IAAWA,KAAK,aAAa,G,cAG7C,wDACI,oBAACQ,SAAOA;QACJ,UAAUzB;QACV,SAAS,IAAMM;QACf,kBAAkBS;sBAEtB,oBAACW,WAASA;QACN,eAAY;QACZ,eAAeJ,CAAAA,cAAeF,iBAAiB;gBAAEE;YAAY;qBAE7D,oBAAC;QAAI,WAAW;qBACZ,oBAACK,OAAKA;QACF,KAAKhB;QACL,SAASM,KAAK,OAAO;QACrB,SAASA,KAAK,aAAa,IAAI,CAACA,KAAK,iBAAiB;QACtD,oBAAoBd;QACpB,SAASc,KAAK,OAAO;QACrB,iBAAiBA,KAAK,UAAU;QAChC,kBAAkBF;sBAEtB,oBAACa,gBAAcA;QACX,MAAM,CAACX,KAAK,aAAa,IAAIA,KAAK,IAAI,CAAC,YAAY;QACnD,UAAUA,KAAK,iBAAiB;QAChC,cAAcV;QACd,aAAaE;QACb,SAASQ,KAAK,eAAe;UAIxCA,KAAK,iBAAiB,IAAI,WAAJ,GAAI,oBAACY,aAAWA,SAhCK,WAAH,GAC7C,oBAACC,WAASA;QAAC,OAAOjC,CAAC,CAAC,iBAAiB,CAAC;QAAE,QAAQ;;AAqCpE"}
@@ -0,0 +1,13 @@
1
+ import { AuditLogDetailsPresenter as Abstraction, type IAuditLogDetailsVm } from "./abstractions.js";
2
+ import type { IAuditLog } from "../../../types.js";
3
+ declare class AuditLogDetailsPresenterImpl implements Abstraction.Interface {
4
+ private _auditLog;
5
+ constructor();
6
+ get vm(): IAuditLogDetailsVm;
7
+ init(auditLog: IAuditLog): void;
8
+ private parseContent;
9
+ }
10
+ export declare const AuditLogDetailsPresenter: typeof AuditLogDetailsPresenterImpl & {
11
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IAuditLogDetailsPresenter>;
12
+ };
13
+ export {};
@@ -0,0 +1,36 @@
1
+ import { computed, makeAutoObservable } from "mobx";
2
+ import { AuditLogDetailsPresenter } from "./abstractions.js";
3
+ class AuditLogDetailsPresenterImpl {
4
+ constructor(){
5
+ this._auditLog = null;
6
+ makeAutoObservable(this, {
7
+ vm: computed
8
+ }, {
9
+ autoBind: true
10
+ });
11
+ }
12
+ get vm() {
13
+ return {
14
+ auditLog: this._auditLog,
15
+ content: this.parseContent()
16
+ };
17
+ }
18
+ init(auditLog) {
19
+ this._auditLog = auditLog;
20
+ }
21
+ parseContent() {
22
+ if (!this._auditLog) return {};
23
+ try {
24
+ return JSON.parse(this._auditLog.content);
25
+ } catch {
26
+ return {};
27
+ }
28
+ }
29
+ }
30
+ const AuditLogDetailsPresenter_AuditLogDetailsPresenter = AuditLogDetailsPresenter.createImplementation({
31
+ implementation: AuditLogDetailsPresenterImpl,
32
+ dependencies: []
33
+ });
34
+ export { AuditLogDetailsPresenter_AuditLogDetailsPresenter as AuditLogDetailsPresenter };
35
+
36
+ //# sourceMappingURL=AuditLogDetailsPresenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views/Logs/Preview/AuditLogDetailsPresenter.js","sources":["../../../../src/views/Logs/Preview/AuditLogDetailsPresenter.ts"],"sourcesContent":["import { makeAutoObservable, computed } from \"mobx\";\nimport {\n AuditLogDetailsPresenter as Abstraction,\n type IAuditLogDetailsVm\n} from \"./abstractions.js\";\nimport type { IAuditLog } from \"~/types.js\";\n\nclass AuditLogDetailsPresenterImpl implements Abstraction.Interface {\n private _auditLog: IAuditLog | null = null;\n\n constructor() {\n makeAutoObservable(this, { vm: computed }, { autoBind: true });\n }\n\n get vm(): IAuditLogDetailsVm {\n return {\n auditLog: this._auditLog,\n content: this.parseContent()\n };\n }\n\n init(auditLog: IAuditLog): void {\n this._auditLog = auditLog;\n }\n\n private parseContent(): Record<string, unknown> {\n if (!this._auditLog) {\n return {};\n }\n try {\n return JSON.parse(this._auditLog.content);\n } catch {\n return {};\n }\n }\n}\n\nexport const AuditLogDetailsPresenter = Abstraction.createImplementation({\n implementation: AuditLogDetailsPresenterImpl,\n dependencies: []\n});\n"],"names":["AuditLogDetailsPresenterImpl","makeAutoObservable","computed","auditLog","JSON","AuditLogDetailsPresenter","Abstraction"],"mappings":";;AAOA,MAAMA;IAGF,aAAc;aAFN,SAAS,GAAqB;QAGlCC,mBAAmB,IAAI,EAAE;YAAE,IAAIC;QAAS,GAAG;YAAE,UAAU;QAAK;IAChE;IAEA,IAAI,KAAyB;QACzB,OAAO;YACH,UAAU,IAAI,CAAC,SAAS;YACxB,SAAS,IAAI,CAAC,YAAY;QAC9B;IACJ;IAEA,KAAKC,QAAmB,EAAQ;QAC5B,IAAI,CAAC,SAAS,GAAGA;IACrB;IAEQ,eAAwC;QAC5C,IAAI,CAAC,IAAI,CAAC,SAAS,EACf,OAAO,CAAC;QAEZ,IAAI;YACA,OAAOC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO;QAC5C,EAAE,OAAM;YACJ,OAAO,CAAC;QACZ;IACJ;AACJ;AAEO,MAAMC,oDAA2BC,yBAAAA,oBAAgC,CAAC;IACrE,gBAAgBN;IAChB,cAAc,EAAE;AACpB"}
@@ -1,9 +1,11 @@
1
1
  import React from "react";
2
- import type { Entry } from "../../../utils/transformCmsContentEntriesToRecordEntries";
3
- type HeaderProps = {
4
- auditLog: Entry | null;
2
+ import type { IAuditLog } from "../../../types.js";
3
+ interface PreviewProps {
4
+ auditLog: IAuditLog | null;
5
5
  onClose: () => void;
6
6
  hasAccessToUsers: boolean;
7
+ }
8
+ export declare const Preview: (({ auditLog, onClose, hasAccessToUsers }: PreviewProps) => React.JSX.Element | null) & React.NamedExoticComponent<PreviewProps> & {
9
+ readonly type: ({ auditLog, onClose, hasAccessToUsers }: PreviewProps) => React.JSX.Element | null;
7
10
  };
8
- export declare const Preview: ({ auditLog, onClose, hasAccessToUsers }: HeaderProps) => React.JSX.Element | null;
9
11
  export {};
@@ -1,90 +1,127 @@
1
- import React from "react";
2
- import { format, addMinutes } from "date-fns";
3
- import { Grid, Cell } from "@webiny/ui/Grid";
4
- import { Dialog, DialogContent, DialogTitle, DialogCancel, DialogActions } from "@webiny/ui/Dialog";
5
- import { CodeEditor } from "@webiny/ui/CodeEditor";
6
- import { Tooltip } from "@webiny/ui/Tooltip";
7
- import { Action } from "../Table";
8
- import { Text } from "../../../components/Text";
9
- import { PayloadWrapper, previewDialog } from "./styled";
10
- export const Preview = ({
11
- auditLog,
12
- onClose,
13
- hasAccessToUsers
14
- }) => {
15
- if (!auditLog) {
16
- return null;
17
- }
18
- const date = new Date(auditLog.savedOn);
19
- return /*#__PURE__*/React.createElement(Dialog, {
20
- open: !!auditLog,
21
- onClose: onClose,
22
- className: previewDialog
23
- }, /*#__PURE__*/React.createElement(DialogTitle, null, auditLog.message, /*#__PURE__*/React.createElement("div", {
24
- className: "title-actions",
25
- tabIndex: 0
26
- })), /*#__PURE__*/React.createElement(DialogContent, null, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
27
- span: 6
28
- }, /*#__PURE__*/React.createElement(Text, {
29
- use: "overline"
30
- }, "Application"), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement(Text, {
31
- use: "subtitle2"
32
- }, auditLog.app)), /*#__PURE__*/React.createElement(Cell, {
33
- span: 6
34
- }, /*#__PURE__*/React.createElement(Text, {
35
- use: "overline"
36
- }, "Date"), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement(Tooltip, {
37
- placement: "right",
38
- content: `UTC: ${format(addMinutes(date, date.getTimezoneOffset()), "yyyy-MM-dd HH:mm:ss")}`
39
- }, /*#__PURE__*/React.createElement(Text, {
40
- use: "subtitle2"
41
- }, format(date, "yyyy-MM-dd HH:mm:ss (O)")))), /*#__PURE__*/React.createElement(Cell, {
42
- span: 6
43
- }, /*#__PURE__*/React.createElement(Text, {
44
- use: "overline"
45
- }, "Entity"), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement(Text, {
46
- use: "subtitle2"
47
- }, auditLog.entity.label)), /*#__PURE__*/React.createElement(Cell, {
48
- span: 6
49
- }, /*#__PURE__*/React.createElement(Text, {
50
- use: "overline"
51
- }, "Entity Id"), /*#__PURE__*/React.createElement("br", null), auditLog.entity.link ? /*#__PURE__*/React.createElement("a", {
52
- href: auditLog.entity.link,
53
- target: "blank"
54
- }, /*#__PURE__*/React.createElement(Text, {
55
- use: "subtitle2"
56
- }, auditLog.entityId)) : /*#__PURE__*/React.createElement(Text, {
57
- use: "subtitle2"
58
- }, auditLog.entityId)), /*#__PURE__*/React.createElement(Cell, {
59
- span: 6
60
- }, /*#__PURE__*/React.createElement(Text, {
61
- use: "overline"
62
- }, "Action"), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement(Action, {
63
- label: auditLog.action.label,
64
- value: auditLog.action.value
65
- })), hasAccessToUsers && /*#__PURE__*/React.createElement(Cell, {
66
- span: 6
67
- }, /*#__PURE__*/React.createElement(Text, {
68
- use: "overline"
69
- }, "Initiator"), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("a", {
70
- href: `/admin-users?id=${auditLog.initiator.id}`,
71
- target: "blank"
72
- }, /*#__PURE__*/React.createElement(Text, {
73
- use: "subtitle2"
74
- }, auditLog.initiator.name)), /*#__PURE__*/React.createElement(Text, {
75
- use: "body2"
76
- }, ` (${auditLog.initiator.role})`)), /*#__PURE__*/React.createElement(Cell, {
77
- span: 12
78
- }, /*#__PURE__*/React.createElement(Text, {
79
- use: "overline"
80
- }, "Payload"), /*#__PURE__*/React.createElement(PayloadWrapper, null, /*#__PURE__*/React.createElement(CodeEditor, {
81
- mode: "json",
82
- theme: "chrome",
83
- value: JSON.stringify(JSON.parse(auditLog.data), null, 2),
84
- readOnly: true
85
- }))))), /*#__PURE__*/React.createElement(DialogActions, null, /*#__PURE__*/React.createElement(DialogCancel, {
86
- onClick: onClose
87
- }, "Close")));
88
- };
1
+ import react, { useEffect, useMemo } from "react";
2
+ import { addMinutes, format } from "date-fns";
3
+ import { CodeEditor, Drawer, Grid, Tabs, Tooltip } from "@webiny/admin-ui";
4
+ import { createReactiveComponent } from "@webiny/app-admin";
5
+ import { Action } from "../Table/index.js";
6
+ import { Text } from "../../../components/Text.js";
7
+ import { useAuditLogsListConfig } from "../../../config/list/AuditLogsListConfig.js";
8
+ import { useAuditLogDetailsPresenter } from "./feature.js";
9
+ const EDITOR_HEIGHT = "calc(100vh - 350px)";
10
+ const Preview_PayloadTab = createReactiveComponent(function() {
11
+ const presenter = useAuditLogDetailsPresenter();
12
+ const { auditLog } = presenter.vm;
13
+ if (!auditLog) return null;
14
+ return /*#__PURE__*/ react.createElement(CodeEditor, {
15
+ language: "json",
16
+ value: JSON.stringify(JSON.parse(auditLog.content), null, 2),
17
+ height: EDITOR_HEIGHT
18
+ });
19
+ });
20
+ const Preview_Preview = createReactiveComponent(function({ auditLog, onClose, hasAccessToUsers }) {
21
+ const presenter = useAuditLogDetailsPresenter();
22
+ const config = useAuditLogsListConfig();
23
+ useEffect(()=>{
24
+ if (auditLog) presenter.init(auditLog);
25
+ }, [
26
+ presenter,
27
+ auditLog
28
+ ]);
29
+ const tabs = useMemo(()=>{
30
+ if (!auditLog) return [];
31
+ const customTabs = config.details.tabs.filter((tab)=>!tab.canRender || tab.canRender(auditLog));
32
+ return [
33
+ /*#__PURE__*/ react.createElement(Tabs.Tab, {
34
+ key: "payload",
35
+ value: "payload",
36
+ trigger: "Payload",
37
+ content: /*#__PURE__*/ react.createElement(Preview_PayloadTab, null)
38
+ }),
39
+ ...customTabs.map((tab)=>/*#__PURE__*/ react.createElement(Tabs.Tab, {
40
+ key: tab.name,
41
+ value: tab.name,
42
+ trigger: tab.label,
43
+ content: tab.element
44
+ }))
45
+ ];
46
+ }, [
47
+ auditLog,
48
+ config.details.tabs
49
+ ]);
50
+ if (!auditLog) return null;
51
+ const date = new Date(auditLog.createdOn);
52
+ return /*#__PURE__*/ react.createElement(Drawer, {
53
+ open: true,
54
+ onClose: onClose,
55
+ modal: true,
56
+ width: 720,
57
+ title: auditLog.message,
58
+ headerSeparator: true,
59
+ bodyPadding: false,
60
+ actions: /*#__PURE__*/ react.createElement(Drawer.CancelButton, {
61
+ text: "Close",
62
+ onClick: onClose
63
+ })
64
+ }, /*#__PURE__*/ react.createElement("div", {
65
+ className: "flex flex-col h-full"
66
+ }, /*#__PURE__*/ react.createElement("div", {
67
+ className: "shrink-0 p-md pb-0"
68
+ }, /*#__PURE__*/ react.createElement(Grid, null, /*#__PURE__*/ react.createElement(Grid.Column, {
69
+ span: 6
70
+ }, /*#__PURE__*/ react.createElement(Text, {
71
+ use: "overline"
72
+ }, "Application"), /*#__PURE__*/ react.createElement("br", null), /*#__PURE__*/ react.createElement(Text, {
73
+ use: "subtitle2"
74
+ }, auditLog.app)), /*#__PURE__*/ react.createElement(Grid.Column, {
75
+ span: 6
76
+ }, /*#__PURE__*/ react.createElement(Text, {
77
+ use: "overline"
78
+ }, "Date"), /*#__PURE__*/ react.createElement("br", null), /*#__PURE__*/ react.createElement(Tooltip, {
79
+ side: "left",
80
+ content: `UTC: ${format(addMinutes(date, date.getTimezoneOffset()), "yyyy-MM-dd HH:mm:ss")}`,
81
+ trigger: /*#__PURE__*/ react.createElement(Text, {
82
+ use: "subtitle2"
83
+ }, format(date, "yyyy-MM-dd HH:mm:ss (O)"))
84
+ })), /*#__PURE__*/ react.createElement(Grid.Column, {
85
+ span: 6
86
+ }, /*#__PURE__*/ react.createElement(Text, {
87
+ use: "overline"
88
+ }, "Entity"), /*#__PURE__*/ react.createElement("br", null), /*#__PURE__*/ react.createElement(Text, {
89
+ use: "subtitle2"
90
+ }, auditLog.entity.label)), /*#__PURE__*/ react.createElement(Grid.Column, {
91
+ span: 6
92
+ }, /*#__PURE__*/ react.createElement(Text, {
93
+ use: "overline"
94
+ }, "Entity Id"), /*#__PURE__*/ react.createElement("br", null), auditLog.entity.link ? /*#__PURE__*/ react.createElement("a", {
95
+ href: auditLog.entity.link,
96
+ target: "blank"
97
+ }, /*#__PURE__*/ react.createElement(Text, {
98
+ use: "subtitle2"
99
+ }, auditLog.entityId)) : /*#__PURE__*/ react.createElement(Text, {
100
+ use: "subtitle2"
101
+ }, auditLog.entityId)), /*#__PURE__*/ react.createElement(Grid.Column, {
102
+ span: 6
103
+ }, /*#__PURE__*/ react.createElement(Text, {
104
+ use: "overline"
105
+ }, "Action"), /*#__PURE__*/ react.createElement("br", null), /*#__PURE__*/ react.createElement(Action, {
106
+ label: auditLog.action.label,
107
+ value: auditLog.action.value
108
+ })), hasAccessToUsers ? /*#__PURE__*/ react.createElement(Grid.Column, {
109
+ span: 6
110
+ }, /*#__PURE__*/ react.createElement(Text, {
111
+ use: "overline"
112
+ }, "Initiator"), /*#__PURE__*/ react.createElement("br", null), /*#__PURE__*/ react.createElement("a", {
113
+ href: `/admin-users?id=${auditLog.createdBy.id}`,
114
+ target: "blank"
115
+ }, /*#__PURE__*/ react.createElement(Text, {
116
+ use: "subtitle2"
117
+ }, auditLog.createdBy.displayName)), /*#__PURE__*/ react.createElement(Text, {
118
+ use: "body2"
119
+ }, ` (${auditLog.createdBy.role})`)) : null)), /*#__PURE__*/ react.createElement("div", {
120
+ className: "px-md pb-md"
121
+ }, /*#__PURE__*/ react.createElement(Tabs, {
122
+ tabs: tabs
123
+ }))));
124
+ });
125
+ export { Preview_Preview as Preview };
89
126
 
90
127
  //# sourceMappingURL=Preview.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","format","addMinutes","Grid","Cell","Dialog","DialogContent","DialogTitle","DialogCancel","DialogActions","CodeEditor","Tooltip","Action","Text","PayloadWrapper","previewDialog","Preview","auditLog","onClose","hasAccessToUsers","date","Date","savedOn","createElement","open","className","message","tabIndex","span","use","app","placement","content","getTimezoneOffset","entity","label","link","href","target","entityId","action","value","initiator","id","name","role","mode","theme","JSON","stringify","parse","data","readOnly","onClick"],"sources":["Preview.tsx"],"sourcesContent":["import React from \"react\";\nimport { format, addMinutes } from \"date-fns\";\n\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Dialog, DialogContent, DialogTitle, DialogCancel, DialogActions } from \"@webiny/ui/Dialog\";\nimport { CodeEditor } from \"@webiny/ui/CodeEditor\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\n\nimport { Action } from \"~/views/Logs/Table\";\nimport { Text } from \"~/components/Text\";\nimport type { Entry } from \"~/utils/transformCmsContentEntriesToRecordEntries\";\nimport { PayloadWrapper, previewDialog } from \"./styled\";\n\ntype HeaderProps = {\n auditLog: Entry | null;\n onClose: () => void;\n hasAccessToUsers: boolean;\n};\n\nexport const Preview = ({ auditLog, onClose, hasAccessToUsers }: HeaderProps) => {\n if (!auditLog) {\n return null;\n }\n\n const date = new Date(auditLog.savedOn);\n\n return (\n <Dialog open={!!auditLog} onClose={onClose} className={previewDialog}>\n <DialogTitle>\n {auditLog.message}\n <div className=\"title-actions\" tabIndex={0}></div>\n </DialogTitle>\n\n <DialogContent>\n <Grid>\n <Cell span={6}>\n <Text use=\"overline\">Application</Text>\n <br />\n <Text use=\"subtitle2\">{auditLog.app}</Text>\n </Cell>\n <Cell span={6}>\n <Text use=\"overline\">Date</Text>\n <br />\n <Tooltip\n placement=\"right\"\n content={`UTC: ${format(\n addMinutes(date, date.getTimezoneOffset()),\n \"yyyy-MM-dd HH:mm:ss\"\n )}`}\n >\n <Text use={\"subtitle2\"}>{format(date, \"yyyy-MM-dd HH:mm:ss (O)\")}</Text>\n </Tooltip>\n </Cell>\n <Cell span={6}>\n <Text use=\"overline\">Entity</Text>\n <br />\n <Text use=\"subtitle2\">{auditLog.entity.label}</Text>\n </Cell>\n <Cell span={6}>\n <Text use=\"overline\">Entity Id</Text>\n <br />\n {auditLog.entity.link ? (\n <a href={auditLog.entity.link} target={\"blank\"}>\n <Text use=\"subtitle2\">{auditLog.entityId}</Text>\n </a>\n ) : (\n <Text use=\"subtitle2\">{auditLog.entityId}</Text>\n )}\n </Cell>\n <Cell span={6}>\n <Text use=\"overline\">Action</Text>\n <br />\n <Action label={auditLog.action.label} value={auditLog.action.value} />\n </Cell>\n {hasAccessToUsers && (\n <Cell span={6}>\n <Text use=\"overline\">Initiator</Text>\n <br />\n <a href={`/admin-users?id=${auditLog.initiator.id}`} target={\"blank\"}>\n <Text use={\"subtitle2\"}>{auditLog.initiator.name}</Text>\n </a>\n <Text use={\"body2\"}>{` (${auditLog.initiator.role})`}</Text>\n </Cell>\n )}\n <Cell span={12}>\n <Text use=\"overline\">Payload</Text>\n <PayloadWrapper>\n <CodeEditor\n mode=\"json\"\n theme=\"chrome\"\n value={JSON.stringify(JSON.parse(auditLog.data), null, 2)}\n readOnly\n />\n </PayloadWrapper>\n </Cell>\n </Grid>\n </DialogContent>\n <DialogActions>\n <DialogCancel onClick={onClose}>Close</DialogCancel>\n </DialogActions>\n </Dialog>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"views/Logs/Preview/Preview.js","sources":["../../../../src/views/Logs/Preview/Preview.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { addMinutes, format } from \"date-fns\";\nimport { Grid, Drawer, CodeEditor, Tooltip, Tabs } from \"@webiny/admin-ui\";\nimport { createReactiveComponent } from \"@webiny/app-admin\";\nimport { Action } from \"~/views/Logs/Table/index.js\";\nimport { Text } from \"~/components/Text.js\";\nimport { useAuditLogsListConfig } from \"~/config/list/AuditLogsListConfig.js\";\nimport { useAuditLogDetailsPresenter } from \"./feature.js\";\nimport type { IAuditLog } from \"~/types.js\";\n\ninterface PreviewProps {\n auditLog: IAuditLog | null;\n onClose: () => void;\n hasAccessToUsers: boolean;\n}\n\nconst EDITOR_HEIGHT = \"calc(100vh - 350px)\";\n\nconst PayloadTab = createReactiveComponent(function PayloadTab() {\n const presenter = useAuditLogDetailsPresenter();\n const { auditLog } = presenter.vm;\n if (!auditLog) {\n return null;\n }\n return (\n <CodeEditor\n language=\"json\"\n value={JSON.stringify(JSON.parse(auditLog.content), null, 2)}\n height={EDITOR_HEIGHT}\n />\n );\n});\n\nexport const Preview = createReactiveComponent(function Preview({\n auditLog,\n onClose,\n hasAccessToUsers\n}: PreviewProps) {\n const presenter = useAuditLogDetailsPresenter();\n const config = useAuditLogsListConfig();\n\n useEffect(() => {\n if (auditLog) {\n presenter.init(auditLog);\n }\n }, [presenter, auditLog]);\n\n const tabs = useMemo(() => {\n if (!auditLog) {\n return [];\n }\n\n const customTabs = config.details.tabs.filter(\n tab => !tab.canRender || tab.canRender(auditLog)\n );\n\n return [\n <Tabs.Tab key=\"payload\" value=\"payload\" trigger=\"Payload\" content={<PayloadTab />} />,\n ...customTabs.map(tab => (\n <Tabs.Tab\n key={tab.name}\n value={tab.name}\n trigger={tab.label}\n content={tab.element}\n />\n ))\n ];\n }, [auditLog, config.details.tabs]);\n\n if (!auditLog) {\n return null;\n }\n\n const date = new Date(auditLog.createdOn);\n\n return (\n <Drawer\n open={true}\n onClose={onClose}\n modal={true}\n width={720}\n title={auditLog.message}\n headerSeparator={true}\n bodyPadding={false}\n actions={<Drawer.CancelButton text={\"Close\"} onClick={onClose} />}\n >\n <div className={\"flex flex-col h-full\"}>\n <div className={\"shrink-0 p-md pb-0\"}>\n <Grid>\n <Grid.Column span={6}>\n <Text use=\"overline\">Application</Text>\n <br />\n <Text use=\"subtitle2\">{auditLog.app}</Text>\n </Grid.Column>\n <Grid.Column span={6}>\n <Text use=\"overline\">Date</Text>\n <br />\n <Tooltip\n side=\"left\"\n content={`UTC: ${format(\n addMinutes(date, date.getTimezoneOffset()),\n \"yyyy-MM-dd HH:mm:ss\"\n )}`}\n trigger={\n <Text use={\"subtitle2\"}>\n {format(date, \"yyyy-MM-dd HH:mm:ss (O)\")}\n </Text>\n }\n />\n </Grid.Column>\n <Grid.Column span={6}>\n <Text use=\"overline\">Entity</Text>\n <br />\n <Text use=\"subtitle2\">{auditLog.entity.label}</Text>\n </Grid.Column>\n <Grid.Column span={6}>\n <Text use=\"overline\">Entity Id</Text>\n <br />\n {auditLog.entity.link ? (\n <a href={auditLog.entity.link} target={\"blank\"}>\n <Text use=\"subtitle2\">{auditLog.entityId}</Text>\n </a>\n ) : (\n <Text use=\"subtitle2\">{auditLog.entityId}</Text>\n )}\n </Grid.Column>\n <Grid.Column span={6}>\n <Text use=\"overline\">Action</Text>\n <br />\n <Action label={auditLog.action.label} value={auditLog.action.value} />\n </Grid.Column>\n {hasAccessToUsers ? (\n <Grid.Column span={6}>\n <Text use=\"overline\">Initiator</Text>\n <br />\n <a\n href={`/admin-users?id=${auditLog.createdBy.id}`}\n target={\"blank\"}\n >\n <Text use={\"subtitle2\"}>{auditLog.createdBy.displayName}</Text>\n </a>\n <Text use={\"body2\"}>{` (${auditLog.createdBy.role})`}</Text>\n </Grid.Column>\n ) : null}\n </Grid>\n </div>\n <div className={\"px-md pb-md\"}>\n <Tabs tabs={tabs} />\n </div>\n </div>\n </Drawer>\n );\n});\n"],"names":["EDITOR_HEIGHT","PayloadTab","createReactiveComponent","presenter","useAuditLogDetailsPresenter","auditLog","CodeEditor","JSON","Preview","onClose","hasAccessToUsers","config","useAuditLogsListConfig","useEffect","tabs","useMemo","customTabs","tab","Tabs","date","Date","Drawer","Grid","Text","Tooltip","format","addMinutes","Action"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { IAuditLog } from "../../../types.js";
2
+ export interface IAuditLogDetailsVm {
3
+ auditLog: IAuditLog | null;
4
+ content: Record<string, unknown>;
5
+ }
6
+ export interface IAuditLogDetailsPresenter {
7
+ readonly vm: IAuditLogDetailsVm;
8
+ init(auditLog: IAuditLog): void;
9
+ }
10
+ export declare const AuditLogDetailsPresenter: import("@webiny/di").Abstraction<IAuditLogDetailsPresenter>;
11
+ export declare namespace AuditLogDetailsPresenter {
12
+ type Interface = IAuditLogDetailsPresenter;
13
+ type ViewModel = IAuditLogDetailsVm;
14
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/admin";
2
+ const AuditLogDetailsPresenter = createAbstraction("AuditLogDetailsPresenter");
3
+ export { AuditLogDetailsPresenter };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views/Logs/Preview/abstractions.js","sources":["../../../../src/views/Logs/Preview/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { IAuditLog } from \"~/types.js\";\n\nexport interface IAuditLogDetailsVm {\n auditLog: IAuditLog | null;\n content: Record<string, unknown>;\n}\n\nexport interface IAuditLogDetailsPresenter {\n readonly vm: IAuditLogDetailsVm;\n init(auditLog: IAuditLog): void;\n}\n\nexport const AuditLogDetailsPresenter = createAbstraction<IAuditLogDetailsPresenter>(\n \"AuditLogDetailsPresenter\"\n);\n\nexport namespace AuditLogDetailsPresenter {\n export type Interface = IAuditLogDetailsPresenter;\n export type ViewModel = IAuditLogDetailsVm;\n}\n"],"names":["AuditLogDetailsPresenter","createAbstraction"],"mappings":";AAaO,MAAMA,2BAA2BC,kBACpC"}
@@ -0,0 +1,5 @@
1
+ import { AuditLogDetailsPresenter as Abstraction } from "./abstractions.js";
2
+ export declare const AuditLogDetailsPresenterFeature: import("@webiny/feature/admin").FeatureDefinition<{
3
+ presenter: import("./abstractions.js").IAuditLogDetailsPresenter;
4
+ }, []>;
5
+ export declare function useAuditLogDetailsPresenter(): Abstraction.Interface;
@@ -0,0 +1,22 @@
1
+ import { createFeature } from "@webiny/feature/admin";
2
+ import { useFeature } from "@webiny/app-admin";
3
+ import { AuditLogDetailsPresenter } from "./abstractions.js";
4
+ import { AuditLogDetailsPresenter as external_AuditLogDetailsPresenter_js_AuditLogDetailsPresenter } from "./AuditLogDetailsPresenter.js";
5
+ const AuditLogDetailsPresenterFeature = createFeature({
6
+ name: "AuditLogs/DetailsPresenter",
7
+ register (container) {
8
+ container.register(external_AuditLogDetailsPresenter_js_AuditLogDetailsPresenter).inSingletonScope();
9
+ },
10
+ resolve (container) {
11
+ return {
12
+ presenter: container.resolve(AuditLogDetailsPresenter)
13
+ };
14
+ }
15
+ });
16
+ function useAuditLogDetailsPresenter() {
17
+ const { presenter } = useFeature(AuditLogDetailsPresenterFeature);
18
+ return presenter;
19
+ }
20
+ export { AuditLogDetailsPresenterFeature, useAuditLogDetailsPresenter };
21
+
22
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views/Logs/Preview/feature.js","sources":["../../../../src/views/Logs/Preview/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { useFeature } from \"@webiny/app-admin\";\nimport { AuditLogDetailsPresenter as Abstraction } from \"./abstractions.js\";\nimport { AuditLogDetailsPresenter } from \"./AuditLogDetailsPresenter.js\";\n\nexport const AuditLogDetailsPresenterFeature = createFeature({\n name: \"AuditLogs/DetailsPresenter\",\n register(container) {\n container.register(AuditLogDetailsPresenter).inSingletonScope();\n },\n resolve(container) {\n return {\n presenter: container.resolve(Abstraction)\n };\n }\n});\n\nexport function useAuditLogDetailsPresenter(): Abstraction.Interface {\n const { presenter } = useFeature(AuditLogDetailsPresenterFeature);\n return presenter;\n}\n"],"names":["AuditLogDetailsPresenterFeature","createFeature","container","AuditLogDetailsPresenter","Abstraction","useAuditLogDetailsPresenter","presenter","useFeature"],"mappings":";;;;AAKO,MAAMA,kCAAkCC,cAAc;IACzD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,+DAA0B,gBAAgB;IACjE;IACA,SAAQD,SAAS;QACb,OAAO;YACH,WAAWA,UAAU,OAAO,CAACE;QACjC;IACJ;AACJ;AAEO,SAASC;IACZ,MAAM,EAAEC,SAAS,EAAE,GAAGC,WAAWP;IACjC,OAAOM;AACX"}
@@ -1 +1,3 @@
1
- export * from "./Preview";
1
+ export * from "./Preview.js";
2
+ export { useAuditLogDetailsPresenter } from "./feature.js";
3
+ export type { IAuditLogDetailsPresenter, IAuditLogDetailsVm } from "./abstractions.js";
@@ -1,3 +1,2 @@
1
- export * from "./Preview";
2
-
3
- //# sourceMappingURL=index.js.map
1
+ export * from "./Preview.js";
2
+ export { useAuditLogDetailsPresenter } from "./feature.js";