1
- import { Trans } from '@lingui/macro'
1
+ import { t , Trans } from '@lingui/macro'
2
2
import { ButtonBase , Theme , Tooltip , Typography } from '@material-ui/core'
3
3
import { SendOutlined , VisibilityOutlined } from '@material-ui/icons'
4
4
import { makeStyles } from '@material-ui/styles'
5
5
import React from 'react'
6
6
import { useDndEditorContext } from '../DndEditorProvider'
7
+ import { exportToHtml } from '../utils'
7
8
import DndPreviewDialog from './preview/DndPreviewDialog'
8
9
import DndSendEmailDialog from './preview/DndSendEmailDialog'
10
+ import { Liquid } from 'liquidjs'
11
+ import { setupI18n } from '@lingui/core'
12
+ const engine = new Liquid ( )
9
13
10
14
const useStyles = makeStyles (
11
15
( {
@@ -42,7 +46,31 @@ const DndPreview: React.FC<DndPreviewProps> = () => {
42
46
const classes = useStyles ( )
43
47
const [ previewOpen , setPreviewOpen ] = React . useState ( false )
44
48
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
+ }
46
74
47
75
return (
48
76
< >
@@ -53,15 +81,15 @@ const DndPreview: React.FC<DndPreviewProps> = () => {
53
81
< DndSendEmailDialog open = { sendEmailOpen } onClose = { ( ) => setSendEmailOpen ( false ) } />
54
82
) }
55
83
< div className = { classes . actions } >
56
- < ButtonBase onClick = { ( ) => setPreviewOpen ( true ) } className = { classes . button } >
84
+ < ButtonBase onClick = { handlePreview } className = { classes . button } >
57
85
< VisibilityOutlined fontSize = "small" />
58
86
59
87
< Typography variant = "subtitle1" >
60
88
< Trans > Preview</ Trans >
61
89
</ Typography >
62
90
</ ButtonBase >
63
91
{ onSendEmail && (
64
- < ButtonBase onClick = { ( ) => setSendEmailOpen ( true ) } className = { classes . button } >
92
+ < ButtonBase onClick = { handleSendMail } className = { classes . button } >
65
93
< SendOutlined fontSize = "small" />
66
94
67
95
< Typography variant = "subtitle1" >
0 commit comments