Remove redundant property theme

Because we can write and read meta field directly, we don't need our own implementation.
[MAILPOET-5640]
This commit is contained in:
Jan Lysý
2024-03-19 10:57:43 +01:00
committed by Jan Lysý
parent 4dbac6ef62
commit 685796f310
4 changed files with 36 additions and 71 deletions

View File

@@ -11,9 +11,9 @@ import {
} from '@wordpress/components'; } from '@wordpress/components';
import { __ } from '@wordpress/i18n'; import { __ } from '@wordpress/i18n';
import { useEntityProp } from '@wordpress/core-data'; import { useEntityProp } from '@wordpress/core-data';
import { useDispatch, useSelect } from '@wordpress/data'; import { useSelect } from '@wordpress/data';
import { isEqual } from 'lodash'; import { isEqual } from 'lodash';
import { EmailStyles, storeName } from '../../store'; import { EmailTheme, storeName } from '../../store';
export function DimensionsPanel() { export function DimensionsPanel() {
const availableUnits = useSetting('spacing.units') as string[]; const availableUnits = useSetting('spacing.units') as string[];
@@ -21,11 +21,11 @@ export function DimensionsPanel() {
availableUnits, availableUnits,
}); });
const [mailpoetEmailData] = useEntityProp( const [meta, setMeta] = useEntityProp('postType', 'mailpoet_email', 'meta');
'postType', const emailTheme = meta?.mailpoet_email_theme as EmailTheme;
'mailpoet_email', const updateEmailTheme = (newValue) => {
'mailpoet_data', setMeta({ ...meta, mailpoet_email_theme: newValue });
); };
const { styles } = useSelect((select) => ({ const { styles } = useSelect((select) => ({
styles: select(storeName).getStyles(), styles: select(storeName).getStyles(),
@@ -33,77 +33,74 @@ export function DimensionsPanel() {
const defaultPadding = styles.spacing.padding ?? undefined; const defaultPadding = styles.spacing.padding ?? undefined;
const defaultBlockGap = styles.spacing.blockGap ?? undefined; const defaultBlockGap = styles.spacing.blockGap ?? undefined;
const { updateEmailMailPoetTheme } = useDispatch(storeName);
// Padding // Padding
const paddingValues = const paddingValues = emailTheme?.styles?.spacing?.padding ?? defaultPadding;
mailpoetEmailData.theme?.styles?.spacing?.padding ?? defaultPadding;
const resetPadding = () => { const resetPadding = () => {
void updateEmailMailPoetTheme({ updateEmailTheme({
...mailpoetEmailData.theme, ...emailTheme,
styles: { styles: {
...mailpoetEmailData.theme?.styles, ...emailTheme?.styles,
spacing: { spacing: {
...mailpoetEmailData.theme?.styles?.spacing, ...emailTheme?.styles?.spacing,
padding: defaultPadding ?? undefined, padding: defaultPadding ?? undefined,
}, },
}, },
} as EmailStyles); });
}; };
const setPaddingValues = (value) => { const setPaddingValues = (value) => {
void updateEmailMailPoetTheme({ updateEmailTheme({
...mailpoetEmailData.theme, ...emailTheme,
styles: { styles: {
...mailpoetEmailData.theme?.styles, ...emailTheme?.styles,
spacing: { spacing: {
...mailpoetEmailData.theme?.styles?.spacing, ...emailTheme?.styles?.spacing,
padding: value, padding: value,
}, },
}, },
} as EmailStyles); });
}; };
// Block spacing // Block spacing
const blockGapValue = const blockGapValue =
mailpoetEmailData.theme?.styles?.spacing?.blockGap ?? defaultBlockGap; emailTheme?.styles?.spacing?.blockGap ?? defaultBlockGap;
const resetBlockGap = () => { const resetBlockGap = () => {
void updateEmailMailPoetTheme({ updateEmailTheme({
...mailpoetEmailData.theme, ...emailTheme,
styles: { styles: {
...mailpoetEmailData.theme?.styles, ...emailTheme?.styles,
spacing: { spacing: {
...styles.spacing, ...styles.spacing,
blockGap: undefined, blockGap: undefined,
}, },
}, },
} as EmailStyles); });
}; };
const setBlockGapValue = (value) => { const setBlockGapValue = (value) => {
void updateEmailMailPoetTheme({ updateEmailTheme({
...mailpoetEmailData.theme, ...emailTheme,
styles: { styles: {
...mailpoetEmailData.theme?.styles, ...emailTheme?.styles,
spacing: { spacing: {
...mailpoetEmailData.theme?.styles?.spacing, ...emailTheme?.styles?.spacing,
blockGap: value.top || styles.spacing.blockGap, blockGap: value.top || styles.spacing.blockGap,
}, },
}, },
} as EmailStyles); });
}; };
const resetAll = () => { const resetAll = () => {
void updateEmailMailPoetTheme({ updateEmailTheme({
...mailpoetEmailData.theme, ...emailTheme,
styles: { styles: {
...mailpoetEmailData.theme?.styles, ...emailTheme?.styles,
spacing: { spacing: {
...styles.spacing, ...styles.spacing,
padding: defaultPadding ?? undefined, padding: defaultPadding ?? undefined,
blockGap: defaultBlockGap ?? undefined, blockGap: defaultBlockGap ?? undefined,
}, },
}, },
} as EmailStyles); });
}; };
return ( return (

View File

@@ -21,15 +21,11 @@ export function ThemeStyles(): JSX.Element {
[], [],
); );
const [mailpoetEmailData] = useEntityProp( const [meta] = useEntityProp('postType', 'mailpoet_email', 'meta');
'postType',
'mailpoet_email',
'mailpoet_data',
);
const mergedConfig = useMemo( const mergedConfig = useMemo(
() => merge({}, theme, mailpoetEmailData?.theme) as EmailStyles, () => merge({}, theme, meta?.mailpoet_email_theme) as EmailStyles,
[theme, mailpoetEmailData], [theme, meta],
); );
const [styles] = useGlobalStylesOutputWithConfig(mergedConfig); const [styles] = useGlobalStylesOutputWithConfig(mergedConfig);

View File

@@ -6,7 +6,7 @@ import { store as noticesStore } from '@wordpress/notices';
import { __ } from '@wordpress/i18n'; import { __ } from '@wordpress/i18n';
import { apiFetch } from '@wordpress/data-controls'; import { apiFetch } from '@wordpress/data-controls';
import { storeName, mainSidebarEmailTab } from './constants'; import { storeName, mainSidebarEmailTab } from './constants';
import { SendingPreviewStatus, State, Feature, EmailStyles } from './types'; import { SendingPreviewStatus, State, Feature } from './types';
export const toggleFeature = export const toggleFeature =
(feature: Feature) => (feature: Feature) =>
@@ -124,30 +124,6 @@ export function* updateEmailMailPoetProperty(name: string, value: string) {
); );
} }
export function* updateEmailMailPoetTheme(theme: EmailStyles) {
const postId = select(storeName).getEmailPostId();
// There can be a better way how to get the edited post data
const editedPost = select(coreDataStore).getEditedEntityRecord(
'postType',
'mailpoet_email',
postId,
);
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
const mailpoetData = editedPost?.mailpoet_data || {};
yield dispatch(coreDataStore).editEntityRecord(
'postType',
'mailpoet_email',
postId,
{
mailpoet_data: {
...mailpoetData,
theme,
},
},
);
}
export function* requestSendingNewsletterPreview( export function* requestSendingNewsletterPreview(
newsletterId: number, newsletterId: number,
email: string, email: string,

View File

@@ -34,7 +34,6 @@ class EmailApiController {
'subject' => $newsletter ? $newsletter->getSubject() : '', 'subject' => $newsletter ? $newsletter->getSubject() : '',
'preheader' => $newsletter ? $newsletter->getPreheader() : '', 'preheader' => $newsletter ? $newsletter->getPreheader() : '',
'preview_url' => $this->newsletterUrl->getViewInBrowserUrl($newsletter), 'preview_url' => $this->newsletterUrl->getViewInBrowserUrl($newsletter),
'theme' => get_post_meta($postEmailData['id'], \MailPoet\EmailEditor\Engine\EmailEditor::MAILPOET_EMAIL_META_THEME_TYPE, true),
]; ];
} }
@@ -50,8 +49,6 @@ class EmailApiController {
throw new UnexpectedValueException('Newsletter ID does not match the post ID'); throw new UnexpectedValueException('Newsletter ID does not match the post ID');
} }
update_post_meta($emailPost->ID, \MailPoet\EmailEditor\Engine\EmailEditor::MAILPOET_EMAIL_META_THEME_TYPE, $data['theme']);
$newsletter->setSubject($data['subject']); $newsletter->setSubject($data['subject']);
$newsletter->setPreheader($data['preheader']); $newsletter->setPreheader($data['preheader']);
$this->newsletterRepository->flush(); $this->newsletterRepository->flush();
@@ -63,7 +60,6 @@ class EmailApiController {
'subject' => Builder::string(), 'subject' => Builder::string(),
'preheader' => Builder::string(), 'preheader' => Builder::string(),
'preview_url' => Builder::string(), 'preview_url' => Builder::string(),
'theme' => Builder::object(),
])->toArray(); ])->toArray();
} }
} }