@webiny/app-audit-logs 6.3.0 → 6.4.0-beta.1

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 (110) hide show
  1. package/SecurityPermission.js +11 -14
  2. package/SecurityPermission.js.map +1 -1
  3. package/components/Text.d.ts +9 -1
  4. package/components/Text.js +37 -21
  5. package/components/Text.js.map +1 -1
  6. package/config/list/AuditLogsListConfig.js +26 -27
  7. package/config/list/AuditLogsListConfig.js.map +1 -1
  8. package/config/list/Browser/Filter.js +30 -37
  9. package/config/list/Browser/Filter.js.map +1 -1
  10. package/config/list/Browser/FiltersToWhere.js +10 -13
  11. package/config/list/Browser/FiltersToWhere.js.map +1 -1
  12. package/config/list/Browser/index.js +4 -3
  13. package/config/list/Browser/index.js.map +1 -1
  14. package/config/list/index.js +0 -2
  15. package/constants/index.js +2 -1
  16. package/constants/index.js.map +1 -1
  17. package/domain/permissionsSchema.js +4 -3
  18. package/domain/permissionsSchema.js.map +1 -1
  19. package/features/permissions/abstractions.js +2 -1
  20. package/features/permissions/abstractions.js.map +1 -1
  21. package/features/permissions/feature.js +2 -1
  22. package/features/permissions/feature.js.map +1 -1
  23. package/graphql.js +4 -3
  24. package/graphql.js.map +1 -1
  25. package/hooks/graphql.js +3 -2
  26. package/hooks/graphql.js.map +1 -1
  27. package/hooks/index.js +0 -2
  28. package/hooks/schema.d.ts +4 -4
  29. package/hooks/schema.js +22 -28
  30. package/hooks/schema.js.map +1 -1
  31. package/hooks/useAuditLogsList.d.ts +3 -3
  32. package/hooks/useAuditLogsList.js +100 -93
  33. package/hooks/useAuditLogsList.js.map +1 -1
  34. package/index.js +32 -36
  35. package/index.js.map +1 -1
  36. package/package.json +12 -12
  37. package/routes.js +6 -5
  38. package/routes.js.map +1 -1
  39. package/types.js +1 -4
  40. package/utils/transformRawAuditLog.js +22 -24
  41. package/utils/transformRawAuditLog.js.map +1 -1
  42. package/views/Logs/Filters/FilterByAction.js +39 -40
  43. package/views/Logs/Filters/FilterByAction.js.map +1 -1
  44. package/views/Logs/Filters/FilterByApp.js +32 -31
  45. package/views/Logs/Filters/FilterByApp.js.map +1 -1
  46. package/views/Logs/Filters/FilterByCreatedBy.js +35 -32
  47. package/views/Logs/Filters/FilterByCreatedBy.js.map +1 -1
  48. package/views/Logs/Filters/FilterByCreatedOn.js +31 -32
  49. package/views/Logs/Filters/FilterByCreatedOn.js.map +1 -1
  50. package/views/Logs/Filters/FilterByEntity.js +39 -41
  51. package/views/Logs/Filters/FilterByEntity.js.map +1 -1
  52. package/views/Logs/Filters/FilterByEntityId.js +21 -24
  53. package/views/Logs/Filters/FilterByEntityId.js.map +1 -1
  54. package/views/Logs/Filters/FilterByInitiator.js +35 -32
  55. package/views/Logs/Filters/FilterByInitiator.js.map +1 -1
  56. package/views/Logs/Filters/FilterByTimestamp.js +31 -32
  57. package/views/Logs/Filters/FilterByTimestamp.js.map +1 -1
  58. package/views/Logs/Filters/Filters.js +17 -21
  59. package/views/Logs/Filters/Filters.js.map +1 -1
  60. package/views/Logs/Filters/index.js +0 -2
  61. package/views/Logs/Filters/styled.js +11 -15
  62. package/views/Logs/Filters/styled.js.map +1 -1
  63. package/views/Logs/Filters/types.js +0 -3
  64. package/views/Logs/Header/ButtonFilters/ButtonFilters.js +25 -44
  65. package/views/Logs/Header/ButtonFilters/ButtonFilters.js.map +1 -1
  66. package/views/Logs/Header/ButtonFilters/index.js +0 -2
  67. package/views/Logs/Header/Header.js +13 -66
  68. package/views/Logs/Header/Header.js.map +1 -1
  69. package/views/Logs/Header/index.js +0 -2
  70. package/views/Logs/LoadMoreButton/LoadMoreButton.js +9 -16
  71. package/views/Logs/LoadMoreButton/LoadMoreButton.js.map +1 -1
  72. package/views/Logs/LoadMoreButton/index.js +0 -2
  73. package/views/Logs/LoadMoreButton/styled.js +7 -15
  74. package/views/Logs/LoadMoreButton/styled.js.map +1 -1
  75. package/views/Logs/LoadingMore/index.js +12 -12
  76. package/views/Logs/LoadingMore/index.js.map +1 -1
  77. package/views/Logs/Logs.js +63 -68
  78. package/views/Logs/Logs.js.map +1 -1
  79. package/views/Logs/LogsModule.js +22 -25
  80. package/views/Logs/LogsModule.js.map +1 -1
  81. package/views/Logs/LogsView.js +64 -67
  82. package/views/Logs/LogsView.js.map +1 -1
  83. package/views/Logs/Preview/Preview.js +75 -84
  84. package/views/Logs/Preview/Preview.js.map +1 -1
  85. package/views/Logs/Preview/index.js +0 -2
  86. package/views/Logs/Preview/styled.js +29 -23
  87. package/views/Logs/Preview/styled.js.map +1 -1
  88. package/views/Logs/Table/Table.d.ts +3 -3
  89. package/views/Logs/Table/Table.js +101 -125
  90. package/views/Logs/Table/Table.js.map +1 -1
  91. package/views/Logs/Table/index.js +0 -2
  92. package/views/Logs/Table/styled.d.ts +2 -2
  93. package/views/Logs/Table/styled.js +38 -75
  94. package/views/Logs/Table/styled.js.map +1 -1
  95. package/config/list/index.js.map +0 -1
  96. package/hooks/index.js.map +0 -1
  97. package/types.js.map +0 -1
  98. package/views/Logs/Filters/index.js.map +0 -1
  99. package/views/Logs/Filters/types.js.map +0 -1
  100. package/views/Logs/Header/ButtonFilters/index.js.map +0 -1
  101. package/views/Logs/Header/index.js.map +0 -1
  102. package/views/Logs/LoadMoreButton/index.js.map +0 -1
  103. package/views/Logs/LoadingMore/styled.d.ts +0 -8
  104. package/views/Logs/LoadingMore/styled.js +0 -30
  105. package/views/Logs/LoadingMore/styled.js.map +0 -1
  106. package/views/Logs/Preview/index.js.map +0 -1
  107. package/views/Logs/Table/index.js.map +0 -1
  108. package/views/Logs/styled.d.ts +0 -8
  109. package/views/Logs/styled.js +0 -30
  110. package/views/Logs/styled.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["Container","_styled","process","env","NODE_ENV","target","label","name","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__"],"sources":["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"],"mappings":";;AAEA,OAAO,MAAMA,SAAS,gBAAGC,OAAA,CAAO,KAAK,EAAAC,OAAA,CAAAC,GAAA,CAAAC,QAAA;EAAAC,MAAA;AAAA;EAAAA,MAAA;EAAAC,KAAA;AAAA,EAAC,CAAAJ,OAAA,CAAAC,GAAA,CAAAC,QAAA;EAAAG,IAAA;EAAAC,MAAA;AAAA;EAAAD,IAAA;EAAAC,MAAA;EAAAC,QAAA,EAAAC;AAAA,EAIrC","ignoreList":[]}
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 React from "react";
1
+ import react from "react";
2
2
  import { i18n } from "@webiny/app/i18n/index.js";
3
- import { Typography } from "@webiny/ui/Typography/index.js";
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
- export const LoadingMore = () => {
8
- return /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(LoaderContainer, null, /*#__PURE__*/React.createElement(CircularProgress, {
9
- size: 20,
10
- spinnerWidth: 2
11
- })), /*#__PURE__*/React.createElement(Typography, {
12
- use: "body2"
13
- }, t`Loading more records...`));
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,"names":["React","i18n","Typography","CircularProgress","Container","LoaderContainer","t","ns","LoadingMore","createElement","size","spinnerWidth","use"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Typography } from \"@webiny/ui/Typography/index.js\";\nimport { CircularProgress } from \"@webiny/ui/Progress/index.js\";\nimport { Container, LoaderContainer } from \"./styled.js\";\n\nconst t = i18n.ns(\"app-audit-logs/components/table/loading-more\");\n\nexport const LoadingMore = () => {\n return (\n <Container>\n <LoaderContainer>\n <CircularProgress size={20} spinnerWidth={2} />\n </LoaderContainer>\n <Typography use={\"body2\"}>{t`Loading more records...`}</Typography>\n </Container>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,UAAU,QAAQ,gCAAgC;AAC3D,SAASC,gBAAgB,QAAQ,8BAA8B;AAC/D,SAASC,SAAS,EAAEC,eAAe;AAEnC,MAAMC,CAAC,GAAGL,IAAI,CAACM,EAAE,CAAC,8CAA8C,CAAC;AAEjE,OAAO,MAAMC,WAAW,GAAGA,CAAA,KAAM;EAC7B,oBACIR,KAAA,CAAAS,aAAA,CAACL,SAAS,qBACNJ,KAAA,CAAAS,aAAA,CAACJ,eAAe,qBACZL,KAAA,CAAAS,aAAA,CAACN,gBAAgB;IAACO,IAAI,EAAE,EAAG;IAACC,YAAY,EAAE;EAAE,CAAE,CACjC,CAAC,eAClBX,KAAA,CAAAS,aAAA,CAACP,UAAU;IAACU,GAAG,EAAE;EAAQ,GAAEN,CAAC,yBAAsC,CAC3D,CAAC;AAEpB,CAAC","ignoreList":[]}
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"}
@@ -1,8 +1,8 @@
1
- import React, { useCallback, useEffect, useRef, useState } from "react";
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/Scrollbar/index.js";
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
- const [selectedAuditLog, setSelectedAuditLog] = useState(null);
18
- const handleAuditLogSelect = useCallback(auditLog => setSelectedAuditLog(auditLog), []);
19
- const closePreviewModal = useCallback(() => setSelectedAuditLog(null), []);
20
- const {
21
- innerHeight: windowHeight
22
- } = window;
23
- const [tableHeight, setTableHeight] = useState(0);
24
- const tableRef = useRef(null);
25
- const {
26
- getPermissions
27
- } = useSecurity();
28
- const hasAccessToUsers = Boolean(getPermissions("adminUsers").length);
29
- const list = useAuditLogsList();
30
- useEffect(() => {
31
- setTableHeight(tableRef?.current?.clientHeight || 0);
32
- return () => {
33
- setTableHeight(0);
34
- };
35
- });
36
- const loadMoreOnScroll = debounce(({
37
- scrollFrame
38
- }) => {
39
- if (scrollFrame.top > 0.8) {
40
- list.listMoreRecords();
41
- }
42
- }, 200);
43
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MainContainer, null, /*#__PURE__*/React.createElement(Header, {
44
- title: "Audit Logs",
45
- showingFilters: list.showingFilters,
46
- showFilters: list.showFilters,
47
- hideFilters: list.hideFilters
48
- }), /*#__PURE__*/React.createElement(Wrapper, null, /*#__PURE__*/React.createElement(Filters, {
49
- showingFilters: list.showingFilters,
50
- setWhere: list.setWhere
51
- }), list.records.length === 0 && !list.isListLoading ? /*#__PURE__*/React.createElement(EmptyView, {
52
- title: t`No results found.`,
53
- action: null
54
- }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Preview, {
55
- auditLog: selectedAuditLog,
56
- onClose: () => closePreviewModal(),
57
- hasAccessToUsers: hasAccessToUsers
58
- }), /*#__PURE__*/React.createElement(Scrollbar, {
59
- "data-testid": "default-data-list",
60
- onScrollFrame: scrollFrame => loadMoreOnScroll({
61
- scrollFrame
62
- })
63
- }, /*#__PURE__*/React.createElement(Table, {
64
- ref: tableRef,
65
- records: list.records,
66
- loading: list.isListLoading,
67
- handleRecordSelect: handleAuditLogSelect,
68
- sorting: list.sorting,
69
- onSortingChange: list.setSorting,
70
- hasAccessToUsers: hasAccessToUsers
71
- }), /*#__PURE__*/React.createElement(LoadMoreButton, {
72
- show: !list.isListLoading && list.meta.hasMoreItems,
73
- disabled: list.isListLoadingMore,
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
- export default AuditLogsView;
73
+ const Logs = AuditLogsView;
74
+ export default Logs;
80
75
 
81
76
  //# sourceMappingURL=Logs.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useRef","useState","debounce","i18n","EmptyView","Scrollbar","LoadingMore","LoadMoreButton","Header","Filters","Table","Preview","useAuditLogsList","MainContainer","Wrapper","useSecurity","t","ns","AuditLogsView","selectedAuditLog","setSelectedAuditLog","handleAuditLogSelect","auditLog","closePreviewModal","innerHeight","windowHeight","window","tableHeight","setTableHeight","tableRef","getPermissions","hasAccessToUsers","Boolean","length","list","current","clientHeight","loadMoreOnScroll","scrollFrame","top","listMoreRecords","createElement","Fragment","title","showingFilters","showFilters","hideFilters","setWhere","records","isListLoading","action","onClose","onScrollFrame","ref","loading","handleRecordSelect","sorting","onSortingChange","setSorting","show","meta","hasMoreItems","disabled","isListLoadingMore","onClick"],"sources":["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 { Scrollbar } from \"@webiny/ui/Scrollbar/index.js\";\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 { MainContainer, Wrapper } from \"./styled.js\";\nimport type { IAuditLog } from \"~/types.js\";\nimport { useSecurity } from \"@webiny/app-admin\";\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) {\n list.listMoreRecords();\n }\n }, 200);\n\n return (\n <>\n <MainContainer>\n <Header\n title=\"Audit Logs\"\n showingFilters={list.showingFilters}\n showFilters={list.showFilters}\n hideFilters={list.hideFilters}\n />\n <Wrapper>\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}\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 </Wrapper>\n </MainContainer>\n </>\n );\n};\n\nexport default AuditLogsView;\n"],"mappings":"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","ignoreList":[]}
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"}
@@ -1,29 +1,26 @@
1
- import React from "react";
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
- Browser
6
- } = AuditLogsListConfig;
7
- export const LogsModule = () => {
8
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AuditLogsListConfig, null, /*#__PURE__*/React.createElement(Browser.Filter, {
9
- name: "app",
10
- element: /*#__PURE__*/React.createElement(FilterByApp, null)
11
- }), /*#__PURE__*/React.createElement(Browser.Filter, {
12
- name: "entity",
13
- element: /*#__PURE__*/React.createElement(FilterByEntity, null)
14
- }), /*#__PURE__*/React.createElement(Browser.Filter, {
15
- name: "action",
16
- element: /*#__PURE__*/React.createElement(FilterByAction, null)
17
- }), /*#__PURE__*/React.createElement(Browser.Filter, {
18
- name: "createdBy",
19
- element: /*#__PURE__*/React.createElement(FilterByCreatedBy, null)
20
- }), /*#__PURE__*/React.createElement(Browser.Filter, {
21
- name: "entityId",
22
- element: /*#__PURE__*/React.createElement(FilterByEntityId, null)
23
- }), /*#__PURE__*/React.createElement(Browser.Filter, {
24
- name: "createdOn",
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,"names":["React","AuditLogsListConfig","FilterByAction","FilterByApp","FilterByCreatedBy","FilterByCreatedOn","FilterByEntity","FilterByEntityId","Browser","LogsModule","createElement","Fragment","Filter","name","element"],"sources":["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"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,mBAAmB;AAC5B,SACIC,cAAc,EACdC,WAAW,EACXC,iBAAiB,EACjBC,iBAAiB,EACjBC,cAAc,EACdC,gBAAgB;AAGpB,MAAM;EAAEC;AAAQ,CAAC,GAAGP,mBAAmB;AAEvC,OAAO,MAAMQ,UAAU,GAAGA,CAAA,KAAM;EAC5B,oBACIT,KAAA,CAAAU,aAAA,CAAAV,KAAA,CAAAW,QAAA,qBACIX,KAAA,CAAAU,aAAA,CAACT,mBAAmB,qBAChBD,KAAA,CAAAU,aAAA,CAACF,OAAO,CAACI,MAAM;IAACC,IAAI,EAAE,KAAM;IAACC,OAAO,eAAEd,KAAA,CAAAU,aAAA,CAACP,WAAW,MAAE;EAAE,CAAE,CAAC,eACzDH,KAAA,CAAAU,aAAA,CAACF,OAAO,CAACI,MAAM;IAACC,IAAI,EAAE,QAAS;IAACC,OAAO,eAAEd,KAAA,CAAAU,aAAA,CAACJ,cAAc,MAAE;EAAE,CAAE,CAAC,eAC/DN,KAAA,CAAAU,aAAA,CAACF,OAAO,CAACI,MAAM;IAACC,IAAI,EAAE,QAAS;IAACC,OAAO,eAAEd,KAAA,CAAAU,aAAA,CAACR,cAAc,MAAE;EAAE,CAAE,CAAC,eAC/DF,KAAA,CAAAU,aAAA,CAACF,OAAO,CAACI,MAAM;IAACC,IAAI,EAAE,WAAY;IAACC,OAAO,eAAEd,KAAA,CAAAU,aAAA,CAACN,iBAAiB,MAAE;EAAE,CAAE,CAAC,eACrEJ,KAAA,CAAAU,aAAA,CAACF,OAAO,CAACI,MAAM;IAACC,IAAI,EAAE,UAAW;IAACC,OAAO,eAAEd,KAAA,CAAAU,aAAA,CAACH,gBAAgB,MAAE;EAAE,CAAE,CAAC,eACnEP,KAAA,CAAAU,aAAA,CAACF,OAAO,CAACI,MAAM;IAACC,IAAI,EAAE,WAAY;IAACC,OAAO,eAAEd,KAAA,CAAAU,aAAA,CAACL,iBAAiB,MAAE;EAAE,CAAE,CACnD,CACvB,CAAC;AAEX,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"views/Logs/LogsModule.js","sources":["../../../src/views/Logs/LogsModule.tsx"],"sourcesContent":["import React from \"react\";\nimport { AuditLogsListConfig } from \"~/config/list/index.js\";\nimport {\n FilterByAction,\n FilterByApp,\n FilterByCreatedBy,\n FilterByCreatedOn,\n FilterByEntity,\n FilterByEntityId\n} from \"~/views/Logs/Filters/index.js\";\n\nconst { Browser } = AuditLogsListConfig;\n\nexport const LogsModule = () => {\n return (\n <>\n <AuditLogsListConfig>\n <Browser.Filter name={\"app\"} element={<FilterByApp />} />\n <Browser.Filter name={\"entity\"} element={<FilterByEntity />} />\n <Browser.Filter name={\"action\"} element={<FilterByAction />} />\n <Browser.Filter name={\"createdBy\"} element={<FilterByCreatedBy />} />\n <Browser.Filter name={\"entityId\"} element={<FilterByEntityId />} />\n <Browser.Filter name={\"createdOn\"} element={<FilterByCreatedOn />} />\n </AuditLogsListConfig>\n </>\n );\n};\n"],"names":["Browser","AuditLogsListConfig","LogsModule","FilterByApp","FilterByEntity","FilterByAction","FilterByCreatedBy","FilterByEntityId","FilterByCreatedOn"],"mappings":";;;AAWA,MAAM,EAAEA,SAAAA,OAAO,EAAE,GAAGC;AAEb,MAAMC,aAAa,IACf,WAAP,GACI,wDACI,oBAACD,qBAAmBA,MAAAA,WAAAA,GAChB,oBAACD,QAAQ,MAAM;QAAC,MAAM;QAAO,uBAAS,oBAACG,aAAWA;sBAClD,oBAACH,QAAQ,MAAM;QAAC,MAAM;QAAU,uBAAS,oBAACI,gBAAcA;sBACxD,oBAACJ,QAAQ,MAAM;QAAC,MAAM;QAAU,uBAAS,oBAACK,gBAAcA;sBACxD,oBAACL,QAAQ,MAAM;QAAC,MAAM;QAAa,uBAAS,oBAACM,mBAAiBA;sBAC9D,oBAACN,QAAQ,MAAM;QAAC,MAAM;QAAY,uBAAS,oBAACO,kBAAgBA;sBAC5D,oBAACP,QAAQ,MAAM;QAAC,MAAM;QAAa,uBAAS,oBAACQ,mBAAiBA"}
@@ -1,9 +1,8 @@
1
- import React, { useCallback, useEffect, useRef, useState } from "react";
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 { useSecurity } from "@webiny/app-admin";
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
- export const LogsView = () => {
17
- const [selectedAuditLog, setSelectedAuditLog] = useState(null);
18
- const handleAuditLogSelect = useCallback(auditLog => setSelectedAuditLog(auditLog), []);
19
- const closePreviewModal = useCallback(() => setSelectedAuditLog(null), []);
20
- const {
21
- innerHeight: windowHeight
22
- } = window;
23
- const [tableHeight, setTableHeight] = useState(0);
24
- const tableRef = useRef(null);
25
- const {
26
- getPermissions
27
- } = useSecurity();
28
- const hasAccessToUsers = Boolean(getPermissions("adminUsers").length);
29
- const list = useAuditLogsList();
30
- useEffect(() => {
31
- setTableHeight(tableRef?.current?.clientHeight || 0);
32
- return () => {
33
- setTableHeight(0);
34
- };
35
- });
36
- const loadMoreOnScroll = debounce(({
37
- scrollFrame
38
- }) => {
39
- if (scrollFrame.top > 0.8) {
40
- list.listMoreRecords();
41
- }
42
- }, 200);
43
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MainContainer, null, /*#__PURE__*/React.createElement(Header, {
44
- title: "Audit Logs",
45
- showingFilters: list.showingFilters,
46
- showFilters: list.showFilters,
47
- hideFilters: list.hideFilters
48
- }), /*#__PURE__*/React.createElement(Wrapper, null, /*#__PURE__*/React.createElement(Filters, {
49
- showingFilters: list.showingFilters,
50
- setWhere: list.setWhere
51
- }), list.records.length === 0 && !list.isListLoading ? /*#__PURE__*/React.createElement(EmptyView, {
52
- title: t`No results found.`,
53
- action: null
54
- }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Preview, {
55
- auditLog: selectedAuditLog,
56
- onClose: () => closePreviewModal(),
57
- hasAccessToUsers: hasAccessToUsers
58
- }), /*#__PURE__*/React.createElement(Scrollbar, {
59
- "data-testid": "default-data-list",
60
- onScrollFrame: scrollFrame => loadMoreOnScroll({
61
- scrollFrame
62
- })
63
- }, /*#__PURE__*/React.createElement(Table, {
64
- ref: tableRef,
65
- records: list.records,
66
- loading: list.isListLoading,
67
- handleRecordSelect: handleAuditLogSelect,
68
- sorting: list.sorting,
69
- onSortingChange: list.setSorting,
70
- hasAccessToUsers: hasAccessToUsers
71
- }), /*#__PURE__*/React.createElement(LoadMoreButton, {
72
- show: !list.isListLoading && list.meta.hasMoreItems,
73
- disabled: list.isListLoadingMore,
74
- windowHeight: windowHeight,
75
- tableHeight: tableHeight,
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,"names":["React","useCallback","useEffect","useRef","useState","debounce","i18n","EmptyView","useSecurity","Scrollbar","LoadingMore","LoadMoreButton","Header","Filters","Table","Preview","useAuditLogsList","MainContainer","Wrapper","t","ns","LogsView","selectedAuditLog","setSelectedAuditLog","handleAuditLogSelect","auditLog","closePreviewModal","innerHeight","windowHeight","window","tableHeight","setTableHeight","tableRef","getPermissions","hasAccessToUsers","Boolean","length","list","current","clientHeight","loadMoreOnScroll","scrollFrame","top","listMoreRecords","createElement","Fragment","title","showingFilters","showFilters","hideFilters","setWhere","records","isListLoading","action","onClose","onScrollFrame","ref","loading","handleRecordSelect","sorting","onSortingChange","setSorting","show","meta","hasMoreItems","disabled","isListLoadingMore","onClick"],"sources":["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/ui/Scrollbar/index.js\";\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 { MainContainer, Wrapper } from \"./styled.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) {\n list.listMoreRecords();\n }\n }, 200);\n\n return (\n <>\n <MainContainer>\n <Header\n title=\"Audit Logs\"\n showingFilters={list.showingFilters}\n showFilters={list.showFilters}\n hideFilters={list.hideFilters}\n />\n <Wrapper>\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}\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 </Wrapper>\n </MainContainer>\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
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"}