@webiny/app-audit-logs 0.0.0-unstable.06b2ede40f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/components/Text.d.ts +4 -0
- package/components/Text.js +25 -0
- package/components/Text.js.map +1 -0
- package/config/list/AuditLogsListConfig.d.ts +42 -0
- package/config/list/AuditLogsListConfig.js +21 -0
- package/config/list/AuditLogsListConfig.js.map +1 -0
- package/config/list/Browser/Filter.d.ts +39 -0
- package/config/list/Browser/Filter.js +44 -0
- package/config/list/Browser/Filter.js.map +1 -0
- package/config/list/Browser/FiltersToWhere.d.ts +7 -0
- package/config/list/Browser/FiltersToWhere.js +16 -0
- package/config/list/Browser/FiltersToWhere.js.map +1 -0
- package/config/list/Browser/index.d.ts +39 -0
- package/config/list/Browser/index.js +8 -0
- package/config/list/Browser/index.js.map +1 -0
- package/config/list/index.d.ts +1 -0
- package/config/list/index.js +3 -0
- package/config/list/index.js.map +1 -0
- package/constants/index.d.ts +1 -0
- package/constants/index.js +3 -0
- package/constants/index.js.map +1 -0
- package/graphql.d.ts +1 -0
- package/graphql.js +27 -0
- package/graphql.js.map +1 -0
- package/hooks/index.d.ts +1 -0
- package/hooks/index.js +3 -0
- package/hooks/index.js.map +1 -0
- package/hooks/useAuditLogsList.d.ts +21 -0
- package/hooks/useAuditLogsList.js +105 -0
- package/hooks/useAuditLogsList.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.js +52 -0
- package/index.js.map +1 -0
- package/package.json +51 -0
- package/plugins/permissionRenderer/AuditLogsPermissions.d.ts +8 -0
- package/plugins/permissionRenderer/AuditLogsPermissions.js +100 -0
- package/plugins/permissionRenderer/AuditLogsPermissions.js.map +1 -0
- package/plugins/permissionRenderer/index.d.ts +1 -0
- package/plugins/permissionRenderer/index.js +32 -0
- package/plugins/permissionRenderer/index.js.map +1 -0
- package/types.d.ts +30 -0
- package/types.js +14 -0
- package/types.js.map +1 -0
- package/utils/transformCmsContentEntriesToRecordEntries.d.ts +25 -0
- package/utils/transformCmsContentEntriesToRecordEntries.js +36 -0
- package/utils/transformCmsContentEntriesToRecordEntries.js.map +1 -0
- package/views/Logs/Filters/FilterByAction.d.ts +2 -0
- package/views/Logs/Filters/FilterByAction.js +47 -0
- package/views/Logs/Filters/FilterByAction.js.map +1 -0
- package/views/Logs/Filters/FilterByApp.d.ts +2 -0
- package/views/Logs/Filters/FilterByApp.js +36 -0
- package/views/Logs/Filters/FilterByApp.js.map +1 -0
- package/views/Logs/Filters/FilterByEntity.d.ts +2 -0
- package/views/Logs/Filters/FilterByEntity.js +47 -0
- package/views/Logs/Filters/FilterByEntity.js.map +1 -0
- package/views/Logs/Filters/FilterByInitiator.d.ts +2 -0
- package/views/Logs/Filters/FilterByInitiator.js +39 -0
- package/views/Logs/Filters/FilterByInitiator.js.map +1 -0
- package/views/Logs/Filters/FilterByTimestamp.d.ts +2 -0
- package/views/Logs/Filters/FilterByTimestamp.js +40 -0
- package/views/Logs/Filters/FilterByTimestamp.js.map +1 -0
- package/views/Logs/Filters/Filters.d.ts +8 -0
- package/views/Logs/Filters/Filters.js +32 -0
- package/views/Logs/Filters/Filters.js.map +1 -0
- package/views/Logs/Filters/index.d.ts +6 -0
- package/views/Logs/Filters/index.js +8 -0
- package/views/Logs/Filters/index.js.map +1 -0
- package/views/Logs/Filters/styled.d.ts +5 -0
- package/views/Logs/Filters/styled.js +18 -0
- package/views/Logs/Filters/styled.js.map +1 -0
- package/views/Logs/Header/ButtonFilters/ButtonFilters.d.ts +8 -0
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js +48 -0
- package/views/Logs/Header/ButtonFilters/ButtonFilters.js.map +1 -0
- package/views/Logs/Header/ButtonFilters/index.d.ts +1 -0
- package/views/Logs/Header/ButtonFilters/index.js +3 -0
- package/views/Logs/Header/ButtonFilters/index.js.map +1 -0
- package/views/Logs/Header/Header.d.ts +11 -0
- package/views/Logs/Header/Header.js +79 -0
- package/views/Logs/Header/Header.js.map +1 -0
- package/views/Logs/Header/index.d.ts +1 -0
- package/views/Logs/Header/index.js +3 -0
- package/views/Logs/Header/index.js.map +1 -0
- package/views/Logs/LoadMoreButton/LoadMoreButton.d.ts +9 -0
- package/views/Logs/LoadMoreButton/LoadMoreButton.js +23 -0
- package/views/Logs/LoadMoreButton/LoadMoreButton.js.map +1 -0
- package/views/Logs/LoadMoreButton/index.d.ts +1 -0
- package/views/Logs/LoadMoreButton/index.js +3 -0
- package/views/Logs/LoadMoreButton/index.js.map +1 -0
- package/views/Logs/LoadMoreButton/styled.d.ts +5 -0
- package/views/Logs/LoadMoreButton/styled.js +18 -0
- package/views/Logs/LoadMoreButton/styled.js.map +1 -0
- package/views/Logs/LoadingMore/index.d.ts +2 -0
- package/views/Logs/LoadingMore/index.js +16 -0
- package/views/Logs/LoadingMore/index.js.map +1 -0
- package/views/Logs/LoadingMore/styled.d.ts +9 -0
- package/views/Logs/LoadingMore/styled.js +32 -0
- package/views/Logs/LoadingMore/styled.js.map +1 -0
- package/views/Logs/Logs.d.ts +3 -0
- package/views/Logs/Logs.js +84 -0
- package/views/Logs/Logs.js.map +1 -0
- package/views/Logs/LogsModule.d.ts +2 -0
- package/views/Logs/LogsModule.js +26 -0
- package/views/Logs/LogsModule.js.map +1 -0
- package/views/Logs/Preview/Preview.d.ts +9 -0
- package/views/Logs/Preview/Preview.js +90 -0
- package/views/Logs/Preview/Preview.js.map +1 -0
- package/views/Logs/Preview/index.d.ts +1 -0
- package/views/Logs/Preview/index.js +3 -0
- package/views/Logs/Preview/index.js.map +1 -0
- package/views/Logs/Preview/styled.d.ts +6 -0
- package/views/Logs/Preview/styled.js +25 -0
- package/views/Logs/Preview/styled.js.map +1 -0
- package/views/Logs/Table/Table.d.ts +25 -0
- package/views/Logs/Table/Table.js +130 -0
- package/views/Logs/Table/Table.js.map +1 -0
- package/views/Logs/Table/index.d.ts +1 -0
- package/views/Logs/Table/index.js +3 -0
- package/views/Logs/Table/index.js.map +1 -0
- package/views/Logs/Table/styled.d.ts +17 -0
- package/views/Logs/Table/styled.js +81 -0
- package/views/Logs/Table/styled.js.map +1 -0
- package/views/Logs/styled.d.ts +9 -0
- package/views/Logs/styled.js +32 -0
- package/views/Logs/styled.js.map +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Webiny
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# `@webiny/app-audit-logs`
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import _styled from "@emotion/styled/base";
|
|
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)."; }
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { Typography as BaseTypography } from "@webiny/ui/Typography";
|
|
5
|
+
const Typography = props => {
|
|
6
|
+
return /*#__PURE__*/React.createElement(BaseTypography, Object.assign({
|
|
7
|
+
tag: "span"
|
|
8
|
+
}, props));
|
|
9
|
+
};
|
|
10
|
+
export const Text = /*#__PURE__*/_styled(Typography, process.env.NODE_ENV === "production" ? {
|
|
11
|
+
target: "e5vot4i0"
|
|
12
|
+
} : {
|
|
13
|
+
target: "e5vot4i0",
|
|
14
|
+
label: "Text"
|
|
15
|
+
})(process.env.NODE_ENV === "production" ? {
|
|
16
|
+
name: "l8l8b8",
|
|
17
|
+
styles: "white-space:nowrap;overflow:hidden;text-overflow:ellipsis"
|
|
18
|
+
} : {
|
|
19
|
+
name: "l8l8b8",
|
|
20
|
+
styles: "white-space:nowrap;overflow:hidden;text-overflow:ellipsis",
|
|
21
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRleHQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNzQyIsImZpbGUiOiJUZXh0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHR5cGUgeyBUeXBvZ3JhcGh5UHJvcHMgfSBmcm9tIFwiQHdlYmlueS91aS9UeXBvZ3JhcGh5XCI7XG5pbXBvcnQgeyBUeXBvZ3JhcGh5IGFzIEJhc2VUeXBvZ3JhcGh5IH0gZnJvbSBcIkB3ZWJpbnkvdWkvVHlwb2dyYXBoeVwiO1xuXG5jb25zdCBUeXBvZ3JhcGh5ID0gKHByb3BzOiBUeXBvZ3JhcGh5UHJvcHMpID0+IHtcbiAgICByZXR1cm4gPEJhc2VUeXBvZ3JhcGh5IHRhZz17XCJzcGFuXCJ9IHsuLi5wcm9wc30gLz47XG59O1xuXG5leHBvcnQgY29uc3QgVGV4dCA9IHN0eWxlZChUeXBvZ3JhcGh5KWBcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5gO1xuIl19 */",
|
|
22
|
+
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=Text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Typography","BaseTypography","props","createElement","Object","assign","tag","Text","_styled","process","env","NODE_ENV","target","label","name","styles","map","toString","_EMOTION_STRINGIFIED_CSS_ERROR__"],"sources":["Text.tsx"],"sourcesContent":["import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport type { TypographyProps } from \"@webiny/ui/Typography\";\nimport { Typography as BaseTypography } from \"@webiny/ui/Typography\";\n\nconst Typography = (props: TypographyProps) => {\n return <BaseTypography tag={\"span\"} {...props} />;\n};\n\nexport const Text = styled(Typography)`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AAGzB,SAASC,UAAU,IAAIC,cAAc,QAAQ,uBAAuB;AAEpE,MAAMD,UAAU,GAAIE,KAAsB,IAAK;EAC3C,oBAAOH,KAAA,CAAAI,aAAA,CAACF,cAAc,EAAAG,MAAA,CAAAC,MAAA;IAACC,GAAG,EAAE;EAAO,GAAKJ,KAAK,CAAG,CAAC;AACrD,CAAC;AAED,OAAO,MAAMK,IAAI,gBAAGC,OAAA,CAAOR,UAAU,EAAAS,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,GAAA;EAAAC,QAAA,EAAAC;AAAA,EAIrC","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const AuditLogsListConfig: (({ priority, children }: import("@webiny/react-properties").ConfigProps) => import("react").JSX.Element) & {
|
|
3
|
+
Browser: {
|
|
4
|
+
Filter: (({ name, element, after, before, remove }: import("./Browser/Filter").FilterProps) => import("react").JSX.Element) & {
|
|
5
|
+
original: ({ name, element, after, before, remove }: import("./Browser/Filter").FilterProps) => import("react").JSX.Element;
|
|
6
|
+
originalName: string;
|
|
7
|
+
displayName: string;
|
|
8
|
+
} & {
|
|
9
|
+
original: (({ name, element, after, before, remove }: import("./Browser/Filter").FilterProps) => import("react").JSX.Element) & {
|
|
10
|
+
original: ({ name, element, after, before, remove }: import("./Browser/Filter").FilterProps) => import("react").JSX.Element;
|
|
11
|
+
originalName: string;
|
|
12
|
+
displayName: string;
|
|
13
|
+
};
|
|
14
|
+
originalName: string;
|
|
15
|
+
displayName: string;
|
|
16
|
+
} & {
|
|
17
|
+
createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<(({ name, element, after, before, remove }: import("./Browser/Filter").FilterProps) => import("react").JSX.Element) & {
|
|
18
|
+
original: ({ name, element, after, before, remove }: import("./Browser/Filter").FilterProps) => import("react").JSX.Element;
|
|
19
|
+
originalName: string;
|
|
20
|
+
displayName: string;
|
|
21
|
+
}>) => (props: unknown) => import("react").JSX.Element;
|
|
22
|
+
} & {
|
|
23
|
+
createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<(({ name, element, after, before, remove }: import("./Browser/Filter").FilterProps) => import("react").JSX.Element) & {
|
|
24
|
+
original: ({ name, element, after, before, remove }: import("./Browser/Filter").FilterProps) => import("react").JSX.Element;
|
|
25
|
+
originalName: string;
|
|
26
|
+
displayName: string;
|
|
27
|
+
}>) => (props: {
|
|
28
|
+
name: string;
|
|
29
|
+
}) => import("react").JSX.Element;
|
|
30
|
+
};
|
|
31
|
+
FiltersToWhere: ({ converter }: {
|
|
32
|
+
converter: import("./Browser/FiltersToWhere").FiltersToWhereConverter;
|
|
33
|
+
}) => import("react").JSX.Element;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export declare const AuditLogsListWithConfig: ({ onProperties, children }: import("@webiny/react-properties").WithConfigProps) => import("react").JSX.Element;
|
|
37
|
+
export declare function useAuditLogsListConfig(): {
|
|
38
|
+
browser: {
|
|
39
|
+
filters: import("./Browser/Filter").FilterConfig[];
|
|
40
|
+
filtersToWhere: import("./Browser/FiltersToWhere").FiltersToWhereConverter[];
|
|
41
|
+
};
|
|
42
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { createConfigurableComponent } from "@webiny/react-properties";
|
|
3
|
+
import { Browser } from "./Browser";
|
|
4
|
+
const base = createConfigurableComponent("AuditLogsListConfig");
|
|
5
|
+
export const AuditLogsListConfig = Object.assign(base.Config, {
|
|
6
|
+
Browser
|
|
7
|
+
});
|
|
8
|
+
export const AuditLogsListWithConfig = base.WithConfig;
|
|
9
|
+
export function useAuditLogsListConfig() {
|
|
10
|
+
const config = base.useConfig();
|
|
11
|
+
const browser = config.browser || {};
|
|
12
|
+
return useMemo(() => ({
|
|
13
|
+
browser: {
|
|
14
|
+
...browser,
|
|
15
|
+
filters: [...(browser.filters || [])],
|
|
16
|
+
filtersToWhere: [...(browser.filtersToWhere || [])]
|
|
17
|
+
}
|
|
18
|
+
}), [config]);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=AuditLogsListConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","createConfigurableComponent","Browser","base","AuditLogsListConfig","Object","assign","Config","AuditLogsListWithConfig","WithConfig","useAuditLogsListConfig","config","useConfig","browser","filters","filtersToWhere"],"sources":["AuditLogsListConfig.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { createConfigurableComponent } from \"@webiny/react-properties\";\nimport type { BrowserConfig } from \"./Browser\";\nimport { Browser } from \"./Browser\";\n\nconst base = createConfigurableComponent<AuditLogsListConfig>(\"AuditLogsListConfig\");\n\nexport const AuditLogsListConfig = Object.assign(base.Config, { Browser });\nexport const AuditLogsListWithConfig = base.WithConfig;\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"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,2BAA2B,QAAQ,0BAA0B;AAEtE,SAASC,OAAO;AAEhB,MAAMC,IAAI,GAAGF,2BAA2B,CAAsB,qBAAqB,CAAC;AAEpF,OAAO,MAAMG,mBAAmB,GAAGC,MAAM,CAACC,MAAM,CAACH,IAAI,CAACI,MAAM,EAAE;EAAEL;AAAQ,CAAC,CAAC;AAC1E,OAAO,MAAMM,uBAAuB,GAAGL,IAAI,CAACM,UAAU;AAMtD,OAAO,SAASC,sBAAsBA,CAAA,EAAG;EACrC,MAAMC,MAAM,GAAGR,IAAI,CAACS,SAAS,CAAC,CAAC;EAE/B,MAAMC,OAAO,GAAGF,MAAM,CAACE,OAAO,IAAI,CAAC,CAAC;EAEpC,OAAOb,OAAO,CACV,OAAO;IACHa,OAAO,EAAE;MACL,GAAGA,OAAO;MACVC,OAAO,EAAE,CAAC,IAAID,OAAO,CAACC,OAAO,IAAI,EAAE,CAAC,CAAC;MACrCC,cAAc,EAAE,CAAC,IAAIF,OAAO,CAACE,cAAc,IAAI,EAAE,CAAC;IACtD;EACJ,CAAC,CAAC,EACF,CAACJ,MAAM,CACX,CAAC;AACL","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface FilterConfig {
|
|
3
|
+
name: string;
|
|
4
|
+
element: React.ReactElement;
|
|
5
|
+
}
|
|
6
|
+
export interface FilterProps {
|
|
7
|
+
name: string;
|
|
8
|
+
element?: React.ReactElement<unknown>;
|
|
9
|
+
remove?: boolean;
|
|
10
|
+
before?: string;
|
|
11
|
+
after?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const Filter: (({ name, element, after, before, remove }: FilterProps) => React.JSX.Element) & {
|
|
14
|
+
original: ({ name, element, after, before, remove }: FilterProps) => React.JSX.Element;
|
|
15
|
+
originalName: string;
|
|
16
|
+
displayName: string;
|
|
17
|
+
} & {
|
|
18
|
+
original: (({ name, element, after, before, remove }: FilterProps) => React.JSX.Element) & {
|
|
19
|
+
original: ({ name, element, after, before, remove }: FilterProps) => React.JSX.Element;
|
|
20
|
+
originalName: string;
|
|
21
|
+
displayName: string;
|
|
22
|
+
};
|
|
23
|
+
originalName: string;
|
|
24
|
+
displayName: string;
|
|
25
|
+
} & {
|
|
26
|
+
createDecorator: (decorator: import("@webiny/app-admin").ComponentDecorator<(({ name, element, after, before, remove }: FilterProps) => React.JSX.Element) & {
|
|
27
|
+
original: ({ name, element, after, before, remove }: FilterProps) => React.JSX.Element;
|
|
28
|
+
originalName: string;
|
|
29
|
+
displayName: string;
|
|
30
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
31
|
+
} & {
|
|
32
|
+
createDecorator: (decorator: import("@webiny/app-admin").ComponentDecorator<(({ name, element, after, before, remove }: FilterProps) => React.JSX.Element) & {
|
|
33
|
+
original: ({ name, element, after, before, remove }: FilterProps) => React.JSX.Element;
|
|
34
|
+
originalName: string;
|
|
35
|
+
displayName: string;
|
|
36
|
+
}>) => (props: {
|
|
37
|
+
name: string;
|
|
38
|
+
}) => React.JSX.Element;
|
|
39
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Property, useIdGenerator } from "@webiny/react-properties";
|
|
3
|
+
import { createDecoratorFactory, makeDecoratable } from "@webiny/app-admin";
|
|
4
|
+
const BaseFilter = makeDecoratable("Filter", ({
|
|
5
|
+
name,
|
|
6
|
+
element,
|
|
7
|
+
after = undefined,
|
|
8
|
+
before = undefined,
|
|
9
|
+
remove = false
|
|
10
|
+
}) => {
|
|
11
|
+
const getId = useIdGenerator("filter");
|
|
12
|
+
const placeAfter = after !== undefined ? getId(after) : undefined;
|
|
13
|
+
const placeBefore = before !== undefined ? getId(before) : undefined;
|
|
14
|
+
return /*#__PURE__*/React.createElement(Property, {
|
|
15
|
+
id: "browser",
|
|
16
|
+
name: "browser"
|
|
17
|
+
}, /*#__PURE__*/React.createElement(Property, {
|
|
18
|
+
id: getId(name),
|
|
19
|
+
name: "filters",
|
|
20
|
+
remove: remove,
|
|
21
|
+
array: true,
|
|
22
|
+
before: placeBefore,
|
|
23
|
+
after: placeAfter
|
|
24
|
+
}, /*#__PURE__*/React.createElement(Property, {
|
|
25
|
+
id: getId(name, "name"),
|
|
26
|
+
name: "name",
|
|
27
|
+
value: name
|
|
28
|
+
}), element ? /*#__PURE__*/React.createElement(Property, {
|
|
29
|
+
id: getId(name, "element"),
|
|
30
|
+
name: "element",
|
|
31
|
+
value: element
|
|
32
|
+
}) : null));
|
|
33
|
+
});
|
|
34
|
+
const createDecorator = createDecoratorFactory()(BaseFilter, (decoratorProps, componentProps) => {
|
|
35
|
+
if (decoratorProps.name === "*") {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return decoratorProps.name === componentProps.name;
|
|
39
|
+
});
|
|
40
|
+
export const Filter = Object.assign(BaseFilter, {
|
|
41
|
+
createDecorator
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=Filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Property","useIdGenerator","createDecoratorFactory","makeDecoratable","BaseFilter","name","element","after","undefined","before","remove","getId","placeAfter","placeBefore","createElement","id","array","value","createDecorator","decoratorProps","componentProps","Filter","Object","assign"],"sources":["Filter.tsx"],"sourcesContent":["import React from \"react\";\nimport { Property, useIdGenerator } from \"@webiny/react-properties\";\nimport { createDecoratorFactory, makeDecoratable } from \"@webiny/app-admin\";\n\nexport interface FilterConfig {\n name: string;\n element: React.ReactElement;\n}\n\nexport interface FilterProps {\n name: string;\n element?: React.ReactElement<unknown>;\n remove?: boolean;\n before?: string;\n after?: string;\n}\n\nconst BaseFilter = makeDecoratable(\n \"Filter\",\n ({ name, element, after = undefined, before = undefined, remove = false }: FilterProps) => {\n const getId = useIdGenerator(\"filter\");\n\n const placeAfter = after !== undefined ? getId(after) : undefined;\n const placeBefore = before !== undefined ? getId(before) : undefined;\n\n return (\n <Property id=\"browser\" name={\"browser\"}>\n <Property\n id={getId(name)}\n name={\"filters\"}\n remove={remove}\n array={true}\n before={placeBefore}\n after={placeAfter}\n >\n <Property id={getId(name, \"name\")} name={\"name\"} value={name} />\n {element ? (\n <Property id={getId(name, \"element\")} name={\"element\"} value={element} />\n ) : null}\n </Property>\n </Property>\n );\n }\n);\n\nconst createDecorator = createDecoratorFactory<{ name: string }>()(\n BaseFilter,\n (decoratorProps, componentProps) => {\n if (decoratorProps.name === \"*\") {\n return true;\n }\n\n return decoratorProps.name === componentProps.name;\n }\n);\n\nexport const Filter = Object.assign(BaseFilter, { createDecorator });\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,QAAQ,EAAEC,cAAc,QAAQ,0BAA0B;AACnE,SAASC,sBAAsB,EAAEC,eAAe,QAAQ,mBAAmB;AAe3E,MAAMC,UAAU,GAAGD,eAAe,CAC9B,QAAQ,EACR,CAAC;EAAEE,IAAI;EAAEC,OAAO;EAAEC,KAAK,GAAGC,SAAS;EAAEC,MAAM,GAAGD,SAAS;EAAEE,MAAM,GAAG;AAAmB,CAAC,KAAK;EACvF,MAAMC,KAAK,GAAGV,cAAc,CAAC,QAAQ,CAAC;EAEtC,MAAMW,UAAU,GAAGL,KAAK,KAAKC,SAAS,GAAGG,KAAK,CAACJ,KAAK,CAAC,GAAGC,SAAS;EACjE,MAAMK,WAAW,GAAGJ,MAAM,KAAKD,SAAS,GAAGG,KAAK,CAACF,MAAM,CAAC,GAAGD,SAAS;EAEpE,oBACIT,KAAA,CAAAe,aAAA,CAACd,QAAQ;IAACe,EAAE,EAAC,SAAS;IAACV,IAAI,EAAE;EAAU,gBACnCN,KAAA,CAAAe,aAAA,CAACd,QAAQ;IACLe,EAAE,EAAEJ,KAAK,CAACN,IAAI,CAAE;IAChBA,IAAI,EAAE,SAAU;IAChBK,MAAM,EAAEA,MAAO;IACfM,KAAK,EAAE,IAAK;IACZP,MAAM,EAAEI,WAAY;IACpBN,KAAK,EAAEK;EAAW,gBAElBb,KAAA,CAAAe,aAAA,CAACd,QAAQ;IAACe,EAAE,EAAEJ,KAAK,CAACN,IAAI,EAAE,MAAM,CAAE;IAACA,IAAI,EAAE,MAAO;IAACY,KAAK,EAAEZ;EAAK,CAAE,CAAC,EAC/DC,OAAO,gBACJP,KAAA,CAAAe,aAAA,CAACd,QAAQ;IAACe,EAAE,EAAEJ,KAAK,CAACN,IAAI,EAAE,SAAS,CAAE;IAACA,IAAI,EAAE,SAAU;IAACY,KAAK,EAAEX;EAAQ,CAAE,CAAC,GACzE,IACE,CACJ,CAAC;AAEnB,CACJ,CAAC;AAED,MAAMY,eAAe,GAAGhB,sBAAsB,CAAmB,CAAC,CAC9DE,UAAU,EACV,CAACe,cAAc,EAAEC,cAAc,KAAK;EAChC,IAAID,cAAc,CAACd,IAAI,KAAK,GAAG,EAAE;IAC7B,OAAO,IAAI;EACf;EAEA,OAAOc,cAAc,CAACd,IAAI,KAAKe,cAAc,CAACf,IAAI;AACtD,CACJ,CAAC;AAED,OAAO,MAAMgB,MAAM,GAAGC,MAAM,CAACC,MAAM,CAACnB,UAAU,EAAE;EAAEc;AAAgB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Property } from "@webiny/react-properties";
|
|
3
|
+
export const FiltersToWhere = ({
|
|
4
|
+
converter
|
|
5
|
+
}) => {
|
|
6
|
+
return /*#__PURE__*/React.createElement(Property, {
|
|
7
|
+
id: "browser",
|
|
8
|
+
name: "browser"
|
|
9
|
+
}, /*#__PURE__*/React.createElement(Property, {
|
|
10
|
+
name: "filtersToWhere",
|
|
11
|
+
array: true,
|
|
12
|
+
value: converter
|
|
13
|
+
}));
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=FiltersToWhere.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Property","FiltersToWhere","converter","createElement","id","name","array","value"],"sources":["FiltersToWhere.tsx"],"sourcesContent":["import React from \"react\";\nimport { Property } from \"@webiny/react-properties\";\n\nexport interface FiltersToWhereConverter {\n (filters: Record<string, any>): Record<string, any>;\n}\n\nexport const FiltersToWhere = ({ converter }: { converter: FiltersToWhereConverter }) => {\n return (\n <Property id=\"browser\" name={\"browser\"}>\n <Property name={\"filtersToWhere\"} array={true} value={converter} />\n </Property>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,QAAQ,QAAQ,0BAA0B;AAMnD,OAAO,MAAMC,cAAc,GAAGA,CAAC;EAAEC;AAAkD,CAAC,KAAK;EACrF,oBACIH,KAAA,CAAAI,aAAA,CAACH,QAAQ;IAACI,EAAE,EAAC,SAAS;IAACC,IAAI,EAAE;EAAU,gBACnCN,KAAA,CAAAI,aAAA,CAACH,QAAQ;IAACK,IAAI,EAAE,gBAAiB;IAACC,KAAK,EAAE,IAAK;IAACC,KAAK,EAAEL;EAAU,CAAE,CAC5D,CAAC;AAEnB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { FilterConfig } from "./Filter";
|
|
3
|
+
import type { FiltersToWhereConverter } from "./FiltersToWhere";
|
|
4
|
+
export interface BrowserConfig {
|
|
5
|
+
filters: FilterConfig[];
|
|
6
|
+
filtersToWhere: FiltersToWhereConverter[];
|
|
7
|
+
}
|
|
8
|
+
export declare const Browser: {
|
|
9
|
+
Filter: (({ name, element, after, before, remove }: import("./Filter").FilterProps) => import("react").JSX.Element) & {
|
|
10
|
+
original: ({ name, element, after, before, remove }: import("./Filter").FilterProps) => import("react").JSX.Element;
|
|
11
|
+
originalName: string;
|
|
12
|
+
displayName: string;
|
|
13
|
+
} & {
|
|
14
|
+
original: (({ name, element, after, before, remove }: import("./Filter").FilterProps) => import("react").JSX.Element) & {
|
|
15
|
+
original: ({ name, element, after, before, remove }: import("./Filter").FilterProps) => import("react").JSX.Element;
|
|
16
|
+
originalName: string;
|
|
17
|
+
displayName: string;
|
|
18
|
+
};
|
|
19
|
+
originalName: string;
|
|
20
|
+
displayName: string;
|
|
21
|
+
} & {
|
|
22
|
+
createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<(({ name, element, after, before, remove }: import("./Filter").FilterProps) => import("react").JSX.Element) & {
|
|
23
|
+
original: ({ name, element, after, before, remove }: import("./Filter").FilterProps) => import("react").JSX.Element;
|
|
24
|
+
originalName: string;
|
|
25
|
+
displayName: string;
|
|
26
|
+
}>) => (props: unknown) => import("react").JSX.Element;
|
|
27
|
+
} & {
|
|
28
|
+
createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<(({ name, element, after, before, remove }: import("./Filter").FilterProps) => import("react").JSX.Element) & {
|
|
29
|
+
original: ({ name, element, after, before, remove }: import("./Filter").FilterProps) => import("react").JSX.Element;
|
|
30
|
+
originalName: string;
|
|
31
|
+
displayName: string;
|
|
32
|
+
}>) => (props: {
|
|
33
|
+
name: string;
|
|
34
|
+
}) => import("react").JSX.Element;
|
|
35
|
+
};
|
|
36
|
+
FiltersToWhere: ({ converter }: {
|
|
37
|
+
converter: FiltersToWhereConverter;
|
|
38
|
+
}) => import("react").JSX.Element;
|
|
39
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Filter","FiltersToWhere","Browser"],"sources":["index.ts"],"sourcesContent":["import type { FilterConfig } from \"./Filter\";\nimport { Filter } from \"./Filter\";\nimport type { FiltersToWhereConverter } from \"./FiltersToWhere\";\nimport { FiltersToWhere } from \"./FiltersToWhere\";\n\nexport interface BrowserConfig {\n filters: FilterConfig[];\n filtersToWhere: FiltersToWhereConverter[];\n}\n\nexport const Browser = {\n Filter,\n FiltersToWhere\n};\n"],"mappings":"AACA,SAASA,MAAM;AAEf,SAASC,cAAc;AAOvB,OAAO,MAAMC,OAAO,GAAG;EACnBF,MAAM;EACNC;AACJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./AuditLogsListConfig";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./AuditLogsListConfig\";\n"],"mappings":"AAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const LOCAL_STORAGE_LATEST_VISITED_FOLDER = "webiny_audit_logs_latest_visited_folder";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["LOCAL_STORAGE_LATEST_VISITED_FOLDER"],"sources":["index.ts"],"sourcesContent":["export const LOCAL_STORAGE_LATEST_VISITED_FOLDER = \"webiny_audit_logs_latest_visited_folder\";\n"],"mappings":"AAAA,OAAO,MAAMA,mCAAmC,GAAG,yCAAyC","ignoreList":[]}
|
package/graphql.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const LIST_USERS: any;
|
package/graphql.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import gql from "graphql-tag";
|
|
2
|
+
const ERROR_FIELDS = /* GraphQL */`
|
|
3
|
+
code
|
|
4
|
+
message
|
|
5
|
+
data
|
|
6
|
+
`;
|
|
7
|
+
export const LIST_USERS = gql`
|
|
8
|
+
query ListUsers {
|
|
9
|
+
adminUsers {
|
|
10
|
+
users: listUsers {
|
|
11
|
+
data {
|
|
12
|
+
id
|
|
13
|
+
firstName
|
|
14
|
+
lastName
|
|
15
|
+
groups {
|
|
16
|
+
name
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
error {
|
|
20
|
+
${ERROR_FIELDS}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
`;
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=graphql.js.map
|
package/graphql.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["gql","ERROR_FIELDS","LIST_USERS"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\n\nconst ERROR_FIELDS = /* GraphQL */ `\n code\n message\n data\n`;\n\nexport const LIST_USERS: any = gql`\n query ListUsers {\n adminUsers {\n users: listUsers {\n data {\n id\n firstName\n lastName\n groups {\n name\n }\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,aAAa;AAE7B,MAAMC,YAAY,GAAG,aAAc;AACnC;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,UAAe,GAAGF,GAAG;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsBC,YAAY;AAClC;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
package/hooks/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./useAuditLogsList";
|
package/hooks/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./useAuditLogsList\";\n"],"mappings":"AAAA","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { OnSortingChange, Sorting } from "@webiny/ui/DataTable";
|
|
2
|
+
import type { ListMeta } from "@webiny/app-aco/types";
|
|
3
|
+
import type { Entry } from "../utils/transformCmsContentEntriesToRecordEntries";
|
|
4
|
+
export interface UseAuditLogs {
|
|
5
|
+
hideFilters: () => void;
|
|
6
|
+
isListLoading: boolean;
|
|
7
|
+
isListLoadingMore: boolean;
|
|
8
|
+
isSearch: boolean;
|
|
9
|
+
listMoreRecords: () => void;
|
|
10
|
+
listTitle?: string;
|
|
11
|
+
meta: ListMeta;
|
|
12
|
+
records: Entry[];
|
|
13
|
+
search: string;
|
|
14
|
+
setSearch: (value: string) => void;
|
|
15
|
+
setSorting: OnSortingChange;
|
|
16
|
+
showFilters: () => void;
|
|
17
|
+
showingFilters: boolean;
|
|
18
|
+
sorting: Sorting;
|
|
19
|
+
setFilters: (data: Record<string, any>) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare const useAuditLogsList: (hasAccessToUsers: boolean) => UseAuditLogs;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState, useMemo } from "react";
|
|
2
|
+
import { useQuery } from "@apollo/react-hooks";
|
|
3
|
+
import debounce from "lodash/debounce";
|
|
4
|
+
import { useRouter } from "@webiny/react-router";
|
|
5
|
+
import { useAcoList, createSort } from "@webiny/app-aco";
|
|
6
|
+
import { transformCmsContentEntriesToRecordEntries } from "../utils/transformCmsContentEntriesToRecordEntries";
|
|
7
|
+
import { LIST_USERS } from "../graphql";
|
|
8
|
+
export const useAuditLogsList = hasAccessToUsers => {
|
|
9
|
+
const {
|
|
10
|
+
history
|
|
11
|
+
} = useRouter();
|
|
12
|
+
const {
|
|
13
|
+
isListLoading,
|
|
14
|
+
isListLoadingMore,
|
|
15
|
+
isSearch,
|
|
16
|
+
listMoreRecords,
|
|
17
|
+
listTitle,
|
|
18
|
+
meta,
|
|
19
|
+
records: initialRecords,
|
|
20
|
+
setSearchQuery,
|
|
21
|
+
setListSort,
|
|
22
|
+
setFilters,
|
|
23
|
+
showFilters,
|
|
24
|
+
hideFilters,
|
|
25
|
+
showingFilters
|
|
26
|
+
} = useAcoList();
|
|
27
|
+
const [sorting, setSorting] = useState([]);
|
|
28
|
+
const [search, setSearch] = useState("");
|
|
29
|
+
const query = new URLSearchParams(location.search);
|
|
30
|
+
const searchQuery = query.get("search") || "";
|
|
31
|
+
const {
|
|
32
|
+
data: listUsers,
|
|
33
|
+
loading: usersLoading
|
|
34
|
+
} = useQuery(LIST_USERS, {
|
|
35
|
+
skip: !hasAccessToUsers
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Search-related logics: update `searchQuery` state and querystring
|
|
39
|
+
const updateSearch = useCallback(debounce(({
|
|
40
|
+
search,
|
|
41
|
+
query
|
|
42
|
+
}) => {
|
|
43
|
+
const searchQuery = query.get("search");
|
|
44
|
+
if (typeof searchQuery !== "string" && !search) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
setSearchQuery(search);
|
|
48
|
+
if (searchQuery !== search) {
|
|
49
|
+
if (!search) {
|
|
50
|
+
// In case of empty `search` - remove it from `querystring`
|
|
51
|
+
query.delete("search");
|
|
52
|
+
} else {
|
|
53
|
+
// Otherwise, add it to `querystring`
|
|
54
|
+
query.set("search", search);
|
|
55
|
+
}
|
|
56
|
+
history.push(`/audit-logs?${query.toString()}`);
|
|
57
|
+
}
|
|
58
|
+
}, 500), []);
|
|
59
|
+
|
|
60
|
+
// Set "search" from search "query" on page load.
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
setSearch(searchQuery);
|
|
63
|
+
}, [searchQuery]);
|
|
64
|
+
|
|
65
|
+
// When "search" changes, trigger search-related logics
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
updateSearch({
|
|
68
|
+
search,
|
|
69
|
+
query
|
|
70
|
+
});
|
|
71
|
+
}, [search]);
|
|
72
|
+
const records = useMemo(() => {
|
|
73
|
+
const users = listUsers?.adminUsers?.users?.data || [];
|
|
74
|
+
return transformCmsContentEntriesToRecordEntries(initialRecords, users);
|
|
75
|
+
}, [initialRecords, listUsers]);
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (!sorting?.length) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const sort = createSort(sorting);
|
|
81
|
+
if (!sort) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
setListSort(sort);
|
|
85
|
+
}, [sorting]);
|
|
86
|
+
return {
|
|
87
|
+
isListLoading: isListLoading || usersLoading,
|
|
88
|
+
isListLoadingMore,
|
|
89
|
+
isSearch,
|
|
90
|
+
listTitle,
|
|
91
|
+
listMoreRecords,
|
|
92
|
+
meta,
|
|
93
|
+
records,
|
|
94
|
+
search,
|
|
95
|
+
setSearch,
|
|
96
|
+
sorting,
|
|
97
|
+
setSorting,
|
|
98
|
+
showingFilters,
|
|
99
|
+
showFilters,
|
|
100
|
+
hideFilters,
|
|
101
|
+
setFilters
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=useAuditLogsList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useState","useMemo","useQuery","debounce","useRouter","useAcoList","createSort","transformCmsContentEntriesToRecordEntries","LIST_USERS","useAuditLogsList","hasAccessToUsers","history","isListLoading","isListLoadingMore","isSearch","listMoreRecords","listTitle","meta","records","initialRecords","setSearchQuery","setListSort","setFilters","showFilters","hideFilters","showingFilters","sorting","setSorting","search","setSearch","query","URLSearchParams","location","searchQuery","get","data","listUsers","loading","usersLoading","skip","updateSearch","delete","set","push","toString","users","adminUsers","length","sort"],"sources":["useAuditLogsList.ts"],"sourcesContent":["import { useCallback, useEffect, useState, useMemo } from \"react\";\nimport { useQuery } from \"@apollo/react-hooks\";\nimport debounce from \"lodash/debounce\";\n\nimport { useRouter } from \"@webiny/react-router\";\nimport type { OnSortingChange, Sorting } from \"@webiny/ui/DataTable\";\nimport { useAcoList, createSort } from \"@webiny/app-aco\";\nimport type { ListMeta, SearchRecordItem } from \"@webiny/app-aco/types\";\n\nimport type { Entry } from \"~/utils/transformCmsContentEntriesToRecordEntries\";\nimport { transformCmsContentEntriesToRecordEntries } from \"~/utils/transformCmsContentEntriesToRecordEntries\";\nimport { LIST_USERS } from \"~/graphql\";\nimport type { AuditLog, User } from \"~/types\";\n\ninterface UpdateSearchCallableParams {\n search: string;\n query: URLSearchParams;\n}\ninterface UpdateSearchCallable {\n (params: UpdateSearchCallableParams): void;\n}\n\nexport interface UseAuditLogs {\n hideFilters: () => void;\n isListLoading: boolean;\n isListLoadingMore: boolean;\n isSearch: boolean;\n listMoreRecords: () => void;\n listTitle?: string;\n meta: ListMeta;\n records: Entry[];\n search: string;\n setSearch: (value: string) => void;\n setSorting: OnSortingChange;\n showFilters: () => void;\n showingFilters: boolean;\n sorting: Sorting;\n setFilters: (data: Record<string, any>) => void;\n}\n\nexport const useAuditLogsList = (hasAccessToUsers: boolean): UseAuditLogs => {\n const { history } = useRouter();\n\n const {\n isListLoading,\n isListLoadingMore,\n isSearch,\n listMoreRecords,\n listTitle,\n meta,\n records: initialRecords,\n setSearchQuery,\n setListSort,\n setFilters,\n showFilters,\n hideFilters,\n showingFilters\n } = useAcoList<SearchRecordItem<AuditLog>>();\n\n const [sorting, setSorting] = useState<Sorting>([]);\n const [search, setSearch] = useState<string>(\"\");\n const query = new URLSearchParams(location.search);\n const searchQuery = query.get(\"search\") || \"\";\n\n const { data: listUsers, loading: usersLoading } = useQuery(LIST_USERS, {\n skip: !hasAccessToUsers\n });\n\n // Search-related logics: update `searchQuery` state and querystring\n const updateSearch = useCallback(\n debounce<UpdateSearchCallable>(({ search, query }) => {\n const searchQuery = query.get(\"search\");\n\n if (typeof searchQuery !== \"string\" && !search) {\n return;\n }\n\n setSearchQuery(search);\n\n if (searchQuery !== search) {\n if (!search) {\n // In case of empty `search` - remove it from `querystring`\n query.delete(\"search\");\n } else {\n // Otherwise, add it to `querystring`\n query.set(\"search\", search);\n }\n history.push(`/audit-logs?${query.toString()}`);\n }\n }, 500),\n []\n );\n\n // Set \"search\" from search \"query\" on page load.\n useEffect(() => {\n setSearch(searchQuery);\n }, [searchQuery]);\n\n // When \"search\" changes, trigger search-related logics\n useEffect(() => {\n updateSearch({ search, query });\n }, [search]);\n\n const records = useMemo(() => {\n const users: User[] = listUsers?.adminUsers?.users?.data || [];\n\n return transformCmsContentEntriesToRecordEntries(initialRecords, users);\n }, [initialRecords, listUsers]);\n\n useEffect(() => {\n if (!sorting?.length) {\n return;\n }\n const sort = createSort(sorting);\n if (!sort) {\n return;\n }\n setListSort(sort);\n }, [sorting]);\n\n return {\n isListLoading: isListLoading || usersLoading,\n isListLoadingMore,\n isSearch,\n listTitle,\n listMoreRecords,\n meta,\n records,\n search,\n setSearch,\n sorting,\n setSorting,\n showingFilters,\n showFilters,\n hideFilters,\n setFilters\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
package/index.d.ts
ADDED
package/index.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React, { useCallback } from "react";
|
|
2
|
+
import { useApolloClient } from "@apollo/react-hooks";
|
|
3
|
+
import { ReactComponent as Icon } from "@webiny/icons/manage_search.svg";
|
|
4
|
+
import { Layout, useWcp } from "@webiny/app-admin";
|
|
5
|
+
import { HasPermission } from "@webiny/app-security";
|
|
6
|
+
import { AcoProvider } from "@webiny/app-aco";
|
|
7
|
+
import { AuditLogsListWithConfig } from "./config/list";
|
|
8
|
+
import { LogsModule } from "./views/Logs/LogsModule";
|
|
9
|
+
import { AuditLogsPermissions } from "./plugins/permissionRenderer";
|
|
10
|
+
import AuditLogsView from "./views/Logs/Logs";
|
|
11
|
+
import { LOCAL_STORAGE_LATEST_VISITED_FOLDER } from "./constants";
|
|
12
|
+
import { AdminConfig } from "@webiny/app-admin";
|
|
13
|
+
const {
|
|
14
|
+
Menu,
|
|
15
|
+
Route
|
|
16
|
+
} = AdminConfig;
|
|
17
|
+
export const AuditLogs = () => {
|
|
18
|
+
const client = useApolloClient();
|
|
19
|
+
const wcp = useWcp();
|
|
20
|
+
const createNavigateFolderStorageKey = useCallback(() => {
|
|
21
|
+
return LOCAL_STORAGE_LATEST_VISITED_FOLDER;
|
|
22
|
+
}, []);
|
|
23
|
+
if (!wcp.canUseAuditLogs()) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LogsModule, null), /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(HasPermission, {
|
|
27
|
+
any: ["al.*"]
|
|
28
|
+
}, /*#__PURE__*/React.createElement(Menu, {
|
|
29
|
+
name: "auditLogs",
|
|
30
|
+
element: /*#__PURE__*/React.createElement(Menu.Link, {
|
|
31
|
+
text: "Audit Logs",
|
|
32
|
+
icon: /*#__PURE__*/React.createElement(Menu.Link.Icon, {
|
|
33
|
+
element: /*#__PURE__*/React.createElement(Icon, null),
|
|
34
|
+
label: "Audit Logs"
|
|
35
|
+
}),
|
|
36
|
+
to: "/audit-logs"
|
|
37
|
+
})
|
|
38
|
+
}), /*#__PURE__*/React.createElement(Route, {
|
|
39
|
+
name: "auditLogs",
|
|
40
|
+
exact: true,
|
|
41
|
+
path: "/audit-logs",
|
|
42
|
+
element: /*#__PURE__*/React.createElement(Layout, {
|
|
43
|
+
title: "Audit Logs - Logs"
|
|
44
|
+
}, /*#__PURE__*/React.createElement(AuditLogsListWithConfig, null, /*#__PURE__*/React.createElement(AcoProvider, {
|
|
45
|
+
id: "AuditLogs",
|
|
46
|
+
client: client,
|
|
47
|
+
createNavigateFolderStorageKey: createNavigateFolderStorageKey
|
|
48
|
+
}, /*#__PURE__*/React.createElement(AuditLogsView, null))))
|
|
49
|
+
}))), /*#__PURE__*/React.createElement(AuditLogsPermissions, null));
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useCallback","useApolloClient","ReactComponent","Icon","Layout","useWcp","HasPermission","AcoProvider","AuditLogsListWithConfig","LogsModule","AuditLogsPermissions","AuditLogsView","LOCAL_STORAGE_LATEST_VISITED_FOLDER","AdminConfig","Menu","Route","AuditLogs","client","wcp","createNavigateFolderStorageKey","canUseAuditLogs","createElement","Fragment","any","name","element","Link","text","icon","label","to","exact","path","title","id"],"sources":["index.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { ReactComponent as Icon } from \"@webiny/icons/manage_search.svg\";\nimport { Layout, useWcp } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-security\";\nimport { AcoProvider } from \"@webiny/app-aco\";\n\nimport { AuditLogsListWithConfig } from \"~/config/list\";\nimport { LogsModule } from \"~/views/Logs/LogsModule\";\nimport { AuditLogsPermissions } from \"~/plugins/permissionRenderer\";\nimport AuditLogsView from \"~/views/Logs/Logs\";\nimport { LOCAL_STORAGE_LATEST_VISITED_FOLDER } from \"~/constants\";\nimport { AdminConfig } from \"@webiny/app-admin\";\n\nconst { Menu, Route } = AdminConfig;\n\nexport const AuditLogs = () => {\n const client = useApolloClient();\n const wcp = useWcp();\n\n const createNavigateFolderStorageKey = useCallback(() => {\n return LOCAL_STORAGE_LATEST_VISITED_FOLDER;\n }, []);\n\n if (!wcp.canUseAuditLogs()) {\n return null;\n }\n\n return (\n <>\n <LogsModule />\n <AdminConfig>\n <HasPermission any={[\"al.*\"]}>\n <Menu\n name=\"auditLogs\"\n element={\n <Menu.Link\n text={\"Audit Logs\"}\n icon={<Menu.Link.Icon element={<Icon />} label={\"Audit Logs\"} />}\n to={\"/audit-logs\"}\n />\n }\n />\n <Route\n name={\"auditLogs\"}\n exact\n path={\"/audit-logs\"}\n element={\n <Layout title={\"Audit Logs - Logs\"}>\n <AuditLogsListWithConfig>\n <AcoProvider\n id=\"AuditLogs\"\n client={client}\n createNavigateFolderStorageKey={\n createNavigateFolderStorageKey\n }\n >\n <AuditLogsView />\n </AcoProvider>\n </AuditLogsListWithConfig>\n </Layout>\n }\n />\n </HasPermission>\n </AdminConfig>\n <AuditLogsPermissions />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,cAAc,IAAIC,IAAI,QAAQ,iCAAiC;AACxE,SAASC,MAAM,EAAEC,MAAM,QAAQ,mBAAmB;AAClD,SAASC,aAAa,QAAQ,sBAAsB;AACpD,SAASC,WAAW,QAAQ,iBAAiB;AAE7C,SAASC,uBAAuB;AAChC,SAASC,UAAU;AACnB,SAASC,oBAAoB;AAC7B,OAAOC,aAAa;AACpB,SAASC,mCAAmC;AAC5C,SAASC,WAAW,QAAQ,mBAAmB;AAE/C,MAAM;EAAEC,IAAI;EAAEC;AAAM,CAAC,GAAGF,WAAW;AAEnC,OAAO,MAAMG,SAAS,GAAGA,CAAA,KAAM;EAC3B,MAAMC,MAAM,GAAGhB,eAAe,CAAC,CAAC;EAChC,MAAMiB,GAAG,GAAGb,MAAM,CAAC,CAAC;EAEpB,MAAMc,8BAA8B,GAAGnB,WAAW,CAAC,MAAM;IACrD,OAAOY,mCAAmC;EAC9C,CAAC,EAAE,EAAE,CAAC;EAEN,IAAI,CAACM,GAAG,CAACE,eAAe,CAAC,CAAC,EAAE;IACxB,OAAO,IAAI;EACf;EAEA,oBACIrB,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,qBACIvB,KAAA,CAAAsB,aAAA,CAACZ,UAAU,MAAE,CAAC,eACdV,KAAA,CAAAsB,aAAA,CAACR,WAAW,qBACRd,KAAA,CAAAsB,aAAA,CAACf,aAAa;IAACiB,GAAG,EAAE,CAAC,MAAM;EAAE,gBACzBxB,KAAA,CAAAsB,aAAA,CAACP,IAAI;IACDU,IAAI,EAAC,WAAW;IAChBC,OAAO,eACH1B,KAAA,CAAAsB,aAAA,CAACP,IAAI,CAACY,IAAI;MACNC,IAAI,EAAE,YAAa;MACnBC,IAAI,eAAE7B,KAAA,CAAAsB,aAAA,CAACP,IAAI,CAACY,IAAI,CAACvB,IAAI;QAACsB,OAAO,eAAE1B,KAAA,CAAAsB,aAAA,CAAClB,IAAI,MAAE,CAAE;QAAC0B,KAAK,EAAE;MAAa,CAAE,CAAE;MACjEC,EAAE,EAAE;IAAc,CACrB;EACJ,CACJ,CAAC,eACF/B,KAAA,CAAAsB,aAAA,CAACN,KAAK;IACFS,IAAI,EAAE,WAAY;IAClBO,KAAK;IACLC,IAAI,EAAE,aAAc;IACpBP,OAAO,eACH1B,KAAA,CAAAsB,aAAA,CAACjB,MAAM;MAAC6B,KAAK,EAAE;IAAoB,gBAC/BlC,KAAA,CAAAsB,aAAA,CAACb,uBAAuB,qBACpBT,KAAA,CAAAsB,aAAA,CAACd,WAAW;MACR2B,EAAE,EAAC,WAAW;MACdjB,MAAM,EAAEA,MAAO;MACfE,8BAA8B,EAC1BA;IACH,gBAEDpB,KAAA,CAAAsB,aAAA,CAACV,aAAa,MAAE,CACP,CACQ,CACrB;EACX,CACJ,CACU,CACN,CAAC,eACdZ,KAAA,CAAAsB,aAAA,CAACX,oBAAoB,MAAE,CACzB,CAAC;AAEX,CAAC","ignoreList":[]}
|