Use current email content when previewing templates when swapping
[MAILPOET-6336]
This commit is contained in:
committed by
Rostislav Wolný
parent
1fdda485d3
commit
10b2c2b648
@ -23,8 +23,11 @@ import { EditTemplateModal } from './edit-template-modal';
|
||||
import { SelectTemplateModal } from '../template-select';
|
||||
|
||||
export function EmailTypeInfo() {
|
||||
const template = useSelect(
|
||||
( select ) => select( storeName ).getCurrentTemplate(),
|
||||
const { template, currentEmailContent } = useSelect(
|
||||
( select ) => ( {
|
||||
template: select( storeName ).getCurrentTemplate(),
|
||||
currentEmailContent: select( storeName ).getEditedEmailContent(),
|
||||
} ),
|
||||
[]
|
||||
);
|
||||
const [ isEditTemplateModalOpen, setEditTemplateModalOpen ] =
|
||||
@ -113,6 +116,7 @@ export function EmailTypeInfo() {
|
||||
setSelectTemplateModalOpen( false )
|
||||
}
|
||||
closeCallback={ () => setSelectTemplateModalOpen( false ) }
|
||||
previewContent={ currentEmailContent }
|
||||
/>
|
||||
) }
|
||||
</>
|
||||
|
@ -20,15 +20,20 @@ const BLANK_TEMPLATE = 'email-general';
|
||||
export function SelectTemplateModal( {
|
||||
onSelectCallback,
|
||||
closeCallback = null,
|
||||
previewContent = '',
|
||||
} ) {
|
||||
const [ templates ] = usePreviewTemplates();
|
||||
const [ templates ] = usePreviewTemplates( previewContent );
|
||||
|
||||
const hasTemplates = templates?.length > 0;
|
||||
|
||||
const handleTemplateSelection = ( template: TemplatePreview ) => {
|
||||
void dispatch( editorStore ).resetEditorBlocks(
|
||||
template.patternParsed
|
||||
);
|
||||
// When we provide previewContent, we don't want to reset the blocks
|
||||
if ( ! previewContent ) {
|
||||
void dispatch( editorStore ).resetEditorBlocks(
|
||||
template.emailParsed
|
||||
);
|
||||
}
|
||||
|
||||
void dispatch( storeName ).setTemplateToPost(
|
||||
template.slug,
|
||||
template.template.mailpoet_email_theme ?? {}
|
||||
@ -100,7 +105,9 @@ export function SelectTemplateModal( {
|
||||
}
|
||||
>
|
||||
<BlockPreview
|
||||
blocks={ template.contentParsed }
|
||||
blocks={
|
||||
template.previewContentParsed
|
||||
}
|
||||
viewportWidth={ 900 }
|
||||
minHeight={ 300 }
|
||||
additionalStyles={ [
|
||||
|
@ -34,7 +34,9 @@ function setPostContentInnerBlocks(
|
||||
} );
|
||||
}
|
||||
|
||||
export function usePreviewTemplates(): TemplatePreview[][] {
|
||||
export function usePreviewTemplates(
|
||||
customEmailContent = ''
|
||||
): TemplatePreview[][] {
|
||||
const { templates, patterns } = useSelect( ( select ) => {
|
||||
const contentBlockId =
|
||||
// @ts-expect-error getBlocksByName is not defined in types
|
||||
@ -52,23 +54,35 @@ export function usePreviewTemplates(): TemplatePreview[][] {
|
||||
};
|
||||
}, [] );
|
||||
|
||||
if ( ! templates || ! patterns.length ) {
|
||||
if ( ! templates || ( ! patterns.length && ! customEmailContent ) ) {
|
||||
return [ [] ];
|
||||
}
|
||||
|
||||
// Pick first pattern that comes from mailpoet and is for general email template
|
||||
const contentPatternBlocksGeneral = patterns.find(
|
||||
( pattern ) =>
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
||||
pattern?.templateTypes?.includes( 'email-general-template' )
|
||||
)?.blocks as BlockInstance[];
|
||||
let contentPatternBlocksGeneral = null;
|
||||
let contentPatternBlocks = null;
|
||||
const parsedCustomEmailContent =
|
||||
customEmailContent && parse( customEmailContent );
|
||||
|
||||
// Pick first pattern that comes from mailpoet and is for template with header and footer content separated
|
||||
const contentPatternBlocks = patterns.find(
|
||||
( pattern ) =>
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
||||
pattern?.templateTypes?.includes( 'email-template' )
|
||||
)?.blocks as BlockInstance[];
|
||||
// If there is a custom email content passed from outside we use it as email content for preview
|
||||
// otherwise we pick first suitable from patterns
|
||||
if ( parsedCustomEmailContent ) {
|
||||
contentPatternBlocksGeneral = parsedCustomEmailContent;
|
||||
contentPatternBlocks = parsedCustomEmailContent;
|
||||
} else {
|
||||
// Pick first pattern that comes from mailpoet and is for general email template
|
||||
contentPatternBlocksGeneral = patterns.find(
|
||||
( pattern ) =>
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
||||
pattern?.templateTypes?.includes( 'email-general-template' )
|
||||
)?.blocks as BlockInstance[];
|
||||
|
||||
// Pick first pattern that comes from mailpoet and is for template with header and footer content separated
|
||||
contentPatternBlocks = patterns.find(
|
||||
( pattern ) =>
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
||||
pattern?.templateTypes?.includes( 'email-template' )
|
||||
)?.blocks as BlockInstance[];
|
||||
}
|
||||
|
||||
return [
|
||||
templates.map( ( template: EmailTemplatePreview ): TemplatePreview => {
|
||||
@ -83,8 +97,8 @@ export function usePreviewTemplates(): TemplatePreview[][] {
|
||||
return {
|
||||
slug: template.slug,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
||||
contentParsed: parsedTemplate,
|
||||
patternParsed:
|
||||
previewContentParsed: parsedTemplate,
|
||||
emailParsed:
|
||||
template.slug === 'email-general'
|
||||
? contentPatternBlocksGeneral
|
||||
: contentPatternBlocks,
|
||||
|
@ -225,8 +225,8 @@ export type EmailTemplatePreview = Omit<
|
||||
|
||||
export type TemplatePreview = {
|
||||
slug: string;
|
||||
contentParsed: BlockInstance[];
|
||||
patternParsed: BlockInstance[];
|
||||
previewContentParsed: BlockInstance[];
|
||||
emailParsed: BlockInstance[];
|
||||
template: EmailTemplatePreview;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user