From 3128b24070ed301896031c68ba5bbd37e909b056 Mon Sep 17 00:00:00 2001 From: Pavel Dohnal Date: Thu, 15 Oct 2020 13:19:14 +0200 Subject: [PATCH] Remove old files [MAILPOET-2791] --- assets/js/src/newsletters/badges/badge.jsx | 50 ------- assets/js/src/newsletters/badges/stats.jsx | 121 ----------------- .../campaign_stats/newsletter_info.jsx | 95 -------------- .../campaign_stats/newsletter_stats.jsx | 124 ------------------ webpack.config.js | 8 -- 5 files changed, 398 deletions(-) delete mode 100644 assets/js/src/newsletters/badges/badge.jsx delete mode 100644 assets/js/src/newsletters/badges/stats.jsx delete mode 100644 assets/js/src/newsletters/campaign_stats/newsletter_info.jsx delete mode 100644 assets/js/src/newsletters/campaign_stats/newsletter_stats.jsx diff --git a/assets/js/src/newsletters/badges/badge.jsx b/assets/js/src/newsletters/badges/badge.jsx deleted file mode 100644 index 0aa0af2a8b..0000000000 --- a/assets/js/src/newsletters/badges/badge.jsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import classNames from 'classnames'; -import ReactTooltip from 'react-tooltip'; -import PropTypes from 'prop-types'; - -function Badge(props) { - const badgeClasses = classNames( - 'mailpoet_badge', - props.type ? `mailpoet_badge_${props.type}` : '' - ); - - const tooltip = props.tooltip ? props.tooltip.replace(/\n/g, '
') : false; - // tooltip ID must be unique, defaults to tooltip text - const tooltipId = props.tooltipId || tooltip; - - return ( - - - {props.name} - - { tooltip && ( - - ) } - - ); -} - -Badge.propTypes = { - name: PropTypes.string.isRequired, - tooltip: PropTypes.string, - tooltipId: PropTypes.string, - type: PropTypes.string, -}; - -Badge.defaultProps = { - type: undefined, - tooltipId: undefined, - tooltip: undefined, -}; - - -export default Badge; diff --git a/assets/js/src/newsletters/badges/stats.jsx b/assets/js/src/newsletters/badges/stats.jsx deleted file mode 100644 index a8abdff2cc..0000000000 --- a/assets/js/src/newsletters/badges/stats.jsx +++ /dev/null @@ -1,121 +0,0 @@ -import MailPoet from 'mailpoet'; -import React from 'react'; -import PropTypes from 'prop-types'; - -import Badge from './badge.jsx'; - -const badges = { - excellent: { - name: MailPoet.I18n.t('excellentBadgeName'), - tooltipTitle: MailPoet.I18n.t('excellentBadgeTooltip'), - }, - good: { - name: MailPoet.I18n.t('goodBadgeName'), - tooltipTitle: MailPoet.I18n.t('goodBadgeTooltip'), - }, - bad: { - name: MailPoet.I18n.t('badBadgeName'), - tooltipTitle: MailPoet.I18n.t('badBadgeTooltip'), - }, -}; - -const stats = { - opened: { - badgeRanges: [30, 10, 0], - badgeTypes: [ - 'excellent', - 'good', - 'bad', - ], - tooltipText: MailPoet.I18n.t('openedStatTooltip'), - }, - clicked: { - badgeRanges: [3, 1, 0], - badgeTypes: [ - 'excellent', - 'good', - 'bad', - ], - tooltipText: MailPoet.I18n.t('clickedStatTooltip'), - }, - unsubscribed: { - badgeRanges: [3, 1, 0], - badgeTypes: [ - 'bad', - 'good', - 'excellent', - ], - tooltipText: MailPoet.I18n.t('unsubscribedStatTooltip'), - }, -}; - -class StatsBadge extends React.Component { - static getBadgeType(stat, rate) { - const len = stat.badgeRanges.length; - for (let i = 0; i < len; i += 1) { - if (rate > stat.badgeRanges[i]) { - return stat.badgeTypes[i]; - } - } - // rate must be zero at this point - return stat.badgeTypes[len - 1]; - } - - render() { - const stat = stats[this.props.stat] || null; - if (!stat) { - return null; - } - - const rate = this.props.rate; - if (rate < 0 || rate > 100) { - return null; - } - - const badgeType = StatsBadge.getBadgeType(stat, rate); - const badge = badges[badgeType] || null; - if (!badge) { - return null; - } - - const tooltipText = `${badge.tooltipTitle}\n\n${stat.tooltipText}`; - const tooltipId = this.props.tooltipId || null; - - const content = ( - - ); - - if (this.props.headline) { - return ( -
- - {this.props.headline} - - {' '} - {content} -
- ); - } - - return content; - } -} - -StatsBadge.propTypes = { - stat: PropTypes.string.isRequired, - rate: PropTypes.number.isRequired, - tooltipId: PropTypes.string, - headline: PropTypes.string, -}; - -StatsBadge.defaultProps = { - headline: '', - tooltipId: undefined, -}; - -export default StatsBadge; diff --git a/assets/js/src/newsletters/campaign_stats/newsletter_info.jsx b/assets/js/src/newsletters/campaign_stats/newsletter_info.jsx deleted file mode 100644 index c4fcdee133..0000000000 --- a/assets/js/src/newsletters/campaign_stats/newsletter_info.jsx +++ /dev/null @@ -1,95 +0,0 @@ -import MailPoet from 'mailpoet'; -import React from 'react'; -import PropTypes from 'prop-types'; -import Tags from 'common/tag/tags'; - -function formatAddress(address, name) { - let addressString = ''; - if (address) { - addressString = (name) ? `${name} <${address}>` : address; - } - return addressString; -} - -function NewsletterStatsInfo(props) { - const { newsletter } = props; - - const newsletterDate = newsletter.queue.scheduled_at || newsletter.queue.created_at; - - const senderAddress = formatAddress( - newsletter.sender_address || '', - newsletter.sender_name || '' - ); - const replyToAddress = formatAddress( - newsletter.reply_to_address || '', - newsletter.reply_to_name || '' - ); - - const segments = newsletter.segments || []; - - return ( -
-
- - {MailPoet.I18n.t('statsPreviewNewsletter')} - -
- -
- {MailPoet.I18n.t('statsDateSent')} -: - {' '} - {MailPoet.Date.format(newsletterDate)} -
- - { segments.length && ( - <> -
-
- {`${MailPoet.I18n.t('statsToSegments')}: `} - -
- - ) } - -
- -
- {`${MailPoet.I18n.t('statsFromAddress')}: `} - { senderAddress } -
- - {replyToAddress && ( - <> -
-
- {`${MailPoet.I18n.t('statsReplyToAddress')}: `} - { replyToAddress } -
- - ) } -
- ); -} - -NewsletterStatsInfo.propTypes = { - newsletter: PropTypes.shape({ - queue: PropTypes.shape({ - scheduled_at: PropTypes.string, - created_at: PropTypes.string, - }).isRequired, - sender_address: PropTypes.string, - sender_name: PropTypes.string, - reply_to_address: PropTypes.string, - preview_url: PropTypes.string, - reply_to_name: PropTypes.string, - segments: PropTypes.array, - }).isRequired, -}; - -export default NewsletterStatsInfo; diff --git a/assets/js/src/newsletters/campaign_stats/newsletter_stats.jsx b/assets/js/src/newsletters/campaign_stats/newsletter_stats.jsx deleted file mode 100644 index 438237758f..0000000000 --- a/assets/js/src/newsletters/campaign_stats/newsletter_stats.jsx +++ /dev/null @@ -1,124 +0,0 @@ -import Hooks from 'wp-js-hooks'; -import MailPoet from 'mailpoet'; -import React from 'react'; -import StatsBadge from 'newsletters/badges/stats.jsx'; -import PropTypes from 'prop-types'; - -const NewsletterGeneralStats = ({ newsletter }) => { - const totalSent = newsletter.total_sent || 0; - let percentageClicked = 0; - let percentageOpened = 0; - let percentageUnsubscribed = 0; - if (totalSent > 0) { - percentageClicked = (newsletter.statistics.clicked * 100) / totalSent; - percentageOpened = (newsletter.statistics.opened * 100) / totalSent; - percentageUnsubscribed = (newsletter.statistics.unsubscribed * 100) / totalSent; - } - // format to 1 decimal place - const percentageClickedDisplay = MailPoet.Num.toLocaleFixed(percentageClicked, 1); - const percentageOpenedDisplay = MailPoet.Num.toLocaleFixed(percentageOpened, 1); - const percentageUnsubscribedDisplay = MailPoet.Num.toLocaleFixed(percentageUnsubscribed, 1); - const headlineOpened = `${percentageOpenedDisplay}% ${MailPoet.I18n.t('percentageOpened')}`; - const headlineClicked = `${percentageClickedDisplay}% ${MailPoet.I18n.t('percentageClicked')}`; - const headlineUnsubscribed = `${percentageUnsubscribedDisplay}% ${MailPoet.I18n.t('percentageUnsubscribed')}`; - const statsKBLink = 'https://kb.mailpoet.com/article/190-whats-a-good-email-open-rate'; - // thresholds to display badges - const minNewslettersSent = 20; - const minNewslettersOpened = 5; - let statsContent; - if (totalSent >= minNewslettersSent - && newsletter.statistics.opened >= minNewslettersOpened - ) { - // display stats with badges - statsContent = ( -
-
- -
-
- -
- {Hooks.applyFilters('mailpoet_newsletters_revenues_stats', null, newsletter.statistics.revenue)} -
- -
-
- ); - } else { - // display stats without badges - statsContent = ( -
-
- {headlineOpened} -
-
- {headlineClicked} -
- {Hooks.applyFilters('mailpoet_newsletters_revenues_stats', null, newsletter.statistics.revenue)} -
- {headlineUnsubscribed} -
-
- ); - } - - return ( -
-

- {MailPoet.I18n.t('statsTotalSent')} - {' '} - {parseInt(totalSent, 10).toLocaleString()} -

- {statsContent} - { newsletter.ga_campaign && ( -

- {MailPoet.I18n.t('googleAnalytics')} - {': '} - { newsletter.ga_campaign } -

- ) } -

- - {MailPoet.I18n.t('readMoreOnStats')} - -

-
- ); -}; - -NewsletterGeneralStats.propTypes = { - newsletter: PropTypes.shape({ - ga_campaign: PropTypes.string, - total_sent: PropTypes.number, - statistics: PropTypes.shape({ - clicked: PropTypes.number, - opened: PropTypes.number, - unsubscribed: PropTypes.number, - revenue: PropTypes.shape({ - currency: PropTypes.string.isRequired, - value: PropTypes.number.isRequired, - formatted: PropTypes.string.isRequired, - count: PropTypes.number.isRequired, - }), - }).isRequired, - }).isRequired, -}; - -export default NewsletterGeneralStats; diff --git a/webpack.config.js b/webpack.config.js index 0ac008d6e0..f220cf2122 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -115,13 +115,6 @@ const baseConfig = { 'babel-loader' ], }, - { - include: path.resolve(__dirname, 'assets/js/src/newsletters/badges/stats.jsx'), - use: [ - 'expose-loader?' + globalPrefix + '.StatsBadge', - 'babel-loader', - ] - }, { include: path.resolve(__dirname, 'assets/js/src/help-tooltip.jsx'), use: [ @@ -203,7 +196,6 @@ const adminConfig = { 'help-tooltip.jsx', 'listing/listing.jsx', 'common/index.ts', - 'newsletters/badges/stats.jsx', ], admin: 'webpack_admin_index.jsx', newsletter_editor: 'newsletter_editor/webpack_index.jsx',