diff --git a/README.md b/README.md index 9781189b..7c18f4ca 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Contributors: alleyinteractive Tags: alleyinteractive, wp-newsletter-builder -Stable tag: 0.3.27 +Stable tag: 0.3.28 Requires at least: 6.2 diff --git a/plugin.php b/plugin.php index acdcf35b..7099b8c8 100644 --- a/plugin.php +++ b/plugin.php @@ -3,7 +3,7 @@ * Plugin Name: Newsletter Builder * Plugin URI: https://github.com/alleyinteractive/wp-newsletter-builder * Description: Interface to manage email newsletters - * Version: 0.3.27 + * Version: 0.3.28 * Author: Alley Interactive * Author URI: https://github.com/alleyinteractive/wp-newsletter-builder * Requires at least: 6.2 diff --git a/plugins/newsletter-from-post/components/sent-newsletter.tsx b/plugins/newsletter-from-post/components/sent-newsletter.tsx deleted file mode 100644 index 5c5adc70..00000000 --- a/plugins/newsletter-from-post/components/sent-newsletter.tsx +++ /dev/null @@ -1,54 +0,0 @@ -/** - * SentNewsletter component - */ - -import { - Button, - PanelRow, -} from '@wordpress/components'; -import type { WP_REST_API_Post } from 'wp-types'; // eslint-disable-line camelcase - -import { usePost } from '@alleyinteractive/block-editor-tools'; - -interface SentNewsletterProps { - postId: number; -} - -interface Post extends WP_REST_API_Post { // eslint-disable-line camelcase - meta: { - nb_newsletter_subject?: string; - }; -} - -function SentNewsletter({ - postId, -}: SentNewsletterProps) { - const post = usePost(postId, 'nb_newsletter') as Post; - if (!post) { - return null; - } - - const { - meta: { - nb_newsletter_subject: title = '', - } = {}, - link = '', - } = post; - - return ( - - {link && title ? ( - - ) : null} - - ); -} - -export default SentNewsletter; diff --git a/plugins/newsletter-from-post/email-settings.tsx b/plugins/newsletter-from-post/email-settings.tsx index 2c1c4ae1..77160da6 100644 --- a/plugins/newsletter-from-post/email-settings.tsx +++ b/plugins/newsletter-from-post/email-settings.tsx @@ -1,20 +1,23 @@ /** * EmailSettings component */ - -import { PluginSidebar } from '@wordpress/edit-post'; +import apiFetch from '@wordpress/api-fetch'; +import { createBlock, parse, serialize } from '@wordpress/blocks'; import { CheckboxControl, PanelBody, TextareaControl } from '@wordpress/components'; -import { __ } from '@wordpress/i18n'; import { useSelect } from '@wordpress/data'; +import { PluginSidebar } from '@wordpress/edit-post'; +import { useCallback, useEffect, useState } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; import { MultiSelect } from 'react-multi-select-component'; -import { createBlock, parse, serialize } from '@wordpress/blocks'; +// eslint-disable-next-line camelcase +import { WP_REST_API_Post } from 'wp-types'; + import NewsletterSpinner from '@/components/newsletterSpinner'; -import useNewsletterMeta from '@/hooks/useNewsletterMeta'; import useEmailLists, { Option } from '@/hooks/useEmailLists'; -import RequiredFields from '@/plugins/newsletter-from-post/components/required-fields'; +import useNewsletterMeta from '@/hooks/useNewsletterMeta'; +import RequiredFields from './components/required-fields'; import EmailTypeSelector from '../../components/emailTypeSelector'; -import SentNewsletter from './components/sent-newsletter'; interface CoreEditor { getEditedPostAttribute: (attribute: string) => string; @@ -29,6 +32,7 @@ interface Window { } function EmailSettings() { + const [fetched, setFetched] = useState(false); const { meta, setMeta } = useNewsletterMeta(); const { emailListOptions, selectedEmailList } = useEmailLists(); const manualSubject = meta.subject !== ''; @@ -68,7 +72,7 @@ function EmailSettings() { setMeta({ nb_breaking_list: listIds }); }); - const contentHandler = (html: string) => { + const contentHandler = useCallback((html: string) => { const blocks = parse(html); const postIndex = blocks.findIndex((block) => block.name === 'wp-newsletter-builder/post'); @@ -78,7 +82,7 @@ function EmailSettings() { }, blocks[postIndex].innerBlocks); setMeta({ nb_breaking_content: serialize(blocks) }); - }; + }, [postId, setMeta]); const areRequiredFieldsSet = meta.type === '' || meta.template === '' @@ -87,6 +91,23 @@ function EmailSettings() { || (meta.preview === '' && postExcerpt === '') || meta.list.length === 0; + /** + * Update the template content when the template is changed. + */ + useEffect(() => { + if (!meta.template || fetched) { + return; + } + + apiFetch({ + path: `/wp/v2/nb_template/${meta.template}?context=edit`, + }).then((response) => { + const { content } = response as WP_REST_API_Post; // eslint-disable-line camelcase + setFetched(true); + contentHandler(content.raw as string); + }); + }, [contentHandler, fetched, meta.template]); + return ( - {meta.sentBreakingPostId ? ( - - {meta.sentBreakingPostId.map((id: number) => ( - - ))} - - ) : null} ); } diff --git a/single-nb_newsletter.php b/single-nb_newsletter.php index 29663531..931732be 100644 --- a/single-nb_newsletter.php +++ b/single-nb_newsletter.php @@ -9,7 +9,7 @@ newrelic_disable_autorum(); } -$wp_newsletter_builder_preview = get_post_meta( get_the_ID(), 'nb_newsletter_preview', true ); +$wp_newsletter_builder_preview = get_post_meta( get_queried_object_id(), 'nb_newsletter_preview', true ); ?> @@ -35,9 +35,16 @@ - -
- + diff --git a/src/class-wp-newsletter-builder.php b/src/class-wp-newsletter-builder.php index 4cfc0a99..47090e3b 100644 --- a/src/class-wp-newsletter-builder.php +++ b/src/class-wp-newsletter-builder.php @@ -161,7 +161,7 @@ public function on_after_insert_post( int $post_id ): void { // Publish the post, which should kick off the other transition listener to send the email. $breaking_post_id = wp_insert_post( [ - 'post_title' => "Breaking News {$post->ID}", + 'post_title' => "Breaking News: {$post->post_title}", // @phpstan-ignore-next-line cast to string is necessary. 'post_content' => (string) get_post_meta( $post->ID, 'nb_breaking_content', true ), 'post_status' => 'publish',