0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-10 23:36:14 -05:00

Added unsubscribe flow for comments (#255)

refs https://github.com/TryGhost/Team/issues/1790

- Added `comments` query param to unsubscribe from comments
- Fixed unsubscribe all not updating comments button in unsubscribe flow
This commit is contained in:
Simon Backx 2022-08-15 11:26:57 +02:00 committed by GitHub
parent 424e98a81b
commit f283425866
2 changed files with 28 additions and 7 deletions

View file

@ -400,7 +400,8 @@ export default class App extends React.Component {
page: 'unsubscribe', page: 'unsubscribe',
pageData: { pageData: {
uuid: qParams.get('uuid'), uuid: qParams.get('uuid'),
newsletterUuid: qParams.get('newsletter') newsletterUuid: qParams.get('newsletter'),
comments: qParams.get('comments')
} }
}; };
} }

View file

@ -31,9 +31,9 @@ function AccountHeader() {
); );
} }
async function updateMemberNewsletters({api, memberUuid, newsletters}) { async function updateMemberNewsletters({api, memberUuid, newsletters, enableCommentNotifications}) {
try { try {
return await api.member.updateNewsletters({uuid: memberUuid, newsletters}); return await api.member.updateNewsletters({uuid: memberUuid, newsletters, enableCommentNotifications});
} catch (e) { } catch (e) {
// ignore auto unsubscribe error // ignore auto unsubscribe error
} }
@ -61,7 +61,8 @@ export default function UnsubscribePage() {
setMember(memberData); setMember(memberData);
const memberNewsletters = memberData?.newsletters || []; const memberNewsletters = memberData?.newsletters || [];
setSubscribedNewsletters(memberNewsletters); setSubscribedNewsletters(memberNewsletters);
if (siteNewsletters?.length === 1) { if (siteNewsletters?.length === 1 && !commentsEnabled) {
// Unsubscribe from all the newsletters, because we only have one
const updatedData = await updateMemberNewsletters({ const updatedData = await updateMemberNewsletters({
api: ghostApi, api: ghostApi,
memberUuid: pageData.uuid, memberUuid: pageData.uuid,
@ -69,6 +70,7 @@ export default function UnsubscribePage() {
}); });
setSubscribedNewsletters(updatedData.newsletters); setSubscribedNewsletters(updatedData.newsletters);
} else if (pageData.newsletterUuid) { } else if (pageData.newsletterUuid) {
// Unsubscribe link for a specific newsletter
const updatedData = await updateMemberNewsletters({ const updatedData = await updateMemberNewsletters({
api: ghostApi, api: ghostApi,
memberUuid: pageData.uuid, memberUuid: pageData.uuid,
@ -77,9 +79,18 @@ export default function UnsubscribePage() {
}) })
}); });
setSubscribedNewsletters(updatedData.newsletters); setSubscribedNewsletters(updatedData.newsletters);
} else if (pageData.comments && commentsEnabled) {
// Unsubscribe link for comments
const updatedData = await updateMemberNewsletters({
api: ghostApi,
memberUuid: pageData.uuid,
enableCommentNotifications: false
});
setMember(updatedData);
} }
})(); })();
}, [pageData.uuid, pageData.newsletterUuid, site.url, siteNewsletters?.length]); }, [commentsEnabled, pageData.uuid, pageData.newsletterUuid, pageData.comments, site.url, siteNewsletters?.length]);
// Case: Email not found // Case: Email not found
if (member === null) { if (member === null) {
@ -96,7 +107,7 @@ export default function UnsubscribePage() {
} }
// Case: Single active newsletter // Case: Single active newsletter
if (siteNewsletters?.length === 1 && !showPrefs) { if (siteNewsletters?.length === 1 && !commentsEnabled && !showPrefs) {
return ( return (
<div className='gh-portal-content gh-portal-unsubscribe with-footer'> <div className='gh-portal-content gh-portal-unsubscribe with-footer'>
<CloseButton /> <CloseButton />
@ -120,6 +131,14 @@ export default function UnsubscribePage() {
} }
const HeaderNotification = () => { const HeaderNotification = () => {
if (pageData.comments && commentsEnabled) {
const hideClassName = hasInteracted ? 'gh-portal-hide' : '';
return (
<>
<p className={`gh-portal-text-center gh-portal-header-message ${hideClassName}`}><strong>{member?.email}</strong> will no longer receive emails when someone replies to your comments.</p>
</>
);
}
const unsubscribedNewsletter = siteNewsletters?.find((d) => { const unsubscribedNewsletter = siteNewsletters?.find((d) => {
return d.uuid === pageData.newsletterUuid; return d.uuid === pageData.newsletterUuid;
}); });
@ -151,7 +170,8 @@ export default function UnsubscribePage() {
action: 'updated:success', action: 'updated:success',
message: `Email preference updated.` message: `Email preference updated.`
}); });
await api.member.updateNewsletters({uuid: pageData.uuid, newsletters: [], enableCommentNotifications: false}); const updatedMember = await api.member.updateNewsletters({uuid: pageData.uuid, newsletters: [], enableCommentNotifications: false});
setMember(updatedMember);
}} }}
isPaidMember={member?.status !== 'free'} isPaidMember={member?.status !== 'free'}
isCommentsEnabled={commentsEnabled !== 'off'} isCommentsEnabled={commentsEnabled !== 'off'}