@webiny/app-audit-logs 6.3.0-beta.4 → 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,91 +1,82 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { addMinutes, format } from "date-fns";
|
|
3
|
-
import {
|
|
4
|
-
import { Dialog, DialogActions, DialogCancel, DialogContent, DialogTitle } from "@webiny/ui/Dialog/index.js";
|
|
5
|
-
import { CodeEditor } from "@webiny/ui/CodeEditor/index.js";
|
|
6
|
-
import { Tooltip } from "@webiny/ui/Tooltip/index.js";
|
|
3
|
+
import { CodeEditor, Dialog, Grid, Tooltip } from "@webiny/admin-ui";
|
|
7
4
|
import { Action } from "../Table/index.js";
|
|
8
5
|
import { Text } from "../../../components/Text.js";
|
|
9
6
|
import { PayloadWrapper, previewDialog } from "./styled.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
mode: "json",
|
|
83
|
-
theme: "chrome",
|
|
84
|
-
value: JSON.stringify(JSON.parse(auditLog.content), null, 2),
|
|
85
|
-
readOnly: true
|
|
86
|
-
}))))), /*#__PURE__*/React.createElement(DialogActions, null, /*#__PURE__*/React.createElement(DialogCancel, {
|
|
87
|
-
onClick: onClose
|
|
88
|
-
}, "Close")));
|
|
7
|
+
const Preview = ({ auditLog, onClose, hasAccessToUsers })=>{
|
|
8
|
+
if (!auditLog) return null;
|
|
9
|
+
const date = new Date(auditLog.createdOn);
|
|
10
|
+
return /*#__PURE__*/ react.createElement(Dialog, {
|
|
11
|
+
open: !!auditLog,
|
|
12
|
+
onClose: onClose,
|
|
13
|
+
className: previewDialog,
|
|
14
|
+
size: "xl",
|
|
15
|
+
title: auditLog.message,
|
|
16
|
+
actions: /*#__PURE__*/ react.createElement(Dialog.CancelAction, {
|
|
17
|
+
onClick: onClose,
|
|
18
|
+
text: "Close"
|
|
19
|
+
})
|
|
20
|
+
}, /*#__PURE__*/ react.createElement(Grid, null, /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
21
|
+
span: 6
|
|
22
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
23
|
+
use: "overline"
|
|
24
|
+
}, "Application"), /*#__PURE__*/ react.createElement("br", null), /*#__PURE__*/ react.createElement(Text, {
|
|
25
|
+
use: "subtitle2"
|
|
26
|
+
}, auditLog.app)), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
27
|
+
span: 6
|
|
28
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
29
|
+
use: "overline"
|
|
30
|
+
}, "Date"), /*#__PURE__*/ react.createElement("br", null), /*#__PURE__*/ react.createElement(Tooltip, {
|
|
31
|
+
side: "right",
|
|
32
|
+
content: `UTC: ${format(addMinutes(date, date.getTimezoneOffset()), "yyyy-MM-dd HH:mm:ss")}`,
|
|
33
|
+
trigger: /*#__PURE__*/ react.createElement(Text, {
|
|
34
|
+
use: "subtitle2"
|
|
35
|
+
}, format(date, "yyyy-MM-dd HH:mm:ss (O)"))
|
|
36
|
+
})), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
37
|
+
span: 6
|
|
38
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
39
|
+
use: "overline"
|
|
40
|
+
}, "Entity"), /*#__PURE__*/ react.createElement("br", null), /*#__PURE__*/ react.createElement(Text, {
|
|
41
|
+
use: "subtitle2"
|
|
42
|
+
}, auditLog.entity.label)), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
43
|
+
span: 6
|
|
44
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
45
|
+
use: "overline"
|
|
46
|
+
}, "Entity Id"), /*#__PURE__*/ react.createElement("br", null), auditLog.entity.link ? /*#__PURE__*/ react.createElement("a", {
|
|
47
|
+
href: auditLog.entity.link,
|
|
48
|
+
target: "blank"
|
|
49
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
50
|
+
use: "subtitle2"
|
|
51
|
+
}, auditLog.entityId)) : /*#__PURE__*/ react.createElement(Text, {
|
|
52
|
+
use: "subtitle2"
|
|
53
|
+
}, auditLog.entityId)), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
54
|
+
span: 6
|
|
55
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
56
|
+
use: "overline"
|
|
57
|
+
}, "Action"), /*#__PURE__*/ react.createElement("br", null), /*#__PURE__*/ react.createElement(Action, {
|
|
58
|
+
label: auditLog.action.label,
|
|
59
|
+
value: auditLog.action.value
|
|
60
|
+
})), hasAccessToUsers ? /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
61
|
+
span: 6
|
|
62
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
63
|
+
use: "overline"
|
|
64
|
+
}, "Initiator"), /*#__PURE__*/ react.createElement("br", null), /*#__PURE__*/ react.createElement("a", {
|
|
65
|
+
href: `/admin-users?id=${auditLog.createdBy.id}`,
|
|
66
|
+
target: "blank"
|
|
67
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
68
|
+
use: "subtitle2"
|
|
69
|
+
}, auditLog.createdBy.displayName)), /*#__PURE__*/ react.createElement(Text, {
|
|
70
|
+
use: "body2"
|
|
71
|
+
}, ` (${auditLog.createdBy.role})`)) : void 0, /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
72
|
+
span: 12
|
|
73
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
74
|
+
use: "overline"
|
|
75
|
+
}, "Payload"), /*#__PURE__*/ react.createElement(PayloadWrapper, null, /*#__PURE__*/ react.createElement(CodeEditor, {
|
|
76
|
+
language: "json",
|
|
77
|
+
value: JSON.stringify(JSON.parse(auditLog.content), null, 2)
|
|
78
|
+
})))));
|
|
89
79
|
};
|
|
80
|
+
export { Preview };
|
|
90
81
|
|
|
91
82
|
//# sourceMappingURL=Preview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"views/Logs/Preview/Preview.js","sources":["../../../../src/views/Logs/Preview/Preview.tsx"],"sourcesContent":["import React from \"react\";\nimport { addMinutes, format } from \"date-fns\";\nimport { Grid, Dialog, CodeEditor, Tooltip } from \"@webiny/admin-ui\";\nimport { Action } from \"~/views/Logs/Table/index.js\";\nimport { Text } from \"~/components/Text.js\";\nimport { PayloadWrapper, previewDialog } from \"./styled.js\";\nimport type { IAuditLog } from \"~/types.js\";\n\ninterface HeaderProps {\n auditLog: IAuditLog | null;\n onClose: () => void;\n hasAccessToUsers: boolean;\n}\n\nexport const Preview = ({ auditLog, onClose, hasAccessToUsers }: HeaderProps) => {\n if (!auditLog) {\n return null;\n }\n const date = new Date(auditLog.createdOn);\n\n return (\n <Dialog\n open={!!auditLog}\n onClose={onClose}\n className={previewDialog}\n size={\"xl\"}\n title={auditLog.message}\n actions={<Dialog.CancelAction onClick={onClose} text={\"Close\"} />}\n >\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=\"right\"\n content={`UTC: ${format(\n addMinutes(date, date.getTimezoneOffset()),\n \"yyyy-MM-dd HH:mm:ss\"\n )}`}\n trigger={\n <Text use={\"subtitle2\"}>{format(date, \"yyyy-MM-dd HH:mm:ss (O)\")}</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 {\n (hasAccessToUsers ? (\n <Grid.Column span={6}>\n <Text use=\"overline\">Initiator</Text>\n <br />\n <a href={`/admin-users?id=${auditLog.createdBy.id}`} target={\"blank\"}>\n <Text use={\"subtitle2\"}>{auditLog.createdBy.displayName}</Text>\n </a>\n <Text use={\"body2\"}>{` (${auditLog.createdBy.role})`}</Text>\n </Grid.Column>\n ) : undefined) as any\n }\n <Grid.Column span={12}>\n <Text use=\"overline\">Payload</Text>\n <PayloadWrapper>\n <CodeEditor\n language=\"json\"\n value={JSON.stringify(JSON.parse(auditLog.content), null, 2)}\n />\n </PayloadWrapper>\n </Grid.Column>\n </Grid>\n </Dialog>\n );\n};\n"],"names":["Preview","auditLog","onClose","hasAccessToUsers","date","Date","Dialog","previewDialog","Grid","Text","Tooltip","format","addMinutes","Action","undefined","PayloadWrapper","CodeEditor","JSON"],"mappings":";;;;;;AAcO,MAAMA,UAAU,CAAC,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,gBAAgB,EAAe;IACxE,IAAI,CAACF,UACD,OAAO;IAEX,MAAMG,OAAO,IAAIC,KAAKJ,SAAS,SAAS;IAExC,OAAO,WAAP,GACI,oBAACK,QAAMA;QACH,MAAM,CAAC,CAACL;QACR,SAASC;QACT,WAAWK;QACX,MAAM;QACN,OAAON,SAAS,OAAO;QACvB,uBAAS,oBAACK,OAAO,YAAY;YAAC,SAASJ;YAAS,MAAM;;qBAEtD,oBAACM,MAAIA,MAAAA,WAAAA,GACD,oBAACA,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QAAC,KAAI;OAAW,8BACrB,oBAAC,2BACD,oBAACA,MAAIA;QAAC,KAAI;OAAaR,SAAS,GAAG,kBAEvC,oBAACO,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QAAC,KAAI;OAAW,uBACrB,oBAAC,2BACD,oBAACC,SAAOA;QACJ,MAAK;QACL,SAAS,CAAC,KAAK,EAAEC,OACbC,WAAWR,MAAMA,KAAK,iBAAiB,KACvC,wBACD;QACH,uBACI,oBAACK,MAAIA;YAAC,KAAK;WAAcE,OAAOP,MAAM;uBAIlD,oBAACI,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QAAC,KAAI;OAAW,yBACrB,oBAAC,2BACD,oBAACA,MAAIA;QAAC,KAAI;OAAaR,SAAS,MAAM,CAAC,KAAK,kBAEhD,oBAACO,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QAAC,KAAI;OAAW,4BACrB,oBAAC,aACAR,SAAS,MAAM,CAAC,IAAI,GAAG,WAAH,GACjB,oBAAC;QAAE,MAAMA,SAAS,MAAM,CAAC,IAAI;QAAE,QAAQ;qBACnC,oBAACQ,MAAIA;QAAC,KAAI;OAAaR,SAAS,QAAQ,mBAG5C,oBAACQ,MAAIA;QAAC,KAAI;OAAaR,SAAS,QAAQ,kBAGhD,oBAACO,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QAAC,KAAI;OAAW,yBACrB,oBAAC,2BACD,oBAACI,QAAMA;QAAC,OAAOZ,SAAS,MAAM,CAAC,KAAK;QAAE,OAAOA,SAAS,MAAM,CAAC,KAAK;SAGjEE,mBAAmB,WAAnBA,GACG,oBAACK,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QAAC,KAAI;OAAW,4BACrB,oBAAC,2BACD,oBAAC;QAAE,MAAM,CAAC,gBAAgB,EAAER,SAAS,SAAS,CAAC,EAAE,EAAE;QAAE,QAAQ;qBACzD,oBAACQ,MAAIA;QAAC,KAAK;OAAcR,SAAS,SAAS,CAAC,WAAW,kBAE3D,oBAACQ,MAAIA;QAAC,KAAK;OAAU,CAAC,EAAE,EAAER,SAAS,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAExDa,QAAAA,WAAAA,GAER,oBAACN,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QAAC,KAAI;OAAW,0BACrB,oBAACM,gBAAcA,MAAAA,WAAAA,GACX,oBAACC,YAAUA;QACP,UAAS;QACT,OAAOC,KAAK,SAAS,CAACA,KAAK,KAAK,CAAChB,SAAS,OAAO,GAAG,MAAM;;AAOtF"}
|
|
@@ -1,26 +1,32 @@
|
|
|
1
|
-
import
|
|
2
|
-
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
1
|
+
import styled from "@emotion/styled";
|
|
3
2
|
import { css } from "@emotion/css";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
3
|
+
const PayloadWrapper = styled("div")`
|
|
4
|
+
#brace-editor {
|
|
5
|
+
height: 280px !important;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.ace_print-margin,
|
|
9
|
+
.ace_active-line,
|
|
10
|
+
.ace_gutter-active-line,
|
|
11
|
+
.ace_cursor-layer {
|
|
12
|
+
display: none;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.ace_line,
|
|
16
|
+
.ace_gutter-cell {
|
|
17
|
+
height: 12px !important;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.ace_gutter-layer {
|
|
21
|
+
width: 47px !important;
|
|
22
|
+
}
|
|
23
|
+
`;
|
|
24
|
+
const previewDialog = css`
|
|
25
|
+
& .mdc-dialog__surface {
|
|
26
|
+
width: 800px;
|
|
27
|
+
min-width: 800px;
|
|
28
|
+
}
|
|
29
|
+
`;
|
|
30
|
+
export { PayloadWrapper, previewDialog };
|
|
25
31
|
|
|
26
32
|
//# sourceMappingURL=styled.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"views/Logs/Preview/styled.js","sources":["../../../../src/views/Logs/Preview/styled.tsx"],"sourcesContent":["import styled from \"@emotion/styled\";\nimport { css } from \"@emotion/css\";\n\nexport const PayloadWrapper = styled(\"div\")`\n #brace-editor {\n height: 280px !important;\n }\n\n .ace_print-margin,\n .ace_active-line,\n .ace_gutter-active-line,\n .ace_cursor-layer {\n display: none;\n }\n\n .ace_line,\n .ace_gutter-cell {\n height: 12px !important;\n }\n\n .ace_gutter-layer {\n width: 47px !important;\n }\n`;\n\nexport const previewDialog = css`\n & .mdc-dialog__surface {\n width: 800px;\n min-width: 800px;\n }\n`;\n"],"names":["PayloadWrapper","styled","previewDialog","css"],"mappings":";;AAGO,MAAMA,iBAAiBC,OAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;AAoB5C,CAAC;AAEM,MAAMC,gBAAgBC,GAAG,CAAC;;;;;AAKjC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type {
|
|
2
|
+
import type { DataTableSorting, OnDataTableSortingChange } from "@webiny/admin-ui";
|
|
3
3
|
import type { ActionType, IAuditLog } from "../../../types.js";
|
|
4
4
|
interface ActionProps {
|
|
5
5
|
label: string;
|
|
@@ -10,8 +10,8 @@ export interface TableProps {
|
|
|
10
10
|
records: IAuditLog[];
|
|
11
11
|
loading?: boolean;
|
|
12
12
|
handleRecordSelect: (auditLog: IAuditLog) => void;
|
|
13
|
-
sorting:
|
|
14
|
-
onSortingChange:
|
|
13
|
+
sorting: DataTableSorting;
|
|
14
|
+
onSortingChange: OnDataTableSortingChange;
|
|
15
15
|
hasAccessToUsers: boolean;
|
|
16
16
|
}
|
|
17
17
|
export interface EntryWithPreview extends IAuditLog {
|
|
@@ -1,132 +1,108 @@
|
|
|
1
|
-
import
|
|
1
|
+
import react, { forwardRef, useMemo } from "react";
|
|
2
2
|
import { addMinutes, format } from "date-fns";
|
|
3
|
-
import { ReactComponent
|
|
4
|
-
import { DataTable } from "@webiny/ui
|
|
5
|
-
import { IconButton } from "@webiny/ui/Button/index.js";
|
|
6
|
-
import { Tooltip } from "@webiny/ui/Tooltip/index.js";
|
|
3
|
+
import { ReactComponent } from "@webiny/icons/info.svg";
|
|
4
|
+
import { DataTable, IconButton, Tooltip } from "@webiny/admin-ui";
|
|
7
5
|
import { Text } from "../../../components/Text.js";
|
|
8
|
-
import { ActionWrapper,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}) => {
|
|
13
|
-
return /*#__PURE__*/React.createElement(ActionWrapper, {
|
|
14
|
-
value: value
|
|
15
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
|
16
|
-
use: "subtitle1"
|
|
17
|
-
}, label));
|
|
18
|
-
};
|
|
19
|
-
export const Table = /*#__PURE__*/forwardRef((props, ref) => {
|
|
20
|
-
const {
|
|
21
|
-
records,
|
|
22
|
-
loading,
|
|
23
|
-
handleRecordSelect,
|
|
24
|
-
sorting,
|
|
25
|
-
onSortingChange,
|
|
26
|
-
hasAccessToUsers
|
|
27
|
-
} = props;
|
|
28
|
-
const columns = {
|
|
29
|
-
createdOn: {
|
|
30
|
-
header: "Timestamp",
|
|
31
|
-
cell: ({
|
|
32
|
-
createdOn
|
|
33
|
-
}) => {
|
|
34
|
-
const date = new Date(createdOn);
|
|
35
|
-
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
36
|
-
placement: "right",
|
|
37
|
-
content: `UTC: ${format(addMinutes(date, date.getTimezoneOffset()), "yyyy-MM-dd HH:mm:ss")}`
|
|
38
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
|
39
|
-
use: "subtitle1"
|
|
40
|
-
}, format(date, "yyyy-MM-dd HH:mm:ss")), /*#__PURE__*/React.createElement(TimezoneText, {
|
|
41
|
-
use: "body2"
|
|
42
|
-
}, format(date, "(O)")));
|
|
43
|
-
},
|
|
44
|
-
enableSorting: true
|
|
45
|
-
},
|
|
46
|
-
app: {
|
|
47
|
-
header: "App/Entity",
|
|
48
|
-
cell: ({
|
|
49
|
-
app,
|
|
50
|
-
entity,
|
|
51
|
-
entityId
|
|
52
|
-
}) => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Text, {
|
|
6
|
+
import { ActionWrapper, TextGray, TimezoneText, appColumn, previewColumn, wideColumn } from "./styled.js";
|
|
7
|
+
const Action = ({ label, value })=>/*#__PURE__*/ react.createElement(ActionWrapper, {
|
|
8
|
+
value: value
|
|
9
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
53
10
|
use: "subtitle1"
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
},
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
11
|
+
}, label));
|
|
12
|
+
const Table = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
13
|
+
const { records, loading, handleRecordSelect, sorting, onSortingChange, hasAccessToUsers } = props;
|
|
14
|
+
const columns = {
|
|
15
|
+
createdOn: {
|
|
16
|
+
header: "Timestamp",
|
|
17
|
+
cell: (row)=>{
|
|
18
|
+
const date = new Date(row.createdOn);
|
|
19
|
+
return /*#__PURE__*/ react.createElement(Tooltip, {
|
|
20
|
+
side: "right",
|
|
21
|
+
content: `UTC: ${format(addMinutes(date, date.getTimezoneOffset()), "yyyy-MM-dd HH:mm:ss")}`,
|
|
22
|
+
trigger: /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Text, {
|
|
23
|
+
use: "subtitle1"
|
|
24
|
+
}, format(date, "yyyy-MM-dd HH:mm:ss")), /*#__PURE__*/ react.createElement(TimezoneText, {
|
|
25
|
+
use: "body2"
|
|
26
|
+
}, format(date, "(O)")))
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
enableSorting: true
|
|
30
|
+
},
|
|
31
|
+
app: {
|
|
32
|
+
header: "App/Entity",
|
|
33
|
+
cell: (row)=>/*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Text, {
|
|
34
|
+
use: "subtitle1"
|
|
35
|
+
}, row.app), row.entity && /*#__PURE__*/ react.createElement(TextGray, {
|
|
36
|
+
use: "body2"
|
|
37
|
+
}, ` [Entity: ${row.entity.label}]`), /*#__PURE__*/ react.createElement("br", null), /*#__PURE__*/ react.createElement(TextGray, {
|
|
38
|
+
use: "body2"
|
|
39
|
+
}, "ID: "), row.entity.link ? /*#__PURE__*/ react.createElement("a", {
|
|
40
|
+
href: row.entity.link,
|
|
41
|
+
target: "blank"
|
|
42
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
43
|
+
use: "body2"
|
|
44
|
+
}, row.entityId)) : /*#__PURE__*/ react.createElement(Text, {
|
|
45
|
+
use: "body2"
|
|
46
|
+
}, row.entityId)),
|
|
47
|
+
className: appColumn
|
|
48
|
+
},
|
|
49
|
+
action: {
|
|
50
|
+
header: "Action",
|
|
51
|
+
cell: (row)=>/*#__PURE__*/ react.createElement(Action, {
|
|
52
|
+
label: row.action.label,
|
|
53
|
+
value: row.action.value
|
|
54
|
+
})
|
|
55
|
+
},
|
|
56
|
+
message: {
|
|
57
|
+
header: "Message",
|
|
58
|
+
cell: (row)=>/*#__PURE__*/ react.createElement(Text, {
|
|
59
|
+
use: "subtitle1"
|
|
60
|
+
}, row.message),
|
|
61
|
+
className: wideColumn
|
|
62
|
+
},
|
|
63
|
+
...hasAccessToUsers && {
|
|
64
|
+
createdBy: {
|
|
65
|
+
header: "Initiator",
|
|
66
|
+
cell: (row)=>/*#__PURE__*/ react.createElement("a", {
|
|
67
|
+
href: `/admin-users?id=${row.createdBy.id}`,
|
|
68
|
+
target: "blank"
|
|
69
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
70
|
+
use: "subtitle1"
|
|
71
|
+
}, row.createdBy.displayName || "-"))
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
preview: {
|
|
75
|
+
header: "",
|
|
76
|
+
cell: (auditLog)=>/*#__PURE__*/ react.createElement(IconButton, {
|
|
77
|
+
onClick: ()=>handleRecordSelect(auditLog),
|
|
78
|
+
icon: /*#__PURE__*/ react.createElement(ReactComponent, null)
|
|
79
|
+
}),
|
|
80
|
+
className: previewColumn
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const tableSorting = useMemo(()=>{
|
|
84
|
+
if (!Array.isArray(sorting) || 0 === sorting.length) return [
|
|
85
|
+
{
|
|
86
|
+
id: "savedOn",
|
|
87
|
+
desc: true
|
|
88
|
+
}
|
|
89
|
+
];
|
|
90
|
+
return sorting;
|
|
91
|
+
}, [
|
|
92
|
+
sorting
|
|
93
|
+
]);
|
|
94
|
+
return /*#__PURE__*/ react.createElement("div", {
|
|
95
|
+
ref: ref
|
|
96
|
+
}, /*#__PURE__*/ react.createElement(DataTable, {
|
|
97
|
+
columns: columns,
|
|
98
|
+
data: records,
|
|
99
|
+
loading: loading,
|
|
100
|
+
stickyHeader: true,
|
|
101
|
+
sorting: tableSorting,
|
|
102
|
+
onSortingChange: onSortingChange
|
|
103
|
+
}));
|
|
129
104
|
});
|
|
130
105
|
Table.displayName = "Table";
|
|
106
|
+
export { Action, Table };
|
|
131
107
|
|
|
132
108
|
//# sourceMappingURL=Table.js.map
|