@webiny/app-audit-logs 6.6.0-alpha.0 → 6.6.0-alpha.2
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/components/Text.d.ts +1 -3
- package/components/Text.js +4 -9
- package/components/Text.js.map +1 -1
- package/config/list/AuditLogsListConfig.d.ts +6 -0
- package/config/list/AuditLogsListConfig.js +10 -1
- package/config/list/AuditLogsListConfig.js.map +1 -1
- package/config/list/Details/PreviewTab.d.ts +15 -0
- package/config/list/Details/PreviewTab.js +32 -0
- package/config/list/Details/PreviewTab.js.map +1 -0
- package/config/list/Details/index.d.ts +8 -0
- package/config/list/Details/index.js +7 -0
- package/config/list/Details/index.js.map +1 -0
- package/hooks/schema.d.ts +2 -3
- package/hooks/schema.js +1 -2
- package/hooks/schema.js.map +1 -1
- package/hooks/useAuditLogsList.d.ts +0 -3
- package/hooks/useAuditLogsList.js +11 -12
- package/hooks/useAuditLogsList.js.map +1 -1
- package/index.js +12 -5
- package/index.js.map +1 -1
- package/package.json +13 -15
- package/types.d.ts +2 -2
- package/views/Logs/Filters/FilterByAction.d.ts +1 -1
- package/views/Logs/Filters/FilterByAction.js +5 -3
- package/views/Logs/Filters/FilterByAction.js.map +1 -1
- package/views/Logs/Filters/FilterByApp.js +2 -1
- package/views/Logs/Filters/FilterByApp.js.map +1 -1
- package/views/Logs/Filters/FilterByCreatedBy.js +2 -1
- package/views/Logs/Filters/FilterByCreatedBy.js.map +1 -1
- package/views/Logs/Filters/FilterByCreatedOn.js +26 -27
- package/views/Logs/Filters/FilterByCreatedOn.js.map +1 -1
- package/views/Logs/Filters/FilterByEntity.d.ts +1 -1
- package/views/Logs/Filters/FilterByEntity.js +5 -3
- package/views/Logs/Filters/FilterByEntity.js.map +1 -1
- package/views/Logs/Filters/FilterByEntityId.js +2 -1
- package/views/Logs/Filters/FilterByEntityId.js.map +1 -1
- package/views/Logs/Filters/Filters.d.ts +1 -2
- package/views/Logs/Filters/Filters.js +61 -13
- package/views/Logs/Filters/Filters.js.map +1 -1
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js +4 -5
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js.map +1 -1
- package/views/Logs/Header/Header.d.ts +2 -4
- package/views/Logs/Header/Header.js +4 -7
- package/views/Logs/Header/Header.js.map +1 -1
- package/views/Logs/LoadMoreButton/styled.d.ts +4 -4
- package/views/Logs/LoadMoreButton/styled.js +4 -6
- package/views/Logs/LoadMoreButton/styled.js.map +1 -1
- package/views/Logs/LogsView.js +4 -8
- package/views/Logs/LogsView.js.map +1 -1
- package/views/Logs/Preview/AuditLogDetailsPresenter.d.ts +13 -0
- package/views/Logs/Preview/AuditLogDetailsPresenter.js +36 -0
- package/views/Logs/Preview/AuditLogDetailsPresenter.js.map +1 -0
- package/views/Logs/Preview/Preview.d.ts +4 -2
- package/views/Logs/Preview/Preview.js +67 -22
- package/views/Logs/Preview/Preview.js.map +1 -1
- package/views/Logs/Preview/abstractions.d.ts +14 -0
- package/views/Logs/Preview/abstractions.js +5 -0
- package/views/Logs/Preview/abstractions.js.map +1 -0
- package/views/Logs/Preview/feature.d.ts +5 -0
- package/views/Logs/Preview/feature.js +22 -0
- package/views/Logs/Preview/feature.js.map +1 -0
- package/views/Logs/Preview/index.d.ts +2 -0
- package/views/Logs/Preview/index.js +1 -0
- package/views/Logs/Preview/tabs/AiPromptTabs.d.ts +2 -0
- package/views/Logs/Preview/tabs/AiPromptTabs.js +25 -0
- package/views/Logs/Preview/tabs/AiPromptTabs.js.map +1 -0
- package/views/Logs/Preview/tabs/LlmResponseTab.d.ts +4 -0
- package/views/Logs/Preview/tabs/LlmResponseTab.js +41 -0
- package/views/Logs/Preview/tabs/LlmResponseTab.js.map +1 -0
- package/views/Logs/Preview/tabs/SystemPromptTab.d.ts +4 -0
- package/views/Logs/Preview/tabs/SystemPromptTab.js +24 -0
- package/views/Logs/Preview/tabs/SystemPromptTab.js.map +1 -0
- package/views/Logs/Preview/tabs/UserPromptTab.d.ts +4 -0
- package/views/Logs/Preview/tabs/UserPromptTab.js +18 -0
- package/views/Logs/Preview/tabs/UserPromptTab.js.map +1 -0
- package/views/Logs/Preview/tabs/shared.d.ts +28 -0
- package/views/Logs/Preview/tabs/shared.js +16 -0
- package/views/Logs/Preview/tabs/shared.js.map +1 -0
- package/views/Logs/Table/Table.d.ts +3 -6
- package/views/Logs/Table/Table.js +25 -16
- package/views/Logs/Table/Table.js.map +1 -1
- package/views/Logs/Table/styled.d.ts +1 -16
- package/views/Logs/Table/styled.js +15 -55
- package/views/Logs/Table/styled.js.map +1 -1
- package/views/Logs/Filters/FilterByTimestamp.d.ts +0 -2
- package/views/Logs/Filters/FilterByTimestamp.js +0 -39
- package/views/Logs/Filters/FilterByTimestamp.js.map +0 -1
- package/views/Logs/Filters/styled.d.ts +0 -4
- package/views/Logs/Filters/styled.js +0 -13
- package/views/Logs/Filters/styled.js.map +0 -1
- package/views/Logs/Logs.d.ts +0 -3
- package/views/Logs/Logs.js +0 -76
- package/views/Logs/Logs.js.map +0 -1
- package/views/Logs/Preview/styled.d.ts +0 -5
- package/views/Logs/Preview/styled.js +0 -32
- package/views/Logs/Preview/styled.js.map +0 -1
package/components/Text.d.ts
CHANGED
|
@@ -6,7 +6,5 @@ export interface TypographyProps {
|
|
|
6
6
|
className?: string;
|
|
7
7
|
style?: React.CSSProperties;
|
|
8
8
|
}
|
|
9
|
-
export declare const Text:
|
|
10
|
-
theme?: import("@emotion/react").Theme;
|
|
11
|
-
}, {}, {}>;
|
|
9
|
+
export declare const Text: ({ use, children, className, style }: TypographyProps) => React.JSX.Element;
|
|
12
10
|
export {};
|
package/components/Text.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import react from "react";
|
|
2
|
-
import styled from "@emotion/styled";
|
|
3
2
|
import { Heading, Text } from "@webiny/admin-ui";
|
|
4
3
|
const headingLevelMap = {
|
|
5
4
|
headline1: 1,
|
|
@@ -18,23 +17,19 @@ const sizeMap = {
|
|
|
18
17
|
button: "sm",
|
|
19
18
|
overline: "sm"
|
|
20
19
|
};
|
|
21
|
-
const
|
|
20
|
+
const Text_Text = ({ use = "body2", children, className, style })=>{
|
|
21
|
+
const classes = `whitespace-nowrap overflow-hidden text-ellipsis ${className ?? ""}`.trim();
|
|
22
22
|
if (use in headingLevelMap) return /*#__PURE__*/ react.createElement(Heading, {
|
|
23
23
|
level: headingLevelMap[use],
|
|
24
|
-
className:
|
|
24
|
+
className: classes,
|
|
25
25
|
style: style
|
|
26
26
|
}, children);
|
|
27
27
|
return /*#__PURE__*/ react.createElement(Text, {
|
|
28
28
|
size: sizeMap[use] ?? "md",
|
|
29
|
-
className:
|
|
29
|
+
className: classes,
|
|
30
30
|
style: style
|
|
31
31
|
}, children);
|
|
32
32
|
};
|
|
33
|
-
const Text_Text = styled(Typography)`
|
|
34
|
-
white-space: nowrap;
|
|
35
|
-
overflow: hidden;
|
|
36
|
-
text-overflow: ellipsis;
|
|
37
|
-
`;
|
|
38
33
|
export { Text_Text as Text };
|
|
39
34
|
|
|
40
35
|
//# sourceMappingURL=Text.js.map
|
package/components/Text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/Text.js","sources":["../../src/components/Text.tsx"],"sourcesContent":["import React from \"react\";\nimport
|
|
1
|
+
{"version":3,"file":"components/Text.js","sources":["../../src/components/Text.tsx"],"sourcesContent":["import React from \"react\";\nimport { Text as BaseText, Heading } from \"@webiny/admin-ui\";\nimport type { HeadingLevels } from \"@webiny/admin-ui\";\n\ntype TypographyT =\n | \"headline1\"\n | \"headline2\"\n | \"headline3\"\n | \"headline4\"\n | \"headline5\"\n | \"headline6\"\n | \"subtitle1\"\n | \"subtitle2\"\n | \"body1\"\n | \"body2\"\n | \"caption\"\n | \"button\"\n | \"overline\";\n\nexport interface TypographyProps {\n use?: TypographyT;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst headingLevelMap: Partial<Record<TypographyT, HeadingLevels>> = {\n headline1: 1,\n headline2: 2,\n headline3: 3,\n headline4: 4,\n headline5: 5,\n headline6: 6\n};\n\nconst sizeMap: Partial<Record<TypographyT, \"sm\" | \"md\">> = {\n subtitle1: \"md\",\n subtitle2: \"sm\",\n body1: \"md\",\n body2: \"sm\",\n caption: \"sm\",\n button: \"sm\",\n overline: \"sm\"\n};\n\nexport const Text = ({ use = \"body2\", children, className, style }: TypographyProps) => {\n const classes = `whitespace-nowrap overflow-hidden text-ellipsis ${className ?? \"\"}`.trim();\n\n if (use in headingLevelMap) {\n return (\n <Heading level={headingLevelMap[use]} className={classes} style={style}>\n {children}\n </Heading>\n );\n }\n return (\n <BaseText size={sizeMap[use] ?? \"md\"} className={classes} style={style}>\n {children}\n </BaseText>\n );\n};\n"],"names":["headingLevelMap","sizeMap","Text","use","children","className","style","classes","Heading","BaseText"],"mappings":";;AA0BA,MAAMA,kBAA+D;IACjE,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;AACf;AAEA,MAAMC,UAAqD;IACvD,WAAW;IACX,WAAW;IACX,OAAO;IACP,OAAO;IACP,SAAS;IACT,QAAQ;IACR,UAAU;AACd;AAEO,MAAMC,YAAO,CAAC,EAAEC,MAAM,OAAO,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,KAAK,EAAmB;IAC/E,MAAMC,UAAU,CAAC,gDAAgD,EAAEF,aAAa,IAAI,CAAC,IAAI;IAEzF,IAAIF,OAAOH,iBACP,OAAO,WAAP,GACI,oBAACQ,SAAOA;QAAC,OAAOR,eAAe,CAACG,IAAI;QAAE,WAAWI;QAAS,OAAOD;OAC5DF;IAIb,OAAO,WAAP,GACI,oBAACK,MAAQA;QAAC,MAAMR,OAAO,CAACE,IAAI,IAAI;QAAM,WAAWI;QAAS,OAAOD;OAC5DF;AAGb"}
|
|
@@ -36,6 +36,9 @@ export declare const AuditLogsListConfig: typeof ScopedAuditLogsListConfig & {
|
|
|
36
36
|
};
|
|
37
37
|
FiltersToWhere: typeof import("./Browser/FiltersToWhere.js").FiltersToWhere;
|
|
38
38
|
};
|
|
39
|
+
Details: {
|
|
40
|
+
Tab: typeof import("./Details/PreviewTab.js").PreviewTab;
|
|
41
|
+
};
|
|
39
42
|
};
|
|
40
43
|
export declare const AuditLogsListWithConfig: ({ children }: {
|
|
41
44
|
children: React.ReactNode;
|
|
@@ -45,5 +48,8 @@ export declare function useAuditLogsListConfig(): {
|
|
|
45
48
|
filters: import("./Browser/Filter.js").FilterConfig[];
|
|
46
49
|
filtersToWhere: import("./Browser/FiltersToWhere.js").FiltersToWhereConverter[];
|
|
47
50
|
};
|
|
51
|
+
details: {
|
|
52
|
+
tabs: import("./Details/PreviewTab.js").PreviewTabConfig[];
|
|
53
|
+
};
|
|
48
54
|
};
|
|
49
55
|
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import react, { useMemo } from "react";
|
|
2
2
|
import { createConfigurableComponent } from "@webiny/react-properties";
|
|
3
3
|
import { Browser } from "./Browser/index.js";
|
|
4
|
+
import { Details } from "./Details/index.js";
|
|
4
5
|
import { CompositionScope } from "@webiny/react-composition";
|
|
5
6
|
const base = createConfigurableComponent("AuditLogsListConfig");
|
|
6
7
|
const ScopedAuditLogsListConfig = ({ children })=>/*#__PURE__*/ react.createElement(CompositionScope, {
|
|
@@ -8,7 +9,8 @@ const ScopedAuditLogsListConfig = ({ children })=>/*#__PURE__*/ react.createElem
|
|
|
8
9
|
}, /*#__PURE__*/ react.createElement(base.Config, null, children));
|
|
9
10
|
ScopedAuditLogsListConfig.displayName = "AuditLogsListConfig";
|
|
10
11
|
const AuditLogsListConfig = Object.assign(ScopedAuditLogsListConfig, {
|
|
11
|
-
Browser: Browser
|
|
12
|
+
Browser: Browser,
|
|
13
|
+
Details: Details
|
|
12
14
|
});
|
|
13
15
|
const AuditLogsListWithConfig = ({ children })=>/*#__PURE__*/ react.createElement(CompositionScope, {
|
|
14
16
|
name: "auditLogs"
|
|
@@ -16,6 +18,7 @@ const AuditLogsListWithConfig = ({ children })=>/*#__PURE__*/ react.createElemen
|
|
|
16
18
|
function useAuditLogsListConfig() {
|
|
17
19
|
const config = base.useConfig();
|
|
18
20
|
const browser = config.browser || {};
|
|
21
|
+
const details = config.details || {};
|
|
19
22
|
return useMemo(()=>({
|
|
20
23
|
browser: {
|
|
21
24
|
...browser,
|
|
@@ -25,6 +28,12 @@ function useAuditLogsListConfig() {
|
|
|
25
28
|
filtersToWhere: [
|
|
26
29
|
...browser.filtersToWhere || []
|
|
27
30
|
]
|
|
31
|
+
},
|
|
32
|
+
details: {
|
|
33
|
+
...details,
|
|
34
|
+
tabs: [
|
|
35
|
+
...details.tabs || []
|
|
36
|
+
]
|
|
28
37
|
}
|
|
29
38
|
}), [
|
|
30
39
|
config
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config/list/AuditLogsListConfig.js","sources":["../../../src/config/list/AuditLogsListConfig.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { createConfigurableComponent } from \"@webiny/react-properties\";\nimport type { BrowserConfig } from \"./Browser/index.js\";\nimport { Browser } from \"./Browser/index.js\";\nimport { CompositionScope } from \"@webiny/react-composition\";\n\nconst base = createConfigurableComponent<AuditLogsListConfig>(\"AuditLogsListConfig\");\n\nconst ScopedAuditLogsListConfig = ({ children }: { children: React.ReactNode }) => {\n return (\n <CompositionScope name={\"auditLogs\"}>\n <base.Config>{children}</base.Config>\n </CompositionScope>\n );\n};\n\nScopedAuditLogsListConfig.displayName = \"AuditLogsListConfig\";\n\nexport const AuditLogsListConfig = Object.assign(ScopedAuditLogsListConfig, { Browser });\nexport const AuditLogsListWithConfig = ({ children }: { children: React.ReactNode }) => {\n return (\n <CompositionScope name={\"auditLogs\"}>\n <base.WithConfig>{children}</base.WithConfig>\n </CompositionScope>\n );\n};\n\ninterface AuditLogsListConfig {\n browser: BrowserConfig;\n}\n\nexport function useAuditLogsListConfig() {\n const config = base.useConfig();\n\n const browser = config.browser || {};\n\n return useMemo(\n () => ({\n browser: {\n ...browser,\n filters: [...(browser.filters || [])],\n filtersToWhere: [...(browser.filtersToWhere || [])]\n }\n }),\n [config]\n );\n}\n"],"names":["base","createConfigurableComponent","ScopedAuditLogsListConfig","children","CompositionScope","AuditLogsListConfig","Object","Browser","AuditLogsListWithConfig","useAuditLogsListConfig","config","browser","useMemo"],"mappings":"
|
|
1
|
+
{"version":3,"file":"config/list/AuditLogsListConfig.js","sources":["../../../src/config/list/AuditLogsListConfig.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { createConfigurableComponent } from \"@webiny/react-properties\";\nimport type { BrowserConfig } from \"./Browser/index.js\";\nimport { Browser } from \"./Browser/index.js\";\nimport type { DetailsConfig } from \"./Details/index.js\";\nimport { Details } from \"./Details/index.js\";\nimport { CompositionScope } from \"@webiny/react-composition\";\n\nconst base = createConfigurableComponent<AuditLogsListConfig>(\"AuditLogsListConfig\");\n\nconst ScopedAuditLogsListConfig = ({ children }: { children: React.ReactNode }) => {\n return (\n <CompositionScope name={\"auditLogs\"}>\n <base.Config>{children}</base.Config>\n </CompositionScope>\n );\n};\n\nScopedAuditLogsListConfig.displayName = \"AuditLogsListConfig\";\n\nexport const AuditLogsListConfig = Object.assign(ScopedAuditLogsListConfig, { Browser, Details });\nexport const AuditLogsListWithConfig = ({ children }: { children: React.ReactNode }) => {\n return (\n <CompositionScope name={\"auditLogs\"}>\n <base.WithConfig>{children}</base.WithConfig>\n </CompositionScope>\n );\n};\n\ninterface AuditLogsListConfig {\n browser: BrowserConfig;\n details: DetailsConfig;\n}\n\nexport function useAuditLogsListConfig() {\n const config = base.useConfig();\n\n const browser = config.browser || {};\n const details = config.details || {};\n\n return useMemo(\n () => ({\n browser: {\n ...browser,\n filters: [...(browser.filters || [])],\n filtersToWhere: [...(browser.filtersToWhere || [])]\n },\n details: {\n ...details,\n tabs: [...(details.tabs || [])]\n }\n }),\n [config]\n );\n}\n"],"names":["base","createConfigurableComponent","ScopedAuditLogsListConfig","children","CompositionScope","AuditLogsListConfig","Object","Browser","Details","AuditLogsListWithConfig","useAuditLogsListConfig","config","browser","details","useMemo"],"mappings":";;;;;AAQA,MAAMA,OAAOC,4BAAiD;AAE9D,MAAMC,4BAA4B,CAAC,EAAEC,QAAQ,EAAiC,GACnE,WAAP,GACI,oBAACC,kBAAgBA;QAAC,MAAM;qBACpB,oBAACJ,KAAK,MAAM,QAAEG;AAK1BD,0BAA0B,WAAW,GAAG;AAEjC,MAAMG,sBAAsBC,OAAO,MAAM,CAACJ,2BAA2B;IAAEK,SAAOA;IAAEC,SAAOA;AAAC;AACxF,MAAMC,0BAA0B,CAAC,EAAEN,QAAQ,EAAiC,GACxE,WAAP,GACI,oBAACC,kBAAgBA;QAAC,MAAM;qBACpB,oBAACJ,KAAK,UAAU,QAAEG;AAUvB,SAASO;IACZ,MAAMC,SAASX,KAAK,SAAS;IAE7B,MAAMY,UAAUD,OAAO,OAAO,IAAI,CAAC;IACnC,MAAME,UAAUF,OAAO,OAAO,IAAI,CAAC;IAEnC,OAAOG,QACH,IAAO;YACH,SAAS;gBACL,GAAGF,OAAO;gBACV,SAAS;uBAAKA,QAAQ,OAAO,IAAI,EAAE;iBAAE;gBACrC,gBAAgB;uBAAKA,QAAQ,cAAc,IAAI,EAAE;iBAAE;YACvD;YACA,SAAS;gBACL,GAAGC,OAAO;gBACV,MAAM;uBAAKA,QAAQ,IAAI,IAAI,EAAE;iBAAE;YACnC;QACJ,IACA;QAACF;KAAO;AAEhB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { IAuditLog } from "../../../types.js";
|
|
3
|
+
export interface PreviewTabConfig {
|
|
4
|
+
name: string;
|
|
5
|
+
label: string;
|
|
6
|
+
element: React.ReactElement;
|
|
7
|
+
canRender?: (auditLog: IAuditLog) => boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface PreviewTabProps {
|
|
10
|
+
name: string;
|
|
11
|
+
label: string;
|
|
12
|
+
element: React.ReactElement;
|
|
13
|
+
canRender?: (auditLog: IAuditLog) => boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare const PreviewTab: ({ name, label, element, canRender }: PreviewTabProps) => React.JSX.Element;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { Property, useIdGenerator } from "@webiny/react-properties";
|
|
3
|
+
const PreviewTab = ({ name, label, element, canRender })=>{
|
|
4
|
+
const getId = useIdGenerator("previewTab");
|
|
5
|
+
return /*#__PURE__*/ react.createElement(Property, {
|
|
6
|
+
id: "details",
|
|
7
|
+
name: "details"
|
|
8
|
+
}, /*#__PURE__*/ react.createElement(Property, {
|
|
9
|
+
id: getId(name),
|
|
10
|
+
name: "tabs",
|
|
11
|
+
array: true
|
|
12
|
+
}, /*#__PURE__*/ react.createElement(Property, {
|
|
13
|
+
id: getId(name, "name"),
|
|
14
|
+
name: "name",
|
|
15
|
+
value: name
|
|
16
|
+
}), /*#__PURE__*/ react.createElement(Property, {
|
|
17
|
+
id: getId(name, "label"),
|
|
18
|
+
name: "label",
|
|
19
|
+
value: label
|
|
20
|
+
}), /*#__PURE__*/ react.createElement(Property, {
|
|
21
|
+
id: getId(name, "element"),
|
|
22
|
+
name: "element",
|
|
23
|
+
value: element
|
|
24
|
+
}), canRender ? /*#__PURE__*/ react.createElement(Property, {
|
|
25
|
+
id: getId(name, "canRender"),
|
|
26
|
+
name: "canRender",
|
|
27
|
+
value: canRender
|
|
28
|
+
}) : null));
|
|
29
|
+
};
|
|
30
|
+
export { PreviewTab };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=PreviewTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config/list/Details/PreviewTab.js","sources":["../../../../src/config/list/Details/PreviewTab.tsx"],"sourcesContent":["import React from \"react\";\nimport { Property, useIdGenerator } from \"@webiny/react-properties\";\nimport type { IAuditLog } from \"~/types.js\";\n\nexport interface PreviewTabConfig {\n name: string;\n label: string;\n element: React.ReactElement;\n canRender?: (auditLog: IAuditLog) => boolean;\n}\n\nexport interface PreviewTabProps {\n name: string;\n label: string;\n element: React.ReactElement;\n canRender?: (auditLog: IAuditLog) => boolean;\n}\n\nexport const PreviewTab = ({ name, label, element, canRender }: PreviewTabProps) => {\n const getId = useIdGenerator(\"previewTab\");\n\n return (\n <Property id=\"details\" name={\"details\"}>\n <Property id={getId(name)} name={\"tabs\"} array={true}>\n <Property id={getId(name, \"name\")} name={\"name\"} value={name} />\n <Property id={getId(name, \"label\")} name={\"label\"} value={label} />\n <Property id={getId(name, \"element\")} name={\"element\"} value={element} />\n {canRender ? (\n <Property id={getId(name, \"canRender\")} name={\"canRender\"} value={canRender} />\n ) : null}\n </Property>\n </Property>\n );\n};\n"],"names":["PreviewTab","name","label","element","canRender","getId","useIdGenerator","Property"],"mappings":";;AAkBO,MAAMA,aAAa,CAAC,EAAEC,IAAI,EAAEC,KAAK,EAAEC,OAAO,EAAEC,SAAS,EAAmB;IAC3E,MAAMC,QAAQC,eAAe;IAE7B,OAAO,WAAP,GACI,oBAACC,UAAQA;QAAC,IAAG;QAAU,MAAM;qBACzB,oBAACA,UAAQA;QAAC,IAAIF,MAAMJ;QAAO,MAAM;QAAQ,OAAO;qBAC5C,oBAACM,UAAQA;QAAC,IAAIF,MAAMJ,MAAM;QAAS,MAAM;QAAQ,OAAOA;sBACxD,oBAACM,UAAQA;QAAC,IAAIF,MAAMJ,MAAM;QAAU,MAAM;QAAS,OAAOC;sBAC1D,oBAACK,UAAQA;QAAC,IAAIF,MAAMJ,MAAM;QAAY,MAAM;QAAW,OAAOE;QAC7DC,YAAY,WAAZA,GACG,oBAACG,UAAQA;QAAC,IAAIF,MAAMJ,MAAM;QAAc,MAAM;QAAa,OAAOG;SAClE;AAIpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config/list/Details/index.js","sources":["../../../../src/config/list/Details/index.ts"],"sourcesContent":["import type { PreviewTabConfig } from \"./PreviewTab.js\";\nimport { PreviewTab } from \"./PreviewTab.js\";\n\nexport interface DetailsConfig {\n tabs: PreviewTabConfig[];\n}\n\nexport const Details = {\n Tab: PreviewTab\n};\n"],"names":["Details","PreviewTab"],"mappings":";AAOO,MAAMA,UAAU;IACnB,KAAKC;AACT"}
|
package/hooks/schema.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import zod from "zod";
|
|
2
|
-
import { ActionType } from "../types.js";
|
|
3
2
|
export declare const auditLogSchema: zod.ZodObject<{
|
|
4
3
|
id: zod.ZodString;
|
|
5
4
|
createdBy: zod.ZodObject<{
|
|
@@ -9,7 +8,7 @@ export declare const auditLogSchema: zod.ZodObject<{
|
|
|
9
8
|
}, zod.core.$strip>;
|
|
10
9
|
createdOn: zod.ZodPreprocess<zod.ZodDate>;
|
|
11
10
|
app: zod.ZodString;
|
|
12
|
-
action: zod.
|
|
11
|
+
action: zod.ZodString;
|
|
13
12
|
message: zod.ZodString;
|
|
14
13
|
entity: zod.ZodString;
|
|
15
14
|
entityId: zod.ZodString;
|
|
@@ -26,7 +25,7 @@ export declare const listAuditLogsSchema: zod.ZodArray<zod.ZodObject<{
|
|
|
26
25
|
}, zod.core.$strip>;
|
|
27
26
|
createdOn: zod.ZodPreprocess<zod.ZodDate>;
|
|
28
27
|
app: zod.ZodString;
|
|
29
|
-
action: zod.
|
|
28
|
+
action: zod.ZodString;
|
|
30
29
|
message: zod.ZodString;
|
|
31
30
|
entity: zod.ZodString;
|
|
32
31
|
entityId: zod.ZodString;
|
package/hooks/schema.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import zod from "zod";
|
|
2
|
-
import { ActionType } from "../types.js";
|
|
3
2
|
const auditLogSchema = zod.object({
|
|
4
3
|
id: zod.string(),
|
|
5
4
|
createdBy: zod.object({
|
|
@@ -12,7 +11,7 @@ const auditLogSchema = zod.object({
|
|
|
12
11
|
return value;
|
|
13
12
|
}, zod.date()),
|
|
14
13
|
app: zod.string(),
|
|
15
|
-
action: zod.
|
|
14
|
+
action: zod.string(),
|
|
16
15
|
message: zod.string(),
|
|
17
16
|
entity: zod.string(),
|
|
18
17
|
entityId: zod.string(),
|
package/hooks/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks/schema.js","sources":["../../src/hooks/schema.ts"],"sourcesContent":["import zod from \"zod\";\
|
|
1
|
+
{"version":3,"file":"hooks/schema.js","sources":["../../src/hooks/schema.ts"],"sourcesContent":["import zod from \"zod\";\n\nexport const auditLogSchema = zod.object({\n id: zod.string(),\n createdBy: zod.object({\n id: zod.string(),\n displayName: zod.string().optional(),\n type: zod.string().optional()\n }),\n createdOn: zod.preprocess(value => {\n if (typeof value === \"string\" || value instanceof Date) {\n return new Date(value);\n }\n return value;\n }, zod.date()),\n app: zod.string(),\n action: zod.string(),\n message: zod.string(),\n entity: zod.string(),\n entityId: zod.string(),\n tags: zod.array(zod.string()),\n expiresAt: zod\n .preprocess(value => {\n if (typeof value === \"string\" || value instanceof Date) {\n return new Date(value);\n }\n return undefined;\n }, zod.date().optional().nullish())\n .optional()\n .nullish()\n .transform(value => {\n return value || undefined;\n }),\n content: zod.string()\n});\n\nexport const listAuditLogsSchema = zod.array(auditLogSchema);\n"],"names":["auditLogSchema","zod","value","Date","undefined","listAuditLogsSchema"],"mappings":";AAEO,MAAMA,iBAAiBC,IAAI,MAAM,CAAC;IACrC,IAAIA,IAAI,MAAM;IACd,WAAWA,IAAI,MAAM,CAAC;QAClB,IAAIA,IAAI,MAAM;QACd,aAAaA,IAAI,MAAM,GAAG,QAAQ;QAClC,MAAMA,IAAI,MAAM,GAAG,QAAQ;IAC/B;IACA,WAAWA,IAAI,UAAU,CAACC,CAAAA;QACtB,IAAI,AAAiB,YAAjB,OAAOA,SAAsBA,iBAAiBC,MAC9C,OAAO,IAAIA,KAAKD;QAEpB,OAAOA;IACX,GAAGD,IAAI,IAAI;IACX,KAAKA,IAAI,MAAM;IACf,QAAQA,IAAI,MAAM;IAClB,SAASA,IAAI,MAAM;IACnB,QAAQA,IAAI,MAAM;IAClB,UAAUA,IAAI,MAAM;IACpB,MAAMA,IAAI,KAAK,CAACA,IAAI,MAAM;IAC1B,WAAWA,IAAAA,UACI,CAACC,CAAAA;QACR,IAAI,AAAiB,YAAjB,OAAOA,SAAsBA,iBAAiBC,MAC9C,OAAO,IAAIA,KAAKD;IAGxB,GAAGD,IAAI,IAAI,GAAG,QAAQ,GAAG,OAAO,IAC/B,QAAQ,GACR,OAAO,GACP,SAAS,CAACC,CAAAA,QACAA,SAASE;IAExB,SAASH,IAAI,MAAM;AACvB;AAEO,MAAMI,sBAAsBJ,IAAI,KAAK,CAACD"}
|
|
@@ -12,8 +12,5 @@ export interface UseAuditLogs {
|
|
|
12
12
|
after?: string;
|
|
13
13
|
sorting: DataTableSorting;
|
|
14
14
|
setSorting: OnDataTableSortingChange;
|
|
15
|
-
showingFilters: boolean;
|
|
16
|
-
showFilters: () => void;
|
|
17
|
-
hideFilters: () => void;
|
|
18
15
|
}
|
|
19
16
|
export declare const useAuditLogsList: () => UseAuditLogs;
|
|
@@ -15,13 +15,20 @@ const useAuditLogsList = ()=>{
|
|
|
15
15
|
hasMoreItems: false,
|
|
16
16
|
cursor: null
|
|
17
17
|
});
|
|
18
|
+
const resetPagination = useCallback(()=>{
|
|
19
|
+
setAccumulatedRecords([]);
|
|
20
|
+
setMeta({
|
|
21
|
+
hasMoreItems: false,
|
|
22
|
+
cursor: null
|
|
23
|
+
});
|
|
24
|
+
}, []);
|
|
18
25
|
const setWhere = useCallback((where)=>{
|
|
19
26
|
setVariables((prev)=>({
|
|
20
27
|
...prev,
|
|
21
28
|
where,
|
|
22
29
|
after: void 0
|
|
23
30
|
}));
|
|
24
|
-
|
|
31
|
+
resetPagination();
|
|
25
32
|
}, []);
|
|
26
33
|
const setSort = useCallback((sort)=>{
|
|
27
34
|
setVariables((prev)=>({
|
|
@@ -29,7 +36,7 @@ const useAuditLogsList = ()=>{
|
|
|
29
36
|
sort,
|
|
30
37
|
after: void 0
|
|
31
38
|
}));
|
|
32
|
-
|
|
39
|
+
resetPagination();
|
|
33
40
|
}, []);
|
|
34
41
|
const setAfter = useCallback((after)=>{
|
|
35
42
|
setVariables((prev)=>({
|
|
@@ -43,7 +50,6 @@ const useAuditLogsList = ()=>{
|
|
|
43
50
|
limit
|
|
44
51
|
}));
|
|
45
52
|
}, []);
|
|
46
|
-
const [showingFilters, setShowingFilters] = useState(false);
|
|
47
53
|
const [acoSorting, setAcoSorting] = useState([]);
|
|
48
54
|
useEffect(()=>{
|
|
49
55
|
const sort = acoSorting[0];
|
|
@@ -81,20 +87,13 @@ const useAuditLogsList = ()=>{
|
|
|
81
87
|
records: accumulatedRecords,
|
|
82
88
|
meta,
|
|
83
89
|
listMoreRecords: ()=>{
|
|
84
|
-
setAfter(meta.cursor
|
|
90
|
+
if (!loading && meta.cursor) setAfter(meta.cursor);
|
|
85
91
|
},
|
|
86
92
|
setWhere,
|
|
87
93
|
sorting,
|
|
88
94
|
setSorting: setAcoSorting,
|
|
89
95
|
setLimit,
|
|
90
|
-
isListLoadingMore: loading && !!variables.after
|
|
91
|
-
showingFilters,
|
|
92
|
-
showFilters: ()=>{
|
|
93
|
-
setShowingFilters(true);
|
|
94
|
-
},
|
|
95
|
-
hideFilters: ()=>{
|
|
96
|
-
setShowingFilters(false);
|
|
97
|
-
}
|
|
96
|
+
isListLoadingMore: loading && !!variables.after
|
|
98
97
|
};
|
|
99
98
|
};
|
|
100
99
|
export { useAuditLogsList };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks/useAuditLogsList.js","sources":["../../src/hooks/useAuditLogsList.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useFeature } from \"@webiny/app\";\nimport { ListAuditLogsFeature } from \"~/features/listAuditLogs/index.js\";\nimport type { IListAuditLogsVariablesWhere } from \"~/hooks/graphql.js\";\nimport type { IAuditLog, IAuditLogsMeta } from \"~/types.js\";\nimport type { OnDataTableSortingChange, DataTableSorting } from \"@webiny/admin-ui\";\n\nexport interface UseAuditLogs {\n isListLoading: boolean;\n isListLoadingMore: boolean;\n records: IAuditLog[];\n meta: IAuditLogsMeta;\n listMoreRecords: () => void;\n setWhere: (where: Partial<IListAuditLogsVariablesWhere>) => void;\n setLimit: (limit: number) => void;\n after?: string;\n sorting: DataTableSorting;\n setSorting: OnDataTableSortingChange;\n
|
|
1
|
+
{"version":3,"file":"hooks/useAuditLogsList.js","sources":["../../src/hooks/useAuditLogsList.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useFeature } from \"@webiny/app\";\nimport { ListAuditLogsFeature } from \"~/features/listAuditLogs/index.js\";\nimport type { IListAuditLogsVariablesWhere } from \"~/hooks/graphql.js\";\nimport type { IAuditLog, IAuditLogsMeta } from \"~/types.js\";\nimport type { OnDataTableSortingChange, DataTableSorting } from \"@webiny/admin-ui\";\n\nexport interface UseAuditLogs {\n isListLoading: boolean;\n isListLoadingMore: boolean;\n records: IAuditLog[];\n meta: IAuditLogsMeta;\n listMoreRecords: () => void;\n setWhere: (where: Partial<IListAuditLogsVariablesWhere>) => void;\n setLimit: (limit: number) => void;\n after?: string;\n sorting: DataTableSorting;\n setSorting: OnDataTableSortingChange;\n}\n\ninterface ListVariables {\n where: Record<string, unknown>;\n after: string | undefined;\n sort: \"ASC\" | \"DESC\";\n limit: number;\n}\n\nexport const useAuditLogsList = (): UseAuditLogs => {\n const { useCase } = useFeature(ListAuditLogsFeature);\n\n const [variables, setVariables] = useState<ListVariables>({\n where: {},\n after: undefined,\n sort: \"DESC\",\n limit: 25\n });\n\n const [accumulatedRecords, setAccumulatedRecords] = useState<IAuditLog[]>([]);\n const [loading, setLoading] = useState(true);\n const [meta, setMeta] = useState<IAuditLogsMeta>({\n hasMoreItems: false,\n cursor: null\n });\n\n const resetPagination = useCallback(() => {\n setAccumulatedRecords([]);\n setMeta({ hasMoreItems: false, cursor: null });\n }, []);\n\n const setWhere = useCallback((where: Partial<IListAuditLogsVariablesWhere>) => {\n setVariables(prev => ({ ...prev, where, after: undefined }));\n resetPagination();\n }, []);\n\n const setSort = useCallback((sort: \"ASC\" | \"DESC\") => {\n setVariables(prev => ({ ...prev, sort, after: undefined }));\n resetPagination();\n }, []);\n\n const setAfter = useCallback((after?: string) => {\n setVariables(prev => ({ ...prev, after }));\n }, []);\n\n const setLimit = useCallback((limit: number) => {\n setVariables(prev => ({ ...prev, limit }));\n }, []);\n\n const [acoSorting, setAcoSorting] = useState<DataTableSorting>([]);\n\n useEffect(() => {\n const sort = acoSorting[0];\n if (!sort) {\n return;\n }\n setSort(sort.desc ? \"DESC\" : \"ASC\");\n }, [acoSorting]);\n\n const requestIdRef = useRef(0);\n\n useEffect(() => {\n setLoading(true);\n const requestId = ++requestIdRef.current;\n\n useCase.execute(variables).then(result => {\n if (requestId !== requestIdRef.current) {\n return;\n }\n\n if (variables.after) {\n setAccumulatedRecords(prev => [...prev, ...result.records]);\n } else {\n setAccumulatedRecords(result.records);\n }\n\n setMeta(result.meta);\n setLoading(false);\n });\n }, [variables]);\n\n const sorting = useMemo((): DataTableSorting => {\n return [\n {\n id: \"createdOn\",\n desc: variables.sort === \"DESC\"\n }\n ];\n }, [variables.sort]);\n\n return {\n isListLoading: loading,\n records: accumulatedRecords,\n meta,\n listMoreRecords: () => {\n if (!loading && meta.cursor) {\n setAfter(meta.cursor);\n }\n },\n setWhere,\n sorting,\n setSorting: setAcoSorting,\n setLimit,\n isListLoadingMore: loading && !!variables.after\n };\n};\n"],"names":["useAuditLogsList","useCase","useFeature","ListAuditLogsFeature","variables","setVariables","useState","undefined","accumulatedRecords","setAccumulatedRecords","loading","setLoading","meta","setMeta","resetPagination","useCallback","setWhere","where","prev","setSort","sort","setAfter","after","setLimit","limit","acoSorting","setAcoSorting","useEffect","requestIdRef","useRef","requestId","result","sorting","useMemo"],"mappings":";;;AA2BO,MAAMA,mBAAmB;IAC5B,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAWC;IAE/B,MAAM,CAACC,WAAWC,aAAa,GAAGC,SAAwB;QACtD,OAAO,CAAC;QACR,OAAOC;QACP,MAAM;QACN,OAAO;IACX;IAEA,MAAM,CAACC,oBAAoBC,sBAAsB,GAAGH,SAAsB,EAAE;IAC5E,MAAM,CAACI,SAASC,WAAW,GAAGL,SAAS;IACvC,MAAM,CAACM,MAAMC,QAAQ,GAAGP,SAAyB;QAC7C,cAAc;QACd,QAAQ;IACZ;IAEA,MAAMQ,kBAAkBC,YAAY;QAChCN,sBAAsB,EAAE;QACxBI,QAAQ;YAAE,cAAc;YAAO,QAAQ;QAAK;IAChD,GAAG,EAAE;IAEL,MAAMG,WAAWD,YAAY,CAACE;QAC1BZ,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAED;gBAAO,OAAOV;YAAU;QACzDO;IACJ,GAAG,EAAE;IAEL,MAAMK,UAAUJ,YAAY,CAACK;QACzBf,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEE;gBAAM,OAAOb;YAAU;QACxDO;IACJ,GAAG,EAAE;IAEL,MAAMO,WAAWN,YAAY,CAACO;QAC1BjB,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEI;YAAM;IAC3C,GAAG,EAAE;IAEL,MAAMC,WAAWR,YAAY,CAACS;QAC1BnB,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEM;YAAM;IAC3C,GAAG,EAAE;IAEL,MAAM,CAACC,YAAYC,cAAc,GAAGpB,SAA2B,EAAE;IAEjEqB,UAAU;QACN,MAAMP,OAAOK,UAAU,CAAC,EAAE;QAC1B,IAAI,CAACL,MACD;QAEJD,QAAQC,KAAK,IAAI,GAAG,SAAS;IACjC,GAAG;QAACK;KAAW;IAEf,MAAMG,eAAeC,OAAO;IAE5BF,UAAU;QACNhB,WAAW;QACX,MAAMmB,YAAY,EAAEF,aAAa,OAAO;QAExC3B,QAAQ,OAAO,CAACG,WAAW,IAAI,CAAC2B,CAAAA;YAC5B,IAAID,cAAcF,aAAa,OAAO,EAClC;YAGAxB,UAAU,KAAK,GACfK,sBAAsBS,CAAAA,OAAQ;uBAAIA;uBAASa,OAAO,OAAO;iBAAC,IAE1DtB,sBAAsBsB,OAAO,OAAO;YAGxClB,QAAQkB,OAAO,IAAI;YACnBpB,WAAW;QACf;IACJ,GAAG;QAACP;KAAU;IAEd,MAAM4B,UAAUC,QAAQ,IACb;YACH;gBACI,IAAI;gBACJ,MAAM7B,AAAmB,WAAnBA,UAAU,IAAI;YACxB;SACH,EACF;QAACA,UAAU,IAAI;KAAC;IAEnB,OAAO;QACH,eAAeM;QACf,SAASF;QACTI;QACA,iBAAiB;YACb,IAAI,CAACF,WAAWE,KAAK,MAAM,EACvBS,SAAST,KAAK,MAAM;QAE5B;QACAI;QACAgB;QACA,YAAYN;QACZH;QACA,mBAAmBb,WAAW,CAAC,CAACN,UAAU,KAAK;IACnD;AACJ"}
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import react from "react";
|
|
2
|
-
import { AdminConfig, AdminLayout, HasPermission, RegisterFeature,
|
|
2
|
+
import { AdminConfig, AdminLayout, HasPermission, RegisterFeature, useFeatureFlags, useRouter } from "@webiny/app-admin";
|
|
3
3
|
import { ReactComponent } from "@webiny/icons/manage_search.svg";
|
|
4
4
|
import { LogsModule } from "./views/Logs/LogsModule.js";
|
|
5
5
|
import { SecurityPermission } from "./SecurityPermission.js";
|
|
@@ -8,16 +8,20 @@ import { AuditLogsListWithConfig } from "./config/list/index.js";
|
|
|
8
8
|
import { Routes } from "./routes.js";
|
|
9
9
|
import { AlPermissionsFeature } from "./features/permissions/feature.js";
|
|
10
10
|
import { ListAuditLogsFeature } from "./features/listAuditLogs/index.js";
|
|
11
|
+
import { AuditLogDetailsPresenterFeature } from "./views/Logs/Preview/feature.js";
|
|
12
|
+
import { AiPromptPreviewTabs } from "./views/Logs/Preview/tabs/AiPromptTabs.js";
|
|
11
13
|
const { Menu: Menu, Route: Route } = AdminConfig;
|
|
12
14
|
const AuditLogs = ()=>{
|
|
13
|
-
const
|
|
15
|
+
const featureFlags = useFeatureFlags();
|
|
14
16
|
const router = useRouter();
|
|
15
|
-
if (!
|
|
17
|
+
if (!featureFlags.isEnabled("auditLogs")) return null;
|
|
16
18
|
return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
17
19
|
feature: AlPermissionsFeature
|
|
18
20
|
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
19
21
|
feature: ListAuditLogsFeature
|
|
20
|
-
}), /*#__PURE__*/ react.createElement(
|
|
22
|
+
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
23
|
+
feature: AuditLogDetailsPresenterFeature
|
|
24
|
+
}), /*#__PURE__*/ react.createElement(LogsModule, null), /*#__PURE__*/ react.createElement(SecurityPermission, null), /*#__PURE__*/ react.createElement(AiPromptPreviewTabs, null), /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(HasPermission, {
|
|
21
25
|
any: [
|
|
22
26
|
"al.*"
|
|
23
27
|
]
|
|
@@ -36,7 +40,10 @@ const AuditLogs = ()=>{
|
|
|
36
40
|
route: Routes.AuditLogsList,
|
|
37
41
|
element: /*#__PURE__*/ react.createElement(AdminLayout, {
|
|
38
42
|
title: "Audit Logs - Logs"
|
|
39
|
-
}, /*#__PURE__*/ react.createElement(
|
|
43
|
+
}, /*#__PURE__*/ react.createElement(AdminConfig.Breadcrumb, {
|
|
44
|
+
name: "auditLogs",
|
|
45
|
+
label: "Audit Logs"
|
|
46
|
+
}), /*#__PURE__*/ react.createElement(AuditLogsListWithConfig, null, /*#__PURE__*/ react.createElement(LogsView, null)))
|
|
40
47
|
}))));
|
|
41
48
|
};
|
|
42
49
|
export { AuditLogs };
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { ReactComponent as Icon } from \"@webiny/icons/manage_search.svg\";\nimport { AdminConfig, AdminLayout, RegisterFeature,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { ReactComponent as Icon } from \"@webiny/icons/manage_search.svg\";\nimport { AdminConfig, AdminLayout, RegisterFeature, useFeatureFlags } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-admin\";\nimport { LogsModule } from \"~/views/Logs/LogsModule.js\";\nimport { SecurityPermission } from \"~/SecurityPermission.js\";\nimport { LogsView } from \"~/views/Logs/LogsView.js\";\nimport { AuditLogsListWithConfig } from \"~/config/list/index.js\";\nimport { Routes } from \"~/routes.js\";\nimport { AlPermissionsFeature } from \"~/features/permissions/feature.js\";\nimport { ListAuditLogsFeature } from \"~/features/listAuditLogs/index.js\";\nimport { AuditLogDetailsPresenterFeature } from \"~/views/Logs/Preview/feature.js\";\nimport { AiPromptPreviewTabs } from \"~/views/Logs/Preview/tabs/AiPromptTabs.js\";\n\nconst { Menu, Route } = AdminConfig;\n\nexport const AuditLogs = () => {\n const featureFlags = useFeatureFlags();\n const router = useRouter();\n\n if (!featureFlags.isEnabled(\"auditLogs\")) {\n return null;\n }\n\n return (\n <>\n <RegisterFeature feature={AlPermissionsFeature} />\n <RegisterFeature feature={ListAuditLogsFeature} />\n <RegisterFeature feature={AuditLogDetailsPresenterFeature} />\n <LogsModule />\n <SecurityPermission />\n <AiPromptPreviewTabs />\n <AdminConfig>\n <HasPermission any={[\"al.*\"]}>\n <Menu\n name=\"auditLogs\"\n pinnable\n element={\n <Menu.Link\n text={\"Audit Logs\"}\n icon={<Menu.Link.Icon element={<Icon />} label={\"Audit Logs\"} />}\n to={router.getLink(Routes.AuditLogsList)}\n />\n }\n />\n <Route\n route={Routes.AuditLogsList}\n element={\n <AdminLayout title={\"Audit Logs - Logs\"}>\n <AdminConfig.Breadcrumb name={\"auditLogs\"} label={\"Audit Logs\"} />\n <AuditLogsListWithConfig>\n <LogsView />\n </AuditLogsListWithConfig>\n </AdminLayout>\n }\n />\n </HasPermission>\n </AdminConfig>\n </>\n );\n};\n"],"names":["Menu","Route","AdminConfig","AuditLogs","featureFlags","useFeatureFlags","router","useRouter","RegisterFeature","AlPermissionsFeature","ListAuditLogsFeature","AuditLogDetailsPresenterFeature","LogsModule","SecurityPermission","AiPromptPreviewTabs","HasPermission","Icon","Routes","AdminLayout","AuditLogsListWithConfig","LogsView"],"mappings":";;;;;;;;;;;;AAeA,MAAM,EAAEA,MAAAA,IAAI,EAAEC,OAAAA,KAAK,EAAE,GAAGC;AAEjB,MAAMC,YAAY;IACrB,MAAMC,eAAeC;IACrB,MAAMC,SAASC;IAEf,IAAI,CAACH,aAAa,SAAS,CAAC,cACxB,OAAO;IAGX,OAAO,WAAP,GACI,wDACI,oBAACI,iBAAeA;QAAC,SAASC;sBAC1B,oBAACD,iBAAeA;QAAC,SAASE;sBAC1B,oBAACF,iBAAeA;QAAC,SAASG;sBAC1B,oBAACC,YAAUA,OAAAA,WAAAA,GACX,oBAACC,oBAAkBA,OAAAA,WAAAA,GACnB,oBAACC,qBAAmBA,OAAAA,WAAAA,GACpB,oBAACZ,aAAWA,MAAAA,WAAAA,GACR,oBAACa,eAAaA;QAAC,KAAK;YAAC;SAAO;qBACxB,oBAACf,MAAIA;QACD,MAAK;QACL;QACA,uBACI,oBAACA,KAAK,IAAI;YACN,MAAM;YACN,oBAAM,oBAACA,KAAK,IAAI,CAAC,IAAI;gBAAC,uBAAS,oBAACgB,gBAAIA;gBAAK,OAAO;;YAChD,IAAIV,OAAO,OAAO,CAACW,OAAO,aAAa;;sBAInD,oBAAChB,OAAKA;QACF,OAAOgB,OAAO,aAAa;QAC3B,uBACI,oBAACC,aAAWA;YAAC,OAAO;yBAChB,oBAAChB,YAAY,UAAU;YAAC,MAAM;YAAa,OAAO;0BAClD,oBAACiB,yBAAuBA,MAAAA,WAAAA,GACpB,oBAACC,UAAQA;;AAS7C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-audit-logs",
|
|
3
|
-
"version": "6.6.0-alpha.
|
|
3
|
+
"version": "6.6.0-alpha.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -13,20 +13,18 @@
|
|
|
13
13
|
"description": "",
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@
|
|
17
|
-
"@
|
|
18
|
-
"@
|
|
19
|
-
"@webiny/
|
|
20
|
-
"@webiny/
|
|
21
|
-
"@webiny/
|
|
22
|
-
"@webiny/
|
|
23
|
-
"@webiny/
|
|
24
|
-
"@webiny/
|
|
25
|
-
"@webiny/icons": "6.6.0-alpha.0",
|
|
26
|
-
"@webiny/react-composition": "6.6.0-alpha.0",
|
|
27
|
-
"@webiny/react-properties": "6.6.0-alpha.0",
|
|
16
|
+
"@webiny/admin-ui": "6.6.0-alpha.2",
|
|
17
|
+
"@webiny/app": "6.6.0-alpha.2",
|
|
18
|
+
"@webiny/app-admin": "6.6.0-alpha.2",
|
|
19
|
+
"@webiny/common-audit-logs": "6.6.0-alpha.2",
|
|
20
|
+
"@webiny/feature": "6.6.0-alpha.2",
|
|
21
|
+
"@webiny/form": "6.6.0-alpha.2",
|
|
22
|
+
"@webiny/icons": "6.6.0-alpha.2",
|
|
23
|
+
"@webiny/react-composition": "6.6.0-alpha.2",
|
|
24
|
+
"@webiny/react-properties": "6.6.0-alpha.2",
|
|
28
25
|
"date-fns": "4.4.0",
|
|
29
26
|
"lodash": "4.18.1",
|
|
27
|
+
"mobx": "7.0.3",
|
|
30
28
|
"zod": "4.4.3"
|
|
31
29
|
},
|
|
32
30
|
"peerDependencies": {
|
|
@@ -34,8 +32,8 @@
|
|
|
34
32
|
},
|
|
35
33
|
"devDependencies": {
|
|
36
34
|
"@types/react": "18.3.31",
|
|
37
|
-
"@webiny/build-tools": "6.6.0-alpha.
|
|
38
|
-
"execa": "10.0.
|
|
35
|
+
"@webiny/build-tools": "6.6.0-alpha.2",
|
|
36
|
+
"execa": "10.0.1",
|
|
39
37
|
"rimraf": "6.1.3",
|
|
40
38
|
"typescript": "7.0.2"
|
|
41
39
|
},
|
package/types.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export interface IAuditLogRaw {
|
|
|
22
22
|
createdBy: IAuditLogCreatedByRaw;
|
|
23
23
|
createdOn: Date;
|
|
24
24
|
app: string;
|
|
25
|
-
action:
|
|
25
|
+
action: string;
|
|
26
26
|
message: string;
|
|
27
27
|
entity: string;
|
|
28
28
|
entityId: string;
|
|
@@ -36,7 +36,7 @@ export interface IAuditLogEntity {
|
|
|
36
36
|
link?: string;
|
|
37
37
|
}
|
|
38
38
|
export interface IAuditLogAction {
|
|
39
|
-
value:
|
|
39
|
+
value: string;
|
|
40
40
|
label: string;
|
|
41
41
|
}
|
|
42
42
|
export interface IAuditLog extends Omit<IAuditLogRaw, "entity" | "action" | "createdBy"> {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const FilterByAction: () => React.JSX.Element
|
|
2
|
+
export declare const FilterByAction: () => React.JSX.Element;
|
|
@@ -31,12 +31,14 @@ const FilterByAction = ()=>{
|
|
|
31
31
|
}, [
|
|
32
32
|
data
|
|
33
33
|
]);
|
|
34
|
-
|
|
34
|
+
const disabled = !data.app || !data.entity;
|
|
35
35
|
return /*#__PURE__*/ react.createElement(Select, {
|
|
36
36
|
...bind,
|
|
37
|
+
label: "Action",
|
|
37
38
|
size: "md",
|
|
38
|
-
placeholder: "
|
|
39
|
-
options: options
|
|
39
|
+
placeholder: "All actions",
|
|
40
|
+
options: disabled ? [] : options,
|
|
41
|
+
disabled: disabled
|
|
40
42
|
});
|
|
41
43
|
};
|
|
42
44
|
export { FilterByAction };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views/Logs/Filters/FilterByAction.js","sources":["../../../../src/views/Logs/Filters/FilterByAction.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { useBind, useForm } from \"@webiny/form\";\nimport { Select } from \"@webiny/admin-ui\";\nimport { apps as auditLogsApps } from \"@webiny/common-audit-logs\";\nimport type { IFilterFormData } from \"~/views/Logs/Filters/types.js\";\n\nconst getValidFilterValue = (value: string): string | undefined => {\n if (value === \"all\" || value === \"\") {\n return undefined;\n }\n return value;\n};\n\nexport const FilterByAction = () => {\n const { data } = useForm<IFilterFormData>();\n const bind = useBind({\n name: \"action\",\n beforeChange(value, cb) {\n cb(getValidFilterValue(value));\n }\n });\n\n const options = useMemo(() => {\n if (!data.app) {\n return [];\n }\n\n const entities = auditLogsApps.find(app => app.app === data.app)?.entities || [];\n const actions = entities.find(entity => entity.type === data.entity)?.actions || [];\n\n return [\n { label: \"All\", value: \"all\" },\n ...actions.map(entity => ({ label: entity.displayName, value: entity.type }))\n ];\n }, [data]);\n\n
|
|
1
|
+
{"version":3,"file":"views/Logs/Filters/FilterByAction.js","sources":["../../../../src/views/Logs/Filters/FilterByAction.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { useBind, useForm } from \"@webiny/form\";\nimport { Select } from \"@webiny/admin-ui\";\nimport { apps as auditLogsApps } from \"@webiny/common-audit-logs\";\nimport type { IFilterFormData } from \"~/views/Logs/Filters/types.js\";\n\nconst getValidFilterValue = (value: string): string | undefined => {\n if (value === \"all\" || value === \"\") {\n return undefined;\n }\n return value;\n};\n\nexport const FilterByAction = () => {\n const { data } = useForm<IFilterFormData>();\n const bind = useBind({\n name: \"action\",\n beforeChange(value, cb) {\n cb(getValidFilterValue(value));\n }\n });\n\n const options = useMemo(() => {\n if (!data.app) {\n return [];\n }\n\n const entities = auditLogsApps.find(app => app.app === data.app)?.entities || [];\n const actions = entities.find(entity => entity.type === data.entity)?.actions || [];\n\n return [\n { label: \"All\", value: \"all\" },\n ...actions.map(entity => ({ label: entity.displayName, value: entity.type }))\n ];\n }, [data]);\n\n const disabled = !data.app || !data.entity;\n\n return (\n <Select\n {...bind}\n label={\"Action\"}\n size={\"md\"}\n placeholder={\"All actions\"}\n options={disabled ? [] : options}\n disabled={disabled}\n />\n );\n};\n"],"names":["getValidFilterValue","value","FilterByAction","data","useForm","bind","useBind","cb","options","useMemo","entities","auditLogsApps","app","actions","entity","disabled","Select"],"mappings":";;;;AAMA,MAAMA,sBAAsB,CAACC;IACzB,IAAIA,AAAU,UAAVA,SAAmBA,AAAU,OAAVA,OACnB;IAEJ,OAAOA;AACX;AAEO,MAAMC,iBAAiB;IAC1B,MAAM,EAAEC,IAAI,EAAE,GAAGC;IACjB,MAAMC,OAAOC,QAAQ;QACjB,MAAM;QACN,cAAaL,KAAK,EAAEM,EAAE;YAClBA,GAAGP,oBAAoBC;QAC3B;IACJ;IAEA,MAAMO,UAAUC,QAAQ;QACpB,IAAI,CAACN,KAAK,GAAG,EACT,OAAO,EAAE;QAGb,MAAMO,WAAWC,KAAc,IAAI,CAACC,CAAAA,MAAOA,IAAI,GAAG,KAAKT,KAAK,GAAG,GAAG,YAAY,EAAE;QAChF,MAAMU,UAAUH,SAAS,IAAI,CAACI,CAAAA,SAAUA,OAAO,IAAI,KAAKX,KAAK,MAAM,GAAG,WAAW,EAAE;QAEnF,OAAO;YACH;gBAAE,OAAO;gBAAO,OAAO;YAAM;eAC1BU,QAAQ,GAAG,CAACC,CAAAA,SAAW;oBAAE,OAAOA,OAAO,WAAW;oBAAE,OAAOA,OAAO,IAAI;gBAAC;SAC7E;IACL,GAAG;QAACX;KAAK;IAET,MAAMY,WAAW,CAACZ,KAAK,GAAG,IAAI,CAACA,KAAK,MAAM;IAE1C,OAAO,WAAP,GACI,oBAACa,QAAMA;QACF,GAAGX,IAAI;QACR,OAAO;QACP,MAAM;QACN,aAAa;QACb,SAASU,WAAW,EAAE,GAAGP;QACzB,UAAUO;;AAGtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views/Logs/Filters/FilterByApp.js","sources":["../../../../src/views/Logs/Filters/FilterByApp.tsx"],"sourcesContent":["import React from \"react\";\nimport { useBind, useForm } from \"@webiny/form\";\nimport { Select } from \"@webiny/admin-ui\";\nimport { apps as auditLogsApps } from \"@webiny/common-audit-logs\";\nimport type { IFilterFormData } from \"~/views/Logs/Filters/types.js\";\n\nconst getValidFilterValue = (value: string): string | undefined => {\n if (value === \"all\" || value === \"\") {\n return undefined;\n }\n return value;\n};\n\nexport const FilterByApp = () => {\n const { setValue } = useForm<IFilterFormData>();\n const bind = useBind({\n name: \"app\",\n beforeChange(value, cb) {\n setValue(\"entity\", undefined);\n setValue(\"action\", undefined);\n cb(getValidFilterValue(value));\n }\n });\n\n return (\n <Select\n {...bind}\n size={\"md\"}\n placeholder={\"
|
|
1
|
+
{"version":3,"file":"views/Logs/Filters/FilterByApp.js","sources":["../../../../src/views/Logs/Filters/FilterByApp.tsx"],"sourcesContent":["import React from \"react\";\nimport { useBind, useForm } from \"@webiny/form\";\nimport { Select } from \"@webiny/admin-ui\";\nimport { apps as auditLogsApps } from \"@webiny/common-audit-logs\";\nimport type { IFilterFormData } from \"~/views/Logs/Filters/types.js\";\n\nconst getValidFilterValue = (value: string): string | undefined => {\n if (value === \"all\" || value === \"\") {\n return undefined;\n }\n return value;\n};\n\nexport const FilterByApp = () => {\n const { setValue } = useForm<IFilterFormData>();\n const bind = useBind({\n name: \"app\",\n beforeChange(value, cb) {\n setValue(\"entity\", undefined);\n setValue(\"action\", undefined);\n cb(getValidFilterValue(value));\n }\n });\n\n return (\n <Select\n {...bind}\n label={\"Application\"}\n size={\"md\"}\n placeholder={\"All applications\"}\n options={[\n { label: \"All\", value: \"all\" },\n ...auditLogsApps.map(app => ({ label: app.displayName, value: app.app }))\n ]}\n />\n );\n};\n"],"names":["getValidFilterValue","value","FilterByApp","setValue","useForm","bind","useBind","cb","undefined","Select","auditLogsApps","app"],"mappings":";;;;AAMA,MAAMA,sBAAsB,CAACC;IACzB,IAAIA,AAAU,UAAVA,SAAmBA,AAAU,OAAVA,OACnB;IAEJ,OAAOA;AACX;AAEO,MAAMC,cAAc;IACvB,MAAM,EAAEC,QAAQ,EAAE,GAAGC;IACrB,MAAMC,OAAOC,QAAQ;QACjB,MAAM;QACN,cAAaL,KAAK,EAAEM,EAAE;YAClBJ,SAAS,UAAUK;YACnBL,SAAS,UAAUK;YACnBD,GAAGP,oBAAoBC;QAC3B;IACJ;IAEA,OAAO,WAAP,GACI,oBAACQ,QAAMA;QACF,GAAGJ,IAAI;QACR,OAAO;QACP,MAAM;QACN,aAAa;QACb,SAAS;YACL;gBAAE,OAAO;gBAAO,OAAO;YAAM;eAC1BK,KAAAA,GAAiB,CAACC,CAAAA,MAAQ;oBAAE,OAAOA,IAAI,WAAW;oBAAE,OAAOA,IAAI,GAAG;gBAAC;SACzE;;AAGb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views/Logs/Filters/FilterByCreatedBy.js","sources":["../../../../src/views/Logs/Filters/FilterByCreatedBy.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\";\nimport { useContainer } from \"@webiny/app\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\nimport { useBind } from \"@webiny/form\";\nimport { Select } from \"@webiny/admin-ui\";\nimport { LIST_USERS } from \"~/graphql.js\";\nimport type { User } from \"~/types.js\";\n\ninterface ListUsersResponse {\n adminUsers: {\n users: {\n data: User[];\n };\n };\n}\n\nconst getValidFilterValue = (value: string): string | undefined => {\n if (value === \"all\" || value === \"\") {\n return undefined;\n }\n return value;\n};\n\nexport const FilterByCreatedBy = () => {\n const container = useContainer();\n const client = container.resolve(MainGraphQLClient);\n const [users, setUsers] = useState<User[]>([]);\n\n useEffect(() => {\n client.execute<ListUsersResponse>({ query: LIST_USERS }).then(response => {\n setUsers(response.adminUsers.users.data || []);\n });\n }, []);\n\n const bind = useBind({\n name: \"createdBy\",\n beforeChange(value, cb) {\n cb(getValidFilterValue(value));\n }\n });\n\n const options = useMemo(() => {\n return [\n { label: \"All\", value: \"all\" },\n ...users.map(user => ({ label: `${user.firstName} ${user.lastName}`, value: user.id }))\n ];\n }, [users]);\n\n return <Select
|
|
1
|
+
{"version":3,"file":"views/Logs/Filters/FilterByCreatedBy.js","sources":["../../../../src/views/Logs/Filters/FilterByCreatedBy.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\";\nimport { useContainer } from \"@webiny/app\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\nimport { useBind } from \"@webiny/form\";\nimport { Select } from \"@webiny/admin-ui\";\nimport { LIST_USERS } from \"~/graphql.js\";\nimport type { User } from \"~/types.js\";\n\ninterface ListUsersResponse {\n adminUsers: {\n users: {\n data: User[];\n };\n };\n}\n\nconst getValidFilterValue = (value: string): string | undefined => {\n if (value === \"all\" || value === \"\") {\n return undefined;\n }\n return value;\n};\n\nexport const FilterByCreatedBy = () => {\n const container = useContainer();\n const client = container.resolve(MainGraphQLClient);\n const [users, setUsers] = useState<User[]>([]);\n\n useEffect(() => {\n client.execute<ListUsersResponse>({ query: LIST_USERS }).then(response => {\n setUsers(response.adminUsers.users.data || []);\n });\n }, []);\n\n const bind = useBind({\n name: \"createdBy\",\n beforeChange(value, cb) {\n cb(getValidFilterValue(value));\n }\n });\n\n const options = useMemo(() => {\n return [\n { label: \"All\", value: \"all\" },\n ...users.map(user => ({ label: `${user.firstName} ${user.lastName}`, value: user.id }))\n ];\n }, [users]);\n\n return (\n <Select\n {...bind}\n label={\"Initiator\"}\n size={\"md\"}\n placeholder={\"Anyone\"}\n options={options}\n />\n );\n};\n"],"names":["getValidFilterValue","value","FilterByCreatedBy","container","useContainer","client","MainGraphQLClient","users","setUsers","useState","useEffect","LIST_USERS","response","bind","useBind","cb","options","useMemo","user","Select"],"mappings":";;;;;;AAgBA,MAAMA,sBAAsB,CAACC;IACzB,IAAIA,AAAU,UAAVA,SAAmBA,AAAU,OAAVA,OACnB;IAEJ,OAAOA;AACX;AAEO,MAAMC,oBAAoB;IAC7B,MAAMC,YAAYC;IAClB,MAAMC,SAASF,UAAU,OAAO,CAACG;IACjC,MAAM,CAACC,OAAOC,SAAS,GAAGC,SAAiB,EAAE;IAE7CC,UAAU;QACNL,OAAO,OAAO,CAAoB;YAAE,OAAOM;QAAW,GAAG,IAAI,CAACC,CAAAA;YAC1DJ,SAASI,SAAS,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;QACjD;IACJ,GAAG,EAAE;IAEL,MAAMC,OAAOC,QAAQ;QACjB,MAAM;QACN,cAAab,KAAK,EAAEc,EAAE;YAClBA,GAAGf,oBAAoBC;QAC3B;IACJ;IAEA,MAAMe,UAAUC,QAAQ,IACb;YACH;gBAAE,OAAO;gBAAO,OAAO;YAAM;eAC1BV,MAAM,GAAG,CAACW,CAAAA,OAAS;oBAAE,OAAO,GAAGA,KAAK,SAAS,CAAC,CAAC,EAAEA,KAAK,QAAQ,EAAE;oBAAE,OAAOA,KAAK,EAAE;gBAAC;SACvF,EACF;QAACX;KAAM;IAEV,OAAO,WAAP,GACI,oBAACY,QAAMA;QACF,GAAGN,IAAI;QACR,OAAO;QACP,MAAM;QACN,aAAa;QACb,SAASG;;AAGrB"}
|