feat: smtp test email

This commit is contained in:
zerosoul
2022-03-23 17:43:35 +08:00
parent 09da11990f
commit de119bb2b1
6 changed files with 1140 additions and 18 deletions
+2
View File
@@ -12,6 +12,7 @@
"@rtk-query/codegen-openapi": "^1.0.0-alpha.1",
"@svgr/webpack": "^6.2.1",
"@tippyjs/react": "^4.2.6",
"@udecode/plate": "^10.4.2",
"animate.css": "^4.1.1",
"axios": "^0.26.1",
"babel-loader": "^8.2.3",
@@ -61,6 +62,7 @@
"slate": "^0.75.0",
"slate-auto-replace": "^0.12.1",
"slate-history": "^0.66.0",
"slate-hyperscript": "^0.67.0",
"slate-react": "^0.75.0",
"source-map-loader": "^3.0.1",
"style-loader": "^3.3.1",
+8
View File
@@ -28,6 +28,13 @@ export const serverApi = createApi({
getFirebaseConfig: builder.query({
query: () => ({ url: `admin/fcm/config` }),
}),
sendTestEmail: builder.mutation({
query: (data) => ({
url: `/admin/system/send_mail`,
method: "POST",
body: data,
}),
}),
updateFirebaseConfig: builder.mutation({
query: (data) => ({
url: `admin/fcm/config`,
@@ -124,6 +131,7 @@ export const serverApi = createApi({
});
export const {
useSendTestEmailMutation,
useUpdateFirebaseConfigMutation,
useGetFirebaseConfigQuery,
useGetSMTPConfigQuery,
+3
View File
@@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.4 7.99961C14.4 9.69699 13.7257 11.3249 12.5255 12.5251C11.3252 13.7253 9.69736 14.3996 7.99998 14.3996C6.30259 14.3996 4.67472 13.7253 3.47449 12.5251C2.27426 11.3249 1.59998 9.69699 1.59998 7.99961C1.59998 6.30222 2.27426 4.67436 3.47449 3.47413C4.67472 2.27389 6.30259 1.59961 7.99998 1.59961C9.69736 1.59961 11.3252 2.27389 12.5255 3.47413C13.7257 4.67436 14.4 6.30222 14.4 7.99961ZM7.99998 5.59961C7.85941 5.59947 7.7213 5.63637 7.59953 5.70659C7.47777 5.77682 7.37666 5.87788 7.30638 5.99961C7.25563 6.09391 7.18646 6.17706 7.10298 6.24414C7.0195 6.31121 6.92341 6.36084 6.82039 6.39009C6.71737 6.41934 6.60953 6.4276 6.50326 6.4144C6.39699 6.40119 6.29445 6.36679 6.20172 6.31322C6.109 6.25965 6.02797 6.18801 5.96344 6.10254C5.89891 6.01708 5.8522 5.91953 5.82608 5.81568C5.79995 5.71182 5.79494 5.60378 5.81135 5.49796C5.82775 5.39213 5.86523 5.29068 5.92158 5.19961C6.18575 4.7421 6.5935 4.38454 7.0816 4.18238C7.56969 3.98022 8.11085 3.94476 8.62115 4.0815C9.13145 4.21823 9.58237 4.51952 9.90399 4.93865C10.2256 5.35777 10.4 5.87131 10.4 6.39961C10.4001 6.8961 10.2463 7.38043 9.95978 7.78589C9.67324 8.19135 9.26803 8.498 8.79998 8.66361V8.79961C8.79998 9.01178 8.71569 9.21527 8.56566 9.36529C8.41563 9.51532 8.21215 9.59961 7.99998 9.59961C7.7878 9.59961 7.58432 9.51532 7.43429 9.36529C7.28426 9.21527 7.19998 9.01178 7.19998 8.79961V7.99961C7.19998 7.78744 7.28426 7.58395 7.43429 7.43392C7.58432 7.28389 7.7878 7.19961 7.99998 7.19961C8.21215 7.19961 8.41563 7.11532 8.56566 6.96529C8.71569 6.81527 8.79998 6.61178 8.79998 6.39961C8.79998 6.18744 8.71569 5.98395 8.56566 5.83392C8.41563 5.68389 8.21215 5.59961 7.99998 5.59961ZM7.99998 11.9996C8.21215 11.9996 8.41563 11.9153 8.56566 11.7653C8.71569 11.6153 8.79998 11.4118 8.79998 11.1996C8.79998 10.9874 8.71569 10.784 8.56566 10.6339C8.41563 10.4839 8.21215 10.3996 7.99998 10.3996C7.7878 10.3996 7.58432 10.4839 7.43429 10.6339C7.28426 10.784 7.19998 10.9874 7.19998 11.1996C7.19998 11.4118 7.28426 11.6153 7.43429 11.7653C7.58432 11.9153 7.7878 11.9996 7.99998 11.9996Z" fill="#9CA3AF"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

+59 -1
View File
@@ -1,11 +1,25 @@
// import { useState, useEffect } from "react";
import { useState, useEffect } from "react";
import styled from "styled-components";
const StyledTest = styled.div`
display: flex;
gap: 16px;
white-space: nowrap;
margin-top: 24px;
`;
import { useSendTestEmailMutation } from "../../../../app/services/server";
import iconQuestion from "../../../../assets/icons/question.svg?url";
import useConfig from "./useConfig";
import StyledContainer from "./StyledContainer";
import Input from "../../styled/Input";
import Button from "../../styled/Button";
import Toggle from "../../styled/Toggle";
import Label from "../../styled/Label";
import SaveTip from "../../SaveTip";
import toast from "react-hot-toast";
export default function ConfigSMTP() {
const [testEmail, setTestEmail] = useState("");
const [sendTestEmail, { isSuccess, isError }] = useSendTestEmailMutation();
const {
reset,
updateConfig,
@@ -26,6 +40,26 @@ export default function ConfigSMTP() {
return { ...prev, [type]: newValue };
});
};
const handleTestEmailChange = (evt) => {
const newValue = evt.target.value;
setTestEmail(newValue);
};
const handleTestClick = () => {
console.log("test");
sendTestEmail({
to: testEmail,
subject: "test title",
content: "test content",
});
};
useEffect(() => {
if (isSuccess) {
toast.success("Send Test Email Successfully");
}
if (isError) {
toast.error("Send Test Email Fail");
}
}, [isSuccess, isError]);
// if (!values) return null;
const { host, port, from, username, password, enabled = false } =
@@ -41,6 +75,7 @@ export default function ConfigSMTP() {
<div className="input">
<Label htmlFor="name">Host</Label>
<Input
disabled={!enabled}
data-type="host"
onChange={handleChange}
value={host}
@@ -51,6 +86,7 @@ export default function ConfigSMTP() {
<div className="input">
<Label htmlFor="desc">Port</Label>
<Input
disabled={!enabled}
type={"number"}
data-type="port"
onChange={handleChange}
@@ -62,6 +98,7 @@ export default function ConfigSMTP() {
<div className="input">
<Label htmlFor="desc">From</Label>
<Input
disabled={!enabled}
data-type="from"
onChange={handleChange}
value={from}
@@ -72,6 +109,7 @@ export default function ConfigSMTP() {
<div className="input">
<Label htmlFor="desc">Username</Label>
<Input
disabled={!enabled}
data-type="username"
onChange={handleChange}
value={username}
@@ -82,6 +120,7 @@ export default function ConfigSMTP() {
<div className="input">
<Label htmlFor="desc">Password</Label>
<Input
disabled={!enabled}
data-type="password"
onChange={handleChange}
value={password}
@@ -90,6 +129,25 @@ export default function ConfigSMTP() {
/>
</div>
</div>
<div className="tip">
<img src={iconQuestion} alt="question icon" />
<a href="#" className="link">
How to set up SMTP?
</a>
</div>
<StyledTest>
<Input
type={"email"}
disabled={!enabled}
onChange={handleTestEmailChange}
value={testEmail}
name="email"
placeholder="test@email.com"
/>
<Button disabled={!enabled || !testEmail} onClick={handleTestClick}>
Send Test Email
</Button>
</StyledTest>
{changed && <SaveTip saveHandler={handleUpdate} resetHandler={reset} />}
{/* <button onClick={handleUpdate} className="btn">update</button> */}
</StyledContainer>
@@ -24,6 +24,17 @@ const StyledContainer = styled.div`
}
}
}
.tip {
display: flex;
gap: 8px;
align-items: center;
.link {
font-weight: 600;
font-size: 14px;
line-height: 20px;
color: #06b6d4;
}
}
`;
export default StyledContainer;
+1057 -17
View File
File diff suppressed because it is too large Load Diff