@webiny/app-mailer 0.0.0-unstable.e53eceafb5 → 0.0.0-unstable.e6f0dc8ca7
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/{plugins/Module.js → Module.js} +15 -21
- package/Module.js.map +1 -0
- package/README.md +6 -17
- package/hooks/usePermission.js +1 -1
- package/hooks/usePermission.js.map +1 -1
- package/index.d.ts +1 -2
- package/index.js +1 -2
- package/index.js.map +1 -1
- package/package.json +18 -23
- package/routes.d.ts +4 -0
- package/routes.js +9 -0
- package/routes.js.map +1 -0
- package/types.d.ts +3 -2
- package/types.js.map +1 -1
- package/views/settings/Settings.js +72 -33
- package/views/settings/Settings.js.map +1 -1
- package/views/settings/graphql.d.ts +9 -6
- package/views/settings/graphql.js +4 -0
- package/views/settings/graphql.js.map +1 -1
- package/views/settings/index.d.ts +1 -1
- package/views/settings/index.js +1 -1
- package/views/settings/index.js.map +1 -1
- package/plugins/Module.js.map +0 -1
- /package/{plugins/Module.d.ts → Module.d.ts} +0 -0
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import React, { lazy, Suspense } from "react";
|
|
2
|
-
import { AdminConfig, Plugins,
|
|
3
|
-
import { HasPermission } from "@webiny/app-
|
|
4
|
-
import
|
|
5
|
-
import { usePermission } from "
|
|
6
|
-
import {
|
|
2
|
+
import { AdminConfig, Plugins, AdminLayout, useRouter } from "@webiny/app-admin";
|
|
3
|
+
import { HasPermission } from "@webiny/app-admin";
|
|
4
|
+
import { OverlayLoader } from "@webiny/admin-ui";
|
|
5
|
+
import { usePermission } from "./hooks/usePermission.js";
|
|
6
|
+
import { Routes } from "./routes.js";
|
|
7
7
|
const {
|
|
8
8
|
Menu,
|
|
9
9
|
Route
|
|
10
10
|
} = AdminConfig;
|
|
11
|
-
const Settings = /*#__PURE__*/lazy(() => import(/* webpackChunkName: "
|
|
11
|
+
const Settings = /*#__PURE__*/lazy(() => import(/* webpackChunkName: "mailer-settings" */"./views/settings/index.js"));
|
|
12
12
|
const Loader = ({
|
|
13
13
|
children,
|
|
14
14
|
...props
|
|
15
15
|
}) => /*#__PURE__*/React.createElement(Suspense, {
|
|
16
|
-
fallback: /*#__PURE__*/React.createElement(
|
|
16
|
+
fallback: /*#__PURE__*/React.createElement(OverlayLoader, null)
|
|
17
17
|
}, /*#__PURE__*/React.cloneElement(children, props));
|
|
18
18
|
const MailerSettings = () => {
|
|
19
|
+
const router = useRouter();
|
|
19
20
|
const {
|
|
20
21
|
canChangeSettings
|
|
21
22
|
} = usePermission();
|
|
@@ -26,24 +27,17 @@ const MailerSettings = () => {
|
|
|
26
27
|
return /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(HasPermission, {
|
|
27
28
|
name: "mailer.settings"
|
|
28
29
|
}, /*#__PURE__*/React.createElement(Route, {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
path: "/mailer/settings",
|
|
32
|
-
element: /*#__PURE__*/React.createElement(Layout, null, /*#__PURE__*/React.createElement(Helmet, {
|
|
30
|
+
route: Routes.Settings,
|
|
31
|
+
element: /*#__PURE__*/React.createElement(AdminLayout, {
|
|
33
32
|
title: "Mailer - Settings"
|
|
34
|
-
}
|
|
33
|
+
}, /*#__PURE__*/React.createElement(Loader, null, /*#__PURE__*/React.createElement(Settings, null)))
|
|
35
34
|
}), /*#__PURE__*/React.createElement(Menu, {
|
|
36
35
|
name: "mailer.settings",
|
|
37
|
-
parent: "settings",
|
|
38
|
-
element: /*#__PURE__*/React.createElement(Menu.Group, {
|
|
39
|
-
text: "Mailer"
|
|
40
|
-
})
|
|
41
|
-
}), /*#__PURE__*/React.createElement(Menu, {
|
|
42
|
-
name: "mailer.settings.general",
|
|
43
|
-
parent: "settings",
|
|
36
|
+
parent: "settings.system",
|
|
44
37
|
element: /*#__PURE__*/React.createElement(Menu.Link, {
|
|
45
|
-
text: "
|
|
46
|
-
to:
|
|
38
|
+
text: "Mailer",
|
|
39
|
+
to: router.getLink(Routes.Settings),
|
|
40
|
+
pinnable: true
|
|
47
41
|
})
|
|
48
42
|
})));
|
|
49
43
|
};
|
package/Module.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","lazy","Suspense","AdminConfig","Plugins","AdminLayout","useRouter","HasPermission","OverlayLoader","usePermission","Routes","Menu","Route","Settings","Loader","children","props","createElement","fallback","cloneElement","MailerSettings","router","canChangeSettings","changeSettings","name","route","element","title","parent","Link","text","to","getLink","pinnable","Module"],"sources":["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"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,QAAQ,QAAQ,OAAO;AAC7C,SAASC,WAAW,EAAEC,OAAO,EAAEC,WAAW,EAAEC,SAAS,QAAQ,mBAAmB;AAChF,SAASC,aAAa,QAAQ,mBAAmB;AACjD,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,aAAa;AACtB,SAASC,MAAM;AAEf,MAAM;EAAEC,IAAI;EAAEC;AAAM,CAAC,GAAGT,WAAW;AAEnC,MAAMU,QAAQ,gBAAGZ,IAAI,CACjB,MACI,MAAM,CACF,oEAEJ,CACR,CAAC;AAMD,MAAMa,MAAM,GAAGA,CAAC;EAAEC,QAAQ;EAAE,GAAGC;AAAmB,CAAC,kBAC/ChB,KAAA,CAAAiB,aAAA,CAACf,QAAQ;EAACgB,QAAQ,eAAElB,KAAA,CAAAiB,aAAA,CAACT,aAAa,MAAE;AAAE,gBAAER,KAAK,CAACmB,YAAY,CAACJ,QAAQ,EAAEC,KAAK,CAAY,CACzF;AAED,MAAMI,cAAc,GAAGA,CAAA,KAAM;EACzB,MAAMC,MAAM,GAAGf,SAAS,CAAC,CAAC;EAC1B,MAAM;IAAEgB;EAAkB,CAAC,GAAGb,aAAa,CAAC,CAAC;EAE7C,MAAMc,cAAc,GAAGD,iBAAiB,CAAC,CAAC;EAE1C,IAAI,CAACC,cAAc,EAAE;IACjB,OAAO,IAAI;EACf;EAEA,oBACIvB,KAAA,CAAAiB,aAAA,CAACd,WAAW,qBACRH,KAAA,CAAAiB,aAAA,CAACV,aAAa;IAACiB,IAAI,EAAE;EAAkB,gBACnCxB,KAAA,CAAAiB,aAAA,CAACL,KAAK;IACFa,KAAK,EAAEf,MAAM,CAACG,QAAS;IACvBa,OAAO,eACH1B,KAAA,CAAAiB,aAAA,CAACZ,WAAW;MAACsB,KAAK,EAAE;IAAoB,gBACpC3B,KAAA,CAAAiB,aAAA,CAACH,MAAM,qBACHd,KAAA,CAAAiB,aAAA,CAACJ,QAAQ,MAAE,CACP,CACC;EAChB,CACJ,CAAC,eACFb,KAAA,CAAAiB,aAAA,CAACN,IAAI;IACDa,IAAI,EAAE,iBAAkB;IACxBI,MAAM,EAAE,iBAAkB;IAC1BF,OAAO,eACH1B,KAAA,CAAAiB,aAAA,CAACN,IAAI,CAACkB,IAAI;MACNC,IAAI,EAAE,QAAS;MACfC,EAAE,EAAEV,MAAM,CAACW,OAAO,CAACtB,MAAM,CAACG,QAAQ,CAAE;MACpCoB,QAAQ,EAAE;IAAK,CAClB;EACJ,CACJ,CACU,CACN,CAAC;AAEtB,CAAC;AAED,OAAO,MAAMC,MAAM,GAAGA,CAAA,KAAM;EACxB,oBACIlC,KAAA,CAAAiB,aAAA,CAACb,OAAO,qBACJJ,KAAA,CAAAiB,aAAA,CAACG,cAAc,MAAE,CACZ,CAAC;AAElB,CAAC","ignoreList":[]}
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useSecurity","useCallback","usePermission","identity","getPermission","canChangeSettings","permission"],"sources":["usePermission.ts"],"sourcesContent":["import { useSecurity } from \"@webiny/app-
|
|
1
|
+
{"version":3,"names":["useSecurity","useCallback","usePermission","identity","getPermission","canChangeSettings","permission"],"sources":["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"],"mappings":"AAAA,SAASA,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,WAAW,QAAQ,OAAO;AAGnC,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EAC/B,MAAM;IAAEC,QAAQ;IAAEC;EAAc,CAAC,GAAGJ,WAAW,CAAC,CAAC;EAEjD,MAAMK,iBAAiB,GAAGJ,WAAW,CAAC,MAAe;IACjD,MAAMK,UAAU,GAAGF,aAAa,CAA2B,iBAAiB,CAAC;IAC7E,OAAO,CAAC,CAACE,UAAU;EACvB,CAAC,EAAE,CAACH,QAAQ,CAAC,CAAC;EAEd,OAAO;IACHE;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
|
package/index.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Module };
|
|
1
|
+
export { Module } from "./Module.js";
|
package/index.js
CHANGED
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Module"],"sources":["index.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"names":["Module"],"sources":["index.tsx"],"sourcesContent":["export { Module } from \"./Module.js\";\n"],"mappings":"AAAA,SAASA,MAAM","ignoreList":[]}
|
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.e6f0dc8ca7",
|
|
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,42 +14,33 @@
|
|
|
10
14
|
"license": "MIT",
|
|
11
15
|
"dependencies": {
|
|
12
16
|
"@apollo/react-components": "3.1.5",
|
|
13
|
-
"@webiny/admin-ui": "0.0.0-unstable.
|
|
14
|
-
"@webiny/app-admin": "0.0.0-unstable.
|
|
15
|
-
"@webiny/
|
|
16
|
-
"@webiny/
|
|
17
|
-
"@webiny/ui": "0.0.0-unstable.e53eceafb5",
|
|
18
|
-
"@webiny/validation": "0.0.0-unstable.e53eceafb5",
|
|
17
|
+
"@webiny/admin-ui": "0.0.0-unstable.e6f0dc8ca7",
|
|
18
|
+
"@webiny/app-admin": "0.0.0-unstable.e6f0dc8ca7",
|
|
19
|
+
"@webiny/form": "0.0.0-unstable.e6f0dc8ca7",
|
|
20
|
+
"@webiny/validation": "0.0.0-unstable.e6f0dc8ca7",
|
|
19
21
|
"apollo-cache": "1.3.5",
|
|
20
22
|
"apollo-client": "2.6.10",
|
|
21
23
|
"apollo-link": "1.2.14",
|
|
22
24
|
"apollo-utilities": "1.3.4",
|
|
23
|
-
"
|
|
24
|
-
"graphql": "15.9.0",
|
|
25
|
+
"graphql": "16.14.0",
|
|
25
26
|
"graphql-tag": "2.12.6",
|
|
26
|
-
"
|
|
27
|
-
"react": "18.
|
|
28
|
-
"react-dom": "18.2.0",
|
|
29
|
-
"react-helmet": "6.1.0"
|
|
27
|
+
"react": "18.3.1",
|
|
28
|
+
"react-dom": "18.3.1"
|
|
30
29
|
},
|
|
31
30
|
"devDependencies": {
|
|
32
|
-
"@types/react": "18.
|
|
33
|
-
"@webiny/
|
|
34
|
-
"rimraf": "6.
|
|
35
|
-
"typescript": "
|
|
31
|
+
"@types/react": "18.3.28",
|
|
32
|
+
"@webiny/build-tools": "0.0.0-unstable.e6f0dc8ca7",
|
|
33
|
+
"rimraf": "6.1.3",
|
|
34
|
+
"typescript": "6.0.3"
|
|
36
35
|
},
|
|
37
36
|
"publishConfig": {
|
|
38
37
|
"access": "public",
|
|
39
38
|
"directory": "dist"
|
|
40
39
|
},
|
|
41
|
-
"scripts": {
|
|
42
|
-
"build": "node ../cli/bin.js run build",
|
|
43
|
-
"watch": "node ../cli/bin.js run watch"
|
|
44
|
-
},
|
|
45
40
|
"svgo": {
|
|
46
41
|
"plugins": {
|
|
47
42
|
"removeViewBox": false
|
|
48
43
|
}
|
|
49
44
|
},
|
|
50
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "e6f0dc8ca741c1fcc3fec9a5b9e86fdd49544641"
|
|
51
46
|
}
|
package/routes.d.ts
ADDED
package/routes.js
ADDED
package/routes.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Route","Routes","Settings","name","path"],"sources":["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"],"mappings":"AAAA,SAASA,KAAK,QAAQ,mBAAmB;AAEzC,OAAO,MAAMC,MAAM,GAAG;EAClBC,QAAQ,EAAE,IAAIF,KAAK,CAAC;IAChBG,IAAI,EAAE,iBAAiB;IACvBC,IAAI,EAAE;EACV,CAAC;AACL,CAAC","ignoreList":[]}
|
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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { Identity } from \"@webiny/app-admin/domain/Identity.js\";\n\n/**\n * A base security permission for APW.\n *\n * @category SecurityPermission\n */\nexport interface MailerSecurityPermission extends Identity.Permission {\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 port?: number;\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":"","ignoreList":[]}
|
|
@@ -2,10 +2,9 @@ import React, { useEffect, useRef, useState } from "react";
|
|
|
2
2
|
import { CenteredView, useSnackbar } from "@webiny/app-admin";
|
|
3
3
|
import { Mutation, Query } from "@apollo/react-components";
|
|
4
4
|
import { Form } from "@webiny/form";
|
|
5
|
-
import { SimpleForm, SimpleFormContent, SimpleFormFooter, SimpleFormHeader } from "@webiny/app-admin
|
|
5
|
+
import { SimpleForm, SimpleFormContent, SimpleFormFooter, SimpleFormHeader } from "@webiny/app-admin";
|
|
6
6
|
import { validation } from "@webiny/validation";
|
|
7
|
-
import { GET_SETTINGS_QUERY, SAVE_SETTINGS_MUTATION } from "./graphql";
|
|
8
|
-
import dotPropImmutable from "dot-prop-immutable";
|
|
7
|
+
import { GET_SETTINGS_QUERY, SAVE_SETTINGS_MUTATION } from "./graphql.js";
|
|
9
8
|
import { Alert, Button, Grid, Input, OverlayLoader } from "@webiny/admin-ui";
|
|
10
9
|
const displayErrors = errors => {
|
|
11
10
|
if (!errors) {
|
|
@@ -20,14 +19,14 @@ const displayErrors = errors => {
|
|
|
20
19
|
key: `${field}`,
|
|
21
20
|
title: "Error",
|
|
22
21
|
type: "danger"
|
|
23
|
-
}, error.message
|
|
22
|
+
}, error.message);
|
|
24
23
|
}));
|
|
25
24
|
};
|
|
26
25
|
export const Settings = () => {
|
|
27
26
|
const {
|
|
28
27
|
showSnackbar
|
|
29
28
|
} = useSnackbar();
|
|
30
|
-
const password = useRef();
|
|
29
|
+
const password = useRef(null);
|
|
31
30
|
const [errors, setErrors] = useState();
|
|
32
31
|
useEffect(() => {
|
|
33
32
|
const t = setTimeout(() => {
|
|
@@ -52,40 +51,82 @@ export const Settings = () => {
|
|
|
52
51
|
data: settingsData,
|
|
53
52
|
error: settingsError
|
|
54
53
|
} = response?.mailer.settings || {};
|
|
54
|
+
const settingsSource = settingsData?.source;
|
|
55
55
|
const {
|
|
56
56
|
loading: mutationInProgress
|
|
57
57
|
} = result;
|
|
58
58
|
const onSubmit = async data => {
|
|
59
59
|
setErrors([]);
|
|
60
|
-
await update({
|
|
60
|
+
const response = await update({
|
|
61
61
|
variables: {
|
|
62
62
|
data
|
|
63
63
|
},
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const {
|
|
69
|
-
data: updateData,
|
|
70
|
-
error: updateError
|
|
71
|
-
} = result.data?.mailer.settings || {};
|
|
72
|
-
const errors = updateError?.data.errors;
|
|
73
|
-
if (errors) {
|
|
74
|
-
setErrors(errors);
|
|
75
|
-
showSnackbar("Settings not updated! Please check your network and console logs for detailed information.");
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
cache.writeQuery({
|
|
79
|
-
query: GET_SETTINGS_QUERY,
|
|
80
|
-
data: dotPropImmutable.set(data, "mailer.settings.data", {
|
|
81
|
-
...settingsData,
|
|
82
|
-
...updateData
|
|
83
|
-
})
|
|
84
|
-
});
|
|
85
|
-
showSnackbar("Settings updated successfully.");
|
|
86
|
-
}
|
|
64
|
+
refetchQueries: [{
|
|
65
|
+
query: GET_SETTINGS_QUERY
|
|
66
|
+
}],
|
|
67
|
+
awaitRefetchQueries: true
|
|
87
68
|
});
|
|
69
|
+
const saveError = response.data?.mailer.settings.error;
|
|
70
|
+
if (saveError) {
|
|
71
|
+
const validationErrors = saveError.data?.errors;
|
|
72
|
+
if (validationErrors) {
|
|
73
|
+
setErrors(validationErrors);
|
|
74
|
+
}
|
|
75
|
+
showSnackbar("Settings not updated! Please check your network and console logs for detailed information.");
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
showSnackbar("Settings updated successfully.");
|
|
88
79
|
};
|
|
80
|
+
if (settingsSource === "code") {
|
|
81
|
+
return /*#__PURE__*/React.createElement(CenteredView, null, /*#__PURE__*/React.createElement(SimpleForm, null, /*#__PURE__*/React.createElement(SimpleFormHeader, {
|
|
82
|
+
title: "Mailer Settings"
|
|
83
|
+
}), /*#__PURE__*/React.createElement(SimpleFormContent, null, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
84
|
+
span: 12
|
|
85
|
+
}, /*#__PURE__*/React.createElement(Alert, {
|
|
86
|
+
title: "Managed by code",
|
|
87
|
+
type: "info"
|
|
88
|
+
}, "Mailer settings are managed by code. Edit", " ", /*#__PURE__*/React.createElement("code", null, "webiny.config.tsx"), " to change them.")), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
89
|
+
span: 12
|
|
90
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
91
|
+
size: "lg",
|
|
92
|
+
type: "text",
|
|
93
|
+
label: "Hostname",
|
|
94
|
+
value: settingsData?.host ?? "",
|
|
95
|
+
disabled: true
|
|
96
|
+
})), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
97
|
+
span: 12
|
|
98
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
99
|
+
size: "lg",
|
|
100
|
+
type: "number",
|
|
101
|
+
label: "Port",
|
|
102
|
+
value: String(settingsData?.port ?? ""),
|
|
103
|
+
disabled: true
|
|
104
|
+
})), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
105
|
+
span: 12
|
|
106
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
107
|
+
size: "lg",
|
|
108
|
+
type: "text",
|
|
109
|
+
label: "User",
|
|
110
|
+
value: settingsData?.user ?? "",
|
|
111
|
+
disabled: true
|
|
112
|
+
})), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
113
|
+
span: 12
|
|
114
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
115
|
+
size: "lg",
|
|
116
|
+
type: "text",
|
|
117
|
+
label: "From",
|
|
118
|
+
value: settingsData?.from ?? "",
|
|
119
|
+
disabled: true
|
|
120
|
+
})), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
121
|
+
span: 12
|
|
122
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
123
|
+
size: "lg",
|
|
124
|
+
type: "text",
|
|
125
|
+
label: "Reply-To",
|
|
126
|
+
value: settingsData?.replyTo ?? "",
|
|
127
|
+
disabled: true
|
|
128
|
+
})))), /*#__PURE__*/React.createElement(SimpleFormFooter, null, "")));
|
|
129
|
+
}
|
|
89
130
|
if (settingsError) {
|
|
90
131
|
return /*#__PURE__*/React.createElement(SimpleForm, null, /*#__PURE__*/React.createElement(SimpleFormHeader, {
|
|
91
132
|
title: "Mailer Settings"
|
|
@@ -94,7 +135,7 @@ export const Settings = () => {
|
|
|
94
135
|
}, /*#__PURE__*/React.createElement(Alert, {
|
|
95
136
|
title: settingsError.message,
|
|
96
137
|
type: "danger"
|
|
97
|
-
}
|
|
138
|
+
})))), /*#__PURE__*/React.createElement(SimpleFormFooter, null, ""));
|
|
98
139
|
}
|
|
99
140
|
const passwordValidators = [];
|
|
100
141
|
if (!settingsData?.user) {
|
|
@@ -150,9 +191,7 @@ export const Settings = () => {
|
|
|
150
191
|
label: "Password",
|
|
151
192
|
type: "password",
|
|
152
193
|
autoComplete: "new-password",
|
|
153
|
-
value: ""
|
|
154
|
-
// @ts-expect-error
|
|
155
|
-
,
|
|
194
|
+
value: "",
|
|
156
195
|
inputRef: password
|
|
157
196
|
}))), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
158
197
|
span: 12
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useRef","useState","CenteredView","useSnackbar","Mutation","Query","Form","SimpleForm","SimpleFormContent","SimpleFormFooter","SimpleFormHeader","validation","GET_SETTINGS_QUERY","SAVE_SETTINGS_MUTATION","dotPropImmutable","Alert","Button","Grid","Input","OverlayLoader","displayErrors","errors","createElement","Fragment","map","error","field","path","key","title","type","message","Settings","showSnackbar","password","setErrors","t","setTimeout","current","value","clearTimeout","query","data","response","loading","queryInProgress","mutation","update","result","settingsData","settingsError","mailer","settings","mutationInProgress","onSubmit","variables","cache","structuredClone","readQuery","updateData","updateError","writeQuery","set","Column","span","description","passwordValidators","user","push","create","Bind","form","name","validators","size","label","autoComplete","inputRef","text","onClick","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 { validation } from \"@webiny/validation\";\nimport type {\n SaveSettingsMutationResponse,\n SaveSettingsMutationVariables,\n SettingsQueryResponse\n} from \"./graphql\";\nimport { GET_SETTINGS_QUERY, SAVE_SETTINGS_MUTATION } from \"./graphql\";\nimport type { TransportSettings, ValidationError } from \"~/types\";\nimport type { Validator } from \"@webiny/validation/types\";\nimport dotPropImmutable from \"dot-prop-immutable\";\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 {\"ssss\"}\n </Alert>\n );\n })}\n </>\n );\n};\n\nexport const Settings = () => {\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<SettingsQueryResponse>({\n query: GET_SETTINGS_QUERY\n })\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 cache.writeQuery({\n query: GET_SETTINGS_QUERY,\n data: dotPropImmutable.set(data, \"mailer.settings.data\", {\n ...settingsData,\n ...updateData\n })\n });\n showSnackbar(\"Settings updated successfully.\");\n }\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 title={settingsError.message} type=\"danger\">\n {settingsError.data?.description && (\n <p>{settingsError.data.description}</p>\n )}\n </Alert>\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 // @ts-expect-error\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"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","useState","CenteredView","useSnackbar","Mutation","Query","Form","SimpleForm","SimpleFormContent","SimpleFormFooter","SimpleFormHeader","validation","GET_SETTINGS_QUERY","SAVE_SETTINGS_MUTATION","Alert","Button","Grid","Input","OverlayLoader","displayErrors","errors","createElement","Fragment","map","error","field","path","key","title","type","message","Settings","showSnackbar","password","setErrors","t","setTimeout","current","value","clearTimeout","query","data","response","loading","queryInProgress","mutation","update","result","settingsData","settingsError","mailer","settings","settingsSource","source","mutationInProgress","onSubmit","variables","refetchQueries","awaitRefetchQueries","saveError","validationErrors","Column","span","size","label","host","disabled","String","port","user","from","replyTo","passwordValidators","push","create","Bind","form","name","validators","autoComplete","inputRef","text","onClick","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\";\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"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
|
-
import type { 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
|
};
|
|
@@ -6,6 +6,7 @@ const SETTINGS_FIELDS = `
|
|
|
6
6
|
user
|
|
7
7
|
from
|
|
8
8
|
replyTo
|
|
9
|
+
source
|
|
9
10
|
}
|
|
10
11
|
`;
|
|
11
12
|
const ERROR_FIELDS = `
|
|
@@ -15,6 +16,9 @@ const ERROR_FIELDS = `
|
|
|
15
16
|
data
|
|
16
17
|
}
|
|
17
18
|
`;
|
|
19
|
+
|
|
20
|
+
/** Settings as they appear in GraphQL responses — never includes the password. */
|
|
21
|
+
|
|
18
22
|
export const GET_SETTINGS_QUERY = gql`
|
|
19
23
|
query GetMailerSettings {
|
|
20
24
|
mailer {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["gql","SETTINGS_FIELDS","ERROR_FIELDS","GET_SETTINGS_QUERY","SAVE_SETTINGS_MUTATION"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport type { ApiError, TransportSettings, ValidationErrors } from \"~/types\";\n\nconst SETTINGS_FIELDS = `\n {\n host\n port\n user\n from\n replyTo\n }\n`;\n\nconst ERROR_FIELDS = `\n {\n message\n code\n data\n }\n`;\n\nexport interface SettingsQueryResponse {\n mailer: {\n settings: {\n data:
|
|
1
|
+
{"version":3,"names":["gql","SETTINGS_FIELDS","ERROR_FIELDS","GET_SETTINGS_QUERY","SAVE_SETTINGS_MUTATION"],"sources":["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"],"mappings":"AAAA,OAAOA,GAAG,MAAM,aAAa;AAG7B,MAAMC,eAAe,GAAG;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,YAAY,GAAG;AACrB;AACA;AACA;AACA;AACA;AACA,CAAC;;AAID;;AAaA,OAAO,MAAMC,kBAAkB,GAAGH,GAAG;AACrC;AACA;AACA;AACA,uBAAuBC,eAAe;AACtC,wBAAwBC,YAAY;AACpC;AACA;AACA;AACA,CAAC;AAcD,OAAO,MAAME,sBAAsB,GAAGJ,GAAG;AACzC;AACA;AACA;AACA,uBAAuBC,eAAe;AACtC,wBAAwBC,YAAY;AACpC;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -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 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Settings"],"sources":["index.ts"],"sourcesContent":["import { Settings } from \"./Settings\";\n\nexport default Settings;\n"],"mappings":"AAAA,SAASA,QAAQ;AAEjB,eAAeA,QAAQ","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Settings"],"sources":["index.ts"],"sourcesContent":["import { Settings } from \"./Settings.js\";\n\nexport default Settings;\n"],"mappings":"AAAA,SAASA,QAAQ;AAEjB,eAAeA,QAAQ","ignoreList":[]}
|
package/plugins/Module.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","lazy","Suspense","AdminConfig","Plugins","Layout","HasPermission","Helmet","usePermission","CircularProgress","Menu","Route","Settings","Loader","children","props","createElement","fallback","cloneElement","MailerSettings","canChangeSettings","changeSettings","name","exact","path","element","title","parent","Group","text","Link","to","Module"],"sources":["Module.tsx"],"sourcesContent":["import React, { lazy, Suspense } from \"react\";\nimport { AdminConfig, Plugins, Layout } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-security\";\nimport Helmet from \"react-helmet\";\nimport { usePermission } from \"~/hooks/usePermission\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\n\nconst { Menu, Route } = AdminConfig;\n\nconst Settings = lazy(\n () =>\n import(\n /* webpackChunkName: \"MailerModuleSettings\" */\n \"~/views/settings\"\n )\n);\n\ninterface LoaderProps {\n children: React.ReactElement;\n}\n\nconst Loader = ({ children, ...props }: LoaderProps) => (\n <Suspense fallback={<CircularProgress />}>{React.cloneElement(children, props)}</Suspense>\n);\n\nconst MailerSettings = () => {\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 name={\"mailer.settings\"}\n exact\n path={\"/mailer/settings\"}\n element={\n <Layout>\n <Helmet title={\"Mailer - Settings\"} />\n <Loader>\n <Settings />\n </Loader>\n </Layout>\n }\n />\n <Menu\n name={\"mailer.settings\"}\n parent={\"settings\"}\n element={<Menu.Group text={\"Mailer\"} />}\n />\n <Menu\n name={\"mailer.settings.general\"}\n parent={\"settings\"}\n element={<Menu.Link text={\"Settings\"} to={\"/mailer/settings\"} />}\n />\n </HasPermission>\n </AdminConfig>\n );\n};\n\nexport const Module = () => {\n return (\n <Plugins>\n <MailerSettings />\n </Plugins>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,QAAQ,QAAQ,OAAO;AAC7C,SAASC,WAAW,EAAEC,OAAO,EAAEC,MAAM,QAAQ,mBAAmB;AAChE,SAASC,aAAa,QAAQ,sBAAsB;AACpD,OAAOC,MAAM,MAAM,cAAc;AACjC,SAASC,aAAa;AACtB,SAASC,gBAAgB,QAAQ,qBAAqB;AAEtD,MAAM;EAAEC,IAAI;EAAEC;AAAM,CAAC,GAAGR,WAAW;AAEnC,MAAMS,QAAQ,gBAAGX,IAAI,CACjB,MACI,MAAM,CACF,iEAEJ,CACR,CAAC;AAMD,MAAMY,MAAM,GAAGA,CAAC;EAAEC,QAAQ;EAAE,GAAGC;AAAmB,CAAC,kBAC/Cf,KAAA,CAAAgB,aAAA,CAACd,QAAQ;EAACe,QAAQ,eAAEjB,KAAA,CAAAgB,aAAA,CAACP,gBAAgB,MAAE;AAAE,gBAAET,KAAK,CAACkB,YAAY,CAACJ,QAAQ,EAAEC,KAAK,CAAY,CAC5F;AAED,MAAMI,cAAc,GAAGA,CAAA,KAAM;EACzB,MAAM;IAAEC;EAAkB,CAAC,GAAGZ,aAAa,CAAC,CAAC;EAE7C,MAAMa,cAAc,GAAGD,iBAAiB,CAAC,CAAC;EAE1C,IAAI,CAACC,cAAc,EAAE;IACjB,OAAO,IAAI;EACf;EAEA,oBACIrB,KAAA,CAAAgB,aAAA,CAACb,WAAW,qBACRH,KAAA,CAAAgB,aAAA,CAACV,aAAa;IAACgB,IAAI,EAAE;EAAkB,gBACnCtB,KAAA,CAAAgB,aAAA,CAACL,KAAK;IACFW,IAAI,EAAE,iBAAkB;IACxBC,KAAK;IACLC,IAAI,EAAE,kBAAmB;IACzBC,OAAO,eACHzB,KAAA,CAAAgB,aAAA,CAACX,MAAM,qBACHL,KAAA,CAAAgB,aAAA,CAACT,MAAM;MAACmB,KAAK,EAAE;IAAoB,CAAE,CAAC,eACtC1B,KAAA,CAAAgB,aAAA,CAACH,MAAM,qBACHb,KAAA,CAAAgB,aAAA,CAACJ,QAAQ,MAAE,CACP,CACJ;EACX,CACJ,CAAC,eACFZ,KAAA,CAAAgB,aAAA,CAACN,IAAI;IACDY,IAAI,EAAE,iBAAkB;IACxBK,MAAM,EAAE,UAAW;IACnBF,OAAO,eAAEzB,KAAA,CAAAgB,aAAA,CAACN,IAAI,CAACkB,KAAK;MAACC,IAAI,EAAE;IAAS,CAAE;EAAE,CAC3C,CAAC,eACF7B,KAAA,CAAAgB,aAAA,CAACN,IAAI;IACDY,IAAI,EAAE,yBAA0B;IAChCK,MAAM,EAAE,UAAW;IACnBF,OAAO,eAAEzB,KAAA,CAAAgB,aAAA,CAACN,IAAI,CAACoB,IAAI;MAACD,IAAI,EAAE,UAAW;MAACE,EAAE,EAAE;IAAmB,CAAE;EAAE,CACpE,CACU,CACN,CAAC;AAEtB,CAAC;AAED,OAAO,MAAMC,MAAM,GAAGA,CAAA,KAAM;EACxB,oBACIhC,KAAA,CAAAgB,aAAA,CAACZ,OAAO,qBACJJ,KAAA,CAAAgB,aAAA,CAACG,cAAc,MAAE,CACZ,CAAC;AAElB,CAAC","ignoreList":[]}
|
|
File without changes
|