From b467b6ea63b7d3a7709dbfd7577670df6cad6f63 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 30 Mar 2022 20:04:16 -0700 Subject: [PATCH 1/3] Show error toast when email is not created --- packages/web/pages/settings/emails.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/web/pages/settings/emails.tsx b/packages/web/pages/settings/emails.tsx index 7b26da7b7..1695f6670 100644 --- a/packages/web/pages/settings/emails.tsx +++ b/packages/web/pages/settings/emails.tsx @@ -22,7 +22,7 @@ import { toast, Toaster } from 'react-hot-toast' import { useCallback } from 'react' import { StyledText } from '../../components/elements/StyledText' import { applyStoredTheme } from '../../lib/themeUpdater' -import { showSuccessToast } from '../../lib/toastHelpers' +import { showErrorToast, showSuccessToast } from '../../lib/toastHelpers' import Link from 'next/link' enum TextType { @@ -185,9 +185,15 @@ export default function EmailsPage(): JSX.Element { applyStoredTheme(false) async function createEmail(): Promise { - showSuccessToast('Email Created') - await createNewsletterEmailMutation() - revalidate() + try { + const email = await createNewsletterEmailMutation() + if (email) { + showSuccessToast('Email Created') + revalidate() + return + } + } catch { } + showErrorToast('Error Creating Email') } async function deleteEmail(id: string): Promise { await deleteNewsletterEmailMutation(id) From 604194299a98b4d68fb3ead025ee8db261373cea Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 30 Mar 2022 20:13:06 -0700 Subject: [PATCH 2/3] Parse response type for newsletter creation --- .../mutations/createNewsletterEmailMutation.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/web/lib/networking/mutations/createNewsletterEmailMutation.ts b/packages/web/lib/networking/mutations/createNewsletterEmailMutation.ts index b11cd708c..e56d58427 100644 --- a/packages/web/lib/networking/mutations/createNewsletterEmailMutation.ts +++ b/packages/web/lib/networking/mutations/createNewsletterEmailMutation.ts @@ -1,5 +1,15 @@ import { gql } from 'graphql-request' import { gqlFetcher } from '../networkHelpers' +import { NewsletterEmail } from '../queries/useGetNewsletterEmailsQuery' + +type CreateNewsletterEmailResult = { + createNewsletterEmail: CreateNewsletterEmail + errorCodes?: unknown[] +} + +type CreateNewsletterEmail = { + newsletterEmail: NewsletterEmail +} export async function createNewsletterEmailMutation(): Promise { const mutation = gql` @@ -19,9 +29,9 @@ export async function createNewsletterEmailMutation(): Promise Date: Wed, 30 Mar 2022 20:16:29 -0700 Subject: [PATCH 3/3] Error responses when deleting emails --- .../deleteNewsletterEmailMutation.ts | 15 +++++++++--- packages/web/pages/settings/emails.tsx | 23 +++++++++++-------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/packages/web/lib/networking/mutations/deleteNewsletterEmailMutation.ts b/packages/web/lib/networking/mutations/deleteNewsletterEmailMutation.ts index 3a4e51e1a..e54afdd65 100644 --- a/packages/web/lib/networking/mutations/deleteNewsletterEmailMutation.ts +++ b/packages/web/lib/networking/mutations/deleteNewsletterEmailMutation.ts @@ -1,5 +1,15 @@ import { gql } from 'graphql-request' import { gqlFetcher } from '../networkHelpers' +import { NewsletterEmail } from '../queries/useGetNewsletterEmailsQuery' + +type DeleteNewsletterEmailResult = { + deleteNewsletterEmail: CreateNewsletterEmail + errorCodes?: unknown[] +} + +type CreateNewsletterEmail = { + newsletterEmail: NewsletterEmail +} export async function deleteNewsletterEmailMutation( newsletterEmailId: string @@ -21,9 +31,8 @@ export async function deleteNewsletterEmailMutation( ` try { - const data = await gqlFetcher(mutation, { newsletterEmailId }) - console.log('delete email', data) - return 'data' + const data = await gqlFetcher(mutation, { newsletterEmailId }) as DeleteNewsletterEmailResult + return data.errorCodes ? undefined : data.deleteNewsletterEmail.newsletterEmail.id } catch (error) { console.log('deleteNewsletterEmailMutation error', error) return undefined diff --git a/packages/web/pages/settings/emails.tsx b/packages/web/pages/settings/emails.tsx index 1695f6670..f3901e4c2 100644 --- a/packages/web/pages/settings/emails.tsx +++ b/packages/web/pages/settings/emails.tsx @@ -185,18 +185,21 @@ export default function EmailsPage(): JSX.Element { applyStoredTheme(false) async function createEmail(): Promise { - try { - const email = await createNewsletterEmailMutation() - if (email) { - showSuccessToast('Email Created') - revalidate() - return - } - } catch { } - showErrorToast('Error Creating Email') + const email = await createNewsletterEmailMutation() + if (!email) { + showErrorToast('Error Creating Email') + return + } + showSuccessToast('Email Created') + revalidate() } + async function deleteEmail(id: string): Promise { - await deleteNewsletterEmailMutation(id) + const result = await deleteNewsletterEmailMutation(id) + if (!result) { + showErrorToast('Error Deleting Email') + return + } revalidate() showSuccessToast('Email Deleted') }