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',
|
page: 'unsubscribe',
|
||||||
pageData: {
|
pageData: {
|
||||||
uuid: qParams.get('uuid'),
|
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 {
|
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'}
|
||||||
|
|
Loading…
Add table
Reference in a new issue