From 87925dbd9cd89c65e57751dbc516f6c93ed6cd05 Mon Sep 17 00:00:00 2001 From: Sam Najian Date: Tue, 21 Feb 2023 20:03:39 +0100 Subject: [PATCH] Convert queue_status.jsx to tsx and add missing types [MAILPOET-4983] --- mailpoet/assets/js/src/help/system_status.jsx | 2 +- .../listings/notification_history.jsx | 2 +- .../{queue_status.jsx => queue_status.tsx} | 58 +++++++------------ .../js/src/newsletters/listings/standard.jsx | 2 +- .../js/src/newsletters/models/newsletter.ts | 7 ++- 5 files changed, 30 insertions(+), 41 deletions(-) rename mailpoet/assets/js/src/newsletters/listings/{queue_status.jsx => queue_status.tsx} (69%) diff --git a/mailpoet/assets/js/src/help/system_status.jsx b/mailpoet/assets/js/src/help/system_status.jsx index 2cc5e34cc6..1d26f6ad7b 100644 --- a/mailpoet/assets/js/src/help/system_status.jsx +++ b/mailpoet/assets/js/src/help/system_status.jsx @@ -1,7 +1,7 @@ import { MailPoet } from 'mailpoet'; import ReactStringReplace from 'react-string-replace'; import { CronStatus } from './cron_status.jsx'; -import { QueueStatus } from './queue_status.jsx'; +import { QueueStatus } from './queue_status'; import { ActionSchedulerStatus } from './action_scheduler_status'; function renderStatusMessage( diff --git a/mailpoet/assets/js/src/newsletters/listings/notification_history.jsx b/mailpoet/assets/js/src/newsletters/listings/notification_history.jsx index 2e71dd6c36..220b1f1b79 100644 --- a/mailpoet/assets/js/src/newsletters/listings/notification_history.jsx +++ b/mailpoet/assets/js/src/newsletters/listings/notification_history.jsx @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import { Listing } from 'listing/listing.jsx'; import { MailPoet } from 'mailpoet'; -import { QueueStatus } from 'newsletters/listings/queue_status.jsx'; +import { QueueStatus } from 'newsletters/listings/queue_status'; import { Statistics } from 'newsletters/listings/statistics.jsx'; import { addStatsCTAAction, diff --git a/mailpoet/assets/js/src/newsletters/listings/queue_status.jsx b/mailpoet/assets/js/src/newsletters/listings/queue_status.tsx similarity index 69% rename from mailpoet/assets/js/src/newsletters/listings/queue_status.jsx rename to mailpoet/assets/js/src/newsletters/listings/queue_status.tsx index 8d61c6fb32..a4beb037ef 100644 --- a/mailpoet/assets/js/src/newsletters/listings/queue_status.jsx +++ b/mailpoet/assets/js/src/newsletters/listings/queue_status.tsx @@ -1,34 +1,24 @@ import { useState } from 'react'; import { MailPoet } from 'mailpoet'; -import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import parseDate from 'date-fns/parse'; -import { APIErrorsNotice } from 'notices/api_errors_notice.tsx'; +import { APIErrorsNotice } from 'notices/api_errors_notice'; import { Button } from 'common/button/button'; import { NewsletterStatus } from 'common/listings/newsletter_status'; import { withBoundary } from '../../common'; +import { NewsLetter } from '../models'; -const QueuePropType = PropTypes.shape({ - status: PropTypes.string, - count_processed: PropTypes.string.isRequired, - count_total: PropTypes.string.isRequired, - scheduled_at: PropTypes.string, -}); +type QueueSendingProps = { + newsletter: NewsLetter; +}; -const NewsletterPropType = PropTypes.shape({ - id: PropTypes.number.isRequired, - sent_at: PropTypes.string, - status: PropTypes.string.isRequired, - queue: PropTypes.oneOfType([QueuePropType, PropTypes.bool]), -}); - -function QueueSending({ newsletter }) { +function QueueSending({ newsletter }: QueueSendingProps) { const [paused, setPaused] = useState(newsletter.queue.status === 'paused'); const [errors, setErrors] = useState([]); - const pauseSending = () => { + const pauseSending = async () => { setErrors([]); - MailPoet.Ajax.post({ + await MailPoet.Ajax.post({ api_version: window.mailpoet_api_version, endpoint: 'sendingQueue', action: 'pause', @@ -40,9 +30,9 @@ function QueueSending({ newsletter }) { .fail((response) => setErrors(response.errors)); }; - const resumeSending = () => { + const resumeSending = async () => { setErrors([]); - MailPoet.Ajax.post({ + await MailPoet.Ajax.post({ api_version: window.mailpoet_api_version, endpoint: 'sendingQueue', action: 'resume', @@ -71,19 +61,19 @@ function QueueSending({ newsletter }) { ); } -QueueSending.propTypes = { - newsletter: NewsletterPropType.isRequired, +type QueueStatusProps = { + newsletter: NewsLetter; + mailerLog: { + status: string; + }; }; -function QueueStatus({ newsletter, mailerLog }) { - let newsletterDate = newsletter.sent_at || newsletter.queue.scheduled_at; - if (newsletterDate) { - newsletterDate = parseDate( - newsletterDate, - 'yyyy-MM-dd HH:mm:ss', - new Date(), - ); - } +function QueueStatus({ newsletter, mailerLog }: QueueStatusProps) { + const rawNewsletterDate = newsletter.sent_at || newsletter.queue.scheduled_at; + const newsletterDate = rawNewsletterDate + ? parseDate(rawNewsletterDate, 'yyyy-MM-dd HH:mm:ss', new Date()) + : undefined; + const isNewsletterSending = newsletter.queue && newsletter.queue.status !== 'scheduled'; const isMtaPaused = mailerLog.status === 'paused'; @@ -124,12 +114,6 @@ function QueueStatus({ newsletter, mailerLog }) { ); } -QueueStatus.propTypes = { - newsletter: NewsletterPropType.isRequired, - mailerLog: PropTypes.shape({ - status: PropTypes.string, - }).isRequired, -}; QueueStatus.displayName = 'QueueStatus'; const QueueStatusWithBoundary = withBoundary(QueueStatus); export { QueueStatusWithBoundary as QueueStatus }; diff --git a/mailpoet/assets/js/src/newsletters/listings/standard.jsx b/mailpoet/assets/js/src/newsletters/listings/standard.jsx index 561466a25e..b77c72ac4d 100644 --- a/mailpoet/assets/js/src/newsletters/listings/standard.jsx +++ b/mailpoet/assets/js/src/newsletters/listings/standard.jsx @@ -7,7 +7,7 @@ import { withRouter } from 'react-router-dom'; import { confirmAlert } from 'common/confirm_alert.jsx'; import { SegmentTags } from 'common/tag/tags'; import { Listing } from 'listing/listing.jsx'; -import { QueueStatus } from 'newsletters/listings/queue_status.jsx'; +import { QueueStatus } from 'newsletters/listings/queue_status'; import { Statistics } from 'newsletters/listings/statistics.jsx'; import { addStatsCTAAction, diff --git a/mailpoet/assets/js/src/newsletters/models/newsletter.ts b/mailpoet/assets/js/src/newsletters/models/newsletter.ts index 3711ca8870..68dc874ba8 100644 --- a/mailpoet/assets/js/src/newsletters/models/newsletter.ts +++ b/mailpoet/assets/js/src/newsletters/models/newsletter.ts @@ -15,6 +15,7 @@ export enum NewsletterStatus { Sending = 'sending', Sent = 'sent', Active = 'active', + Corrupt = 'corrupt', } export enum NewsletterOptionGroup { @@ -53,7 +54,11 @@ export type NewsLetter = { }; parent_id: null | string; preheader: string; - queue: Record; + queue: Record & { + scheduled_at: string; + count_processed: string; + count_total: string; + }; reply_to_address: string; reply_to_name: string; segments: Array<{ filters: unknown[] }>;