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:
parent
424e98a81b
commit
f283425866
2 changed files with 28 additions and 7 deletions
|
@ -400,7 +400,8 @@ export default class App extends React.Component {
|
|||
page: 'unsubscribe',
|
||||
pageData: {
|
||||
uuid: qParams.get('uuid'),
|
||||
newsletterUuid: qParams.get('newsletter')
|
||||
newsletterUuid: qParams.get('newsletter'),
|
||||
comments: qParams.get('comments')
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -31,9 +31,9 @@ function AccountHeader() {
|
|||
);
|
||||
}
|
||||
|
||||
async function updateMemberNewsletters({api, memberUuid, newsletters}) {
|
||||
async function updateMemberNewsletters({api, memberUuid, newsletters, enableCommentNotifications}) {
|
||||
try {
|
||||
return await api.member.updateNewsletters({uuid: memberUuid, newsletters});
|
||||
return await api.member.updateNewsletters({uuid: memberUuid, newsletters, enableCommentNotifications});
|
||||
} catch (e) {
|
||||
// ignore auto unsubscribe error
|
||||
}
|
||||
|
@ -61,7 +61,8 @@ export default function UnsubscribePage() {
|
|||
setMember(memberData);
|
||||
const memberNewsletters = memberData?.newsletters || [];
|
||||
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({
|
||||
api: ghostApi,
|
||||
memberUuid: pageData.uuid,
|
||||
|
@ -69,6 +70,7 @@ export default function UnsubscribePage() {
|
|||
});
|
||||
setSubscribedNewsletters(updatedData.newsletters);
|
||||
} else if (pageData.newsletterUuid) {
|
||||
// Unsubscribe link for a specific newsletter
|
||||
const updatedData = await updateMemberNewsletters({
|
||||
api: ghostApi,
|
||||
memberUuid: pageData.uuid,
|
||||
|
@ -77,9 +79,18 @@ export default function UnsubscribePage() {
|
|||
})
|
||||
});
|
||||
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
|
||||
if (member === null) {
|
||||
|
@ -96,7 +107,7 @@ export default function UnsubscribePage() {
|
|||
}
|
||||
|
||||
// Case: Single active newsletter
|
||||
if (siteNewsletters?.length === 1 && !showPrefs) {
|
||||
if (siteNewsletters?.length === 1 && !commentsEnabled && !showPrefs) {
|
||||
return (
|
||||
<div className='gh-portal-content gh-portal-unsubscribe with-footer'>
|
||||
<CloseButton />
|
||||
|
@ -120,6 +131,14 @@ export default function UnsubscribePage() {
|
|||
}
|
||||
|
||||
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) => {
|
||||
return d.uuid === pageData.newsletterUuid;
|
||||
});
|
||||
|
@ -151,7 +170,8 @@ export default function UnsubscribePage() {
|
|||
action: 'updated:success',
|
||||
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'}
|
||||
isCommentsEnabled={commentsEnabled !== 'off'}
|
||||
|
|
Loading…
Add table
Reference in a new issue