@webiny/app-mailer 0.0.0-unstable.78f581c1d2 β 0.0.0-unstable.7be00a75a9
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/Module.d.ts +2 -0
- package/Module.js +36 -0
- package/Module.js.map +1 -0
- package/README.md +6 -17
- package/hooks/usePermission.js +15 -24
- package/hooks/usePermission.js.map +1 -1
- package/index.d.ts +1 -2
- package/index.js +1 -13
- package/package.json +22 -33
- package/routes.d.ts +4 -0
- package/routes.js +10 -0
- package/routes.js.map +1 -0
- package/types.d.ts +3 -2
- package/types.js +0 -5
- package/views/settings/Settings.d.ts +1 -1
- package/views/settings/Settings.js +196 -245
- package/views/settings/Settings.js.map +1 -1
- package/views/settings/graphql.d.ts +9 -6
- package/views/settings/graphql.js +40 -20
- package/views/settings/graphql.js.map +1 -1
- package/views/settings/index.d.ts +1 -1
- package/views/settings/index.js +4 -10
- package/views/settings/index.js.map +1 -1
- package/index.js.map +0 -1
- package/plugins/Module.d.ts +0 -2
- package/plugins/Module.js +0 -77
- package/plugins/Module.js.map +0 -1
- package/types.js.map +0 -1
package/Module.d.ts
ADDED
package/Module.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import react, { Suspense, lazy } from "react";
|
|
2
|
+
import { AdminConfig, AdminLayout, HasPermission, Plugins, useRouter } from "@webiny/app-admin";
|
|
3
|
+
import { OverlayLoader } from "@webiny/admin-ui";
|
|
4
|
+
import { usePermission } from "./hooks/usePermission.js";
|
|
5
|
+
import { Routes } from "./routes.js";
|
|
6
|
+
const { Menu: Menu, Route: Route } = AdminConfig;
|
|
7
|
+
const Settings = /*#__PURE__*/ lazy(()=>import("./views/settings/index.js"));
|
|
8
|
+
const Loader = ({ children, ...props })=>/*#__PURE__*/ react.createElement(Suspense, {
|
|
9
|
+
fallback: /*#__PURE__*/ react.createElement(OverlayLoader, null)
|
|
10
|
+
}, /*#__PURE__*/ react.cloneElement(children, props));
|
|
11
|
+
const MailerSettings = ()=>{
|
|
12
|
+
const router = useRouter();
|
|
13
|
+
const { canChangeSettings } = usePermission();
|
|
14
|
+
const changeSettings = canChangeSettings();
|
|
15
|
+
if (!changeSettings) return null;
|
|
16
|
+
return /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(HasPermission, {
|
|
17
|
+
name: "mailer.settings"
|
|
18
|
+
}, /*#__PURE__*/ react.createElement(Route, {
|
|
19
|
+
route: Routes.Settings,
|
|
20
|
+
element: /*#__PURE__*/ react.createElement(AdminLayout, {
|
|
21
|
+
title: "Mailer - Settings"
|
|
22
|
+
}, /*#__PURE__*/ react.createElement(Loader, null, /*#__PURE__*/ react.createElement(Settings, null)))
|
|
23
|
+
}), /*#__PURE__*/ react.createElement(Menu, {
|
|
24
|
+
name: "mailer.settings",
|
|
25
|
+
parent: "settings.system",
|
|
26
|
+
element: /*#__PURE__*/ react.createElement(Menu.Link, {
|
|
27
|
+
text: "Mailer",
|
|
28
|
+
to: router.getLink(Routes.Settings),
|
|
29
|
+
pinnable: true
|
|
30
|
+
})
|
|
31
|
+
})));
|
|
32
|
+
};
|
|
33
|
+
const Module = ()=>/*#__PURE__*/ react.createElement(Plugins, null, /*#__PURE__*/ react.createElement(MailerSettings, null));
|
|
34
|
+
export { Module };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=Module.js.map
|
package/Module.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Module.js","sources":["../src/Module.tsx"],"sourcesContent":["import React, { lazy, Suspense } from \"react\";\nimport { AdminConfig, Plugins, AdminLayout, useRouter } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-admin\";\nimport { OverlayLoader } from \"@webiny/admin-ui\";\nimport { usePermission } from \"~/hooks/usePermission.js\";\nimport { Routes } from \"~/routes.js\";\n\nconst { Menu, Route } = AdminConfig;\n\nconst Settings = lazy(\n () =>\n import(\n /* webpackChunkName: \"mailer-settings\" */\n \"~/views/settings/index.js\"\n )\n);\n\ninterface LoaderProps {\n children: React.ReactElement;\n}\n\nconst Loader = ({ children, ...props }: LoaderProps) => (\n <Suspense fallback={<OverlayLoader />}>{React.cloneElement(children, props)}</Suspense>\n);\n\nconst MailerSettings = () => {\n const router = useRouter();\n const { canChangeSettings } = usePermission();\n\n const changeSettings = canChangeSettings();\n\n if (!changeSettings) {\n return null;\n }\n\n return (\n <AdminConfig>\n <HasPermission name={\"mailer.settings\"}>\n <Route\n route={Routes.Settings}\n element={\n <AdminLayout title={\"Mailer - Settings\"}>\n <Loader>\n <Settings />\n </Loader>\n </AdminLayout>\n }\n />\n <Menu\n name={\"mailer.settings\"}\n parent={\"settings.system\"}\n element={\n <Menu.Link\n text={\"Mailer\"}\n to={router.getLink(Routes.Settings)}\n pinnable={true}\n />\n }\n />\n </HasPermission>\n </AdminConfig>\n );\n};\n\nexport const Module = () => {\n return (\n <Plugins>\n <MailerSettings />\n </Plugins>\n );\n};\n"],"names":["Menu","Route","AdminConfig","Settings","lazy","Loader","children","props","Suspense","OverlayLoader","React","MailerSettings","router","useRouter","canChangeSettings","usePermission","changeSettings","HasPermission","Routes","AdminLayout","Module","Plugins"],"mappings":";;;;;AAOA,MAAM,EAAEA,MAAAA,IAAI,EAAEC,OAAAA,KAAK,EAAE,GAAGC;AAExB,MAAMC,WAAW,WAAHA,GAAGC,KACb,IACI,MAAM,CAAN;AAUR,MAAMC,SAAS,CAAC,EAAEC,QAAQ,EAAE,GAAGC,OAAoB,iBAC/C,oBAACC,UAAQA;QAAC,wBAAU,oBAACC,eAAaA;qBAAMC,MAAAA,YAAkB,CAACJ,UAAUC;AAGzE,MAAMI,iBAAiB;IACnB,MAAMC,SAASC;IACf,MAAM,EAAEC,iBAAiB,EAAE,GAAGC;IAE9B,MAAMC,iBAAiBF;IAEvB,IAAI,CAACE,gBACD,OAAO;IAGX,OAAO,WAAP,GACI,oBAACd,aAAWA,MAAAA,WAAAA,GACR,oBAACe,eAAaA;QAAC,MAAM;qBACjB,oBAAChB,OAAKA;QACF,OAAOiB,OAAO,QAAQ;QACtB,uBACI,oBAACC,aAAWA;YAAC,OAAO;yBAChB,oBAACd,QAAMA,MAAAA,WAAAA,GACH,oBAACF,UAAQA;sBAKzB,oBAACH,MAAIA;QACD,MAAM;QACN,QAAQ;QACR,uBACI,oBAACA,KAAK,IAAI;YACN,MAAM;YACN,IAAIY,OAAO,OAAO,CAACM,OAAO,QAAQ;YAClC,UAAU;;;AAOtC;AAEO,MAAME,SAAS,IACX,WAAP,GACI,oBAACC,SAAOA,MAAAA,WAAAA,GACJ,oBAACV,gBAAcA"}
|
package/README.md
CHANGED
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
# @webiny/app-mailer
|
|
2
2
|
|
|
3
|
-
[!
|
|
4
|
-
[
|
|
5
|
-
|
|
6
|
-
[](http://makeapullrequest.com)
|
|
3
|
+
> [!NOTE]
|
|
4
|
+
> This package is part of the [Webiny](https://www.webiny.com) monorepo.
|
|
5
|
+
> Itβs **included in every Webiny project by default** and is not meant to be used as a standalone package.
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
π **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
---
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
npm install --save @webiny/app-mailer
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Or if you prefer yarn:
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
yarn add @webiny/app-mailer
|
|
22
|
-
```
|
|
11
|
+
_This README file is automatically generated during the publish process._
|
package/hooks/usePermission.js
CHANGED
|
@@ -1,26 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
identity = _useSecurity.identity,
|
|
15
|
-
getPermission = _useSecurity.getPermission;
|
|
16
|
-
|
|
17
|
-
var canChangeSettings = (0, _react.useCallback)(function () {
|
|
18
|
-
var permission = getPermission("mailer.settings");
|
|
19
|
-
return !!permission;
|
|
20
|
-
}, [identity]);
|
|
21
|
-
return {
|
|
22
|
-
canChangeSettings: canChangeSettings
|
|
23
|
-
};
|
|
1
|
+
import { useSecurity } from "@webiny/app-admin";
|
|
2
|
+
import { useCallback } from "react";
|
|
3
|
+
const usePermission = ()=>{
|
|
4
|
+
const { identity, getPermission } = useSecurity();
|
|
5
|
+
const canChangeSettings = useCallback(()=>{
|
|
6
|
+
const permission = getPermission("mailer.settings");
|
|
7
|
+
return !!permission;
|
|
8
|
+
}, [
|
|
9
|
+
identity
|
|
10
|
+
]);
|
|
11
|
+
return {
|
|
12
|
+
canChangeSettings
|
|
13
|
+
};
|
|
24
14
|
};
|
|
15
|
+
export { usePermission };
|
|
25
16
|
|
|
26
|
-
|
|
17
|
+
//# sourceMappingURL=usePermission.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"hooks/usePermission.js","sources":["../../src/hooks/usePermission.ts"],"sourcesContent":["import { useSecurity } from \"@webiny/app-admin\";\nimport { useCallback } from \"react\";\nimport type { MailerSecurityPermission } from \"~/types.js\";\n\nexport const usePermission = () => {\n const { identity, getPermission } = useSecurity();\n\n const canChangeSettings = useCallback((): boolean => {\n const permission = getPermission<MailerSecurityPermission>(\"mailer.settings\");\n return !!permission;\n }, [identity]);\n\n return {\n canChangeSettings\n };\n};\n"],"names":["usePermission","identity","getPermission","useSecurity","canChangeSettings","useCallback","permission"],"mappings":";;AAIO,MAAMA,gBAAgB;IACzB,MAAM,EAAEC,QAAQ,EAAEC,aAAa,EAAE,GAAGC;IAEpC,MAAMC,oBAAoBC,YAAY;QAClC,MAAMC,aAAaJ,cAAwC;QAC3D,OAAO,CAAC,CAACI;IACb,GAAG;QAACL;KAAS;IAEb,OAAO;QACHG;IACJ;AACJ"}
|
package/index.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Module };
|
|
1
|
+
export { Module } from "./Module.js";
|
package/index.js
CHANGED
|
@@ -1,13 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "Module", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function get() {
|
|
9
|
-
return _Module.Module;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
var _Module = require("./plugins/Module");
|
|
1
|
+
export { Module } from "./Module.js";
|
package/package.json
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-mailer",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.0.0-unstable.7be00a75a9",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./index.js",
|
|
7
|
+
"./*": "./*"
|
|
8
|
+
},
|
|
5
9
|
"repository": {
|
|
6
10
|
"type": "git",
|
|
7
11
|
"url": "https://github.com/webiny/webiny-js.git"
|
|
@@ -10,50 +14,35 @@
|
|
|
10
14
|
"license": "MIT",
|
|
11
15
|
"dependencies": {
|
|
12
16
|
"@apollo/react-components": "3.1.5",
|
|
13
|
-
"@
|
|
14
|
-
"@
|
|
15
|
-
"@webiny/
|
|
16
|
-
"@webiny/
|
|
17
|
-
"@webiny/form": "0.0.0-unstable.78f581c1d2",
|
|
18
|
-
"@webiny/ui": "0.0.0-unstable.78f581c1d2",
|
|
19
|
-
"@webiny/validation": "0.0.0-unstable.78f581c1d2",
|
|
17
|
+
"@webiny/admin-ui": "0.0.0-unstable.7be00a75a9",
|
|
18
|
+
"@webiny/app-admin": "0.0.0-unstable.7be00a75a9",
|
|
19
|
+
"@webiny/form": "0.0.0-unstable.7be00a75a9",
|
|
20
|
+
"@webiny/validation": "0.0.0-unstable.7be00a75a9",
|
|
20
21
|
"apollo-cache": "1.3.5",
|
|
21
22
|
"apollo-client": "2.6.10",
|
|
22
23
|
"apollo-link": "1.2.14",
|
|
23
24
|
"apollo-utilities": "1.3.4",
|
|
24
|
-
"graphql": "
|
|
25
|
+
"graphql": "16.14.0",
|
|
25
26
|
"graphql-tag": "2.12.6",
|
|
26
|
-
"
|
|
27
|
-
"react": "
|
|
28
|
-
"react-dom": "17.0.2",
|
|
29
|
-
"react-helmet": "6.1.0"
|
|
27
|
+
"react": "18.3.1",
|
|
28
|
+
"react-dom": "18.3.1"
|
|
30
29
|
},
|
|
31
30
|
"devDependencies": {
|
|
32
|
-
"@
|
|
33
|
-
"@
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"@babel/preset-typescript": "^7.18.6",
|
|
37
|
-
"@types/react": "17.0.39",
|
|
38
|
-
"@webiny/cli": "^0.0.0-unstable.78f581c1d2",
|
|
39
|
-
"@webiny/project-utils": "^0.0.0-unstable.78f581c1d2",
|
|
40
|
-
"babel-plugin-emotion": "^9.2.8",
|
|
41
|
-
"rimraf": "^3.0.2",
|
|
42
|
-
"ttypescript": "^1.5.12",
|
|
43
|
-
"typescript": "4.7.4"
|
|
31
|
+
"@types/react": "18.3.29",
|
|
32
|
+
"@webiny/build-tools": "0.0.0-unstable.7be00a75a9",
|
|
33
|
+
"rimraf": "6.1.3",
|
|
34
|
+
"typescript": "6.0.3"
|
|
44
35
|
},
|
|
45
36
|
"publishConfig": {
|
|
46
|
-
"access": "public"
|
|
47
|
-
"directory": "dist"
|
|
48
|
-
},
|
|
49
|
-
"scripts": {
|
|
50
|
-
"build": "yarn webiny run build",
|
|
51
|
-
"watch": "yarn webiny run watch"
|
|
37
|
+
"access": "public"
|
|
52
38
|
},
|
|
53
39
|
"svgo": {
|
|
54
40
|
"plugins": {
|
|
55
41
|
"removeViewBox": false
|
|
56
42
|
}
|
|
57
43
|
},
|
|
58
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "b8aec8a1be3f25c3b428b357fe1e352c7cbff9ae",
|
|
45
|
+
"webiny": {
|
|
46
|
+
"publishFrom": "dist"
|
|
47
|
+
}
|
|
59
48
|
}
|
package/routes.d.ts
ADDED
package/routes.js
ADDED
package/routes.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sources":["../src/routes.ts"],"sourcesContent":["import { Route } from \"@webiny/app-admin\";\n\nexport const Routes = {\n Settings: new Route({\n name: \"Mailer/Settings\",\n path: \"/mailer/settings\"\n })\n};\n"],"names":["Routes","Route"],"mappings":";AAEO,MAAMA,SAAS;IAClB,UAAU,IAAIC,MAAM;QAChB,MAAM;QACN,MAAM;IACV;AACJ"}
|
package/types.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Identity } from "@webiny/app-admin/domain/Identity.js";
|
|
2
2
|
/**
|
|
3
3
|
* A base security permission for APW.
|
|
4
4
|
*
|
|
5
5
|
* @category SecurityPermission
|
|
6
6
|
*/
|
|
7
|
-
export interface MailerSecurityPermission extends
|
|
7
|
+
export interface MailerSecurityPermission extends Identity.Permission {
|
|
8
8
|
changeSettings?: boolean;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
@@ -13,6 +13,7 @@ export interface MailerSecurityPermission extends SecurityPermission {
|
|
|
13
13
|
*/
|
|
14
14
|
export interface TransportSettings {
|
|
15
15
|
host: string;
|
|
16
|
+
port?: number;
|
|
16
17
|
user: string;
|
|
17
18
|
from: string;
|
|
18
19
|
replyTo?: string;
|
package/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const Settings: React.
|
|
2
|
+
export declare const Settings: () => React.JSX.Element;
|
|
@@ -1,252 +1,203 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
21
|
-
|
|
22
|
-
var _appAdmin = require("@webiny/app-admin");
|
|
23
|
-
|
|
24
|
-
var _reactComponents = require("@apollo/react-components");
|
|
25
|
-
|
|
26
|
-
var _form = require("@webiny/form");
|
|
27
|
-
|
|
28
|
-
var _SimpleForm = require("@webiny/app-admin/components/SimpleForm");
|
|
29
|
-
|
|
30
|
-
var _Progress = require("@webiny/ui/Progress");
|
|
31
|
-
|
|
32
|
-
var _Grid = require("@webiny/ui/Grid");
|
|
33
|
-
|
|
34
|
-
var _Input = require("@webiny/ui/Input");
|
|
35
|
-
|
|
36
|
-
var _validation = require("@webiny/validation");
|
|
37
|
-
|
|
38
|
-
var _Button = require("@webiny/ui/Button");
|
|
39
|
-
|
|
40
|
-
var _graphql = require("./graphql");
|
|
41
|
-
|
|
42
|
-
var _Alert = require("@webiny/ui/Alert");
|
|
43
|
-
|
|
44
|
-
var displayErrors = function displayErrors(errors) {
|
|
45
|
-
if (!errors) {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, errors.map(function (error) {
|
|
50
|
-
var field = error.path[0];
|
|
51
|
-
|
|
52
|
-
if (!field) {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return /*#__PURE__*/_react.default.createElement(_Alert.Alert, {
|
|
57
|
-
key: "".concat(field),
|
|
58
|
-
title: error.message,
|
|
59
|
-
type: "danger"
|
|
60
|
-
});
|
|
61
|
-
}));
|
|
1
|
+
import react, { useEffect, useRef, useState } from "react";
|
|
2
|
+
import { CenteredView, SimpleForm, SimpleFormContent, SimpleFormFooter, SimpleFormHeader, useSnackbar } from "@webiny/app-admin";
|
|
3
|
+
import { Mutation, Query } from "@apollo/react-components";
|
|
4
|
+
import { Form } from "@webiny/form";
|
|
5
|
+
import { validation } from "@webiny/validation";
|
|
6
|
+
import { GET_SETTINGS_QUERY, SAVE_SETTINGS_MUTATION } from "./graphql.js";
|
|
7
|
+
import { Alert, Button, Grid, Input, OverlayLoader } from "@webiny/admin-ui";
|
|
8
|
+
const displayErrors = (errors)=>{
|
|
9
|
+
if (!errors) return null;
|
|
10
|
+
return /*#__PURE__*/ react.createElement(react.Fragment, null, errors.map((error)=>{
|
|
11
|
+
const field = error.path[0];
|
|
12
|
+
if (!field) return null;
|
|
13
|
+
return /*#__PURE__*/ react.createElement(Alert, {
|
|
14
|
+
key: `${field}`,
|
|
15
|
+
title: "Error",
|
|
16
|
+
type: "danger"
|
|
17
|
+
}, error.message);
|
|
18
|
+
}));
|
|
62
19
|
};
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return /*#__PURE__*/_react.default.createElement(_reactComponents.Query, {
|
|
88
|
-
query: _graphql.GET_SETTINGS_QUERY
|
|
89
|
-
}, function (_ref) {
|
|
90
|
-
var response = _ref.data,
|
|
91
|
-
queryInProgress = _ref.loading;
|
|
92
|
-
return /*#__PURE__*/_react.default.createElement(_reactComponents.Mutation, {
|
|
93
|
-
mutation: _graphql.SAVE_SETTINGS_MUTATION
|
|
94
|
-
}, function (update, result) {
|
|
95
|
-
var _ref2 = (response === null || response === void 0 ? void 0 : response.mailer.settings) || {},
|
|
96
|
-
settingsData = _ref2.data,
|
|
97
|
-
settingsError = _ref2.error;
|
|
98
|
-
|
|
99
|
-
var mutationInProgress = result.loading;
|
|
100
|
-
|
|
101
|
-
var _onSubmit = /*#__PURE__*/function () {
|
|
102
|
-
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(data) {
|
|
103
|
-
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
104
|
-
while (1) {
|
|
105
|
-
switch (_context.prev = _context.next) {
|
|
106
|
-
case 0:
|
|
107
|
-
setErrors([]);
|
|
108
|
-
_context.next = 3;
|
|
109
|
-
return update({
|
|
20
|
+
const Settings = ()=>{
|
|
21
|
+
const { showSnackbar } = useSnackbar();
|
|
22
|
+
const password = useRef(null);
|
|
23
|
+
const [errors, setErrors] = useState();
|
|
24
|
+
useEffect(()=>{
|
|
25
|
+
const t = setTimeout(()=>{
|
|
26
|
+
if (!password.current) return;
|
|
27
|
+
password.current.value = "";
|
|
28
|
+
}, 300);
|
|
29
|
+
return ()=>{
|
|
30
|
+
clearTimeout(t);
|
|
31
|
+
};
|
|
32
|
+
}, []);
|
|
33
|
+
return /*#__PURE__*/ react.createElement(Query, {
|
|
34
|
+
query: GET_SETTINGS_QUERY
|
|
35
|
+
}, ({ data: response, loading: queryInProgress })=>/*#__PURE__*/ react.createElement(Mutation, {
|
|
36
|
+
mutation: SAVE_SETTINGS_MUTATION
|
|
37
|
+
}, (update, result)=>{
|
|
38
|
+
const { data: settingsData, error: settingsError } = response?.mailer.settings || {};
|
|
39
|
+
const settingsSource = settingsData?.source;
|
|
40
|
+
const { loading: mutationInProgress } = result;
|
|
41
|
+
const onSubmit = async (data)=>{
|
|
42
|
+
setErrors([]);
|
|
43
|
+
const response = await update({
|
|
110
44
|
variables: {
|
|
111
|
-
|
|
45
|
+
data
|
|
112
46
|
},
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
47
|
+
refetchQueries: [
|
|
48
|
+
{
|
|
49
|
+
query: GET_SETTINGS_QUERY
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
awaitRefetchQueries: true
|
|
53
|
+
});
|
|
54
|
+
const saveError = response.data?.mailer.settings.error;
|
|
55
|
+
if (saveError) {
|
|
56
|
+
const validationErrors = saveError.data?.errors;
|
|
57
|
+
if (validationErrors) setErrors(validationErrors);
|
|
58
|
+
showSnackbar("Settings not updated! Please check your network and console logs for detailed information.");
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
showSnackbar("Settings updated successfully.");
|
|
62
|
+
};
|
|
63
|
+
if ("code" === settingsSource) return /*#__PURE__*/ react.createElement(CenteredView, null, /*#__PURE__*/ react.createElement(SimpleForm, null, /*#__PURE__*/ react.createElement(SimpleFormHeader, {
|
|
64
|
+
title: "Mailer Settings"
|
|
65
|
+
}), /*#__PURE__*/ react.createElement(SimpleFormContent, null, /*#__PURE__*/ react.createElement(Grid, null, /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
66
|
+
span: 12
|
|
67
|
+
}, /*#__PURE__*/ react.createElement(Alert, {
|
|
68
|
+
title: "Managed by code",
|
|
69
|
+
type: "info"
|
|
70
|
+
}, "Mailer settings are managed by code. Edit", " ", /*#__PURE__*/ react.createElement("code", null, "webiny.config.tsx"), " to change them.")), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
71
|
+
span: 12
|
|
72
|
+
}, /*#__PURE__*/ react.createElement(Input, {
|
|
73
|
+
size: "lg",
|
|
74
|
+
type: "text",
|
|
75
|
+
label: "Hostname",
|
|
76
|
+
value: settingsData?.host ?? "",
|
|
77
|
+
disabled: true
|
|
78
|
+
})), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
79
|
+
span: 12
|
|
80
|
+
}, /*#__PURE__*/ react.createElement(Input, {
|
|
81
|
+
size: "lg",
|
|
82
|
+
type: "number",
|
|
83
|
+
label: "Port",
|
|
84
|
+
value: String(settingsData?.port ?? ""),
|
|
85
|
+
disabled: true
|
|
86
|
+
})), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
87
|
+
span: 12
|
|
88
|
+
}, /*#__PURE__*/ react.createElement(Input, {
|
|
89
|
+
size: "lg",
|
|
90
|
+
type: "text",
|
|
91
|
+
label: "User",
|
|
92
|
+
value: settingsData?.user ?? "",
|
|
93
|
+
disabled: true
|
|
94
|
+
})), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
95
|
+
span: 12
|
|
96
|
+
}, /*#__PURE__*/ react.createElement(Input, {
|
|
97
|
+
size: "lg",
|
|
98
|
+
type: "text",
|
|
99
|
+
label: "From",
|
|
100
|
+
value: settingsData?.from ?? "",
|
|
101
|
+
disabled: true
|
|
102
|
+
})), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
103
|
+
span: 12
|
|
104
|
+
}, /*#__PURE__*/ react.createElement(Input, {
|
|
105
|
+
size: "lg",
|
|
106
|
+
type: "text",
|
|
107
|
+
label: "Reply-To",
|
|
108
|
+
value: settingsData?.replyTo ?? "",
|
|
109
|
+
disabled: true
|
|
110
|
+
})))), /*#__PURE__*/ react.createElement(SimpleFormFooter, null, "")));
|
|
111
|
+
if (settingsError) return /*#__PURE__*/ react.createElement(SimpleForm, null, /*#__PURE__*/ react.createElement(SimpleFormHeader, {
|
|
112
|
+
title: "Mailer Settings"
|
|
113
|
+
}), /*#__PURE__*/ react.createElement(SimpleFormContent, null, /*#__PURE__*/ react.createElement(Grid, null, /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
114
|
+
span: 12
|
|
115
|
+
}, /*#__PURE__*/ react.createElement(Alert, {
|
|
116
|
+
title: settingsError.message,
|
|
117
|
+
type: "danger"
|
|
118
|
+
})))), /*#__PURE__*/ react.createElement(SimpleFormFooter, null, ""));
|
|
119
|
+
const passwordValidators = [];
|
|
120
|
+
if (!settingsData?.user) passwordValidators.push(validation.create("required,minLength:5"));
|
|
121
|
+
return /*#__PURE__*/ react.createElement(CenteredView, null, /*#__PURE__*/ react.createElement(Form, {
|
|
122
|
+
data: settingsData || {},
|
|
123
|
+
onSubmit: (data)=>{
|
|
124
|
+
onSubmit(data);
|
|
125
|
+
}
|
|
126
|
+
}, ({ Bind, form })=>/*#__PURE__*/ react.createElement(SimpleForm, null, (queryInProgress || mutationInProgress) && /*#__PURE__*/ react.createElement(OverlayLoader, null), /*#__PURE__*/ react.createElement(SimpleFormHeader, {
|
|
127
|
+
title: "Mailer Settings"
|
|
128
|
+
}), /*#__PURE__*/ react.createElement(SimpleFormContent, null, displayErrors(errors), /*#__PURE__*/ react.createElement(Grid, null, /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
129
|
+
span: 12
|
|
130
|
+
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
131
|
+
name: "host",
|
|
132
|
+
validators: [
|
|
133
|
+
validation.create("required,minLength:1")
|
|
134
|
+
]
|
|
135
|
+
}, /*#__PURE__*/ react.createElement(Input, {
|
|
136
|
+
size: "lg",
|
|
137
|
+
type: "text",
|
|
138
|
+
label: "Hostname"
|
|
139
|
+
}))), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
140
|
+
span: 12
|
|
141
|
+
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
142
|
+
name: "port"
|
|
143
|
+
}, /*#__PURE__*/ react.createElement(Input, {
|
|
144
|
+
size: "lg",
|
|
145
|
+
type: "number",
|
|
146
|
+
label: "Port"
|
|
147
|
+
}))), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
148
|
+
span: 12
|
|
149
|
+
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
150
|
+
name: "user",
|
|
151
|
+
validators: [
|
|
152
|
+
validation.create("required,minLength:1")
|
|
153
|
+
]
|
|
154
|
+
}, /*#__PURE__*/ react.createElement(Input, {
|
|
155
|
+
size: "lg",
|
|
156
|
+
type: "text",
|
|
157
|
+
label: "User",
|
|
158
|
+
autoComplete: "new-password"
|
|
159
|
+
}))), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
160
|
+
span: 12
|
|
161
|
+
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
162
|
+
name: "password",
|
|
163
|
+
validators: passwordValidators
|
|
164
|
+
}, /*#__PURE__*/ react.createElement(Input, {
|
|
165
|
+
size: "lg",
|
|
166
|
+
label: "Password",
|
|
167
|
+
type: "password",
|
|
168
|
+
autoComplete: "new-password",
|
|
169
|
+
value: "",
|
|
170
|
+
inputRef: password
|
|
171
|
+
}))), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
172
|
+
span: 12
|
|
173
|
+
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
174
|
+
name: "from",
|
|
175
|
+
validators: [
|
|
176
|
+
validation.create("required,minLength:1,email")
|
|
177
|
+
]
|
|
178
|
+
}, /*#__PURE__*/ react.createElement(Input, {
|
|
179
|
+
size: "lg",
|
|
180
|
+
type: "text",
|
|
181
|
+
label: "Mail from"
|
|
182
|
+
}))), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
183
|
+
span: 12
|
|
184
|
+
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
185
|
+
name: "replyTo",
|
|
186
|
+
validators: [
|
|
187
|
+
validation.create("email")
|
|
188
|
+
]
|
|
189
|
+
}, /*#__PURE__*/ react.createElement(Input, {
|
|
190
|
+
size: "lg",
|
|
191
|
+
type: "text",
|
|
192
|
+
label: "Mail reply-to"
|
|
193
|
+
}))))), /*#__PURE__*/ react.createElement(SimpleFormFooter, null, /*#__PURE__*/ react.createElement(Button, {
|
|
194
|
+
text: "Save",
|
|
195
|
+
onClick: (ev)=>{
|
|
196
|
+
form.submit(ev);
|
|
138
197
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
case 3:
|
|
142
|
-
case "end":
|
|
143
|
-
return _context.stop();
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}, _callee);
|
|
198
|
+
})))));
|
|
147
199
|
}));
|
|
148
|
-
|
|
149
|
-
return function onSubmit(_x) {
|
|
150
|
-
return _ref3.apply(this, arguments);
|
|
151
|
-
};
|
|
152
|
-
}();
|
|
153
|
-
|
|
154
|
-
if (settingsError) {
|
|
155
|
-
var _settingsError$data;
|
|
156
|
-
|
|
157
|
-
return /*#__PURE__*/_react.default.createElement(_appAdmin.CenteredView, null, /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormHeader, {
|
|
158
|
-
title: "Mailer Settings"
|
|
159
|
-
}), /*#__PURE__*/_react.default.createElement(_Grid.Grid, {
|
|
160
|
-
style: {
|
|
161
|
-
backgroundColor: "#FFFFFF"
|
|
162
|
-
}
|
|
163
|
-
}, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
164
|
-
span: 12
|
|
165
|
-
}, /*#__PURE__*/_react.default.createElement(_Alert.Alert, {
|
|
166
|
-
title: settingsError.message,
|
|
167
|
-
type: "danger"
|
|
168
|
-
}), ((_settingsError$data = settingsError.data) === null || _settingsError$data === void 0 ? void 0 : _settingsError$data.description) && /*#__PURE__*/_react.default.createElement("p", null, settingsError.data.description))));
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
var passwordValidators = [];
|
|
172
|
-
|
|
173
|
-
if (!(settingsData !== null && settingsData !== void 0 && settingsData.user)) {
|
|
174
|
-
passwordValidators.push(_validation.validation.create("required,minLength:5"));
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
return /*#__PURE__*/_react.default.createElement(_appAdmin.CenteredView, null, /*#__PURE__*/_react.default.createElement(_form.Form, {
|
|
178
|
-
data: settingsData || {},
|
|
179
|
-
onSubmit: function onSubmit(data) {
|
|
180
|
-
/**
|
|
181
|
-
* We are positive that data is TransportSettings.
|
|
182
|
-
*/
|
|
183
|
-
_onSubmit(data);
|
|
184
|
-
}
|
|
185
|
-
}, function (_ref5) {
|
|
186
|
-
var Bind = _ref5.Bind,
|
|
187
|
-
form = _ref5.form;
|
|
188
|
-
return /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleForm, null, (queryInProgress || mutationInProgress) && /*#__PURE__*/_react.default.createElement(_Progress.CircularProgress, null), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormHeader, {
|
|
189
|
-
title: "Mailer Settings"
|
|
190
|
-
}), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormContent, null, displayErrors(errors), /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
191
|
-
span: 12
|
|
192
|
-
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
193
|
-
name: "host",
|
|
194
|
-
validators: [_validation.validation.create("required,minLength:1")]
|
|
195
|
-
}, /*#__PURE__*/_react.default.createElement(_Input.Input, {
|
|
196
|
-
type: "text",
|
|
197
|
-
label: "Hostname"
|
|
198
|
-
}))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
199
|
-
span: 12
|
|
200
|
-
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
201
|
-
name: "port"
|
|
202
|
-
}, /*#__PURE__*/_react.default.createElement(_Input.Input, {
|
|
203
|
-
type: "number",
|
|
204
|
-
label: "Port"
|
|
205
|
-
}))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
206
|
-
span: 12
|
|
207
|
-
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
208
|
-
name: "user",
|
|
209
|
-
validators: [_validation.validation.create("required,minLength:1")]
|
|
210
|
-
}, /*#__PURE__*/_react.default.createElement(_Input.Input, {
|
|
211
|
-
type: "text",
|
|
212
|
-
label: "User",
|
|
213
|
-
autoComplete: "new-password"
|
|
214
|
-
}))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
215
|
-
span: 12
|
|
216
|
-
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
217
|
-
name: "password",
|
|
218
|
-
validators: passwordValidators
|
|
219
|
-
}, /*#__PURE__*/_react.default.createElement(_Input.Input, {
|
|
220
|
-
label: "Password",
|
|
221
|
-
type: "password",
|
|
222
|
-
autoComplete: "new-password",
|
|
223
|
-
value: "" // @ts-ignore
|
|
224
|
-
,
|
|
225
|
-
inputRef: password
|
|
226
|
-
}))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
227
|
-
span: 12
|
|
228
|
-
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
229
|
-
name: "from",
|
|
230
|
-
validators: [_validation.validation.create("required,minLength:1,email")]
|
|
231
|
-
}, /*#__PURE__*/_react.default.createElement(_Input.Input, {
|
|
232
|
-
type: "text",
|
|
233
|
-
label: "Mail from"
|
|
234
|
-
}))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
235
|
-
span: 12
|
|
236
|
-
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
237
|
-
name: "replyTo",
|
|
238
|
-
validators: [_validation.validation.create("email")]
|
|
239
|
-
}, /*#__PURE__*/_react.default.createElement(_Input.Input, {
|
|
240
|
-
type: "text",
|
|
241
|
-
label: "Mail reply-to"
|
|
242
|
-
}))))), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormFooter, null, /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
|
|
243
|
-
onClick: function onClick(ev) {
|
|
244
|
-
form.submit(ev);
|
|
245
|
-
}
|
|
246
|
-
}, "Save Settings")));
|
|
247
|
-
}));
|
|
248
|
-
});
|
|
249
|
-
});
|
|
250
200
|
};
|
|
201
|
+
export { Settings };
|
|
251
202
|
|
|
252
|
-
|
|
203
|
+
//# sourceMappingURL=Settings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["displayErrors","errors","map","error","field","path","message","Settings","useSnackbar","showSnackbar","password","useRef","useState","setErrors","useEffect","t","setTimeout","current","value","clearTimeout","GET_SETTINGS_QUERY","response","data","queryInProgress","loading","SAVE_SETTINGS_MUTATION","update","result","mailer","settings","settingsData","settingsError","mutationInProgress","onSubmit","variables","cache","structuredClone","readQuery","query","updateData","updateError","writeQuery","backgroundColor","description","passwordValidators","user","push","validation","create","Bind","form","ev","submit"],"sources":["Settings.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { CenteredView, useSnackbar } from \"@webiny/app-admin\";\nimport { Mutation, Query } from \"@apollo/react-components\";\nimport { Form } from \"@webiny/form\";\nimport {\n SimpleForm,\n SimpleFormContent,\n SimpleFormFooter,\n SimpleFormHeader\n} from \"@webiny/app-admin/components/SimpleForm\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { validation } from \"@webiny/validation\";\nimport { ButtonPrimary } from \"@webiny/ui/Button\";\nimport {\n GET_SETTINGS_QUERY,\n SettingsQueryResponse,\n SAVE_SETTINGS_MUTATION,\n SaveSettingsMutationVariables,\n SaveSettingsMutationResponse\n} from \"./graphql\";\nimport { TransportSettings, ValidationError } from \"~/types\";\nimport { Alert } from \"@webiny/ui/Alert\";\nimport { Validator } from \"@webiny/validation/types\";\n\nconst displayErrors = (errors?: ValidationError[]) => {\n if (!errors) {\n return null;\n }\n return (\n <>\n {errors.map(error => {\n const field = error.path[0];\n if (!field) {\n return null;\n }\n return <Alert key={`${field}`} title={error.message} type=\"danger\" />;\n })}\n </>\n );\n};\n\nexport const Settings: React.FC = () => {\n const { showSnackbar } = useSnackbar();\n\n const password = useRef<HTMLInputElement>();\n\n const [errors, setErrors] = useState<ValidationError[] | undefined>();\n\n useEffect(() => {\n const t = setTimeout(() => {\n if (!password.current) {\n return;\n }\n password.current.value = \"\";\n }, 300);\n\n return () => {\n clearTimeout(t);\n };\n }, []);\n\n return (\n <Query<SettingsQueryResponse> query={GET_SETTINGS_QUERY}>\n {({ data: response, loading: queryInProgress }) => (\n <Mutation<SaveSettingsMutationResponse, SaveSettingsMutationVariables>\n mutation={SAVE_SETTINGS_MUTATION}\n >\n {(update, result) => {\n const { data: settingsData, error: settingsError } =\n response?.mailer.settings || {};\n const { loading: mutationInProgress } = result;\n\n const onSubmit = async (data: TransportSettings): Promise<void> => {\n setErrors([]);\n await update({\n variables: {\n data\n },\n update: (cache, result) => {\n const data = structuredClone(\n cache.readQuery({ query: GET_SETTINGS_QUERY })\n );\n\n const { data: updateData, error: updateError } =\n result.data?.mailer.settings || {};\n\n const errors = updateError?.data.errors;\n if (errors) {\n setErrors(errors);\n showSnackbar(\n \"Settings not updated! Please check your network and console logs for detailed information.\"\n );\n return;\n }\n\n data.mailer.settings.data = {\n ...settingsData,\n ...updateData\n };\n\n cache.writeQuery({\n query: GET_SETTINGS_QUERY,\n data\n });\n showSnackbar(\"Settings updated successfully.\");\n }\n });\n };\n if (settingsError) {\n return (\n <CenteredView>\n <SimpleFormHeader title=\"Mailer Settings\" />\n <Grid style={{ backgroundColor: \"#FFFFFF\" }}>\n <Cell span={12}>\n <Alert title={settingsError.message} type=\"danger\" />\n {settingsError.data?.description && (\n <p>{settingsError.data.description}</p>\n )}\n </Cell>\n </Grid>\n </CenteredView>\n );\n }\n\n const passwordValidators: Validator[] = [];\n if (!settingsData?.user) {\n passwordValidators.push(validation.create(\"required,minLength:5\"));\n }\n\n return (\n <CenteredView>\n <Form\n data={settingsData || {}}\n onSubmit={data => {\n /**\n * We are positive that data is TransportSettings.\n */\n onSubmit(data as unknown as TransportSettings);\n }}\n >\n {({ Bind, form }) => (\n <SimpleForm>\n {(queryInProgress || mutationInProgress) && (\n <CircularProgress />\n )}\n <SimpleFormHeader title=\"Mailer Settings\" />\n <SimpleFormContent>\n {displayErrors(errors)}\n <Grid>\n <Cell span={12}>\n <Bind\n name={\"host\"}\n validators={[\n validation.create(\n \"required,minLength:1\"\n )\n ]}\n >\n <Input type=\"text\" label=\"Hostname\" />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind name={\"port\"}>\n <Input type=\"number\" label=\"Port\" />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind\n name={\"user\"}\n validators={[\n validation.create(\n \"required,minLength:1\"\n )\n ]}\n >\n <Input\n type=\"text\"\n label=\"User\"\n autoComplete=\"new-password\"\n />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind\n name={\"password\"}\n validators={passwordValidators}\n >\n <Input\n label=\"Password\"\n type=\"password\"\n autoComplete=\"new-password\"\n value={\"\"}\n // @ts-ignore\n inputRef={password}\n />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind\n name={\"from\"}\n validators={[\n validation.create(\n \"required,minLength:1,email\"\n )\n ]}\n >\n <Input type=\"text\" label=\"Mail from\" />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind\n name={\"replyTo\"}\n validators={[\n validation.create(\"email\")\n ]}\n >\n <Input\n type=\"text\"\n label=\"Mail reply-to\"\n />\n </Bind>\n </Cell>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>\n <ButtonPrimary\n onClick={ev => {\n form.submit(ev);\n }}\n >\n Save Settings\n </ButtonPrimary>\n </SimpleFormFooter>\n </SimpleForm>\n )}\n </Form>\n </CenteredView>\n );\n }}\n </Mutation>\n )}\n </Query>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"views/settings/Settings.js","sources":["../../../src/views/settings/Settings.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { CenteredView, useSnackbar } from \"@webiny/app-admin\";\nimport { Mutation, Query } from \"@apollo/react-components\";\nimport { Form } from \"@webiny/form\";\nimport {\n SimpleForm,\n SimpleFormContent,\n SimpleFormFooter,\n SimpleFormHeader\n} from \"@webiny/app-admin\";\nimport { validation } from \"@webiny/validation\";\nimport type {\n SaveSettingsMutationResponse,\n SaveSettingsMutationVariables,\n SettingsQueryResponse\n} from \"./graphql.js\";\nimport { GET_SETTINGS_QUERY, SAVE_SETTINGS_MUTATION } from \"./graphql.js\";\nimport type { TransportSettings, ValidationError } from \"~/types.js\";\nimport type { Validator } from \"@webiny/validation/types.js\";\nimport { Alert, Button, Grid, Input, OverlayLoader } from \"@webiny/admin-ui\";\n\nconst displayErrors = (errors?: ValidationError[]) => {\n if (!errors) {\n return null;\n }\n return (\n <>\n {errors.map(error => {\n const field = error.path[0];\n if (!field) {\n return null;\n }\n return (\n <Alert key={`${field}`} title={\"Error\"} type=\"danger\">\n {error.message}\n </Alert>\n );\n })}\n </>\n );\n};\n\nexport const Settings = () => {\n const { showSnackbar } = useSnackbar();\n\n const password = useRef<HTMLInputElement>(null);\n\n const [errors, setErrors] = useState<ValidationError[] | undefined>();\n\n useEffect(() => {\n const t = setTimeout(() => {\n if (!password.current) {\n return;\n }\n password.current.value = \"\";\n }, 300);\n\n return () => {\n clearTimeout(t);\n };\n }, []);\n\n return (\n <Query<SettingsQueryResponse> query={GET_SETTINGS_QUERY}>\n {({ data: response, loading: queryInProgress }) => (\n <Mutation<SaveSettingsMutationResponse, SaveSettingsMutationVariables>\n mutation={SAVE_SETTINGS_MUTATION}\n >\n {(update, result) => {\n const { data: settingsData, error: settingsError } =\n response?.mailer.settings || {};\n const settingsSource = settingsData?.source;\n const { loading: mutationInProgress } = result;\n\n const onSubmit = async (data: TransportSettings): Promise<void> => {\n setErrors([]);\n const response = await update({\n variables: { data },\n refetchQueries: [{ query: GET_SETTINGS_QUERY }],\n awaitRefetchQueries: true\n });\n\n const saveError = response.data?.mailer.settings.error;\n if (saveError) {\n const validationErrors = saveError.data?.errors;\n if (validationErrors) {\n setErrors(validationErrors);\n }\n showSnackbar(\n \"Settings not updated! Please check your network and console logs for detailed information.\"\n );\n return;\n }\n showSnackbar(\"Settings updated successfully.\");\n };\n if (settingsSource === \"code\") {\n return (\n <CenteredView>\n <SimpleForm>\n <SimpleFormHeader title=\"Mailer Settings\" />\n <SimpleFormContent>\n <Grid>\n <Grid.Column span={12}>\n <Alert title=\"Managed by code\" type=\"info\">\n Mailer settings are managed by code. Edit{\" \"}\n <code>webiny.config.tsx</code> to change\n them.\n </Alert>\n </Grid.Column>\n <Grid.Column span={12}>\n <Input\n size=\"lg\"\n type=\"text\"\n label=\"Hostname\"\n value={settingsData?.host ?? \"\"}\n disabled\n />\n </Grid.Column>\n <Grid.Column span={12}>\n <Input\n size=\"lg\"\n type=\"number\"\n label=\"Port\"\n value={String(settingsData?.port ?? \"\")}\n disabled\n />\n </Grid.Column>\n <Grid.Column span={12}>\n <Input\n size=\"lg\"\n type=\"text\"\n label=\"User\"\n value={settingsData?.user ?? \"\"}\n disabled\n />\n </Grid.Column>\n <Grid.Column span={12}>\n <Input\n size=\"lg\"\n type=\"text\"\n label=\"From\"\n value={settingsData?.from ?? \"\"}\n disabled\n />\n </Grid.Column>\n <Grid.Column span={12}>\n <Input\n size=\"lg\"\n type=\"text\"\n label=\"Reply-To\"\n value={settingsData?.replyTo ?? \"\"}\n disabled\n />\n </Grid.Column>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>{\"\"}</SimpleFormFooter>\n </SimpleForm>\n </CenteredView>\n );\n }\n if (settingsError) {\n return (\n <SimpleForm>\n <SimpleFormHeader title=\"Mailer Settings\" />\n <SimpleFormContent>\n <Grid>\n <Grid.Column span={12}>\n <Alert\n title={settingsError.message}\n type=\"danger\"\n />\n </Grid.Column>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>{\"\"}</SimpleFormFooter>\n </SimpleForm>\n );\n }\n\n const passwordValidators: Validator[] = [];\n if (!settingsData?.user) {\n passwordValidators.push(validation.create(\"required,minLength:5\"));\n }\n\n return (\n <CenteredView>\n <Form\n data={settingsData || {}}\n onSubmit={data => {\n /**\n * We are positive that data is TransportSettings.\n */\n onSubmit(data as unknown as TransportSettings);\n }}\n >\n {({ Bind, form }) => (\n <SimpleForm>\n {(queryInProgress || mutationInProgress) && (\n <OverlayLoader />\n )}\n <SimpleFormHeader title=\"Mailer Settings\" />\n <SimpleFormContent>\n {displayErrors(errors)}\n <Grid>\n <Grid.Column span={12}>\n <Bind\n name={\"host\"}\n validators={[\n validation.create(\n \"required,minLength:1\"\n )\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"Hostname\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"port\"}>\n <Input\n size={\"lg\"}\n type=\"number\"\n label=\"Port\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"user\"}\n validators={[\n validation.create(\n \"required,minLength:1\"\n )\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"User\"\n autoComplete=\"new-password\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"password\"}\n validators={passwordValidators}\n >\n <Input\n size={\"lg\"}\n label=\"Password\"\n type=\"password\"\n autoComplete=\"new-password\"\n value={\"\"}\n inputRef={password}\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"from\"}\n validators={[\n validation.create(\n \"required,minLength:1,email\"\n )\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"Mail from\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={\"replyTo\"}\n validators={[\n validation.create(\"email\")\n ]}\n >\n <Input\n size={\"lg\"}\n type=\"text\"\n label=\"Mail reply-to\"\n />\n </Bind>\n </Grid.Column>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>\n <Button\n text={\"Save\"}\n onClick={ev => {\n form.submit(ev);\n }}\n />\n </SimpleFormFooter>\n </SimpleForm>\n )}\n </Form>\n </CenteredView>\n );\n }}\n </Mutation>\n )}\n </Query>\n );\n};\n"],"names":["displayErrors","errors","error","field","Alert","Settings","showSnackbar","useSnackbar","password","useRef","setErrors","useState","useEffect","t","setTimeout","clearTimeout","Query","GET_SETTINGS_QUERY","response","queryInProgress","Mutation","SAVE_SETTINGS_MUTATION","update","result","settingsData","settingsError","settingsSource","mutationInProgress","onSubmit","data","saveError","validationErrors","CenteredView","SimpleForm","SimpleFormHeader","SimpleFormContent","Grid","Input","String","SimpleFormFooter","passwordValidators","validation","Form","Bind","form","OverlayLoader","Button","ev"],"mappings":"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"}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
|
-
import { ApiError, TransportSettings, ValidationErrors } from "../../types";
|
|
1
|
+
import type { ApiError, TransportSettings, ValidationErrors } from "../../types.js";
|
|
2
|
+
export type MailerSettingsSource = "code" | "storage" | null;
|
|
3
|
+
/** Settings as they appear in GraphQL responses β never includes the password. */
|
|
4
|
+
export type PublicTransportSettings = Omit<TransportSettings, "password"> & {
|
|
5
|
+
source?: MailerSettingsSource;
|
|
6
|
+
};
|
|
2
7
|
export interface SettingsQueryResponse {
|
|
3
8
|
mailer: {
|
|
4
9
|
settings: {
|
|
5
|
-
data:
|
|
10
|
+
data: PublicTransportSettings | null;
|
|
6
11
|
error: ApiError | null;
|
|
7
12
|
};
|
|
8
13
|
};
|
|
9
14
|
}
|
|
10
15
|
export declare const GET_SETTINGS_QUERY: import("graphql").DocumentNode;
|
|
11
16
|
export interface SaveSettingsMutationVariables {
|
|
12
|
-
data: TransportSettings
|
|
13
|
-
password?: string;
|
|
14
|
-
};
|
|
17
|
+
data: TransportSettings;
|
|
15
18
|
}
|
|
16
19
|
export interface SaveSettingsMutationResponse {
|
|
17
20
|
mailer: {
|
|
18
21
|
settings: {
|
|
19
|
-
data:
|
|
22
|
+
data: PublicTransportSettings | null;
|
|
20
23
|
error: ApiError<ValidationErrors> | null;
|
|
21
24
|
};
|
|
22
25
|
};
|
|
@@ -1,21 +1,41 @@
|
|
|
1
|
-
|
|
1
|
+
import graphql_tag from "graphql-tag";
|
|
2
|
+
const SETTINGS_FIELDS = `
|
|
3
|
+
{
|
|
4
|
+
host
|
|
5
|
+
port
|
|
6
|
+
user
|
|
7
|
+
from
|
|
8
|
+
replyTo
|
|
9
|
+
source
|
|
10
|
+
}
|
|
11
|
+
`;
|
|
12
|
+
const ERROR_FIELDS = `
|
|
13
|
+
{
|
|
14
|
+
message
|
|
15
|
+
code
|
|
16
|
+
data
|
|
17
|
+
}
|
|
18
|
+
`;
|
|
19
|
+
const GET_SETTINGS_QUERY = graphql_tag`
|
|
20
|
+
query GetMailerSettings {
|
|
21
|
+
mailer {
|
|
22
|
+
settings: getSettings {
|
|
23
|
+
data ${SETTINGS_FIELDS}
|
|
24
|
+
error ${ERROR_FIELDS}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
`;
|
|
29
|
+
const SAVE_SETTINGS_MUTATION = graphql_tag`
|
|
30
|
+
mutation SaveTransportSettings($data: MailerTransportSettingsInput!) {
|
|
31
|
+
mailer {
|
|
32
|
+
settings: saveSettings(data: $data) {
|
|
33
|
+
data ${SETTINGS_FIELDS}
|
|
34
|
+
error ${ERROR_FIELDS}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
`;
|
|
39
|
+
export { GET_SETTINGS_QUERY, SAVE_SETTINGS_MUTATION };
|
|
2
40
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.SAVE_SETTINGS_MUTATION = exports.GET_SETTINGS_QUERY = void 0;
|
|
9
|
-
|
|
10
|
-
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
11
|
-
|
|
12
|
-
var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
|
|
13
|
-
|
|
14
|
-
var _templateObject, _templateObject2;
|
|
15
|
-
|
|
16
|
-
var SETTINGS_FIELDS = "\n {\n host\n port\n user\n from\n replyTo\n }\n";
|
|
17
|
-
var ERROR_FIELDS = "\n {\n message\n code\n data\n }\n";
|
|
18
|
-
var GET_SETTINGS_QUERY = (0, _graphqlTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n query GetMailerSettings {\n mailer {\n settings: getSettings {\n data ", "\n error ", "\n }\n }\n }\n"])), SETTINGS_FIELDS, ERROR_FIELDS);
|
|
19
|
-
exports.GET_SETTINGS_QUERY = GET_SETTINGS_QUERY;
|
|
20
|
-
var SAVE_SETTINGS_MUTATION = (0, _graphqlTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n mutation SaveTransportSettings($data: TransportSettingsInput!) {\n mailer {\n settings: saveSettings(data: $data) {\n data ", "\n error ", "\n }\n }\n }\n"])), SETTINGS_FIELDS, ERROR_FIELDS);
|
|
21
|
-
exports.SAVE_SETTINGS_MUTATION = SAVE_SETTINGS_MUTATION;
|
|
41
|
+
//# sourceMappingURL=graphql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"views/settings/graphql.js","sources":["../../../src/views/settings/graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport type { ApiError, TransportSettings, ValidationErrors } from \"~/types.js\";\n\nconst SETTINGS_FIELDS = `\n {\n host\n port\n user\n from\n replyTo\n source\n }\n`;\n\nconst ERROR_FIELDS = `\n {\n message\n code\n data\n }\n`;\n\nexport type MailerSettingsSource = \"code\" | \"storage\" | null;\n\n/** Settings as they appear in GraphQL responses β never includes the password. */\nexport type PublicTransportSettings = Omit<TransportSettings, \"password\"> & {\n source?: MailerSettingsSource;\n};\n\nexport interface SettingsQueryResponse {\n mailer: {\n settings: {\n data: PublicTransportSettings | null;\n error: ApiError | null;\n };\n };\n}\nexport const GET_SETTINGS_QUERY = gql`\n query GetMailerSettings {\n mailer {\n settings: getSettings {\n data ${SETTINGS_FIELDS}\n error ${ERROR_FIELDS}\n }\n }\n }\n`;\n\nexport interface SaveSettingsMutationVariables {\n data: TransportSettings;\n}\n\nexport interface SaveSettingsMutationResponse {\n mailer: {\n settings: {\n data: PublicTransportSettings | null;\n error: ApiError<ValidationErrors> | null;\n };\n };\n}\nexport const SAVE_SETTINGS_MUTATION = gql`\n mutation SaveTransportSettings($data: MailerTransportSettingsInput!) {\n mailer {\n settings: saveSettings(data: $data) {\n data ${SETTINGS_FIELDS}\n error ${ERROR_FIELDS}\n }\n }\n }\n`;\n"],"names":["SETTINGS_FIELDS","ERROR_FIELDS","GET_SETTINGS_QUERY","gql","SAVE_SETTINGS_MUTATION"],"mappings":";AAGA,MAAMA,kBAAkB,CAAC;;;;;;;;;AASzB,CAAC;AAED,MAAMC,eAAe,CAAC;;;;;;AAMtB,CAAC;AAiBM,MAAMC,qBAAqBC,WAAG,CAAC;;;;qBAIjB,EAAEH,gBAAgB;sBACjB,EAAEC,aAAa;;;;AAIrC,CAAC;AAcM,MAAMG,yBAAyBD,WAAG,CAAC;;;;qBAIrB,EAAEH,gBAAgB;sBACjB,EAAEC,aAAa;;;;AAIrC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Settings } from "./Settings";
|
|
1
|
+
import { Settings } from "./Settings.js";
|
|
2
2
|
export default Settings;
|
package/views/settings/index.js
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { Settings } from "./Settings.js";
|
|
2
|
+
const settings = Settings;
|
|
3
|
+
export default settings;
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _Settings = require("./Settings");
|
|
9
|
-
|
|
10
|
-
var _default = _Settings.Settings;
|
|
11
|
-
exports.default = _default;
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"views/settings/index.js","sources":["../../../src/views/settings/index.ts"],"sourcesContent":["import { Settings } from \"./Settings.js\";\n\nexport default Settings;\n"],"names":["Settings"],"mappings":";AAEA,iBAAeA"}
|
package/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.tsx"],"sourcesContent":["import { Module } from \"~/plugins/Module\";\n\nexport { Module };\n"],"mappings":";;;;;;;;;;;;AAAA"}
|
package/plugins/Module.d.ts
DELETED
package/plugins/Module.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
|
-
var _interopRequireWildcard3 = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
6
|
-
|
|
7
|
-
Object.defineProperty(exports, "__esModule", {
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
|
-
exports.Module = void 0;
|
|
11
|
-
|
|
12
|
-
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
13
|
-
|
|
14
|
-
var _interopRequireWildcard2 = _interopRequireDefault(require("@babel/runtime/helpers/interopRequireWildcard"));
|
|
15
|
-
|
|
16
|
-
var _react = _interopRequireWildcard3(require("react"));
|
|
17
|
-
|
|
18
|
-
var _appAdmin = require("@webiny/app-admin");
|
|
19
|
-
|
|
20
|
-
var _appSecurity = require("@webiny/app-security");
|
|
21
|
-
|
|
22
|
-
var _AdminLayout = require("@webiny/app-admin/components/AdminLayout");
|
|
23
|
-
|
|
24
|
-
var _reactHelmet = _interopRequireDefault(require("react-helmet"));
|
|
25
|
-
|
|
26
|
-
var _usePermission2 = require("../hooks/usePermission");
|
|
27
|
-
|
|
28
|
-
var _Progress = require("@webiny/ui/Progress");
|
|
29
|
-
|
|
30
|
-
var _excluded = ["children"];
|
|
31
|
-
var Settings = /*#__PURE__*/(0, _react.lazy)(function () {
|
|
32
|
-
return Promise.resolve().then(function () {
|
|
33
|
-
return (0, _interopRequireWildcard2.default)(require("../views/settings"));
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
var Loader = function Loader(_ref) {
|
|
38
|
-
var children = _ref.children,
|
|
39
|
-
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
40
|
-
return /*#__PURE__*/_react.default.createElement(_react.Suspense, {
|
|
41
|
-
fallback: /*#__PURE__*/_react.default.createElement(_Progress.CircularProgress, null)
|
|
42
|
-
}, /*#__PURE__*/_react.default.cloneElement(children, props));
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
var Module = function Module() {
|
|
46
|
-
var _usePermission = (0, _usePermission2.usePermission)(),
|
|
47
|
-
canChangeSettings = _usePermission.canChangeSettings;
|
|
48
|
-
|
|
49
|
-
var changeSettings = canChangeSettings();
|
|
50
|
-
|
|
51
|
-
if (!changeSettings) {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_appAdmin.AddMenu, {
|
|
56
|
-
name: "settings"
|
|
57
|
-
}, /*#__PURE__*/_react.default.createElement(_appAdmin.AddMenu, {
|
|
58
|
-
name: "settings.mailer",
|
|
59
|
-
label: "Mailer"
|
|
60
|
-
}, /*#__PURE__*/_react.default.createElement(_appAdmin.AddMenu, {
|
|
61
|
-
name: "settings.mailer.settings",
|
|
62
|
-
label: "Settings",
|
|
63
|
-
path: "/mailer/settings"
|
|
64
|
-
}))), /*#__PURE__*/_react.default.createElement(_appAdmin.AddRoute, {
|
|
65
|
-
exact: true,
|
|
66
|
-
path: "/mailer/settings",
|
|
67
|
-
render: function render() {
|
|
68
|
-
return /*#__PURE__*/_react.default.createElement(_appSecurity.SecureRoute, {
|
|
69
|
-
permission: "mailer.settings"
|
|
70
|
-
}, /*#__PURE__*/_react.default.createElement(_AdminLayout.AdminLayout, null, /*#__PURE__*/_react.default.createElement(_reactHelmet.default, {
|
|
71
|
-
title: "Mailer - Settings"
|
|
72
|
-
}), /*#__PURE__*/_react.default.createElement(Loader, null, /*#__PURE__*/_react.default.createElement(Settings, null))));
|
|
73
|
-
}
|
|
74
|
-
}));
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
exports.Module = Module;
|
package/plugins/Module.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["Settings","lazy","Loader","children","props","React","cloneElement","Module","usePermission","canChangeSettings","changeSettings"],"sources":["Module.tsx"],"sourcesContent":["import React, { lazy, Suspense } from \"react\";\nimport { AddMenu as Menu, AddRoute } from \"@webiny/app-admin\";\nimport { SecureRoute } from \"@webiny/app-security\";\nimport { AdminLayout } from \"@webiny/app-admin/components/AdminLayout\";\nimport Helmet from \"react-helmet\";\nimport { usePermission } from \"~/hooks/usePermission\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\n\nconst Settings = lazy(() => import(\"~/views/settings\"));\n\ninterface LoaderProps {\n children: React.ReactElement;\n}\nconst Loader: React.FC<LoaderProps> = ({ children, ...props }) => (\n <Suspense fallback={<CircularProgress />}>{React.cloneElement(children, props)}</Suspense>\n);\n\nexport const Module: React.FC = () => {\n const { canChangeSettings } = usePermission();\n\n const changeSettings = canChangeSettings();\n\n if (!changeSettings) {\n return null;\n }\n\n return (\n <>\n <Menu name={\"settings\"}>\n <Menu name={\"settings.mailer\"} label={\"Mailer\"}>\n <Menu\n name={\"settings.mailer.settings\"}\n label={\"Settings\"}\n path={\"/mailer/settings\"}\n />\n </Menu>\n </Menu>\n <AddRoute\n exact\n path={\"/mailer/settings\"}\n render={() => (\n <SecureRoute permission={\"mailer.settings\"}>\n <AdminLayout>\n <Helmet title={\"Mailer - Settings\"} />\n <Loader>\n <Settings />\n </Loader>\n </AdminLayout>\n </SecureRoute>\n )}\n />\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;AAEA,IAAMA,QAAQ,gBAAG,IAAAC,WAAA,EAAK;EAAA;IAAA;EAAA;AAAA,CAAL,CAAjB;;AAKA,IAAMC,MAA6B,GAAG,SAAhCA,MAAgC;EAAA,IAAGC,QAAH,QAAGA,QAAH;EAAA,IAAgBC,KAAhB;EAAA,oBAClC,6BAAC,eAAD;IAAU,QAAQ,eAAE,6BAAC,0BAAD;EAApB,gBAA2CC,cAAA,CAAMC,YAAN,CAAmBH,QAAnB,EAA6BC,KAA7B,CAA3C,CADkC;AAAA,CAAtC;;AAIO,IAAMG,MAAgB,GAAG,SAAnBA,MAAmB,GAAM;EAClC,qBAA8B,IAAAC,6BAAA,GAA9B;EAAA,IAAQC,iBAAR,kBAAQA,iBAAR;;EAEA,IAAMC,cAAc,GAAGD,iBAAiB,EAAxC;;EAEA,IAAI,CAACC,cAAL,EAAqB;IACjB,OAAO,IAAP;EACH;;EAED,oBACI,yEACI,6BAAC,iBAAD;IAAM,IAAI,EAAE;EAAZ,gBACI,6BAAC,iBAAD;IAAM,IAAI,EAAE,iBAAZ;IAA+B,KAAK,EAAE;EAAtC,gBACI,6BAAC,iBAAD;IACI,IAAI,EAAE,0BADV;IAEI,KAAK,EAAE,UAFX;IAGI,IAAI,EAAE;EAHV,EADJ,CADJ,CADJ,eAUI,6BAAC,kBAAD;IACI,KAAK,MADT;IAEI,IAAI,EAAE,kBAFV;IAGI,MAAM,EAAE;MAAA,oBACJ,6BAAC,wBAAD;QAAa,UAAU,EAAE;MAAzB,gBACI,6BAAC,wBAAD,qBACI,6BAAC,oBAAD;QAAQ,KAAK,EAAE;MAAf,EADJ,eAEI,6BAAC,MAAD,qBACI,6BAAC,QAAD,OADJ,CAFJ,CADJ,CADI;IAAA;EAHZ,EAVJ,CADJ;AA2BH,CApCM"}
|
package/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { SecurityPermission } from \"@webiny/app-security/types\";\n\n/**\n * A base security permission for APW.\n *\n * @category SecurityPermission\n */\nexport interface MailerSecurityPermission extends SecurityPermission {\n changeSettings?: boolean;\n}\n\n/**\n * GraphQL API call response for the transport settings values\n * @category GraphQL\n */\nexport interface TransportSettings {\n host: string;\n user: string;\n from: string;\n replyTo?: string;\n password?: string;\n}\n/**\n *\n * @category GraphQL\n */\nexport interface ApiError<T = Record<string, any>> {\n message: string;\n code: string;\n data: T;\n}\n\n/**\n * Description of the JOI validation errors received from the API.\n *\n * @category GraphQL\n */\nexport interface ValidationError {\n message: string;\n path: string[];\n}\n\nexport interface ValidationErrors {\n errors: ValidationError[];\n}\n"],"mappings":""}
|