@webiny/app-audit-logs 6.3.0 → 6.4.0-beta.0
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/SecurityPermission.js +11 -14
- package/SecurityPermission.js.map +1 -1
- package/components/Text.d.ts +9 -1
- package/components/Text.js +37 -21
- package/components/Text.js.map +1 -1
- package/config/list/AuditLogsListConfig.js +26 -27
- package/config/list/AuditLogsListConfig.js.map +1 -1
- package/config/list/Browser/Filter.js +30 -37
- package/config/list/Browser/Filter.js.map +1 -1
- package/config/list/Browser/FiltersToWhere.js +10 -13
- package/config/list/Browser/FiltersToWhere.js.map +1 -1
- package/config/list/Browser/index.js +4 -3
- package/config/list/Browser/index.js.map +1 -1
- package/config/list/index.js +0 -2
- package/constants/index.js +2 -1
- package/constants/index.js.map +1 -1
- package/domain/permissionsSchema.js +4 -3
- package/domain/permissionsSchema.js.map +1 -1
- package/features/permissions/abstractions.js +2 -1
- package/features/permissions/abstractions.js.map +1 -1
- package/features/permissions/feature.js +2 -1
- package/features/permissions/feature.js.map +1 -1
- package/graphql.js +4 -3
- package/graphql.js.map +1 -1
- package/hooks/graphql.js +3 -2
- package/hooks/graphql.js.map +1 -1
- package/hooks/index.js +0 -2
- package/hooks/schema.d.ts +4 -4
- package/hooks/schema.js +22 -28
- package/hooks/schema.js.map +1 -1
- package/hooks/useAuditLogsList.d.ts +3 -3
- package/hooks/useAuditLogsList.js +100 -93
- package/hooks/useAuditLogsList.js.map +1 -1
- package/index.js +32 -36
- package/index.js.map +1 -1
- package/package.json +12 -12
- package/routes.js +6 -5
- package/routes.js.map +1 -1
- package/types.js +1 -4
- package/utils/transformRawAuditLog.js +22 -24
- package/utils/transformRawAuditLog.js.map +1 -1
- package/views/Logs/Filters/FilterByAction.js +39 -40
- package/views/Logs/Filters/FilterByAction.js.map +1 -1
- package/views/Logs/Filters/FilterByApp.js +32 -31
- package/views/Logs/Filters/FilterByApp.js.map +1 -1
- package/views/Logs/Filters/FilterByCreatedBy.js +35 -32
- package/views/Logs/Filters/FilterByCreatedBy.js.map +1 -1
- package/views/Logs/Filters/FilterByCreatedOn.js +31 -32
- package/views/Logs/Filters/FilterByCreatedOn.js.map +1 -1
- package/views/Logs/Filters/FilterByEntity.js +39 -41
- package/views/Logs/Filters/FilterByEntity.js.map +1 -1
- package/views/Logs/Filters/FilterByEntityId.js +21 -24
- package/views/Logs/Filters/FilterByEntityId.js.map +1 -1
- package/views/Logs/Filters/FilterByInitiator.js +35 -32
- package/views/Logs/Filters/FilterByInitiator.js.map +1 -1
- package/views/Logs/Filters/FilterByTimestamp.js +31 -32
- package/views/Logs/Filters/FilterByTimestamp.js.map +1 -1
- package/views/Logs/Filters/Filters.js +17 -21
- package/views/Logs/Filters/Filters.js.map +1 -1
- package/views/Logs/Filters/index.js +0 -2
- package/views/Logs/Filters/styled.js +11 -15
- package/views/Logs/Filters/styled.js.map +1 -1
- package/views/Logs/Filters/types.js +0 -3
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js +25 -44
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js.map +1 -1
- package/views/Logs/Header/ButtonFilters/index.js +0 -2
- package/views/Logs/Header/Header.js +13 -66
- package/views/Logs/Header/Header.js.map +1 -1
- package/views/Logs/Header/index.js +0 -2
- package/views/Logs/LoadMoreButton/LoadMoreButton.js +9 -16
- package/views/Logs/LoadMoreButton/LoadMoreButton.js.map +1 -1
- package/views/Logs/LoadMoreButton/index.js +0 -2
- package/views/Logs/LoadMoreButton/styled.js +7 -15
- package/views/Logs/LoadMoreButton/styled.js.map +1 -1
- package/views/Logs/LoadingMore/index.js +12 -12
- package/views/Logs/LoadingMore/index.js.map +1 -1
- package/views/Logs/Logs.js +63 -68
- package/views/Logs/Logs.js.map +1 -1
- package/views/Logs/LogsModule.js +22 -25
- package/views/Logs/LogsModule.js.map +1 -1
- package/views/Logs/LogsView.js +64 -67
- package/views/Logs/LogsView.js.map +1 -1
- package/views/Logs/Preview/Preview.js +75 -84
- package/views/Logs/Preview/Preview.js.map +1 -1
- package/views/Logs/Preview/index.js +0 -2
- package/views/Logs/Preview/styled.js +29 -23
- package/views/Logs/Preview/styled.js.map +1 -1
- package/views/Logs/Table/Table.d.ts +3 -3
- package/views/Logs/Table/Table.js +101 -125
- package/views/Logs/Table/Table.js.map +1 -1
- package/views/Logs/Table/index.js +0 -2
- package/views/Logs/Table/styled.d.ts +2 -2
- package/views/Logs/Table/styled.js +38 -75
- package/views/Logs/Table/styled.js.map +1 -1
- package/config/list/index.js.map +0 -1
- package/hooks/index.js.map +0 -1
- package/types.js.map +0 -1
- package/views/Logs/Filters/index.js.map +0 -1
- package/views/Logs/Filters/types.js.map +0 -1
- package/views/Logs/Header/ButtonFilters/index.js.map +0 -1
- package/views/Logs/Header/index.js.map +0 -1
- package/views/Logs/LoadMoreButton/index.js.map +0 -1
- package/views/Logs/LoadingMore/styled.d.ts +0 -8
- package/views/Logs/LoadingMore/styled.js +0 -30
- package/views/Logs/LoadingMore/styled.js.map +0 -1
- package/views/Logs/Preview/index.js.map +0 -1
- package/views/Logs/Table/index.js.map +0 -1
- package/views/Logs/styled.d.ts +0 -8
- package/views/Logs/styled.js +0 -30
- package/views/Logs/styled.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"views/Logs/LoadMoreButton/styled.js","sources":["../../../../src/views/Logs/LoadMoreButton/styled.tsx"],"sourcesContent":["import styled from \"@emotion/styled\";\n\nexport const Container = styled(\"div\")`\n display: flex;\n justify-content: center;\n margin-top: 16px;\n`;\n"],"names":["Container","styled"],"mappings":";AAEO,MAAMA,YAAYC,OAAO,MAAM,CAAC;;;;AAIvC,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { i18n } from "@webiny/app/i18n/index.js";
|
|
3
|
-
import {
|
|
4
|
-
import { CircularProgress } from "@webiny/ui/Progress/index.js";
|
|
5
|
-
import { Container, LoaderContainer } from "./styled.js";
|
|
3
|
+
import { Loader, Text } from "@webiny/admin-ui";
|
|
6
4
|
const t = i18n.ns("app-audit-logs/components/table/loading-more");
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
15
|
|
|
16
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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"}
|
package/views/Logs/Logs.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react, { useCallback, useEffect, useRef, useState } from "react";
|
|
2
2
|
import debounce from "lodash/debounce.js";
|
|
3
3
|
import { i18n } from "@webiny/app/i18n/index.js";
|
|
4
|
-
import { EmptyView } from "@webiny/app-admin";
|
|
5
|
-
import { Scrollbar } from "@webiny/ui
|
|
4
|
+
import { EmptyView, useSecurity } from "@webiny/app-admin";
|
|
5
|
+
import { Scrollbar } from "@webiny/admin-ui";
|
|
6
6
|
import { LoadingMore } from "./LoadingMore/index.js";
|
|
7
7
|
import { LoadMoreButton } from "./LoadMoreButton/index.js";
|
|
8
8
|
import { Header } from "./Header/index.js";
|
|
@@ -10,72 +10,67 @@ import { Filters } from "./Filters/index.js";
|
|
|
10
10
|
import { Table } from "./Table/index.js";
|
|
11
11
|
import { Preview } from "./Preview/index.js";
|
|
12
12
|
import { useAuditLogsList } from "../../hooks/index.js";
|
|
13
|
-
import { MainContainer, Wrapper } from "./styled.js";
|
|
14
|
-
import { useSecurity } from "@webiny/app-admin";
|
|
15
13
|
const t = i18n.ns("app-audit-logs/views/logs");
|
|
16
|
-
const AuditLogsView = ()
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
windowHeight: windowHeight,
|
|
75
|
-
tableHeight: tableHeight,
|
|
76
|
-
onClick: list.listMoreRecords
|
|
77
|
-
})), list.isListLoadingMore && /*#__PURE__*/React.createElement(LoadingMore, null)))));
|
|
14
|
+
const AuditLogsView = ()=>{
|
|
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
|
+
showingFilters: list.showingFilters,
|
|
38
|
+
showFilters: list.showFilters,
|
|
39
|
+
hideFilters: list.hideFilters
|
|
40
|
+
}), /*#__PURE__*/ react.createElement("div", {
|
|
41
|
+
className: "flex-1 min-h-0"
|
|
42
|
+
}, /*#__PURE__*/ react.createElement(Filters, {
|
|
43
|
+
showingFilters: list.showingFilters,
|
|
44
|
+
setWhere: list.setWhere
|
|
45
|
+
}), 0 !== list.records.length || list.isListLoading ? /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Preview, {
|
|
46
|
+
auditLog: selectedAuditLog,
|
|
47
|
+
onClose: ()=>closePreviewModal(),
|
|
48
|
+
hasAccessToUsers: hasAccessToUsers
|
|
49
|
+
}), /*#__PURE__*/ react.createElement(Scrollbar, {
|
|
50
|
+
"data-testid": "default-data-list",
|
|
51
|
+
onScrollFrame: (scrollFrame)=>loadMoreOnScroll({
|
|
52
|
+
scrollFrame
|
|
53
|
+
})
|
|
54
|
+
}, /*#__PURE__*/ react.createElement(Table, {
|
|
55
|
+
ref: tableRef,
|
|
56
|
+
records: list.records,
|
|
57
|
+
loading: list.isListLoading && !list.isListLoadingMore,
|
|
58
|
+
handleRecordSelect: handleAuditLogSelect,
|
|
59
|
+
sorting: list.sorting,
|
|
60
|
+
onSortingChange: list.setSorting,
|
|
61
|
+
hasAccessToUsers: hasAccessToUsers
|
|
62
|
+
}), /*#__PURE__*/ react.createElement(LoadMoreButton, {
|
|
63
|
+
show: !list.isListLoading && list.meta.hasMoreItems,
|
|
64
|
+
disabled: list.isListLoadingMore,
|
|
65
|
+
windowHeight: windowHeight,
|
|
66
|
+
tableHeight: tableHeight,
|
|
67
|
+
onClick: list.listMoreRecords
|
|
68
|
+
})), list.isListLoadingMore && /*#__PURE__*/ react.createElement(LoadingMore, null)) : /*#__PURE__*/ react.createElement(EmptyView, {
|
|
69
|
+
title: t`No results found.`,
|
|
70
|
+
action: null
|
|
71
|
+
})));
|
|
78
72
|
};
|
|
79
|
-
|
|
73
|
+
const Logs = AuditLogsView;
|
|
74
|
+
export default Logs;
|
|
80
75
|
|
|
81
76
|
//# sourceMappingURL=Logs.js.map
|
package/views/Logs/Logs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"views/Logs/Logs.js","sources":["../../../src/views/Logs/Logs.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\nconst AuditLogsView = () => {\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\n title=\"Audit Logs\"\n showingFilters={list.showingFilters}\n showFilters={list.showFilters}\n hideFilters={list.hideFilters}\n />\n <div className={\"flex-1 min-h-0\"}>\n <Filters showingFilters={list.showingFilters} setWhere={list.setWhere} />\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 <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 </Scrollbar>\n {list.isListLoadingMore && <LoadingMore />}\n </>\n )}\n </div>\n </div>\n );\n};\n\nexport default AuditLogsView;\n"],"names":["t","i18n","AuditLogsView","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;AAElB,MAAMC,gBAAgB;IAClB,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;QACH,OAAM;QACN,gBAAgBN,KAAK,cAAc;QACnC,aAAaA,KAAK,WAAW;QAC7B,aAAaA,KAAK,WAAW;sBAEjC,oBAAC;QAAI,WAAW;qBACZ,oBAACO,SAAOA;QAAC,gBAAgBP,KAAK,cAAc;QAAE,UAAUA,KAAK,QAAQ;QACpEA,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,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;SAGpCA,KAAK,iBAAiB,IAAI,WAAJ,GAAI,oBAACY,aAAWA,SA9BK,WAAH,GAC7C,oBAACC,WAASA;QAAC,OAAOjC,CAAC,CAAC,iBAAiB,CAAC;QAAE,QAAQ;;AAmCpE;AAEA,aAAeE"}
|
package/views/Logs/LogsModule.js
CHANGED
|
@@ -1,29 +1,26 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { AuditLogsListConfig } from "../../config/list/index.js";
|
|
3
3
|
import { FilterByAction, FilterByApp, FilterByCreatedBy, FilterByCreatedOn, FilterByEntity, FilterByEntityId } from "./Filters/index.js";
|
|
4
|
-
const {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
element: /*#__PURE__*/React.createElement(FilterByCreatedOn, null)
|
|
26
|
-
})));
|
|
27
|
-
};
|
|
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 };
|
|
28
25
|
|
|
29
26
|
//# sourceMappingURL=LogsModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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"}
|
package/views/Logs/LogsView.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react, { useCallback, useEffect, useRef, useState } from "react";
|
|
2
2
|
import debounce from "lodash/debounce.js";
|
|
3
3
|
import { i18n } from "@webiny/app/i18n/index.js";
|
|
4
|
-
import { EmptyView } from "@webiny/app-admin";
|
|
5
|
-
import {
|
|
6
|
-
import { Scrollbar } from "@webiny/ui/Scrollbar/index.js";
|
|
4
|
+
import { EmptyView, useSecurity } from "@webiny/app-admin";
|
|
5
|
+
import { Scrollbar } from "@webiny/admin-ui";
|
|
7
6
|
import { LoadingMore } from "./LoadingMore/index.js";
|
|
8
7
|
import { LoadMoreButton } from "./LoadMoreButton/index.js";
|
|
9
8
|
import { Header } from "./Header/index.js";
|
|
@@ -11,70 +10,68 @@ import { Filters } from "./Filters/index.js";
|
|
|
11
10
|
import { Table } from "./Table/index.js";
|
|
12
11
|
import { Preview } from "./Preview/index.js";
|
|
13
12
|
import { useAuditLogsList } from "../../hooks/index.js";
|
|
14
|
-
import { MainContainer, Wrapper } from "./styled.js";
|
|
15
13
|
const t = i18n.ns("app-audit-logs/views/logs");
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
onClick: list.listMoreRecords
|
|
77
|
-
})), list.isListLoadingMore && /*#__PURE__*/React.createElement(LoadingMore, null)))));
|
|
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
|
+
showingFilters: list.showingFilters,
|
|
38
|
+
showFilters: list.showFilters,
|
|
39
|
+
hideFilters: list.hideFilters
|
|
40
|
+
}), /*#__PURE__*/ react.createElement("div", {
|
|
41
|
+
className: "flex-1 min-h-0"
|
|
42
|
+
}, /*#__PURE__*/ react.createElement(Filters, {
|
|
43
|
+
showingFilters: list.showingFilters,
|
|
44
|
+
setWhere: list.setWhere
|
|
45
|
+
}), 0 !== list.records.length || list.isListLoading ? /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Preview, {
|
|
46
|
+
auditLog: selectedAuditLog,
|
|
47
|
+
onClose: ()=>closePreviewModal(),
|
|
48
|
+
hasAccessToUsers: hasAccessToUsers
|
|
49
|
+
}), /*#__PURE__*/ react.createElement(Scrollbar, {
|
|
50
|
+
"data-testid": "default-data-list",
|
|
51
|
+
onScrollFrame: (scrollFrame)=>loadMoreOnScroll({
|
|
52
|
+
scrollFrame
|
|
53
|
+
})
|
|
54
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
55
|
+
className: "h-[500px]"
|
|
56
|
+
}, /*#__PURE__*/ react.createElement(Table, {
|
|
57
|
+
ref: tableRef,
|
|
58
|
+
records: list.records,
|
|
59
|
+
loading: list.isListLoading && !list.isListLoadingMore,
|
|
60
|
+
handleRecordSelect: handleAuditLogSelect,
|
|
61
|
+
sorting: list.sorting,
|
|
62
|
+
onSortingChange: list.setSorting,
|
|
63
|
+
hasAccessToUsers: hasAccessToUsers
|
|
64
|
+
}), /*#__PURE__*/ react.createElement(LoadMoreButton, {
|
|
65
|
+
show: !list.isListLoading && list.meta.hasMoreItems,
|
|
66
|
+
disabled: list.isListLoadingMore,
|
|
67
|
+
windowHeight: windowHeight,
|
|
68
|
+
tableHeight: tableHeight,
|
|
69
|
+
onClick: list.listMoreRecords
|
|
70
|
+
}))), list.isListLoadingMore && /*#__PURE__*/ react.createElement(LoadingMore, null)) : /*#__PURE__*/ react.createElement(EmptyView, {
|
|
71
|
+
title: t`No results found.`,
|
|
72
|
+
action: null
|
|
73
|
+
})));
|
|
78
74
|
};
|
|
75
|
+
export { LogsView };
|
|
79
76
|
|
|
80
77
|
//# sourceMappingURL=LogsView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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\n title=\"Audit Logs\"\n showingFilters={list.showingFilters}\n showFilters={list.showFilters}\n hideFilters={list.hideFilters}\n />\n <div className={\"flex-1 min-h-0\"}>\n <Filters showingFilters={list.showingFilters} setWhere={list.setWhere} />\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;QACH,OAAM;QACN,gBAAgBN,KAAK,cAAc;QACnC,aAAaA,KAAK,WAAW;QAC7B,aAAaA,KAAK,WAAW;sBAEjC,oBAAC;QAAI,WAAW;qBACZ,oBAACO,SAAOA;QAAC,gBAAgBP,KAAK,cAAc;QAAE,UAAUA,KAAK,QAAQ;QACpEA,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"}
|