@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.
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/SecurityPermission.d.ts +2 -0
- package/SecurityPermission.js +15 -0
- package/SecurityPermission.js.map +1 -0
- package/components/Text.d.ts +10 -0
- package/components/Text.js +35 -0
- package/components/Text.js.map +1 -0
- package/config/list/AuditLogsListConfig.d.ts +55 -0
- package/config/list/AuditLogsListConfig.js +44 -0
- package/config/list/AuditLogsListConfig.js.map +1 -0
- package/config/list/Browser/Filter.d.ts +39 -0
- package/config/list/Browser/Filter.js +37 -0
- package/config/list/Browser/Filter.js.map +1 -0
- package/config/list/Browser/FiltersToWhere.d.ts +7 -0
- package/config/list/Browser/FiltersToWhere.js +13 -0
- package/config/list/Browser/FiltersToWhere.js.map +1 -0
- package/config/list/Browser/index.d.ts +37 -0
- package/config/list/Browser/index.js +9 -0
- package/config/list/Browser/index.js.map +1 -0
- package/config/list/Details/PreviewTab.d.ts +15 -0
- package/config/list/Details/PreviewTab.js +32 -0
- package/config/list/Details/PreviewTab.js.map +1 -0
- package/config/list/Details/index.d.ts +8 -0
- package/config/list/Details/index.js +7 -0
- package/config/list/Details/index.js.map +1 -0
- package/config/list/index.d.ts +1 -0
- package/config/list/index.js +1 -0
- package/constants/index.d.ts +1 -0
- package/constants/index.js +4 -0
- package/constants/index.js.map +1 -0
- package/domain/permissionsSchema.d.ts +4 -0
- package/domain/permissionsSchema.js +8 -0
- package/domain/permissionsSchema.js.map +1 -0
- package/features/listAuditLogs/ListAuditLogsGateway.d.ts +11 -0
- package/features/listAuditLogs/ListAuditLogsGateway.js +71 -0
- package/features/listAuditLogs/ListAuditLogsGateway.js.map +1 -0
- package/features/listAuditLogs/ListAuditLogsRepository.d.ts +11 -0
- package/features/listAuditLogs/ListAuditLogsRepository.js +35 -0
- package/features/listAuditLogs/ListAuditLogsRepository.js.map +1 -0
- package/features/listAuditLogs/ListAuditLogsUseCase.d.ts +10 -0
- package/features/listAuditLogs/ListAuditLogsUseCase.js +19 -0
- package/features/listAuditLogs/ListAuditLogsUseCase.js.map +1 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsGateway.d.ts +20 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsGateway.js +5 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsGateway.js.map +1 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsRepository.d.ts +20 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsRepository.js +5 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsRepository.js.map +1 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.d.ts +20 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.js +5 -0
- package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.js.map +1 -0
- package/features/listAuditLogs/abstractions/index.d.ts +6 -0
- package/features/listAuditLogs/abstractions/index.js +3 -0
- package/features/listAuditLogs/feature.d.ts +3 -0
- package/features/listAuditLogs/feature.js +21 -0
- package/features/listAuditLogs/feature.js.map +1 -0
- package/features/listAuditLogs/index.d.ts +1 -0
- package/features/listAuditLogs/index.js +1 -0
- package/features/permissions/abstractions.d.ts +17 -0
- package/features/permissions/abstractions.js +6 -0
- package/features/permissions/abstractions.js.map +1 -0
- package/features/permissions/feature.d.ts +14 -0
- package/features/permissions/feature.js +7 -0
- package/features/permissions/feature.js.map +1 -0
- package/graphql.d.ts +1 -0
- package/graphql.js +27 -0
- package/graphql.js.map +1 -0
- package/hooks/graphql.d.ts +9 -0
- package/hooks/graphql.js +0 -0
- package/hooks/index.d.ts +1 -0
- package/hooks/index.js +1 -0
- package/hooks/schema.d.ts +35 -0
- package/hooks/schema.js +27 -0
- package/hooks/schema.js.map +1 -0
- package/hooks/useAuditLogsList.d.ts +16 -0
- package/hooks/useAuditLogsList.js +101 -0
- package/hooks/useAuditLogsList.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.js +51 -0
- package/index.js.map +1 -0
- package/package.json +46 -0
- package/routes.d.ts +4 -0
- package/routes.js +10 -0
- package/routes.js.map +1 -0
- package/types.d.ts +56 -0
- package/types.js +1 -0
- package/utils/transformRawAuditLog.d.ts +5 -0
- package/utils/transformRawAuditLog.js +26 -0
- package/utils/transformRawAuditLog.js.map +1 -0
- package/views/Logs/Filters/FilterByAction.d.ts +2 -0
- package/views/Logs/Filters/FilterByAction.js +46 -0
- package/views/Logs/Filters/FilterByAction.js.map +1 -0
- package/views/Logs/Filters/FilterByApp.d.ts +2 -0
- package/views/Logs/Filters/FilterByApp.js +38 -0
- package/views/Logs/Filters/FilterByApp.js.map +1 -0
- package/views/Logs/Filters/FilterByCreatedBy.d.ts +2 -0
- package/views/Logs/Filters/FilterByCreatedBy.js +50 -0
- package/views/Logs/Filters/FilterByCreatedBy.js.map +1 -0
- package/views/Logs/Filters/FilterByCreatedOn.d.ts +2 -0
- package/views/Logs/Filters/FilterByCreatedOn.js +38 -0
- package/views/Logs/Filters/FilterByCreatedOn.js.map +1 -0
- package/views/Logs/Filters/FilterByEntity.d.ts +2 -0
- package/views/Logs/Filters/FilterByEntity.js +46 -0
- package/views/Logs/Filters/FilterByEntity.js.map +1 -0
- package/views/Logs/Filters/FilterByEntityId.d.ts +2 -0
- package/views/Logs/Filters/FilterByEntityId.js +26 -0
- package/views/Logs/Filters/FilterByEntityId.js.map +1 -0
- package/views/Logs/Filters/FilterByInitiator.d.ts +2 -0
- package/views/Logs/Filters/FilterByInitiator.js +49 -0
- package/views/Logs/Filters/FilterByInitiator.js.map +1 -0
- package/views/Logs/Filters/Filters.d.ts +7 -0
- package/views/Logs/Filters/Filters.js +69 -0
- package/views/Logs/Filters/Filters.js.map +1 -0
- package/views/Logs/Filters/index.d.ts +7 -0
- package/views/Logs/Filters/index.js +7 -0
- package/views/Logs/Filters/types.d.ts +9 -0
- package/views/Logs/Filters/types.js +0 -0
- package/views/Logs/Header/ButtonFilters/ButtonFilters.d.ts +8 -0
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js +27 -0
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js.map +1 -0
- package/views/Logs/Header/ButtonFilters/index.d.ts +1 -0
- package/views/Logs/Header/ButtonFilters/index.js +1 -0
- package/views/Logs/Header/Header.d.ts +7 -0
- package/views/Logs/Header/Header.js +14 -0
- package/views/Logs/Header/Header.js.map +1 -0
- package/views/Logs/Header/index.d.ts +1 -0
- package/views/Logs/Header/index.js +1 -0
- package/views/Logs/LoadMoreButton/LoadMoreButton.d.ts +9 -0
- package/views/Logs/LoadMoreButton/LoadMoreButton.js +16 -0
- package/views/Logs/LoadMoreButton/LoadMoreButton.js.map +1 -0
- package/views/Logs/LoadMoreButton/index.d.ts +1 -0
- package/views/Logs/LoadMoreButton/index.js +1 -0
- package/views/Logs/LoadMoreButton/styled.d.ts +4 -0
- package/views/Logs/LoadMoreButton/styled.js +7 -0
- package/views/Logs/LoadMoreButton/styled.js.map +1 -0
- package/views/Logs/LoadingMore/index.d.ts +2 -0
- package/views/Logs/LoadingMore/index.js +16 -0
- package/views/Logs/LoadingMore/index.js.map +1 -0
- package/views/Logs/LogsModule.d.ts +2 -0
- package/views/Logs/LogsModule.js +26 -0
- package/views/Logs/LogsModule.js.map +1 -0
- package/views/Logs/LogsView.d.ts +2 -0
- package/views/Logs/LogsView.js +73 -0
- package/views/Logs/LogsView.js.map +1 -0
- package/views/Logs/Preview/AuditLogDetailsPresenter.d.ts +13 -0
- package/views/Logs/Preview/AuditLogDetailsPresenter.js +36 -0
- package/views/Logs/Preview/AuditLogDetailsPresenter.js.map +1 -0
- package/views/Logs/Preview/Preview.d.ts +11 -0
- package/views/Logs/Preview/Preview.js +127 -0
- package/views/Logs/Preview/Preview.js.map +1 -0
- package/views/Logs/Preview/abstractions.d.ts +14 -0
- package/views/Logs/Preview/abstractions.js +5 -0
- package/views/Logs/Preview/abstractions.js.map +1 -0
- package/views/Logs/Preview/feature.d.ts +5 -0
- package/views/Logs/Preview/feature.js +22 -0
- package/views/Logs/Preview/feature.js.map +1 -0
- package/views/Logs/Preview/index.d.ts +3 -0
- package/views/Logs/Preview/index.js +2 -0
- package/views/Logs/Preview/tabs/AiPromptTabs.d.ts +2 -0
- package/views/Logs/Preview/tabs/AiPromptTabs.js +25 -0
- package/views/Logs/Preview/tabs/AiPromptTabs.js.map +1 -0
- package/views/Logs/Preview/tabs/LlmResponseTab.d.ts +4 -0
- package/views/Logs/Preview/tabs/LlmResponseTab.js +41 -0
- package/views/Logs/Preview/tabs/LlmResponseTab.js.map +1 -0
- package/views/Logs/Preview/tabs/SystemPromptTab.d.ts +4 -0
- package/views/Logs/Preview/tabs/SystemPromptTab.js +24 -0
- package/views/Logs/Preview/tabs/SystemPromptTab.js.map +1 -0
- package/views/Logs/Preview/tabs/UserPromptTab.d.ts +4 -0
- package/views/Logs/Preview/tabs/UserPromptTab.js +18 -0
- package/views/Logs/Preview/tabs/UserPromptTab.js.map +1 -0
- package/views/Logs/Preview/tabs/shared.d.ts +28 -0
- package/views/Logs/Preview/tabs/shared.js +16 -0
- package/views/Logs/Preview/tabs/shared.js.map +1 -0
- package/views/Logs/Table/Table.d.ts +21 -0
- package/views/Logs/Table/Table.js +117 -0
- package/views/Logs/Table/Table.js.map +1 -0
- package/views/Logs/Table/index.d.ts +1 -0
- package/views/Logs/Table/index.js +1 -0
- package/views/Logs/Table/styled.d.ts +1 -0
- package/views/Logs/Table/styled.js +17 -0
- 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";
|
|
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,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 @@
|
|
|
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,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,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,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 @@
|
|
|
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
|