Skip to content

Commit 71e8acb

Browse files
committed
fix: preview and send mail validation
1 parent 361507b commit 71e8acb

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

src/lib/components/DndPreview.tsx

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
import { Trans } from '@lingui/macro'
1+
import { t, Trans } from '@lingui/macro'
22
import { ButtonBase, Theme, Tooltip, Typography } from '@material-ui/core'
33
import { SendOutlined, VisibilityOutlined } from '@material-ui/icons'
44
import { makeStyles } from '@material-ui/styles'
55
import React from 'react'
66
import { useDndEditorContext } from '../DndEditorProvider'
7+
import { exportToHtml } from '../utils'
78
import DndPreviewDialog from './preview/DndPreviewDialog'
89
import DndSendEmailDialog from './preview/DndSendEmailDialog'
10+
import { Liquid } from 'liquidjs'
11+
import { setupI18n } from '@lingui/core'
12+
const engine = new Liquid()
913

1014
const useStyles = makeStyles(
1115
({
@@ -42,7 +46,31 @@ const DndPreview: React.FC<DndPreviewProps> = () => {
4246
const classes = useStyles()
4347
const [previewOpen, setPreviewOpen] = React.useState(false)
4448
const [sendEmailOpen, setSendEmailOpen] = React.useState(false)
45-
const { onSendEmail } = useDndEditorContext()
49+
const editorContext = useDndEditorContext()
50+
const { onSendEmail } = editorContext
51+
const i18n = setupI18n()
52+
53+
const validate = () => {
54+
const html = exportToHtml(editorContext)
55+
try {
56+
engine.parse(html)
57+
} catch (_) {
58+
window.alert(i18n._(t`Invalid body`))
59+
return false
60+
}
61+
62+
return true
63+
}
64+
const handlePreview = () => {
65+
if (validate()) {
66+
setPreviewOpen(true)
67+
}
68+
}
69+
const handleSendMail = () => {
70+
if (validate()) {
71+
setSendEmailOpen(true)
72+
}
73+
}
4674

4775
return (
4876
<>
@@ -53,15 +81,15 @@ const DndPreview: React.FC<DndPreviewProps> = () => {
5381
<DndSendEmailDialog open={sendEmailOpen} onClose={() => setSendEmailOpen(false)} />
5482
)}
5583
<div className={classes.actions}>
56-
<ButtonBase onClick={() => setPreviewOpen(true)} className={classes.button}>
84+
<ButtonBase onClick={handlePreview} className={classes.button}>
5785
<VisibilityOutlined fontSize="small" />
5886
&nbsp;
5987
<Typography variant="subtitle1">
6088
<Trans>Preview</Trans>
6189
</Typography>
6290
</ButtonBase>
6391
{onSendEmail && (
64-
<ButtonBase onClick={() => setSendEmailOpen(true)} className={classes.button}>
92+
<ButtonBase onClick={handleSendMail} className={classes.button}>
6593
<SendOutlined fontSize="small" />
6694
&nbsp;
6795
<Typography variant="subtitle1">

0 commit comments

Comments
 (0)