@webiny/app-audit-logs 0.0.0-unstable.0156a4c312

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 (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/SecurityPermission.d.ts +2 -0
  4. package/SecurityPermission.js +15 -0
  5. package/SecurityPermission.js.map +1 -0
  6. package/components/Text.d.ts +10 -0
  7. package/components/Text.js +35 -0
  8. package/components/Text.js.map +1 -0
  9. package/config/list/AuditLogsListConfig.d.ts +55 -0
  10. package/config/list/AuditLogsListConfig.js +44 -0
  11. package/config/list/AuditLogsListConfig.js.map +1 -0
  12. package/config/list/Browser/Filter.d.ts +39 -0
  13. package/config/list/Browser/Filter.js +37 -0
  14. package/config/list/Browser/Filter.js.map +1 -0
  15. package/config/list/Browser/FiltersToWhere.d.ts +7 -0
  16. package/config/list/Browser/FiltersToWhere.js +13 -0
  17. package/config/list/Browser/FiltersToWhere.js.map +1 -0
  18. package/config/list/Browser/index.d.ts +37 -0
  19. package/config/list/Browser/index.js +9 -0
  20. package/config/list/Browser/index.js.map +1 -0
  21. package/config/list/Details/PreviewTab.d.ts +15 -0
  22. package/config/list/Details/PreviewTab.js +32 -0
  23. package/config/list/Details/PreviewTab.js.map +1 -0
  24. package/config/list/Details/index.d.ts +8 -0
  25. package/config/list/Details/index.js +7 -0
  26. package/config/list/Details/index.js.map +1 -0
  27. package/config/list/index.d.ts +1 -0
  28. package/config/list/index.js +1 -0
  29. package/constants/index.d.ts +1 -0
  30. package/constants/index.js +4 -0
  31. package/constants/index.js.map +1 -0
  32. package/domain/permissionsSchema.d.ts +4 -0
  33. package/domain/permissionsSchema.js +8 -0
  34. package/domain/permissionsSchema.js.map +1 -0
  35. package/features/listAuditLogs/ListAuditLogsGateway.d.ts +11 -0
  36. package/features/listAuditLogs/ListAuditLogsGateway.js +71 -0
  37. package/features/listAuditLogs/ListAuditLogsGateway.js.map +1 -0
  38. package/features/listAuditLogs/ListAuditLogsRepository.d.ts +11 -0
  39. package/features/listAuditLogs/ListAuditLogsRepository.js +35 -0
  40. package/features/listAuditLogs/ListAuditLogsRepository.js.map +1 -0
  41. package/features/listAuditLogs/ListAuditLogsUseCase.d.ts +10 -0
  42. package/features/listAuditLogs/ListAuditLogsUseCase.js +19 -0
  43. package/features/listAuditLogs/ListAuditLogsUseCase.js.map +1 -0
  44. package/features/listAuditLogs/abstractions/ListAuditLogsGateway.d.ts +20 -0
  45. package/features/listAuditLogs/abstractions/ListAuditLogsGateway.js +5 -0
  46. package/features/listAuditLogs/abstractions/ListAuditLogsGateway.js.map +1 -0
  47. package/features/listAuditLogs/abstractions/ListAuditLogsRepository.d.ts +20 -0
  48. package/features/listAuditLogs/abstractions/ListAuditLogsRepository.js +5 -0
  49. package/features/listAuditLogs/abstractions/ListAuditLogsRepository.js.map +1 -0
  50. package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.d.ts +20 -0
  51. package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.js +5 -0
  52. package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.js.map +1 -0
  53. package/features/listAuditLogs/abstractions/index.d.ts +6 -0
  54. package/features/listAuditLogs/abstractions/index.js +3 -0
  55. package/features/listAuditLogs/feature.d.ts +3 -0
  56. package/features/listAuditLogs/feature.js +21 -0
  57. package/features/listAuditLogs/feature.js.map +1 -0
  58. package/features/listAuditLogs/index.d.ts +1 -0
  59. package/features/listAuditLogs/index.js +1 -0
  60. package/features/permissions/abstractions.d.ts +17 -0
  61. package/features/permissions/abstractions.js +6 -0
  62. package/features/permissions/abstractions.js.map +1 -0
  63. package/features/permissions/feature.d.ts +14 -0
  64. package/features/permissions/feature.js +7 -0
  65. package/features/permissions/feature.js.map +1 -0
  66. package/graphql.d.ts +1 -0
  67. package/graphql.js +27 -0
  68. package/graphql.js.map +1 -0
  69. package/hooks/graphql.d.ts +9 -0
  70. package/hooks/graphql.js +0 -0
  71. package/hooks/index.d.ts +1 -0
  72. package/hooks/index.js +1 -0
  73. package/hooks/schema.d.ts +35 -0
  74. package/hooks/schema.js +27 -0
  75. package/hooks/schema.js.map +1 -0
  76. package/hooks/useAuditLogsList.d.ts +16 -0
  77. package/hooks/useAuditLogsList.js +101 -0
  78. package/hooks/useAuditLogsList.js.map +1 -0
  79. package/index.d.ts +2 -0
  80. package/index.js +51 -0
  81. package/index.js.map +1 -0
  82. package/package.json +46 -0
  83. package/routes.d.ts +4 -0
  84. package/routes.js +10 -0
  85. package/routes.js.map +1 -0
  86. package/types.d.ts +56 -0
  87. package/types.js +1 -0
  88. package/utils/transformRawAuditLog.d.ts +5 -0
  89. package/utils/transformRawAuditLog.js +26 -0
  90. package/utils/transformRawAuditLog.js.map +1 -0
  91. package/views/Logs/Filters/FilterByAction.d.ts +2 -0
  92. package/views/Logs/Filters/FilterByAction.js +46 -0
  93. package/views/Logs/Filters/FilterByAction.js.map +1 -0
  94. package/views/Logs/Filters/FilterByApp.d.ts +2 -0
  95. package/views/Logs/Filters/FilterByApp.js +38 -0
  96. package/views/Logs/Filters/FilterByApp.js.map +1 -0
  97. package/views/Logs/Filters/FilterByCreatedBy.d.ts +2 -0
  98. package/views/Logs/Filters/FilterByCreatedBy.js +50 -0
  99. package/views/Logs/Filters/FilterByCreatedBy.js.map +1 -0
  100. package/views/Logs/Filters/FilterByCreatedOn.d.ts +2 -0
  101. package/views/Logs/Filters/FilterByCreatedOn.js +38 -0
  102. package/views/Logs/Filters/FilterByCreatedOn.js.map +1 -0
  103. package/views/Logs/Filters/FilterByEntity.d.ts +2 -0
  104. package/views/Logs/Filters/FilterByEntity.js +46 -0
  105. package/views/Logs/Filters/FilterByEntity.js.map +1 -0
  106. package/views/Logs/Filters/FilterByEntityId.d.ts +2 -0
  107. package/views/Logs/Filters/FilterByEntityId.js +26 -0
  108. package/views/Logs/Filters/FilterByEntityId.js.map +1 -0
  109. package/views/Logs/Filters/FilterByInitiator.d.ts +2 -0
  110. package/views/Logs/Filters/FilterByInitiator.js +49 -0
  111. package/views/Logs/Filters/FilterByInitiator.js.map +1 -0
  112. package/views/Logs/Filters/Filters.d.ts +7 -0
  113. package/views/Logs/Filters/Filters.js +69 -0
  114. package/views/Logs/Filters/Filters.js.map +1 -0
  115. package/views/Logs/Filters/index.d.ts +7 -0
  116. package/views/Logs/Filters/index.js +7 -0
  117. package/views/Logs/Filters/types.d.ts +9 -0
  118. package/views/Logs/Filters/types.js +0 -0
  119. package/views/Logs/Header/ButtonFilters/ButtonFilters.d.ts +8 -0
  120. package/views/Logs/Header/ButtonFilters/ButtonFilters.js +27 -0
  121. package/views/Logs/Header/ButtonFilters/ButtonFilters.js.map +1 -0
  122. package/views/Logs/Header/ButtonFilters/index.d.ts +1 -0
  123. package/views/Logs/Header/ButtonFilters/index.js +1 -0
  124. package/views/Logs/Header/Header.d.ts +7 -0
  125. package/views/Logs/Header/Header.js +14 -0
  126. package/views/Logs/Header/Header.js.map +1 -0
  127. package/views/Logs/Header/index.d.ts +1 -0
  128. package/views/Logs/Header/index.js +1 -0
  129. package/views/Logs/LoadMoreButton/LoadMoreButton.d.ts +9 -0
  130. package/views/Logs/LoadMoreButton/LoadMoreButton.js +16 -0
  131. package/views/Logs/LoadMoreButton/LoadMoreButton.js.map +1 -0
  132. package/views/Logs/LoadMoreButton/index.d.ts +1 -0
  133. package/views/Logs/LoadMoreButton/index.js +1 -0
  134. package/views/Logs/LoadMoreButton/styled.d.ts +4 -0
  135. package/views/Logs/LoadMoreButton/styled.js +7 -0
  136. package/views/Logs/LoadMoreButton/styled.js.map +1 -0
  137. package/views/Logs/LoadingMore/index.d.ts +2 -0
  138. package/views/Logs/LoadingMore/index.js +16 -0
  139. package/views/Logs/LoadingMore/index.js.map +1 -0
  140. package/views/Logs/LogsModule.d.ts +2 -0
  141. package/views/Logs/LogsModule.js +26 -0
  142. package/views/Logs/LogsModule.js.map +1 -0
  143. package/views/Logs/LogsView.d.ts +2 -0
  144. package/views/Logs/LogsView.js +73 -0
  145. package/views/Logs/LogsView.js.map +1 -0
  146. package/views/Logs/Preview/AuditLogDetailsPresenter.d.ts +13 -0
  147. package/views/Logs/Preview/AuditLogDetailsPresenter.js +36 -0
  148. package/views/Logs/Preview/AuditLogDetailsPresenter.js.map +1 -0
  149. package/views/Logs/Preview/Preview.d.ts +11 -0
  150. package/views/Logs/Preview/Preview.js +127 -0
  151. package/views/Logs/Preview/Preview.js.map +1 -0
  152. package/views/Logs/Preview/abstractions.d.ts +14 -0
  153. package/views/Logs/Preview/abstractions.js +5 -0
  154. package/views/Logs/Preview/abstractions.js.map +1 -0
  155. package/views/Logs/Preview/feature.d.ts +5 -0
  156. package/views/Logs/Preview/feature.js +22 -0
  157. package/views/Logs/Preview/feature.js.map +1 -0
  158. package/views/Logs/Preview/index.d.ts +3 -0
  159. package/views/Logs/Preview/index.js +2 -0
  160. package/views/Logs/Preview/tabs/AiPromptTabs.d.ts +2 -0
  161. package/views/Logs/Preview/tabs/AiPromptTabs.js +25 -0
  162. package/views/Logs/Preview/tabs/AiPromptTabs.js.map +1 -0
  163. package/views/Logs/Preview/tabs/LlmResponseTab.d.ts +4 -0
  164. package/views/Logs/Preview/tabs/LlmResponseTab.js +41 -0
  165. package/views/Logs/Preview/tabs/LlmResponseTab.js.map +1 -0
  166. package/views/Logs/Preview/tabs/SystemPromptTab.d.ts +4 -0
  167. package/views/Logs/Preview/tabs/SystemPromptTab.js +24 -0
  168. package/views/Logs/Preview/tabs/SystemPromptTab.js.map +1 -0
  169. package/views/Logs/Preview/tabs/UserPromptTab.d.ts +4 -0
  170. package/views/Logs/Preview/tabs/UserPromptTab.js +18 -0
  171. package/views/Logs/Preview/tabs/UserPromptTab.js.map +1 -0
  172. package/views/Logs/Preview/tabs/shared.d.ts +28 -0
  173. package/views/Logs/Preview/tabs/shared.js +16 -0
  174. package/views/Logs/Preview/tabs/shared.js.map +1 -0
  175. package/views/Logs/Table/Table.d.ts +21 -0
  176. package/views/Logs/Table/Table.js +117 -0
  177. package/views/Logs/Table/Table.js.map +1 -0
  178. package/views/Logs/Table/index.d.ts +1 -0
  179. package/views/Logs/Table/index.js +1 -0
  180. package/views/Logs/Table/styled.d.ts +1 -0
  181. package/views/Logs/Table/styled.js +17 -0
  182. package/views/Logs/Table/styled.js.map +1 -0
@@ -0,0 +1,7 @@
1
+ export * from "./Filters.js";
2
+ export * from "./FilterByCreatedBy.js";
3
+ export * from "./FilterByCreatedOn.js";
4
+ export * from "./FilterByApp.js";
5
+ export * from "./FilterByEntity.js";
6
+ export * from "./FilterByEntityId.js";
7
+ export * from "./FilterByAction.js";
@@ -0,0 +1,7 @@
1
+ export * from "./Filters.js";
2
+ export * from "./FilterByCreatedBy.js";
3
+ export * from "./FilterByCreatedOn.js";
4
+ export * from "./FilterByApp.js";
5
+ export * from "./FilterByEntity.js";
6
+ export * from "./FilterByEntityId.js";
7
+ export * from "./FilterByAction.js";
@@ -0,0 +1,9 @@
1
+ export interface IFilterFormData {
2
+ app?: string;
3
+ entity?: string;
4
+ entityId?: string;
5
+ action?: string;
6
+ createdBy?: string;
7
+ createdOn_gte?: Date;
8
+ createdOn_lte?: Date;
9
+ }
File without changes
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ type ButtonFiltersProps = {
3
+ showingFilters: boolean;
4
+ hideFilters: () => void;
5
+ showFilters: () => void;
6
+ };
7
+ export declare const ButtonFilters: ({ showingFilters, hideFilters, showFilters }: ButtonFiltersProps) => React.JSX.Element;
8
+ export {};
@@ -0,0 +1,27 @@
1
+ import react, { useCallback } from "react";
2
+ import { ReactComponent } from "@webiny/icons/filter_list.svg";
3
+ import { ReactComponent as filter_list_off_svg_ReactComponent } from "@webiny/icons/filter_list_off.svg";
4
+ import { IconButton } from "@webiny/admin-ui";
5
+ const Icon = ({ showingFilters })=>showingFilters ? /*#__PURE__*/ react.createElement(filter_list_off_svg_ReactComponent, null) : /*#__PURE__*/ react.createElement(ReactComponent, null);
6
+ const IconComponent = /*#__PURE__*/ react.memo(Icon);
7
+ const ButtonFilters = ({ showingFilters, hideFilters, showFilters })=>{
8
+ const toggleFilters = useCallback(()=>{
9
+ if (showingFilters) return void hideFilters();
10
+ showFilters();
11
+ }, [
12
+ showingFilters
13
+ ]);
14
+ return /*#__PURE__*/ react.createElement("div", {
15
+ className: "ml-sm"
16
+ }, /*#__PURE__*/ react.createElement(IconButton, {
17
+ variant: "secondary",
18
+ icon: /*#__PURE__*/ react.createElement(IconComponent, {
19
+ showingFilters: showingFilters
20
+ }),
21
+ onClick: toggleFilters,
22
+ "data-testid": "audit-logs.toggle-filters"
23
+ }));
24
+ };
25
+ export { ButtonFilters };
26
+
27
+ //# sourceMappingURL=ButtonFilters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views/Logs/Header/ButtonFilters/ButtonFilters.js","sources":["../../../../../src/views/Logs/Header/ButtonFilters/ButtonFilters.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { ReactComponent as FilterIcon } from \"@webiny/icons/filter_list.svg\";\nimport { ReactComponent as CloseFilterIcon } from \"@webiny/icons/filter_list_off.svg\";\nimport { IconButton } from \"@webiny/admin-ui\";\n\ninterface IconProps {\n showingFilters?: boolean;\n}\n\nconst Icon = ({ showingFilters }: IconProps) => {\n return showingFilters ? <CloseFilterIcon /> : <FilterIcon />;\n};\nconst IconComponent = React.memo(Icon);\n\ntype ButtonFiltersProps = {\n showingFilters: boolean;\n hideFilters: () => void;\n showFilters: () => void;\n};\n\nexport const ButtonFilters = ({ showingFilters, hideFilters, showFilters }: ButtonFiltersProps) => {\n const toggleFilters = useCallback(() => {\n if (showingFilters) {\n hideFilters();\n return;\n }\n showFilters();\n }, [showingFilters]);\n\n return (\n <div className={\"ml-sm\"}>\n <IconButton\n variant={\"secondary\"}\n icon={<IconComponent showingFilters={showingFilters} />}\n onClick={toggleFilters}\n data-testid=\"audit-logs.toggle-filters\"\n />\n </div>\n );\n};\n"],"names":["Icon","showingFilters","CloseFilterIcon","FilterIcon","IconComponent","React","ButtonFilters","hideFilters","showFilters","toggleFilters","useCallback","IconButton"],"mappings":";;;;AASA,MAAMA,OAAO,CAAC,EAAEC,cAAc,EAAa,GAChCA,iBAAiB,WAAjBA,GAAiB,oBAACC,oCAAeA,QAAAA,WAAAA,GAAM,oBAACC,gBAAUA;AAE7D,MAAMC,gBAAgB,WAAHA,GAAGC,MAAAA,IAAU,CAACL;AAQ1B,MAAMM,gBAAgB,CAAC,EAAEL,cAAc,EAAEM,WAAW,EAAEC,WAAW,EAAsB;IAC1F,MAAMC,gBAAgBC,YAAY;QAC9B,IAAIT,gBAAgB,YAChBM;QAGJC;IACJ,GAAG;QAACP;KAAe;IAEnB,OAAO,WAAP,GACI,oBAAC;QAAI,WAAW;qBACZ,oBAACU,YAAUA;QACP,SAAS;QACT,oBAAM,oBAACP,eAAaA;YAAC,gBAAgBH;;QACrC,SAASQ;QACT,eAAY;;AAI5B"}
@@ -0,0 +1 @@
1
+ export * from "./ButtonFilters.js";
@@ -0,0 +1 @@
1
+ export * from "./ButtonFilters.js";
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ type HeaderProps = {
3
+ title: string;
4
+ children?: React.ReactNode;
5
+ };
6
+ export declare const Header: ({ title, children }: HeaderProps) => React.JSX.Element;
7
+ export {};
@@ -0,0 +1,14 @@
1
+ import react from "react";
2
+ import { Text } from "../../../components/Text.js";
3
+ const Header = ({ title, children })=>/*#__PURE__*/ react.createElement("div", {
4
+ className: "box-border w-full border-b border-neutral-dimmed px-md py-sm"
5
+ }, /*#__PURE__*/ react.createElement("div", {
6
+ className: "flex items-center justify-between"
7
+ }, /*#__PURE__*/ react.createElement(Text, {
8
+ use: "headline5"
9
+ }, title), /*#__PURE__*/ react.createElement("div", {
10
+ className: "ml-auto"
11
+ }, children)));
12
+ export { Header };
13
+
14
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views/Logs/Header/Header.js","sources":["../../../../src/views/Logs/Header/Header.tsx"],"sourcesContent":["import React from \"react\";\nimport { Text } from \"~/components/Text.js\";\n\ntype HeaderProps = {\n title: string;\n children?: React.ReactNode;\n};\n\nexport const Header = ({ title, children }: HeaderProps) => {\n return (\n <div className=\"box-border w-full border-b border-neutral-dimmed px-md py-sm\">\n <div className=\"flex items-center justify-between\">\n <Text use={\"headline5\"}>{title}</Text>\n <div className={\"ml-auto\"}>{children}</div>\n </div>\n </div>\n );\n};\n"],"names":["Header","title","children","Text"],"mappings":";;AAQO,MAAMA,SAAS,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAe,GAC5C,WAAP,GACI,oBAAC;QAAI,WAAU;qBACX,oBAAC;QAAI,WAAU;qBACX,oBAACC,MAAIA;QAAC,KAAK;OAAcF,QAAAA,WAAAA,GACzB,oBAAC;QAAI,WAAW;OAAYC"}
@@ -0,0 +1 @@
1
+ export * from "./Header.js";
@@ -0,0 +1 @@
1
+ export * from "./Header.js";
@@ -0,0 +1,9 @@
1
+ import type { ReactElement } from "react";
2
+ export interface LoadMoreButtonProps {
3
+ windowHeight: number;
4
+ tableHeight: number;
5
+ onClick: () => void;
6
+ disabled?: boolean;
7
+ show: boolean;
8
+ }
9
+ export declare const LoadMoreButton: ({ disabled, windowHeight, tableHeight, show, onClick }: LoadMoreButtonProps) => ReactElement | null;
@@ -0,0 +1,16 @@
1
+ import react from "react";
2
+ import { i18n } from "@webiny/app/i18n/index.js";
3
+ import { Button } from "@webiny/admin-ui";
4
+ import { Container } from "./styled.js";
5
+ const t = i18n.ns("app-audit-logs/views/logs/load-more-button");
6
+ const LoadMoreButton = ({ disabled, windowHeight, tableHeight, show, onClick })=>{
7
+ if (show && windowHeight > tableHeight) return /*#__PURE__*/ react.createElement(Container, null, /*#__PURE__*/ react.createElement(Button, {
8
+ onClick: onClick,
9
+ disabled: disabled,
10
+ variant: "primary"
11
+ }, t`Load more records`));
12
+ return null;
13
+ };
14
+ export { LoadMoreButton };
15
+
16
+ //# sourceMappingURL=LoadMoreButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views/Logs/LoadMoreButton/LoadMoreButton.js","sources":["../../../../src/views/Logs/LoadMoreButton/LoadMoreButton.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\nimport React from \"react\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Button } from \"@webiny/admin-ui\";\nimport { Container } from \"./styled.js\";\n\nconst t = i18n.ns(\"app-audit-logs/views/logs/load-more-button\");\n\nexport interface LoadMoreButtonProps {\n windowHeight: number;\n tableHeight: number;\n onClick: () => void;\n disabled?: boolean;\n show: boolean;\n}\n\nexport const LoadMoreButton = ({\n disabled,\n windowHeight,\n tableHeight,\n show,\n onClick\n}: LoadMoreButtonProps): ReactElement | null => {\n if (show && windowHeight > tableHeight) {\n return (\n <Container>\n <Button\n onClick={onClick}\n disabled={disabled}\n variant={\"primary\"}\n >{t`Load more records`}</Button>\n </Container>\n );\n }\n\n return null;\n};\n"],"names":["t","i18n","LoadMoreButton","disabled","windowHeight","tableHeight","show","onClick","Container","Button"],"mappings":";;;;AAMA,MAAMA,IAAIC,KAAK,EAAE,CAAC;AAUX,MAAMC,iBAAiB,CAAC,EAC3BC,QAAQ,EACRC,YAAY,EACZC,WAAW,EACXC,IAAI,EACJC,OAAO,EACW;IAClB,IAAID,QAAQF,eAAeC,aACvB,OAAO,WAAP,GACI,oBAACG,WAASA,MAAAA,WAAAA,GACN,oBAACC,QAAMA;QACH,SAASF;QACT,UAAUJ;QACV,SAAS;OACXH,CAAC,CAAC,iBAAiB,CAAC;IAKlC,OAAO;AACX"}
@@ -0,0 +1 @@
1
+ export * from "./LoadMoreButton.js";
@@ -0,0 +1 @@
1
+ export * from "./LoadMoreButton.js";
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ export declare const Container: ({ children }: {
3
+ children: React.ReactNode;
4
+ }) => React.JSX.Element;
@@ -0,0 +1,7 @@
1
+ import react from "react";
2
+ const Container = ({ children })=>/*#__PURE__*/ react.createElement("div", {
3
+ className: "flex justify-center mt-md"
4
+ }, children);
5
+ export { Container };
6
+
7
+ //# sourceMappingURL=styled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views/Logs/LoadMoreButton/styled.js","sources":["../../../../src/views/Logs/LoadMoreButton/styled.tsx"],"sourcesContent":["import React from \"react\";\n\nexport const Container = ({ children }: { children: React.ReactNode }) => {\n return <div className={\"flex justify-center mt-md\"}>{children}</div>;\n};\n"],"names":["Container","children"],"mappings":";AAEO,MAAMA,YAAY,CAAC,EAAEC,QAAQ,EAAiC,GAC1D,WAAP,GAAO,oBAAC;QAAI,WAAW;OAA8BA"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const LoadingMore: () => React.JSX.Element;
@@ -0,0 +1,16 @@
1
+ import react from "react";
2
+ import { i18n } from "@webiny/app/i18n/index.js";
3
+ import { Loader, Text } from "@webiny/admin-ui";
4
+ const t = i18n.ns("app-audit-logs/components/table/loading-more");
5
+ const LoadingMore = ()=>/*#__PURE__*/ react.createElement("div", {
6
+ className: "absolute bottom-0 left-0 flex w-full items-center justify-center p-xl"
7
+ }, /*#__PURE__*/ react.createElement("div", {
8
+ className: "mx-auto flex items-center gap-sm rounded-md border border-neutral-dimmed bg-white p-md"
9
+ }, /*#__PURE__*/ react.createElement(Loader, {
10
+ size: "xs"
11
+ }), /*#__PURE__*/ react.createElement(Text, {
12
+ as: "span"
13
+ }, t`Loading more records...`)));
14
+ export { LoadingMore };
15
+
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views/Logs/LoadingMore/index.js","sources":["../../../../src/views/Logs/LoadingMore/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Loader, Text } from \"@webiny/admin-ui\";\n\nconst t = i18n.ns(\"app-audit-logs/components/table/loading-more\");\n\nexport const LoadingMore = () => {\n return (\n <div className=\"absolute bottom-0 left-0 flex w-full items-center justify-center p-xl\">\n <div className=\"mx-auto flex items-center gap-sm rounded-md border border-neutral-dimmed bg-white p-md\">\n <Loader size={\"xs\"} />\n <Text as={\"span\"}>{t`Loading more records...`}</Text>\n </div>\n </div>\n );\n};\n"],"names":["t","i18n","LoadingMore","Loader","Text"],"mappings":";;;AAIA,MAAMA,IAAIC,KAAK,EAAE,CAAC;AAEX,MAAMC,cAAc,IAChB,WAAP,GACI,oBAAC;QAAI,WAAU;qBACX,oBAAC;QAAI,WAAU;qBACX,oBAACC,QAAMA;QAAC,MAAM;sBACd,oBAACC,MAAIA;QAAC,IAAI;OAASJ,CAAC,CAAC,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const LogsModule: () => React.JSX.Element;
@@ -0,0 +1,26 @@
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
+
26
+ //# sourceMappingURL=LogsModule.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import type { IAuditLog } from "../../../types.js";
3
+ interface PreviewProps {
4
+ auditLog: IAuditLog | null;
5
+ onClose: () => void;
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;
10
+ };
11
+ export {};
@@ -0,0 +1,127 @@
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 };
126
+
127
+ //# sourceMappingURL=Preview.js.map
@@ -0,0 +1 @@
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