Skip to content

Commit 916d98b

Browse files
authored
Merge pull request #160 from alleyinteractive/fix/single-send-templates
Fix: Single Send Templates
2 parents 18a19df + 017e824 commit 916d98b

File tree

5 files changed

+54
-6
lines changed

5 files changed

+54
-6
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Contributors: alleyinteractive
44

55
Tags: alleyinteractive, wp-newsletter-builder
66

7-
Stable tag: 0.3.31
7+
Stable tag: 0.3.32
88

99
Requires at least: 6.2
1010

hooks/useNewsletterMeta/index.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { usePostMeta } from '@alleyinteractive/block-editor-tools';
2+
import { useCallback } from '@wordpress/element';
23

34
export interface NewsletterMeta {
45
type: string;
@@ -29,6 +30,17 @@ function useNewsletterMeta() {
2930
nb_newsletter_sent_breaking_post_id: sentBreakingPostId = [],
3031
} = meta;
3132

33+
const resetTemplate = useCallback(() => {
34+
setMeta({
35+
nb_breaking_template: 0,
36+
nb_breaking_content: '',
37+
nb_breaking_subject: '',
38+
nb_breaking_preview: '',
39+
nb_breaking_list: [],
40+
nb_breaking_should_send: false,
41+
});
42+
}, [setMeta]);
43+
3244
return {
3345
meta: {
3446
type,
@@ -42,6 +54,7 @@ function useNewsletterMeta() {
4254
content,
4355
sentBreakingPostId,
4456
},
57+
resetTemplate,
4558
setMeta,
4659
};
4760
}

plugin.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Plugin Name: Newsletter Builder
44
* Plugin URI: https://github.com/alleyinteractive/wp-newsletter-builder
55
* Description: Interface to manage email newsletters
6-
* Version: 0.3.31
6+
* Version: 0.3.32
77
* Author: Alley Interactive
88
* Author URI: https://github.com/alleyinteractive/wp-newsletter-builder
99
* Requires at least: 6.2
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { __ } from '@wordpress/i18n';
2+
3+
interface InvalidTemplateProps {
4+
invalid: boolean;
5+
}
6+
7+
function InvalidTemplate({ invalid }: InvalidTemplateProps) {
8+
return (
9+
<>
10+
{invalid ? (
11+
<p style={{ color: 'red' }}>{__('Invalid Template: Template must have at least one Newsletter Single Post Block.', 'wp-newsletter-builder')}</p>
12+
) : null}
13+
</>
14+
);
15+
}
16+
17+
export default InvalidTemplate;

plugins/newsletter-from-post/email-settings.tsx

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ import NewsletterSpinner from '@/components/newsletterSpinner';
1616
import useEmailLists, { Option } from '@/hooks/useEmailLists';
1717
import useNewsletterMeta from '@/hooks/useNewsletterMeta';
1818

19-
import RequiredFields from './components/required-fields';
2019
import EmailTypeSelector from '../../components/emailTypeSelector';
20+
import InvalidTemplate from './components/invalid-template';
21+
import RequiredFields from './components/required-fields';
2122

2223
interface CoreEditor {
2324
getEditedPostAttribute: (attribute: string) => string;
@@ -33,7 +34,8 @@ interface Window {
3334

3435
function EmailSettings() {
3536
const [fetched, setFetched] = useState(false);
36-
const { meta, setMeta } = useNewsletterMeta();
37+
const [invalidTemplate, setInvalidTemplate] = useState(false);
38+
const { meta, resetTemplate, setMeta } = useNewsletterMeta();
3739
const { emailListOptions, selectedEmailList } = useEmailLists();
3840
const manualSubject = meta.subject !== '';
3941
const manualPreview = meta.preview !== '';
@@ -76,13 +78,20 @@ function EmailSettings() {
7678
const blocks = parse(html);
7779
const postIndex = blocks.findIndex((block) => block.name === 'wp-newsletter-builder/post');
7880

81+
if (postIndex === -1) {
82+
resetTemplate();
83+
setInvalidTemplate(true);
84+
return;
85+
}
86+
7987
blocks[postIndex] = createBlock('wp-newsletter-builder/post', {
8088
...blocks[postIndex].attributes,
8189
postId,
8290
}, blocks[postIndex].innerBlocks);
8391

92+
setInvalidTemplate(false);
8493
setMeta({ nb_breaking_content: serialize(blocks) });
85-
}, [postId, setMeta]);
94+
}, [postId, resetTemplate, setMeta]);
8695

8796
const areRequiredFieldsSet = meta.type === ''
8897
|| meta.template === ''
@@ -120,7 +129,12 @@ function EmailSettings() {
120129
>
121130
<EmailTypeSelector
122131
contentHandler={contentHandler}
123-
typeHandler={(newType) => { setMeta({ nb_breaking_email_type: newType }); }}
132+
typeHandler={
133+
(newType) => {
134+
setMeta({ nb_breaking_email_type: newType });
135+
setInvalidTemplate(false);
136+
}
137+
}
124138
imageHandler={(newImage) => { setMeta({ nb_breaking_header_img: newImage }); }}
125139
typeValue={meta.type}
126140
templateHandler={(newTemplate) => { setMeta({ nb_breaking_template: newTemplate }); }}
@@ -181,7 +195,11 @@ function EmailSettings() {
181195
onChange={(value) => { setMeta({ nb_breaking_should_send: value }); }}
182196
disabled={areRequiredFieldsSet}
183197
/>
198+
</div>
199+
<div>
200+
<h2 className="components-panel__body-title">{__('Newsletter Validation', 'wp-newsletter-builder')}</h2>
184201
<RequiredFields meta={meta} postTitle={postTitle} postExcerpt={postExcerpt} />
202+
<InvalidTemplate invalid={invalidTemplate} />
185203
</div>
186204
</PanelBody>
187205
</PluginSidebar>

0 commit comments

Comments
 (0)